-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathpassbook.min.js
1 lines (1 loc) · 16.5 KB
/
passbook.min.js
1
/* ========================================================================== */+function(e){"use strict";var t="boarding-pass",n="coupon",r="event",i="store-card",s="generic",o="air",u="boat",a="bus",f="train",l="generic",c="passbook-boarding-pass",h="passbook-coupon",p="passbook-event",d="passbook-store-card",v=[c,h,p,d].join(" "),m="passbook-transport-air",g="passbook-transport-boat",y="passbook-transport-bus",b="passbook-transport-train",w=[m,g,y,b].join(" "),E=function(e){e.data.flip(),e.preventDefault(),e.stopPropagation()},S=function(e){var t=e.data;t.$container.hasClass("passbook-edit")?t.save():t.edit(),e.preventDefault(),e.stopPropagation()},x=function(t){var n=e(t.target);n.text(n.text().trim()),t.preventDefault(),t.stopPropagation()},T=function(t){if(e(this).parent("tr").children("th,td").length<2)return!0;var n=e(this).parent("tr").children("th,td").index(this)+1,r=e(this).parents("table").find("th:nth-child("+n+")"),i=e(this).parents("table").find("td:nth-child("+n+")");if(r.text().length!=0)return;if(i.text().length!=0)return;r.remove(),i.remove()},N=function(t){var n=e(this).parents("table.passbook-extra-fields").find("tr");e(n[0]).append(e("<th contenteditable/>").on("blur",x).on("blur",T)),e(n[1]).append(e("<td contenteditable/>").on("blur",x).on("blur",T))},C=function(t){var n=e(this),r,i,s,o;n.prop("tagName")=="TH"?(r=n,s=n.parents("tr"),o=s.next("tr"),i=o.find("td")):n.prop("tagName")=="TD"&&(i=n,o=n.parents("tr"),s=o.prev("tr"),r=s.find("th"));if(r.text().length!=0)return;if(i.text().length!=0)return;s.remove(),o.remove()},k=function(t){e(this).parents(".passbook-back-fields").find("table").append(e("<tr>").append(e("<th contenteditable>").on("blur",x).on("blur",C))).append(e("<tr>").append(e("<td contenteditable>").on("blur",x).on("blur",C)))},L=function(t){var n=e(t).data("passbook");if(n!=null)return n;var r=e(t).parent()[0];while(n==null&&r!=null){var i=e(r);n=i.data("passbook"),r=i.parent()[0]}return n},A=function(){var t=L(this);return e(e('<form role="form fade" name="barcode"/>').append(e('<div class="form-group">').append(e('<input name="barcode" type="text" class="form-control input-sm"/>'))).append(e('<div class="btn-toolbar">').append(e('<div class="btn-group">').append(e('<button name="pdf417" type="button" class="btn btn-default btn-xs"><i class="fa fa-barcode fa-lg"/></button>').on("click",t,M)).append(e('<button name="qrcode" type="button" class="btn btn-default btn-xs"><i class="fa fa-qrcode fa-lg"/></button>').on("click",t,_))).append(e('<div class="btn-group" style="float: right;">').append(e('<button type="button" class="btn btn-danger btn-xs"><i class="fa fa-times fa-lg"/></button>').on("click",t,P)).append(e('<button type="button" class="btn btn-success btn-xs"><i class="fa fa-check fa-lg"/></button>').on("click",t,D)))))},O=function(e){var t=e.data,n=t.$container;n.find('input[name="barcode"]').val(t.barcode),t.barcodeType=="pdf417"?(n.find('button[name="pdf417"]').addClass("btn-primary").removeClass("btn-default"),n.find('button[name="qrcode"]').addClass("btn-default").removeClass("btn-primary")):t.barcodeType=="qrcode"?(n.find('button[name="qrcode"]').addClass("btn-primary").removeClass("btn-default"),n.find('button[name="pdf417"]').addClass("btn-default").removeClass("btn-primary")):(n.find('button[name="qrcode"]').addClass("btn-default").removeClass("btn-primary"),n.find('button[name="pdf417"]').addClass("btn-default").removeClass("btn-primary"))},M=function(e){var t=e.data,n=t.$container;n.find('button[name="pdf417"]').addClass("btn-primary").removeClass("btn-default btn-warning"),n.find('button[name="qrcode"]').addClass("btn-default").removeClass("btn-primary btn-warning")},_=function(e){var t=e.data,n=t.$container;n.find('button[name="pdf417"]').addClass("btn-default").removeClass("btn-primary btn-warning"),n.find('button[name="qrcode"]').addClass("btn-primary").removeClass("btn-default btn-warning")},D=function(e){var t=e.data,n=t.$container,r=n.find('input[name="barcode"]').val();if(r==null||r==""){t.barcode="",t.barcodeType="",n.find(".passbook-barcode").removeClass("passbook-barcode-qrcode passbook-barcode-pdf417").removeAttr("style"),n.find(".passbook-barcode").popover("hide").next(".popover").css("display","none");return}var i,s=n.find('button[name="pdf417"]'),o=n.find('button[name="qrcode"]');if(s.hasClass("btn-primary"))i="pdf417";else{if(!o.hasClass("btn-primary")){s.addClass("btn-warning"),o.addClass("btn-warning");return}i="qrcode"}t.barcode=r,t.barcodeType=i;var u=new Barcode(i,r,{version:6}),a=u.createImageData(3);n.find(".passbook-barcode").css("background-image","url("+a+")").css("background-size",u.cols*3+"px "+u.rows*3+"px").removeClass("passbook-barcode-qrcode passbook-barcode-pdf417").addClass("passbook-barcode-"+i),n.find(".passbook-barcode").popover("hide").next(".popover").css("display","none")},P=function(e){var t=e.data,n=t.$container;n.find(".passbook-barcode").popover("hide").next(".popover").css("display","none")},H=function(t){t.data.type=e(t.currentTarget).attr("name")},B=function(t){if(t.target!=t.currentTarget)return;var n=t.data,r=n.$container,i=e(r.find(".passbook-picker"));if(i.css("display")!="none"){i.removeAttr("style").off("click").empty();return}i.on("click",t.data,B);var s,o,u,a,f=function(e){var t=e.data,n=Math.round(s.getValue()),r=Math.round(o.getValue()),i=Math.round(u.getValue()),f=(a.getValue()-128)/128;t.color="rgb("+n+","+r+","+i+")",t.shading=(a.getValue()-128)/128},l=n.color.match(/rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/),c=Number(l[1]),h=Number(l[2]),p=Number(l[3]),d=n.shading+64,v=Math.floor(Math.random()*999999);i.css("display","block").append(e('<div class="passbook-picker-contents">').append(e('<div class="btn-group" style="margin-bottom: 8px;">').append(e('<button class="btn btn-default btn-xs" data-toggle="tooltip" data-original-title="Boarding Pass" name="boarding-pass"><i class="fa fa-plane fa-lg"/></button>')).append(e('<button class="btn btn-default btn-xs" data-toggle="tooltip" data-original-title="Coupon" name="coupon"><i class="fa fa-money fa-lg"/></button>')).append(e('<button class="btn btn-default btn-xs" data-toggle="tooltip" data-original-title="Event" name="event"><i class="fa fa-calendar fa-lg"/></button>')).append(e('<button class="btn btn-default btn-xs" data-toggle="tooltip" data-original-title="Store Card" name="store-card"><i class="fa fa-credit-card fa-lg"/></button>')).append(e('<button class="btn btn-default btn-xs" data-toggle="tooltip" data-original-title="Generic Pass" name="generic"><i class="fa fa-ticket fa-lg"/></button>'))).append(e('<div class="slider-r"><input type="text" class="passbook-slider" value="0" zdata-slider-id="r'+v+'" data-slider-min="0" data-slider-max="255" data-slider-step="1" data-slider-value="'+c+'" data-slider-tooltip="hide"></div>')).append(e('<div class="slider-g"><input type="text" class="passbook-slider" value="0" zdata-slider-id="g'+v+'" data-slider-min="0" data-slider-max="255" data-slider-step="1" data-slider-value="'+h+'" data-slider-tooltip="hide"></div>')).append(e('<div class="slider-b"><input type="text" class="passbook-slider" value="0" zdata-slider-id="b'+v+'" data-slider-min="0" data-slider-max="255" data-slider-step="1" data-slider-value="'+p+'" data-slider-tooltip="hide"></div>')).append(e('<div class="slider-k"><input type="text" class="passbook-slider" value="0" zdata-slider-id="k'+v+'" data-slider-min="0" data-slider-max="255" data-slider-step="1" data-slider-value="'+d+'" data-slider-tooltip="hide"></div>'))),i.find(".passbook-slider").slider(),i.find("button").tooltip({container:i}).on("click",n,H),s=i.find("div.slider-r input.passbook-slider").on("slide",t.data,f).data("slider"),o=i.find("div.slider-g input.passbook-slider").on("slide",t.data,f).data("slider"),u=i.find("div.slider-b input.passbook-slider").on("slide",t.data,f).data("slider"),a=i.find("div.slider-k input.passbook-slider").on("slide",t.data,f).data("slider")},j=function(e){var t=e.data,n=t.transport;n==o?t.transport=u:n==u?t.transport=a:n==a?t.transport=f:n==f?t.transport=l:n==l&&(t.transport=o)},F=function(t){var n=(t.clipboardData||t.originalEvent.clipboardData).items;if(!n||!n[0]){console.warn("No items to load");return}if(!n[0].type.match(/image\//)){console.warn("Cannot load type "+n[0].type);return}e(new FileReader).on("load",t.data,function(t){e(new Image).on("load",t.data,function(t){var n=this.width,r=this.height,i=this.src;if(t.data.size){if(n>t.data.size[0]||r>t.data.size[1]){var s=t.data.size[0]/n,o=t.data.size[1]/r;o<s&&(s=o),s<o&&(o=s),n=Math.floor(n*s),r=Math.floor(r*o),console.log("Rescaling to "+n+"x"+r)}var u=e("<canvas/>").attr({width:n,height:r})[0],a=u.getContext("2d");a.drawImage(this,0,0,n,r),i=u.toDataURL()}t.data.handler&&t.data.handler({width:n,height:r,data:i})})[0].src=t.target.result})[0].readAsDataURL(n[0].getAsFile())},I=function(t){var n=t.data,r=function(e){var t=n.$container.find(".passbook-thumbnail"),r="url("+e.data+")";t.css({width:e.width,height:e.height,background:"url("+e.data+")"}).addClass("passbook-has-image").popover("hide").next(".popover").css("display","none")};e(document).on("paste",{passbook:n,size:[90,90],handler:r},F)},q=function(t){e(document).off("paste")},R=function(t){var n=t.data,r=function(e){var t=n.$container.find(".passbook-logo"),r="url("+e.data+")";t.css({width:e.width,height:e.height,background:"url("+e.data+")"}).addClass("passbook-has-image").popover("hide").next(".popover").css("display","none")};e(document).on("paste",{passbook:n,size:[160,50],handler:r},F)},U=function(t){e(document).off("paste")},z=function(t){var n=e(t.target).parent(".passbook-has-image");n.removeAttr("style").removeClass("passbook-has-image"),t.preventDefault(),t.stopPropagation()},W=function(t){this.$container=e(e('<div class="passbook-container"/>')).append(e('<div class="passbook-flipper"/>').append(e('<div class="passbook-front passbook-color"/>').append(e('<div class="passbook-picker"/>')).append(e('<table class="passbook-header">').append(e("<tr>").append(e('<td rowspan="2" class="passbook-logo"/>').append(e('<div class="passbook-clear"/>'))).append(e('<th rowspan="2" class="passbook-title"/>')).append(e('<th class="passbook-header-label"/>'))).append(e("<tr>").append(e('<th class="passbook-header-value"/>')))).append(e('<div class="passbook-thumbnail">').append(e('<div class="passbook-clear"/>'))).append(e('<div class="passbook-transport passbook-shading"/>')).append(e('<table class="passbook-primary">').append(e("<thead>").append(e("<tr>").append(e('<th class="passbook-primary-label-1"/>')).append(e('<th class="passbook-primary-label-2"/>')))).append(e("<tbody>").append(e("<tr>").append(e('<td class="passbook-primary-value-1"/>')).append(e('<td class="passbook-primary-value-2"/>'))))).append(e('<table class="passbook-extra-fields passbook-auxiliary">').append(e('<div class="passbook-add"/>').on("click",this,N)).append(e("<tr><th/></tr>")).append(e("<tr><td/></tr>"))).append(e('<table class="passbook-extra-fields passbook-secondary">').append(e('<div class="passbook-add"/>').on("click",this,N)).append(e("<tr><th/></tr>")).append(e("<tr><td/></tr>"))).append(e('<div class="passbook-barcode"/>')).append(e('<div class="passbook-moreinfo"/>').on("click",this,E)).append(e('<div class="passbook-editsave"/>').on("click",this,S))).append(e('<div class="passbook-back passbook-color"/>').append(e('<div class="passbook-done"/>').on("click",this,E)).append(e('<div class="passbook-back-fields">').append(e("<table/>")).append(e('<div class="passbook-add"/>').on("click",this,k)))));var n=e(t);n.append(this.$container),this.type=n.data("passbook-type")||s,this.transport=n.data("passbook-transport")||l,this.barcode="",this.barcodeType=""};Object.defineProperty(W.prototype,"TYPE_BOARDING_PASS",{value:t}),Object.defineProperty(W.prototype,"TYPE_COUPON",{value:n}),Object.defineProperty(W.prototype,"TYPE_EVENT",{value:r}),Object.defineProperty(W.prototype,"TYPE_STORE_CARD",{value:i}),Object.defineProperty(W.prototype,"TYPE_GENERIC",{value:s}),Object.defineProperty(W.prototype,"TRANSPORT_AIR",{value:o}),Object.defineProperty(W.prototype,"TRANSPORT_BOAT",{value:u}),Object.defineProperty(W.prototype,"TRANSPORT_BUS",{value:a}),Object.defineProperty(W.prototype,"TRANSPORT_TRAIN",{value:f}),Object.defineProperty(W.prototype,"TRANSPORT_GENERIC",{value:l}),W.prototype.edit=function(){if(this.mode=="edit")return;this.$container.find("th,td").not(".passbook-logo").attr("contenteditable",!0).on("blur",this,x),this.$container.find(".passbook-extra-fields [contenteditable]").on("blur",this,T),this.$container.find(".passbook-back-fields [contenteditable]").on("blur",this,C),this.$container.find(".passbook-barcode").on("shown.bs.popover",this,O).popover({animation:!1,html:!0,placement:"top",trigger:"click",title:"Barcode contents",content:A}),this.$container.find(".passbook-thumbnail").on("shown.bs.popover",this,I).on("hidden.bs.popover",this,q).popover({animation:!1,html:!1,placement:"left",trigger:"click",content:"Paste a logo"}),this.$container.find(".passbook-logo").on("shown.bs.popover",this,R).on("hidden.bs.popover",this,U).popover({animation:!1,html:!1,placement:"right",trigger:"click",content:"Paste a thumbnail"}),this.$container.find(".passbook-front").on("click",this,B),this.$container.find(".passbook-transport").on("click",this,j),this.$container.find(".passbook-clear").on("click",this,z),this.$container.addClass("passbook-edit")},W.prototype.save=function(){if(this.mode!="edit")return;this.$container.find("[contenteditable]").removeAttr("contenteditable").off("blur"),this.$container.removeClass("passbook-edit"),this.$container.find(".passbook-barcode").off("shown.bs.popover").popover("destroy"),this.$container.find(".passbook-thumbnail").off("shown.bs.popover").popover("destroy"),this.$container.find(".passbook-logo").off("shown.bs.popover").popover("destroy"),this.$container.find(".passbook-front").off("click"),this.$container.find(".passbook-transport").off("click"),this.$container.find(".passbook-picker").removeAttr("style").empty()},W.prototype.flip=function(){this.$container.toggleClass("passbook-flipped")},Object.defineProperty(W.prototype,"type",{get:function(){return this.$container.hasClass(c)?t:this.$container.hasClass(h)?n:this.$container.hasClass(p)?r:this.$container.hasClass(d)?i:s},set:function(e){var o;if(e==t)o=c;else if(e==n)o=h;else if(e==r)o=p;else if(e==i)o=d;else{if(e!=s)throw'Unsupported passbook type "'+e+'"';o=null}this.$container.removeClass(v),o!=null&&this.$container.addClass(o)}}),Object.defineProperty(W.prototype,"transport",{get:function(){return this.$container.hasClass(c)?this.$container.hasClass(m)?this.TRANSPORT_AIR:this.$container.hasClass(g)?this.TRANSPORT_BOAT:this.$container.hasClass(y)?this.TRANSPORT_BUS:this.$container.hasClass(b)?this.TRANSPORT_TRAIN:l:null},set:function(e){var t;if(e==o)t=m;else if(e==u)t=g;else if(e==a)t=y;else if(e==f)t=b;else{if(e!=l)throw'Unsupported transport type "'+e+'"';t=null}this.$container.removeClass(w),t!=null&&this.$container.addClass(t)}}),Object.defineProperty(W.prototype,"color",{get:function(){return this.$container.find(".passbook-color").css("background-color")},set:function(t){t=e('<div style="color:'+t+'"/>').css("color");if(t==null||t=="")return;this.$container.find(".passbook-color").css("background-color",t)}}),Object.defineProperty(W.prototype,"shading",{get:function(){var e=this.$container.find(".passbook-shading").css("opacity");return e=Math.round(Number(e)/2*3*100)/100,e<0?e=0:e>1&&(e=1),this.$container.hasClass("passbook-white")?e:-e},set:function(e){e<0?(e=-e,this.$container.removeClass("passbook-white"),this.$container.find(".passbook-color").css("color","rgba(0,0,0,"+e+")"),this.$container.find(".passbook-shading").css("opacity",e/3*2)):(this.$container.addClass("passbook-white"),this.$container.find(".passbook-color").css("color","rgba(255,255,255,"+e+")"),this.$container.find(".passbook-shading").css("opacity",e/3*2))}}),Object.defineProperty(W.prototype,"foreground",{get:function(){var e=this.color,t=/rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/.exec(e);if(t==null)throw"Invalid color "+e+" found???";var n=Number(t[1]),r=Number(t[2]),i=Number(t[3]),s=this.shading,o,u,a;return s<0?(s=-s,o=Math.round(0*s+n*(1-s)),u=Math.round(0*s+r*(1-s)),a=Math.round(0*s+i*(1-s))):(o=Math.round(255*s+rb*(1-s)),u=Math.round(255*s+gb*(1-s)),a=Math.round(255*s+bb*(1-s))),"rgb("+o+", "+u+", "+a+")"},set:function(){throw"Foreground is a read-only property"}}),Object.defineProperty(W.prototype,"mode",{get:function(){return this.$container.hasClass("passbook-edit")?"edit":"view"},set:function(){throw"Mode is a read-only property"}}),e.fn.passbook=function(t){var n=null,r=this.each(function(){var r=e(this),i=r.data("passbook");i||(i=r.data("passbook",i=new W(r))),t=="edit"&&i.edit(),t=="save"&&i.save(),t=="flip"&&i.flip(),t=="data"&&!n&&(n=i)});return n||r}}(jQuery);