diff --git a/css/piskel-style-packaged-2016-06-02-07-21.css b/css/piskel-style-packaged-2016-06-02-07-27.css similarity index 100% rename from css/piskel-style-packaged-2016-06-02-07-21.css rename to css/piskel-style-packaged-2016-06-02-07-27.css diff --git a/index.html b/index.html index 83bb75ae..4cba51e1 100644 --- a/index.html +++ b/index.html @@ -942,9 +942,9 @@ (function () { /** - * See @Gruntfile.js => after build, -2016-06-02-07-21 is replaced by the build version + * See @Gruntfile.js => after build, -2016-06-02-07-27 is replaced by the build version */ - var version = '-2016-06-02-07-21'; + var version = '-2016-06-02-07-27'; var versionHasNotBeenReplaced = version.indexOf('@@') === 0; if (versionHasNotBeenReplaced) { version = ''; diff --git a/js/piskel-packaged-2016-06-02-07-21.js b/js/piskel-packaged-2016-06-02-07-27.js similarity index 99% rename from js/piskel-packaged-2016-06-02-07-21.js rename to js/piskel-packaged-2016-06-02-07-27.js index 6b4455ed..4b938104 100644 --- a/js/piskel-packaged-2016-06-02-07-21.js +++ b/js/piskel-packaged-2016-06-02-07-27.js @@ -20975,7 +20975,6 @@ return Q; ns.DrawingController.prototype.onTouchstart_ = function (event) { this.onMousedown_(event); - event.preventDefault(); }; ns.DrawingController.prototype.onTouchmove_ = function (event) { @@ -20985,7 +20984,6 @@ return Q; ns.DrawingController.prototype.onTouchend_ = function (event) { this.onMouseup_(event); - event.preventDefault(); }; /** diff --git a/js/piskel-packaged-min-2016-06-02-07-21.js b/js/piskel-packaged-min-2016-06-02-07-27.js similarity index 92% rename from js/piskel-packaged-min-2016-06-02-07-21.js rename to js/piskel-packaged-min-2016-06-02-07-27.js index fefa0883..11a125eb 100644 --- a/js/piskel-packaged-min-2016-06-02-07-21.js +++ b/js/piskel-packaged-min-2016-06-02-07-27.js @@ -7,8 +7,8 @@ c.expanded?c.layers.forEach(this.loadExpandedLayer.bind(this)):c.layers.forEach( b.exports=c},{"./base64":1,"./compressions":3,"./defaults":5,"./load":8,"./object":9,"./support":12,"./utils":14}],8:[function(a,b){"use strict";var c=a("./base64"),d=a("./zipEntries");b.exports=function(a,b){var e,f,g,h;for(b=b||{},b.base64&&(a=c.decode(a)),f=new d(a,b),e=f.files,g=0;gc;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},r=function(){var a,b,c={};for(a=0;a0?a.substring(0,b):""},v=function(a){return"/"!=a.slice(-1)&&(a+="/"),this.files[a]||t.call(this,a,null,{dir:!0}),this.files[a]},w=function(a,b){var c,d=new k;return a._data instanceof k?(d.uncompressedSize=a._data.uncompressedSize,d.crc32=a._data.crc32,0===d.uncompressedSize||a.options.dir?(b=j.STORE,d.compressedContent="",d.crc32=0):a._data.compressionMethod===b.magic?d.compressedContent=a._data.getCompressedContent():(c=a._data.getContent(),d.compressedContent=b.compress(f.transformTo(b.compressInputType,c)))):(c=n(a),(!c||0===c.length||a.options.dir)&&(b=j.STORE,c=""),d.uncompressedSize=c.length,d.crc32=this.crc32(c),d.compressedContent=b.compress(f.transformTo(b.compressInputType,c))),d.compressedSize=d.compressedContent.length,d.compressionMethod=b.magic,d},x=function(a,b,c,d){var e,f,h=(c.compressedContent,this.utf8encode(b.name)),i=h!==b.name,j=b.options,k="",l="";e=j.date.getHours(),e<<=6,e|=j.date.getMinutes(),e<<=5,e|=j.date.getSeconds()/2,f=j.date.getFullYear()-1980,f<<=4,f|=j.date.getMonth()+1,f<<=5,f|=j.date.getDate(),i&&(l=q(1,1)+q(this.crc32(h),4)+h,k+="up"+q(l.length,2)+l);var m="";m+="\n\x00",m+=i?"\x00\b":"\x00\x00",m+=c.compressionMethod,m+=q(e,2),m+=q(f,2),m+=q(c.crc32,4),m+=q(c.compressedSize,4),m+=q(c.uncompressedSize,4),m+=q(h.length,2),m+=q(k.length,2);var n=g.LOCAL_FILE_HEADER+m+h+k,o=g.CENTRAL_FILE_HEADER+"\x00"+m+"\x00\x00\x00\x00\x00\x00"+(b.options.dir===!0?"\x00\x00\x00":"\x00\x00\x00\x00")+q(d,4)+h+k;return{fileRecord:n,dirRecord:o,compressedObject:c}},y=function(){this.data=[]};y.prototype={append:function(a){a=f.transformTo("string",a),this.data.push(a)},finalize:function(){return this.data.join("")}};var z=function(a){this.data=new Uint8Array(a),this.index=0};z.prototype={append:function(a){0!==a.length&&(a=f.transformTo("uint8array",a),this.data.set(a,this.index),this.index+=a.length)},finalize:function(){return this.data}};var A={load:function(){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(a){var b,c,d,e,f=[];for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],e=new p(d.name,d._data,r(d.options)),c=b.slice(this.root.length,b.length),b.slice(0,this.root.length)===this.root&&a(c,e)&&f.push(e));return f},file:function(a,b,c){if(1===arguments.length){if(f.isRegExp(a)){var d=a;return this.filter(function(a,b){return!b.options.dir&&d.test(a)})}return this.filter(function(b,c){return!c.options.dir&&b===a})[0]||null}return a=this.root+a,t.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(f.isRegExp(a))return this.filter(function(b,c){return c.options.dir&&a.test(b)});var b=this.root+a,c=v.call(this,b),d=this.clone();return d.root=c.name,d},remove:function(a){a=this.root+a;var b=this.files[a];if(b||("/"!=a.slice(-1)&&(a+="/"),b=this.files[a]),b)if(b.options.dir)for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;di;i++)h=c?a[i]:a.charCodeAt(i),g=255&(b^h),e=d[g],b=b>>>8^e;return-1^b},utf8encode:function(a){if(c){var b=c.encode(a);return f.transformTo("string",b)}if(e.nodebuffer)return f.transformTo("string",l(a,"utf-8"));for(var d=[],g=0,h=0;hi?d[g++]=String.fromCharCode(i):i>127&&2048>i?(d[g++]=String.fromCharCode(i>>6|192),d[g++]=String.fromCharCode(63&i|128)):(d[g++]=String.fromCharCode(i>>12|224),d[g++]=String.fromCharCode(i>>6&63|128),d[g++]=String.fromCharCode(63&i|128))}return d.join("")},utf8decode:function(a){var b=[],c=0,g=f.getTypeOf(a),h="string"!==g,i=0,j=0,k=0,l=0;if(d)return d.decode(f.transformTo("uint8array",a));if(e.nodebuffer)return f.transformTo("nodebuffer",a).toString("utf-8");for(;ij?(b[c++]=String.fromCharCode(j),i++):j>191&&224>j?(k=h?a[i+1]:a.charCodeAt(i+1),b[c++]=String.fromCharCode((31&j)<<6|63&k),i+=2):(k=h?a[i+1]:a.charCodeAt(i+1),l=h?a[i+2]:a.charCodeAt(i+2),b[c++]=String.fromCharCode((15&j)<<12|(63&k)<<6|63&l),i+=3);return b.join("")}};b.exports=A},{"./base64":1,"./compressedObject":2,"./compressions":3,"./defaults":5,"./nodeBuffer":17,"./signature":10,"./support":12,"./utils":14}],10:[function(a,b,c){"use strict";c.LOCAL_FILE_HEADER="PK",c.CENTRAL_FILE_HEADER="PK",c.CENTRAL_DIRECTORY_END="PK",c.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",c.ZIP64_CENTRAL_DIRECTORY_END="PK",c.DATA_DESCRIPTOR="PK\b"},{}],11:[function(a,b){"use strict";function c(a,b){this.data=a,b||(this.data=e.string2binary(this.data)),this.length=this.data.length,this.index=0}var d=a("./dataReader"),e=a("./utils");c.prototype=new d,c.prototype.byteAt=function(a){return this.data.charCodeAt(a)},c.prototype.lastIndexOfSignature=function(a){return this.data.lastIndexOf(a)},c.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./dataReader":4,"./utils":14}],12:[function(a,b,c){var d=a("__browserify_process");if(c.base64=!0,c.array=!0,c.string=!0,c.arraybuffer="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array,c.nodebuffer=!d.browser,c.uint8array="undefined"!=typeof Uint8Array,"undefined"==typeof ArrayBuffer)c.blob=!1;else{var e=new ArrayBuffer(0);try{c.blob=0===new Blob([e],{type:"application/zip"}).size}catch(f){try{var g=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,h=new g;h.append(e),c.blob=0===h.getBlob("application/zip").size}catch(f){c.blob=!1}}}},{__browserify_process:18}],13:[function(a,b){"use strict";function c(a){a&&(this.data=a,this.length=this.data.length,this.index=0)}var d=a("./dataReader");c.prototype=new d,c.prototype.byteAt=function(a){return this.data[a]},c.prototype.lastIndexOfSignature=function(a){for(var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=this.length-4;f>=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f;return-1},c.prototype.readData=function(a){this.checkOffset(a);var b=this.data.subarray(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./dataReader":4}],14:[function(a,b,c){"use strict";function d(a){return a}function e(a,b){for(var c=0;cg&&b>1;)try{d.push("array"===f||"nodebuffer"===f?String.fromCharCode.apply(null,a.slice(g,Math.min(g+b,e))):String.fromCharCode.apply(null,a.subarray(g,Math.min(g+b,e)))),g+=b}catch(i){b=Math.floor(b/2)}return d.join("")}function g(a,b){for(var c=0;cb?"0":"")+b.toString(16).toUpperCase();return d},c.findCompression=function(a){for(var b in i)if(i.hasOwnProperty(b)&&i[b].magic===a)return i[b];return null},c.isRegExp=function(a){return"[object RegExp]"===Object.prototype.toString.call(a)}},{"./compressions":3,"./nodeBuffer":17,"./support":12}],15:[function(a,b){"use strict";function c(a,b){this.files=[],this.loadOptions=b,a&&this.load(a)}var d=a("./stringReader"),e=a("./nodeBufferReader"),f=a("./uint8ArrayReader"),g=a("./utils"),h=a("./signature"),i=a("./zipEntry"),j=a("./support");c.prototype={checkSignature:function(a){var b=this.reader.readString(4);if(b!==a)throw new Error("Corrupted zip or bug : unexpected signature ("+g.pretty(b)+", expected "+g.pretty(a)+")")},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2),this.zipComment=this.reader.readString(this.zipCommentLength)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.versionMadeBy=this.reader.readString(2),this.versionNeeded=this.reader.readInt(2),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var a,b,c,d=this.zip64EndOfCentralSize-44,e=0;d>e;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readString(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var a,b;for(a=0;a0)){var d=c.shift();d()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),c.title="browser",c.browser=!0,c.env={},c.argv=[],c.binding=function(){throw new Error("process.binding is not supported")},c.cwd=function(){return"/"},c.chdir=function(){throw new Error("process.chdir is not supported")}},{}],19:[function(){(function(){"use strict";function a(a,b){var c=a.split("."),d=n;!(c[0]in d)&&d.execScript&&d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||b===l?d=d[e]?d[e]:d[e]={}:d[e]=b}function b(a,b){if(this.index="number"==typeof b?b:0,this.d=0,this.buffer=a instanceof(o?Uint8Array:Array)?a:new(o?Uint8Array:Array)(32768),2*this.buffer.length<=this.index)throw Error("invalid index");this.buffer.length<=this.index&&c(this)}function c(a){var b,c=a.buffer,d=c.length,e=new(o?Uint8Array:Array)(d<<1);if(o)e.set(c);else for(b=0;d>b;++b)e[b]=c[b];return a.buffer=e}function d(a){this.buffer=new(o?Uint16Array:Array)(2*a),this.length=0}function e(a,b){this.e=w,this.f=0,this.input=o&&a instanceof Array?new Uint8Array(a):a,this.c=0,b&&(b.lazy&&(this.f=b.lazy),"number"==typeof b.compressionType&&(this.e=b.compressionType),b.outputBuffer&&(this.b=o&&b.outputBuffer instanceof Array?new Uint8Array(b.outputBuffer):b.outputBuffer),"number"==typeof b.outputIndex&&(this.c=b.outputIndex)),this.b||(this.b=new(o?Uint8Array:Array)(32768))}function f(a,b){this.length=a,this.g=b}function g(a,b){function c(a,b){var c,d=a.g,e=[],f=0;c=z[a.length],e[f++]=65535&c,e[f++]=c>>16&255,e[f++]=c>>24;var g;switch(m){case 1===d:g=[0,d-1,0];break;case 2===d:g=[1,d-2,0];break;case 3===d:g=[2,d-3,0];break;case 4===d:g=[3,d-4,0];break;case 6>=d:g=[4,d-5,1];break;case 8>=d:g=[5,d-7,1];break;case 12>=d:g=[6,d-9,2];break;case 16>=d:g=[7,d-13,2];break;case 24>=d:g=[8,d-17,3];break;case 32>=d:g=[9,d-25,3];break;case 48>=d:g=[10,d-33,4];break;case 64>=d:g=[11,d-49,4];break;case 96>=d:g=[12,d-65,5];break;case 128>=d:g=[13,d-97,5];break;case 192>=d:g=[14,d-129,6];break;case 256>=d:g=[15,d-193,6];break;case 384>=d:g=[16,d-257,7];break;case 512>=d:g=[17,d-385,7];break;case 768>=d:g=[18,d-513,8];break;case 1024>=d:g=[19,d-769,8];break;case 1536>=d:g=[20,d-1025,9];break;case 2048>=d:g=[21,d-1537,9];break;case 3072>=d:g=[22,d-2049,10];break;case 4096>=d:g=[23,d-3073,10];break;case 6144>=d:g=[24,d-4097,11];break;case 8192>=d:g=[25,d-6145,11];break;case 12288>=d:g=[26,d-8193,12];break;case 16384>=d:g=[27,d-12289,12];break;case 24576>=d:g=[28,d-16385,13];break;case 32768>=d:g=[29,d-24577,13];break;default:throw"invalid distance"}c=g,e[f++]=c[0],e[f++]=c[1],e[f++]=c[2];var h,i;for(h=0,i=e.length;i>h;++h)r[s++]=e[h];u[e[0]]++,v[e[3]]++,t=a.length+b-1,n=null}var d,e,f,g,i,j,k,n,p,q={},r=o?new Uint16Array(2*b.length):[],s=0,t=0,u=new(o?Uint32Array:Array)(286),v=new(o?Uint32Array:Array)(30),w=a.f;if(!o){for(f=0;285>=f;)u[f++]=0;for(f=0;29>=f;)v[f++]=0}for(u[256]=1,d=0,e=b.length;e>d;++d){for(f=i=0,g=3;g>f&&d+f!==e;++f)i=i<<8|b[d+f];if(q[i]===l&&(q[i]=[]),j=q[i],!(0=e){for(n&&c(n,-1),f=0,g=e-d;g>f;++f)p=b[d+f],r[s++]=p,++u[p];break}0h;h++){if(d=c[j-h-1],g=3,k>3){for(i=k;i>3;i--)if(a[d+i-1]!==a[b+i-1])continue a;g=k}for(;258>g&&l>b+g&&a[d+g]===a[b+g];)++g;if(g>k&&(e=d,k=g),258===g)break}return new f(k,b-e)}function i(a,b){var c,e,f,g,h,i=a.length,k=new d(572),l=new(o?Uint8Array:Array)(i);if(!o)for(g=0;i>g;g++)l[g]=0;for(g=0;i>g;++g)0g;++g)c[g]=k.pop(),e[g]=c[g].value;for(f=j(e,e.length,b),g=0,h=c.length;h>g;++g)l[c[g].index]=f[g];return l}function j(a,b,c){function d(a){var c=n[a][p[a]];c===b?(d(a+1),d(a+1)):--l[c],++p[a]}var e,f,g,h,i,j=new(o?Uint16Array:Array)(c),k=new(o?Uint8Array:Array)(c),l=new(o?Uint8Array:Array)(b),m=Array(c),n=Array(c),p=Array(c),q=(1<f;++f)r>q?k[f]=0:(k[f]=1,q-=r),q<<=1,j[c-2-f]=(j[c-1-f]/2|0)+b;for(j[0]=k[0],m[0]=Array(j[0]),n[0]=Array(j[0]),f=1;c>f;++f)j[f]>2*j[f-1]+k[f]&&(j[f]=2*j[f-1]+k[f]),m[f]=Array(j[f]),n[f]=Array(j[f]);for(e=0;b>e;++e)l[e]=c;for(g=0;ge;++e)p[e]=0;for(1===k[c-1]&&(--l[0],++p[c-1]),f=c-2;f>=0;--f){for(h=e=0,i=p[f+1],g=0;ga[e]?(m[f][g]=h,n[f][g]=b,i+=2):(m[f][g]=a[e],n[f][g]=e,++e);p[f]=0,1===k[f]&&d(f)}return l}function k(a){var b,c,d,e,f=new(o?Uint16Array:Array)(a.length),g=[],h=[],i=0;for(b=0,c=a.length;c>b;b++)g[a[b]]=(0|g[a[b]])+1;for(b=1,c=16;c>=b;b++)h[b]=i,i+=0|g[b],i<<=1;for(b=0,c=a.length;c>b;b++)for(i=h[a[b]],h[a[b]]+=1,d=f[b]=0,e=a[b];e>d;d++)f[b]=f[b]<<1|1&i,i>>>=1;return f}var l=void 0,m=!0,n=this,o="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array&&"undefined"!=typeof DataView;b.prototype.a=function(a,b,d){var e,f=this.buffer,g=this.index,h=this.d,i=f[g];if(d&&b>1&&(a=b>8?(u[255&a]<<24|u[a>>>8&255]<<16|u[a>>>16&255]<<8|u[a>>>24&255])>>32-b:u[a]>>8-b),8>b+h)i=i<e;++e)i=i<<1|a>>b-e-1&1,8===++h&&(h=0,f[g++]=u[i],i=0,g===f.length&&(f=c(this)));f[g]=i,this.buffer=f,this.d=h,this.index=g},b.prototype.finish=function(){var a,b=this.buffer,c=this.index;return 0p;++p){for(var r=p,s=r,t=7,r=r>>>1;r;r>>>=1)s<<=1,s|=1&r,--t;q[p]=(s<>>0}var u=q;d.prototype.getParent=function(a){return 2*((a-2)/4|0)},d.prototype.push=function(a,b){var c,d,e,f=this.buffer;for(c=this.length,f[this.length++]=b,f[this.length++]=a;c>0&&(d=this.getParent(c),f[c]>f[d]);)e=f[c],f[c]=f[d],f[d]=e,e=f[c+1],f[c+1]=f[d+1],f[d+1]=e,c=d;return this.length},d.prototype.pop=function(){var a,b,c,d,e,f=this.buffer;for(b=f[0],a=f[1],this.length-=2,f[0]=f[this.length],f[1]=f[this.length+1],e=0;d=2*e+2,!(d>=this.length)&&(d+2f[d]&&(d+=2),f[d]>f[e]);)c=f[e],f[e]=f[d],f[d]=c,c=f[e+1],f[e+1]=f[d+1],f[d+1]=c,e=d;return{index:a,value:b,length:this.length}};var v,w=2,x=[];for(v=0;288>v;v++)switch(m){case 143>=v:x.push([v+48,8]);break;case 255>=v:x.push([v-144+400,9]);break;case 279>=v:x.push([v-256+0,7]);break;case 287>=v:x.push([v-280+192,8]);break;default:throw"invalid literal: "+v}e.prototype.h=function(){var a,c,d,e,f=this.input;switch(this.e){case 0:for(d=0,e=f.length;e>d;){c=o?f.subarray(d,d+65535):f.slice(d,d+65535),d+=c.length;var h=c,j=d===e,n=l,p=l,q=l,r=l,s=l,t=this.b,u=this.c;if(o){for(t=new Uint8Array(this.b.buffer);t.length<=u+h.length+5;)t=new Uint8Array(t.length<<1);t.set(this.b)}if(n=j?1:0,t[u++]=0|n,p=h.length,q=~p+65536&65535,t[u++]=255&p,t[u++]=p>>>8&255,t[u++]=255&q,t[u++]=q>>>8&255,o)t.set(h,u),u+=h.length,t=t.subarray(0,u);else{for(r=0,s=h.length;s>r;++r)t[u++]=h[r];t.length=u}this.c=u,this.b=t}break;case 1:var v=new b(o?new Uint8Array(this.b.buffer):this.b,this.c);v.a(1,1,m),v.a(1,2,m);var y,z,A,B=g(this,f);for(y=0,z=B.length;z>y;y++)if(A=B[y],b.prototype.a.apply(v,x[A]),A>256)v.a(B[++y],B[++y],m),v.a(B[++y],5),v.a(B[++y],B[++y],m);else if(256===A)break;this.b=v.finish(),this.c=this.b.length;break;case w:var C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R=new b(o?new Uint8Array(this.b.buffer):this.b,this.c),S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],T=Array(19);for(C=w,R.a(1,1,m),R.a(C,2,m),D=g(this,f),H=i(this.j,15), I=k(H),J=i(this.i,7),K=k(J),E=286;E>257&&0===H[E-1];E--);for(F=30;F>1&&0===J[F-1];F--);var U,V,W,X,Y,Z,$=E,_=F,aa=new(o?Uint32Array:Array)($+_),ba=new(o?Uint32Array:Array)(316),ca=new(o?Uint8Array:Array)(19);for(U=V=0;$>U;U++)aa[V++]=H[U];for(U=0;_>U;U++)aa[V++]=J[U];if(!o)for(U=0,X=ca.length;X>U;++U)ca[U]=0;for(U=Y=0,X=aa.length;X>U;U+=V){for(V=1;X>U+V&&aa[U+V]===aa[U];++V);if(W=V,0===aa[U])if(3>W)for(;00;)Z=138>W?W:138,Z>W-3&&W>Z&&(Z=W-3),10>=Z?(ba[Y++]=17,ba[Y++]=Z-3,ca[17]++):(ba[Y++]=18,ba[Y++]=Z-11,ca[18]++),W-=Z;else if(ba[Y++]=aa[U],ca[aa[U]]++,W--,3>W)for(;00;)Z=6>W?W:6,Z>W-3&&W>Z&&(Z=W-3),ba[Y++]=16,ba[Y++]=Z-3,ca[16]++,W-=Z}for(a=o?ba.subarray(0,Y):ba.slice(0,Y),L=i(ca,7),P=0;19>P;P++)T[P]=L[S[P]];for(G=19;G>4&&0===T[G-1];G--);for(M=k(L),R.a(E-257,5,m),R.a(F-1,5,m),R.a(G-4,4,m),P=0;G>P;P++)R.a(T[P],3,m);for(P=0,Q=a.length;Q>P;P++)if(N=a[P],R.a(M[N],L[N],m),N>=16){switch(P++,N){case 16:O=2;break;case 17:O=3;break;case 18:O=7;break;default:throw"invalid code: "+N}R.a(a[P],O,m)}var da,ea,fa,ga,ha,ia,ja,ka,la=[I,H],ma=[K,J];for(ha=la[0],ia=la[1],ja=ma[0],ka=ma[1],da=0,ea=D.length;ea>da;++da)if(fa=D[da],R.a(ha[fa],ia[fa],m),fa>256)R.a(D[++da],D[++da],m),ga=D[++da],R.a(ja[ga],ka[ga],m),R.a(D[++da],D[++da],m);else if(256===fa)break;this.b=R.finish(),this.c=this.b.length;break;default:throw"invalid compression type"}return this.b};var y=function(){function a(a){switch(m){case 3===a:return[257,a-3,0];case 4===a:return[258,a-4,0];case 5===a:return[259,a-5,0];case 6===a:return[260,a-6,0];case 7===a:return[261,a-7,0];case 8===a:return[262,a-8,0];case 9===a:return[263,a-9,0];case 10===a:return[264,a-10,0];case 12>=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272,a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:throw"invalid length: "+a}}var b,c,d=[];for(b=3;258>=b;b++)c=a(b),d[b]=c[2]<<24|c[1]<<16|c[0];return d}(),z=o?new Uint32Array(y):y;a("Zlib.RawDeflate",e),a("Zlib.RawDeflate.prototype.compress",e.prototype.h);var A,B,C,D,E={NONE:0,FIXED:1,DYNAMIC:w};if(Object.keys)A=Object.keys(E);else for(B in A=[],C=0,E)A[C++]=B;for(C=0,D=A.length;D>C;++C)B=A[C],a("Zlib.RawDeflate.CompressionType."+B,E[B])}).call(this)},{}],20:[function(){(function(){"use strict";function a(a,b){var c=a.split("."),d=g;!(c[0]in d)&&d.execScript&&d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d=d[e]?d[e]:d[e]={}:d[e]=b}function b(a){var b,c,d,e,f,g,i,j,k,l,m=a.length,n=0,o=Number.POSITIVE_INFINITY;for(j=0;m>j;++j)a[j]>n&&(n=a[j]),a[j]=d;){for(j=0;m>j;++j)if(a[j]===d){for(g=0,i=e,k=0;d>k;++k)g=g<<1|1&i,i>>=1;for(l=d<<16|j,k=g;b>k;k+=f)c[k]=l;++e}++d,e<<=1,f<<=1}return[c,n,o]}function c(a,b){switch(this.g=[],this.h=32768,this.c=this.f=this.d=this.k=0,this.input=h?new Uint8Array(a):a,this.l=!1,this.i=j,this.q=!1,(b||!(b={}))&&(b.index&&(this.d=b.index),b.bufferSize&&(this.h=b.bufferSize),b.bufferType&&(this.i=b.bufferType),b.resize&&(this.q=b.resize)),this.i){case i:this.a=32768,this.b=new(h?Uint8Array:Array)(32768+this.h+258);break;case j:this.a=0,this.b=new(h?Uint8Array:Array)(this.h),this.e=this.v,this.m=this.s,this.j=this.t;break;default:throw Error("invalid inflate mode")}}function d(a,b){for(var c,d=a.f,e=a.c,f=a.input,g=a.d,h=f.length;b>e;){if(g>=h)throw Error("input buffer is broken");d|=f[g++]<>>b,a.c=e-b,a.d=g,c}function e(a,b){for(var c,d,e=a.f,f=a.c,g=a.input,h=a.d,i=g.length,j=b[0],k=b[1];k>f&&!(h>=i);)e|=g[h++]<>>16,a.f=e>>d,a.c=f-d,a.d=h,65535&c}function f(a){function c(a,b,c){var f,g,h,i=this.p;for(h=0;a>h;)switch(f=e(this,b)){case 16:for(g=3+d(this,2);g--;)c[h++]=i;break;case 17:for(g=3+d(this,3);g--;)c[h++]=0;i=0;break;case 18:for(g=11+d(this,7);g--;)c[h++]=0;i=0;break;default:i=c[h++]=f}return this.p=i,c}var f,g,i,j,k=d(a,5)+257,l=d(a,5)+1,m=d(a,4)+4,o=new(h?Uint8Array:Array)(n.length);for(j=0;m>j;++j)o[n[j]]=d(a,3);if(!h)for(j=m,m=o.length;m>j;++j)o[n[j]]=0;f=b(o),g=new(h?Uint8Array:Array)(k),i=new(h?Uint8Array:Array)(l),a.p=0,a.j(b(c.call(a,k,f,g)),b(c.call(a,l,f,i)))}var g=this,h="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array&&"undefined"!=typeof DataView,i=0,j=1;c.prototype.u=function(){for(;!this.l;){var a=d(this,3);switch(1&a&&(this.l=!0),a>>>=1){case 0:var b=this.input,c=this.d,e=this.b,g=this.a,k=b.length,l=void 0,m=void 0,n=e.length,o=void 0;if(this.c=this.f=0,c+1>=k)throw Error("invalid uncompressed block header: LEN");if(l=b[c++]|b[c++]<<8,c+1>=k)throw Error("invalid uncompressed block header: NLEN");if(m=b[c++]|b[c++]<<8,l===~m)throw Error("invalid uncompressed block header: length verify");if(c+l>b.length)throw Error("input buffer is broken");switch(this.i){case i:for(;g+l>e.length;){if(o=n-g,l-=o,h)e.set(b.subarray(c,c+o),g),g+=o,c+=o;else for(;o--;)e[g++]=b[c++];this.a=g,e=this.e(),g=this.a}break;case j:for(;g+l>e.length;)e=this.e({o:2});break;default:throw Error("invalid inflate mode")}if(h)e.set(b.subarray(c,c+l),g),g+=l,c+=l;else for(;l--;)e[g++]=b[c++];this.d=c,this.a=g,this.b=e;break;case 1:this.j(z,B);break;case 2:f(this);break;default:throw Error("unknown BTYPE: "+a)}}return this.m()};var k,l,m=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],n=h?new Uint16Array(m):m,o=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],p=h?new Uint16Array(o):o,q=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],r=h?new Uint8Array(q):q,s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],t=h?new Uint16Array(s):s,u=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],v=h?new Uint8Array(u):u,w=new(h?Uint8Array:Array)(288);for(k=0,l=w.length;l>k;++k)w[k]=143>=k?8:255>=k?9:279>=k?7:8;var x,y,z=b(w),A=new(h?Uint8Array:Array)(30);for(x=0,y=A.length;y>x;++x)A[x]=5;var B=b(A);c.prototype.j=function(a,b){var c=this.b,f=this.a;this.n=a;for(var g,h,i,j,k=c.length-258;256!==(g=e(this,a));)if(256>g)f>=k&&(this.a=f,c=this.e(),f=this.a),c[f++]=g;else for(h=g-257,j=p[h],0=k&&(this.a=f,c=this.e(),f=this.a);j--;)c[f]=c[f++-i];for(;8<=this.c;)this.c-=8,this.d--;this.a=f},c.prototype.t=function(a,b){var c=this.b,f=this.a;this.n=a;for(var g,h,i,j,k=c.length;256!==(g=e(this,a));)if(256>g)f>=k&&(c=this.e(),k=c.length),c[f++]=g;else for(h=g-257,j=p[h],0k&&(c=this.e(),k=c.length);j--;)c[f]=c[f++-i];for(;8<=this.c;)this.c-=8,this.d--;this.a=f},c.prototype.e=function(){var a,b,c=new(h?Uint8Array:Array)(this.a-32768),d=this.a-32768,e=this.b;if(h)c.set(e.subarray(32768,c.length));else for(a=0,b=c.length;b>a;++a)c[a]=e[a+32768];if(this.g.push(c),this.k+=c.length,h)e.set(e.subarray(d,d+32768));else for(a=0;32768>a;++a)e[a]=e[d+a];return this.a=32768,e},c.prototype.v=function(a){var b,c,d,e,f=this.input.length/this.d+1|0,g=this.input,i=this.b;return a&&("number"==typeof a.o&&(f=a.o),"number"==typeof a.r&&(f+=a.r)),2>f?(c=(g.length-this.d)/this.n[2],e=258*(c/2)|0,d=eb;++b)for(a=i[b],d=0,e=a.length;e>d;++d)j[f++]=a[d];for(b=32768,c=this.a;c>b;++b)j[f++]=g[b];return this.g=[],this.buffer=j},c.prototype.s=function(){var a,b=this.a;return h?this.q?(a=new Uint8Array(b),a.set(this.b.subarray(0,b))):a=this.b.subarray(0,b):(this.b.length>b&&(this.b.length=b),a=this.b),this.buffer=a},a("Zlib.RawInflate",c),a("Zlib.RawInflate.prototype.decompress",c.prototype.u);var C,D,E,F,G={ADAPTIVE:j,BLOCK:i};if(Object.keys)C=Object.keys(G);else for(D in C=[],E=0,G)C[E++]=D;for(E=0,F=C.length;F>E;++E)D=C[E],a("Zlib.RawInflate.BufferType."+D,G[D])}).call(this)},{}]},{},[7])(7)}),function(a,b,c){function d(a,b,c){for(var d=[],e=0;e')}return"
"+d.join("")+"
"}function e(){for(var a=0;a1&&(delete a.localStorage[W],b.each(e,function(a,b){t(b)}))}catch(f){}try{na=a.localStorage[W].split(";")}catch(f){}}Ka.bind("click.spectrum touchstart.spectrum",function(a){ta||B(),a.stopPropagation(),b(a.target).is("input")||a.preventDefault()}),(sa.is(":disabled")||T.disabled===!0)&&S(),ua.click(j),Ca.change(A),Ca.bind("paste",function(){setTimeout(A,1)}),Ca.keydown(function(a){13==a.keyCode&&A()}),Fa.text(T.cancelText),Fa.bind("click.spectrum",function(a){a.stopPropagation(),a.preventDefault(),F("cancel")}),Ga.text(T.chooseText),Ga.bind("click.spectrum",function(a){a.stopPropagation(),a.preventDefault(),J()&&(N(!0),F())}),l(Aa,function(a,b,c){ka=a/ea,c.shiftKey&&(ka=Math.round(10*ka)/10),K()}),l(xa,function(a,b){ha=parseFloat(b/ca),K()},y,z),l(va,function(a,b,c){if(c.shiftKey){if(!qa){var d=ia*_,e=aa-ja*aa,f=Math.abs(a-d)>Math.abs(b-e);qa=f?"x":"y"}}else qa=null;var g=!qa||"x"===qa,h=!qa||"y"===qa;g&&(ia=parseFloat(a/_)),h&&(ja=parseFloat((aa-b)/aa)),K()},y,z),Ma?(H(Ma),L(),Pa=Oa||u(Ma).format,t(Ma)):L(),U&&C();var g=p?"mousedown.spectrum":"click.spectrum touchstart.spectrum";Da.delegate(".sp-thumb-el",g,c),Ea.delegate(".sp-thumb-el:nth-child(1)",g,{ignore:!0},c)}function t(c){if(V){var d=u(c).toRgbString();if(-1===b.inArray(d,na))for(na.push(d);na.length>oa;)na.shift();if(W&&a.localStorage)try{a.localStorage[W]=na.join(";")}catch(e){}}}function v(){var a,b=[],c=na,d={};if(T.showPalette){for(var e=0;e=aa||0>=_||0>=ca)&&O(),ua.addClass(pa),qa=null}function z(){ua.removeClass(pa)}function A(){var a=u(Ca.val());a.ok?H(a):Ca.addClass("sp-validation-error")}function B(){$?F():C()}function C(){var c=b.Event("beforeShow.spectrum");return $?void O():(Na=I(),sa.trigger(c,[Na]),void(Y.beforeShow(Na)===!1||c.isDefaultPrevented()||(H(Na),e(),$=!0,b(ra).bind("mousedown.spectrum",D),U||b(ra).bind("mouseup.spectrum",E),b(a).bind("resize.spectrum",Z),Ja.addClass("sp-active"),ua.removeClass("sp-hidden"),T.showPalette&&w(),O(),L(),x(),Y.show(Na),sa.trigger("show.spectrum",[Na]))))}function D(a){var c=b(a.target),d=c.parents(),e=!d.is(ua)&&!c.is(ua);e&&F(a)}function E(a){var b=!u.equals(I(),Na);b&&(Qa&&"cancel"!==a?N(!0):G())}function F(c){c&&"click"==c.type&&2==c.button||$&&!U&&($=!1,b(ra).unbind("mousedown.spectrum",D),b(ra).unbind("mouseup.spectrum",E),b(a).unbind("resize.spectrum",Z),Ja.removeClass("sp-active"),ua.addClass("sp-hidden"),E(c),t(I()),Y.hide(I()),sa.trigger("hide.spectrum",[I()]))}function G(){H(Na,!0)}function H(a,b){if(!u.equals(a,I())){var c=u(a),d=c.toHsv();ha=d.h%360/360,ia=d.s,ja=d.v,ka=d.a,L(),c.ok&&!b&&(Pa=Oa||c.format)}}function I(a){return a=a||{},u.fromRatio({h:ha,s:ia,v:ja,a:Math.round(100*ka)/100},{format:a.format||Pa})}function J(){return!Ca.hasClass("sp-validation-error")}function K(){L(),Y.move(I()),sa.trigger("move.spectrum",[I()])}function L(){Ca.removeClass("sp-validation-error"),M();var a=u.fromRatio({h:ha,s:1,v:1});va.css("background-color",a.toHexString());var b=Pa;1>ka&&("hex"!==b&&"hex3"!==b&&"hex6"!==b&&"name"!==b||(b="rgb"));var c=I({format:b}),d=c.toHexString(),e=c.toRgbString();if(q||1===c.alpha?La.css("background-color",e):(La.css("background-color","transparent"),La.css("filter",c.toFilter())),T.showAlpha){var f=c.toRgb();f.a=0;var g=u(f).toRgbString(),h="linear-gradient(left, "+g+", "+d+")";p?za.css("filter",u(g).toFilter({gradientType:1},d)):(za.css("background","-webkit-"+h),za.css("background","-moz-"+h),za.css("background","-ms-"+h),za.css("background",h))}T.showInput&&Ca.val(c.toString(b)),T.showPalette&&w(),x()}function M(){var a=ia,b=ja,c=a*_,d=aa-b*aa;c=Math.max(-ba/2,Math.min(_-ba/2,c-ba/2)),d=Math.max(-ba/2,Math.min(aa-ba/2,d-ba/2)),wa.css({top:d,left:c});var e=ka*ea;Ba.css({left:e-fa/2});var f=ha*ca;ya.css({top:f-ga/2})}function N(a){var b=I();Ha&&sa.val(b.toString(Pa));var c=!u.equals(b,Na);Na=b,a&&c&&(Y.change(b),sa.trigger("change",[b]))}function O(){_=va.width(),aa=va.height(),ba=wa.height()+4,da=xa.width(),ca=xa.height(),ga=ya.height()+4,ea=Aa.width(),fa=Ba.width(),U||(ua.css("position","absolute"),ua.offset(h(ua,Ka))),M()}function P(){sa.show(),Ka.unbind("click.spectrum touchstart.spectrum"),ua.remove(),Ja.remove(),o[Ra.id]=null}function Q(a,d){return a===c?b.extend({},T):d===c?T[a]:(T[a]=d,void k())}function R(){ta=!1,sa.attr("disabled",!1),Ka.removeClass("sp-disabled")}function S(){F(),ta=!0,sa.attr("disabled",!0),Ka.addClass("sp-disabled")}var T=f(i,g),U=T.flat,V=T.showSelectionPalette,W=T.localStorageKey,X=T.theme,Y=T.callbacks,Z=m(O,10),$=!1,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=1,la=T.palette.slice(0),ma=b.isArray(la[0])?la:[la],na=T.selectionPalette.slice(0),oa=T.maxSelectionSize,pa="sp-dragging",qa=null,ra=g.ownerDocument,sa=(ra.body,b(g)),ta=!1,ua=b(s,ra).addClass(X),va=ua.find(".sp-color"),wa=ua.find(".sp-dragger"),xa=ua.find(".sp-hue"),ya=ua.find(".sp-slider"),za=ua.find(".sp-alpha-inner"),Aa=ua.find(".sp-alpha"),Ba=ua.find(".sp-alpha-handle"),Ca=ua.find(".sp-input"),Da=ua.find(".sp-palette"),Ea=ua.find(".sp-initial"),Fa=ua.find(".sp-cancel"),Ga=ua.find(".sp-choose"),Ha=sa.is("input"),Ia=Ha&&!U,Ja=Ia?b(r).addClass(X).addClass(T.className):b([]),Ka=Ia?Ja:sa,La=Ja.find(".sp-preview-inner"),Ma=T.color||Ha&&sa.val(),Na=!1,Oa=T.preferredFormat,Pa=Oa,Qa=!T.showButtons||T.clickoutFiresChange;n();var Ra={show:C,hide:F,toggle:B,reflow:O,option:Q,enable:R,disable:S,set:function(a){H(a),N()},get:I,destroy:P,container:ua};return Ra.id=o.push(Ra)-1,Ra}function h(a,c){var d=0,e=a.outerWidth(),f=a.outerHeight(),g=c.outerHeight(),h=a[0].ownerDocument,i=h.documentElement,j=i.clientWidth+b(h).scrollLeft(),k=i.clientHeight+b(h).scrollTop(),l=c.offset();return l.top+=g,Math.min(l.left,l.left+e>j&&j>e)?(l.left-=Math.abs(l.left+e-j),a.attr("data-x-position","right")):(l.left-=0,a.attr("data-x-position","left")),Math.min(l.top,l.top+f>k&&k>f)?(l.top-=Math.abs(f+g-d),a.attr("data-y-position","top")):(l.top-=d,a.attr("data-y-position","bottom")),l}function i(){}function j(a){a.stopPropagation()}function k(a,b){var c=Array.prototype.slice,d=c.call(arguments,2);return function(){return a.apply(b,d.concat(c.call(arguments)))}}function l(c,d,e,f){function g(a){a.stopPropagation&&a.stopPropagation(),a.preventDefault&&a.preventDefault(),a.returnValue=!1}function h(a){if(l){if(p&&document.documentMode<9&&!a.button)return j();var b=a.originalEvent.touches,e=b?b[0].pageX:a.pageX,f=b?b[0].pageY:a.pageY,h=Math.max(0,Math.min(e-m.left,o)),i=Math.max(0,Math.min(f-m.top,n));q&&g(a),d.apply(c,[h,i,a])}}function i(a){var d=a.which?3==a.which:2==a.button;a.originalEvent.touches;d||l||e.apply(c,arguments)!==!1&&(l=!0,n=b(c).height(),o=b(c).width(),m=b(c).offset(),b(k).bind(r),b(k.body).addClass("sp-dragging"),q||h(a),g(a))}function j(){l&&(b(k).unbind(r),b(k.body).removeClass("sp-dragging"),f.apply(c,arguments)),l=!1}d=d||function(){},e=e||function(){},f=f||function(){};var k=c.ownerDocument||document,l=!1,m={},n=0,o=0,q="ontouchstart"in a,r={};r.selectstart=g,r.dragstart=g,r["touchmove mousemove"]=h,r["touchend mouseup"]=j,b(c).bind("touchstart mousedown",i)}function m(a,b,c){var d;return function(){var e=this,f=arguments,g=function(){d=null,a.apply(e,f)};c&&clearTimeout(d),!c&&d||(d=setTimeout(g,b))}}var n={beforeShow:i,move:i,change:i,show:i,hide:i,color:!1,flat:!1,showInput:!1,showButtons:!0,clickoutFiresChange:!1,showInitial:!1,showPalette:!1,showPaletteOnly:!1,showSelectionPalette:!0,localStorageKey:!1,appendTo:"body",maxSelectionSize:7,cancelText:"cancel",chooseText:"choose",preferredFormat:!1,className:"",showAlpha:!1,theme:"sp-light",palette:["fff","000"],selectionPalette:[],disabled:!1},o=[],p=!!/msie/i.exec(a.navigator.userAgent),q=function(){function a(a,b){return!!~(""+a).indexOf(b)}var b=document.createElement("div"),c=b.style;return c.cssText="background-color:rgba(0,0,0,.5)",a(c.backgroundColor,"rgba")||a(c.backgroundColor,"hsla")}(),r=["
","
","
","
"].join(""),s=function(){var a="";if(p)for(var b=1;6>=b;b++)a+="
";return["
","
","
","
","
","
","
","
","
","
","
","
","
","
","
","
","
",a,"
","
","
","
","
","","
","
","
","","","
","
","
"].join("")}(),t="spectrum.id";b.fn.spectrum=function(a,c){if("string"==typeof a){var d=this,e=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=o[b(this).data(t)];if(c){var f=c[a];if(!f)throw new Error("Spectrum: no such method: '"+a+"'");"get"==a?d=c.get():"container"==a?d=c.container:"option"==a?d=c.option.apply(c,e):"destroy"==a?(c.destroy(),b(this).removeData(t)):f.apply(c,e)}}),d}return this.spectrum("destroy").each(function(){var c=g(this,a);b(this).data(t,c.id)})},b.fn.spectrum.load=!0,b.fn.spectrum.loadOpts={},b.fn.spectrum.draggable=l,b.fn.spectrum.defaults=n,b.spectrum={},b.spectrum.localization={},b.spectrum.palettes={},b.fn.spectrum.processNativeColorInputs=function(){var a=b("")[0],c="color"===a.type&&"!"!=a.value;c||b("input[type=color]").spectrum({preferredFormat:"hex6"})},function(){function b(a,d){if(a=a?a:"",d=d||{},"object"==typeof a&&a.hasOwnProperty("_tc_id"))return a;var f=c(a),h=f.r,j=f.g,m=f.b,n=f.a,o=x(100*n)/100,p=d.format||f.format;return 1>h&&(h=x(h)),1>j&&(j=x(j)),1>m&&(m=x(m)),{ok:f.ok,format:p,_tc_id:v++,alpha:n,getAlpha:function(){return n},setAlpha:function(a){n=k(a),o=x(100*n)/100},toHsv:function(){var a=g(h,j,m);return{h:360*a.h,s:a.s,v:a.v,a:n}},toHsvString:function(){var a=g(h,j,m),b=x(360*a.h),c=x(100*a.s),d=x(100*a.v);return 1==n?"hsv("+b+", "+c+"%, "+d+"%)":"hsva("+b+", "+c+"%, "+d+"%, "+o+")"},toHsl:function(){var a=e(h,j,m);return{h:360*a.h,s:a.s,l:a.l,a:n}},toHslString:function(){var a=e(h,j,m),b=x(360*a.h),c=x(100*a.s),d=x(100*a.l);return 1==n?"hsl("+b+", "+c+"%, "+d+"%)":"hsla("+b+", "+c+"%, "+d+"%, "+o+")"},toHex:function(a){return i(h,j,m,a)},toHexString:function(a){return"#"+i(h,j,m,a)},toRgb:function(){return{r:x(h),g:x(j),b:x(m),a:n}},toRgbString:function(){return 1==n?"rgb("+x(h)+", "+x(j)+", "+x(m)+")":"rgba("+x(h)+", "+x(j)+", "+x(m)+", "+o+")"},toPercentageRgb:function(){return{r:x(100*l(h,255))+"%",g:x(100*l(j,255))+"%",b:x(100*l(m,255))+"%",a:n}},toPercentageRgbString:function(){return 1==n?"rgb("+x(100*l(h,255))+"%, "+x(100*l(j,255))+"%, "+x(100*l(m,255))+"%)":"rgba("+x(100*l(h,255))+"%, "+x(100*l(j,255))+"%, "+x(100*l(m,255))+"%, "+o+")"},toName:function(){return 0===n?"transparent":C[i(h,j,m,!0)]||!1},toFilter:function(a){var c=i(h,j,m),e=c,f=Math.round(255*parseFloat(n)).toString(16),g=f,k=d&&d.gradientType?"GradientType = 1, ":"";if(a){var l=b(a);e=l.toHex(),g=Math.round(255*parseFloat(l.alpha)).toString(16)}return"progid:DXImageTransform.Microsoft.gradient("+k+"startColorstr=#"+q(f)+c+",endColorstr=#"+q(g)+e+")"},toString:function(a){var b=!!a;a=a||this.format;var c=!1,d=!b&&1>n&&n>0,e=d&&("hex"===a||"hex6"===a||"hex3"===a||"name"===a);return"rgb"===a&&(c=this.toRgbString()),"prgb"===a&&(c=this.toPercentageRgbString()),"hex"!==a&&"hex6"!==a||(c=this.toHexString()),"hex3"===a&&(c=this.toHexString(!0)),"name"===a&&(c=this.toName()),"hsl"===a&&(c=this.toHslString()),"hsv"===a&&(c=this.toHsvString()),e?this.toRgbString():c||this.toHexString()}}}function c(a){var b={r:0,g:0,b:0},c=1,e=!1,g=!1;return"string"==typeof a&&(a=s(a)),"object"==typeof a&&(a.hasOwnProperty("r")&&a.hasOwnProperty("g")&&a.hasOwnProperty("b")?(b=d(a.r,a.g,a.b),e=!0,g="%"===String(a.r).substr(-1)?"prgb":"rgb"):a.hasOwnProperty("h")&&a.hasOwnProperty("s")&&a.hasOwnProperty("v")?(a.s=r(a.s),a.v=r(a.v),b=h(a.h,a.s,a.v),e=!0,g="hsv"):a.hasOwnProperty("h")&&a.hasOwnProperty("s")&&a.hasOwnProperty("l")&&(a.s=r(a.s),a.l=r(a.l),b=f(a.h,a.s,a.l),e=!0,g="hsl"),a.hasOwnProperty("a")&&(c=a.a)),c=k(c),{ok:e,format:a.format||g,r:y(255,z(b.r,0)),g:y(255,z(b.g,0)),b:y(255,z(b.b,0)),a:c}}function d(a,b,c){return{r:255*l(a,255),g:255*l(b,255),b:255*l(c,255)}}function e(a,b,c){a=l(a,255),b=l(b,255),c=l(c,255);var d,e,f=z(a,b,c),g=y(a,b,c),h=(f+g)/2;if(f==g)d=e=0;else{var i=f-g;switch(e=h>.5?i/(2-f-g):i/(f+g),f){case a:d=(b-c)/i+(c>b?6:0);break;case b:d=(c-a)/i+2;break;case c:d=(a-b)/i+4}d/=6}return{h:d,s:e,l:h}}function f(a,b,c){function d(a,b,c){return 0>c&&(c+=1),c>1&&(c-=1),1/6>c?a+6*(b-a)*c:.5>c?b:2/3>c?a+(b-a)*(2/3-c)*6:a}var e,f,g;if(a=l(a,360),b=l(b,100),c=l(c,100),0===b)e=f=g=c;else{var h=.5>c?c*(1+b):c+b-c*b,i=2*c-h;e=d(i,h,a+1/3),f=d(i,h,a),g=d(i,h,a-1/3)}return{r:255*e,g:255*f,b:255*g}}function g(a,b,c){a=l(a,255),b=l(b,255),c=l(c,255);var d,e,f=z(a,b,c),g=y(a,b,c),h=f,i=f-g;if(e=0===f?0:i/f,f==g)d=0;else{switch(f){case a:d=(b-c)/i+(c>b?6:0);break;case b:d=(c-a)/i+2;break;case c:d=(a-b)/i+4}d/=6}return{h:d,s:e,v:h}}function h(a,b,c){a=6*l(a,360),b=l(b,100),c=l(c,100);var d=w.floor(a),e=a-d,f=c*(1-b),g=c*(1-e*b),h=c*(1-(1-e)*b),i=d%6,j=[c,g,f,f,h,c][i],k=[h,c,c,g,f,f][i],m=[f,f,h,c,c,g][i];return{r:255*j,g:255*k,b:255*m}}function i(a,b,c,d){var e=[q(x(a).toString(16)),q(x(b).toString(16)),q(x(c).toString(16))];return d&&e[0].charAt(0)==e[0].charAt(1)&&e[1].charAt(0)==e[1].charAt(1)&&e[2].charAt(0)==e[2].charAt(1)?e[0].charAt(0)+e[1].charAt(0)+e[2].charAt(0):e.join("")}function j(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[a[c]]=c);return b}function k(a){return a=parseFloat(a),(isNaN(a)||0>a||a>1)&&(a=1),a}function l(a,b){o(a)&&(a="100%");var c=p(a);return a=y(b,z(0,parseFloat(a))),c&&(a=parseInt(a*b,10)/100),w.abs(a-b)<1e-6?1:a%b/parseFloat(b)}function m(a){return y(1,z(0,a))}function n(a){return parseInt(a,16)}function o(a){return"string"==typeof a&&-1!=a.indexOf(".")&&1===parseFloat(a)}function p(a){return"string"==typeof a&&-1!=a.indexOf("%")}function q(a){return 1==a.length?"0"+a:""+a}function r(a){return 1>=a&&(a=100*a+"%"),a}function s(a){a=a.replace(t,"").replace(u,"").toLowerCase();var b=!1;if(B[a])a=B[a],b=!0;else if("transparent"==a)return{r:0,g:0,b:0,a:0,format:"name"};var c;return(c=D.rgb.exec(a))?{r:c[1],g:c[2],b:c[3]}:(c=D.rgba.exec(a))?{r:c[1],g:c[2],b:c[3],a:c[4]}:(c=D.hsl.exec(a))?{h:c[1],s:c[2],l:c[3]}:(c=D.hsla.exec(a))?{h:c[1],s:c[2],l:c[3],a:c[4]}:(c=D.hsv.exec(a))?{h:c[1],s:c[2],v:c[3]}:(c=D.hex6.exec(a))?{r:n(c[1]),g:n(c[2]),b:n(c[3]),format:b?"name":"hex"}:(c=D.hex3.exec(a))?{r:n(c[1]+""+c[1]),g:n(c[2]+""+c[2]),b:n(c[3]+""+c[3]),format:b?"name":"hex"}:!1}var t=/^[\s,#]+/,u=/\s+$/,v=0,w=Math,x=w.round,y=w.min,z=w.max,A=w.random;b.fromRatio=function(a,c){if("object"==typeof a){var d={};for(var e in a)a.hasOwnProperty(e)&&("a"===e?d[e]=a[e]:d[e]=r(a[e]));a=d}return b(a,c)},b.equals=function(a,c){return a&&c?b(a).toRgbString()==b(c).toRgbString():!1},b.random=function(){return b.fromRatio({r:A(),g:A(),b:A()})},b.desaturate=function(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.s-=c/100,d.s=m(d.s),b(d)},b.saturate=function(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.s+=c/100,d.s=m(d.s),b(d)},b.greyscale=function(a){return b.desaturate(a,100)},b.lighten=function(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.l+=c/100,d.l=m(d.l),b(d)},b.darken=function(a,c){c=0===c?0:c||10;var d=b(a).toHsl();return d.l-=c/100,d.l=m(d.l),b(d)},b.complement=function(a){var c=b(a).toHsl();return c.h=(c.h+180)%360,b(c)},b.triad=function(a){var c=b(a).toHsl(),d=c.h;return[b(a),b({h:(d+120)%360,s:c.s,l:c.l}),b({h:(d+240)%360,s:c.s,l:c.l})]},b.tetrad=function(a){var c=b(a).toHsl(),d=c.h;return[b(a),b({h:(d+90)%360,s:c.s,l:c.l}),b({h:(d+180)%360,s:c.s,l:c.l}),b({h:(d+270)%360,s:c.s,l:c.l})]},b.splitcomplement=function(a){var c=b(a).toHsl(),d=c.h;return[b(a),b({h:(d+72)%360,s:c.s,l:c.l}),b({h:(d+216)%360,s:c.s,l:c.l})]},b.analogous=function(a,c,d){c=c||6,d=d||30;var e=b(a).toHsl(),f=360/d,g=[b(a)];for(e.h=(e.h-(f*c>>1)+720)%360;--c;)e.h=(e.h+f)%360,g.push(b(e));return g},b.monochromatic=function(a,c){c=c||6;for(var d=b(a).toHsv(),e=d.h,f=d.s,g=d.v,h=[],i=1/c;c--;)h.push(b({h:e,s:f,v:g})),g=(g+i)%1;return h},b.readability=function(a,c){var d=b(a).toRgb(),e=b(c).toRgb(),f=(299*d.r+587*d.g+114*d.b)/1e3,g=(299*e.r+587*e.g+114*e.b)/1e3,h=Math.max(d.r,e.r)-Math.min(d.r,e.r)+Math.max(d.g,e.g)-Math.min(d.g,e.g)+Math.max(d.b,e.b)-Math.min(d.b,e.b);return{brightness:Math.abs(f-g),color:h}},b.readable=function(a,c){var d=b.readability(a,c);return d.brightness>125&&d.color>500},b.mostReadable=function(a,c){for(var d=null,e=0,f=!1,g=0;g125&&h.color>500,j=3*(h.brightness/125)+h.color/500;(i&&!f||i&&f&&j>e||!i&&!f&&j>e)&&(f=i,e=j,d=b(c[g]))}return d};var B=b.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},C=b.hexNames=j(B),D=function(){var a="[-\\+]?\\d+%?",b="[-\\+]?\\d*\\.\\d+%?",c="(?:"+b+")|(?:"+a+")",d="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?",e="[\\s|\\(]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")[,|\\s]+("+c+")\\s*\\)?";return{rgb:new RegExp("rgb"+d),rgba:new RegExp("rgba"+e),hsl:new RegExp("hsl"+d),hsla:new RegExp("hsla"+e),hsv:new RegExp("hsv"+d),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();a.tinycolor=b}();var u=a.tinycolor;b(function(){b.fn.spectrum.load&&b.fn.spectrum.processNativeColorInputs()})}(window,jQuery),function(a){"use strict";if("function"==typeof bootstrap)bootstrap("promise",a);else if("object"==typeof exports&&"object"==typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define(a);else if("undefined"!=typeof ses){if(!ses.ok())return;ses.makeQ=a}else{if("undefined"==typeof self)throw new Error("This environment was not anticipated by Q. Please file a bug.");self.Q=a()}}(function(){"use strict";function a(a){return function(){return W.apply(a,arguments)}}function b(a){return a===Object(a)}function c(a){return"[object StopIteration]"===ca(a)||a instanceof S}function d(a,b){if(P&&b.stack&&"object"==typeof a&&null!==a&&a.stack&&-1===a.stack.indexOf(da)){for(var c=[],d=b;d;d=d.source)d.stack&&c.unshift(d.stack); c.unshift(a.stack);var f=c.join("\n"+da+"\n");a.stack=e(f)}}function e(a){for(var b=a.split("\n"),c=[],d=0;d=T&&ha>=d}function i(){if(P)try{throw new Error}catch(a){var b=a.stack.split("\n"),c=b[0].indexOf("@")>0?b[1]:b[2],d=g(c);if(!d)return;return R=d[0],d[1]}}function j(a,b,c){return function(){return"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(b+" is deprecated, use "+c+" instead.",new Error("").stack),a.apply(a,arguments)}}function k(a){return a instanceof o?a:s(a)?B(a):A(a)}function l(){function a(a){b=a,f.source=a,Y(c,function(b,c){k.nextTick(function(){a.promiseDispatch.apply(a,c)})},void 0),c=void 0,d=void 0}var b,c=[],d=[],e=_(l.prototype),f=_(o.prototype);if(f.promiseDispatch=function(a,e,f){var g=X(arguments);c?(c.push(g),"when"===e&&f[1]&&d.push(f[1])):k.nextTick(function(){b.promiseDispatch.apply(b,g)})},f.valueOf=function(){if(c)return f;var a=q(b);return r(a)&&(b=a),a},f.inspect=function(){return b?b.inspect():{state:"pending"}},k.longStackSupport&&P)try{throw new Error}catch(g){f.stack=g.stack.substring(g.stack.indexOf("\n")+1)}return e.promise=f,e.resolve=function(c){b||a(k(c))},e.fulfill=function(c){b||a(A(c))},e.reject=function(c){b||a(z(c))},e.notify=function(a){b||Y(d,function(b,c){k.nextTick(function(){c(a)})},void 0)},e}function m(a){if("function"!=typeof a)throw new TypeError("resolver must be a function.");var b=l();try{a(b.resolve,b.reject,b.notify)}catch(c){b.reject(c)}return b.promise}function n(a){return m(function(b,c){for(var d=0,e=a.length;e>d;d++)k(a[d]).then(b,c)})}function o(a,b,c){void 0===b&&(b=function(a){return z(new Error("Promise does not support operation: "+a))}),void 0===c&&(c=function(){return{state:"unknown"}});var d=_(o.prototype);if(d.promiseDispatch=function(c,e,f){var g;try{g=a[e]?a[e].apply(d,f):b.call(d,e,f)}catch(h){g=z(h)}c&&c(g)},d.inspect=c,c){var e=c();"rejected"===e.state&&(d.exception=e.reason),d.valueOf=function(){var a=c();return"pending"===a.state||"rejected"===a.state?d:a.value}}return d}function p(a,b,c,d){return k(a).then(b,c,d)}function q(a){if(r(a)){var b=a.inspect();if("fulfilled"===b.state)return b.value}return a}function r(a){return a instanceof o}function s(a){return b(a)&&"function"==typeof a.then}function t(a){return r(a)&&"pending"===a.inspect().state}function u(a){return!r(a)||"fulfilled"===a.inspect().state}function v(a){return r(a)&&"rejected"===a.inspect().state}function w(){ea.length=0,fa.length=0,ga||(ga=!0)}function x(a,b){ga&&(fa.push(a),b&&"undefined"!=typeof b.stack?ea.push(b.stack):ea.push("(no stack) "+b))}function y(a){if(ga){var b=Z(fa,a);-1!==b&&(fa.splice(b,1),ea.splice(b,1))}}function z(a){var b=o({when:function(b){return b&&y(this),b?b(a):this}},function(){return this},function(){return{state:"rejected",reason:a}});return x(b,a),b}function A(a){return o({when:function(){return a},get:function(b){return a[b]},set:function(b,c){a[b]=c},"delete":function(b){delete a[b]},post:function(b,c){return null===b||void 0===b?a.apply(void 0,c):a[b].apply(a,c)},apply:function(b,c){return a.apply(b,c)},keys:function(){return ba(a)}},void 0,function(){return{state:"fulfilled",value:a}})}function B(a){var b=l();return k.nextTick(function(){try{a.then(b.resolve,b.reject,b.notify)}catch(c){b.reject(c)}}),b.promise}function C(a){return o({isDef:function(){}},function(b,c){return I(a,b,c)},function(){return k(a).inspect()})}function D(a,b,c){return k(a).spread(b,c)}function E(a){return function(){function b(a,b){var g;if("undefined"==typeof StopIteration){try{g=d[a](b)}catch(h){return z(h)}return g.done?k(g.value):p(g.value,e,f)}try{g=d[a](b)}catch(h){return c(h)?k(h.value):z(h)}return p(g,e,f)}var d=a.apply(this,arguments),e=b.bind(b,"next"),f=b.bind(b,"throw");return e()}}function F(a){k.done(k.async(a)())}function G(a){throw new S(a)}function H(a){return function(){return D([this,J(arguments)],function(b,c){return a.apply(b,c)})}}function I(a,b,c){return k(a).dispatch(b,c)}function J(a){return p(a,function(a){var b=0,c=l();return Y(a,function(d,e,f){var g;r(e)&&"fulfilled"===(g=e.inspect()).state?a[f]=g.value:(++b,p(e,function(d){a[f]=d,0===--b&&c.resolve(a)},c.reject,function(a){c.notify({index:f,value:a})}))},void 0),0===b&&c.resolve(a),c.promise})}function K(a){if(0===a.length)return k.resolve();var b=k.defer(),c=0;return Y(a,function(d,e,f){function g(a){b.resolve(a)}function h(){c--,0===c&&b.reject(new Error("Can't get fulfillment value from any promise, all promises were rejected."))}function i(a){b.notify({index:f,value:a})}var j=a[f];c++,p(j,g,h,i)},void 0),b.promise}function L(a){return p(a,function(a){return a=$(a,k),p(J($(a,function(a){return p(a,U,U)})),function(){return a})})}function M(a){return k(a).allSettled()}function N(a,b){return k(a).then(void 0,void 0,b)}function O(a,b){return k(a).nodeify(b)}var P=!1;try{throw new Error}catch(Q){P=!!Q.stack}var R,S,T=i(),U=function(){},V=function(){function a(){for(;b.next;){b=b.next;var c=b.task;b.task=void 0;var e=b.domain;e&&(b.domain=void 0,e.enter());try{c()}catch(g){if(f)throw e&&e.exit(),setTimeout(a,0),e&&e.enter(),g;setTimeout(function(){throw g},0)}e&&e.exit()}d=!1}var b={task:void 0,next:null},c=b,d=!1,e=void 0,f=!1;if(V=function(a){c=c.next={task:a,domain:f&&process.domain,next:null},d||(d=!0,e())},"undefined"!=typeof process&&process.nextTick)f=!0,e=function(){process.nextTick(a)};else if("function"==typeof setImmediate)e="undefined"!=typeof window?setImmediate.bind(window,a):function(){setImmediate(a)};else if("undefined"!=typeof MessageChannel){var g=new MessageChannel;g.port1.onmessage=function(){e=h,g.port1.onmessage=a,a()};var h=function(){g.port2.postMessage(0)};e=function(){setTimeout(a,0),h()}}else e=function(){setTimeout(a,0)};return V}(),W=Function.call,X=a(Array.prototype.slice),Y=a(Array.prototype.reduce||function(a,b){var c=0,d=this.length;if(1===arguments.length)for(;;){if(c in this){b=this[c++];break}if(++c>=d)throw new TypeError}for(;d>c;c++)c in this&&(b=a(b,this[c],c));return b}),Z=a(Array.prototype.indexOf||function(a){for(var b=0;b2?a.resolve(X(arguments,1)):a.resolve(c)}},k.Promise=m,k.promise=m,m.race=n,m.all=J,m.reject=z,m.resolve=k,k.passByCopy=function(a){return a},o.prototype.passByCopy=function(){return this},k.join=function(a,b){return k(a).join(b)},o.prototype.join=function(a){return k([this,a]).spread(function(a,b){if(a===b)return a;throw new Error("Can't join: not the same: "+a+" "+b)})},k.race=n,o.prototype.race=function(){return this.then(k.race)},k.makePromise=o,o.prototype.toString=function(){return"[object Promise]"},o.prototype.then=function(a,b,c){function e(b){try{return"function"==typeof a?a(b):b}catch(c){return z(c)}}function f(a){if("function"==typeof b){d(a,h);try{return b(a)}catch(c){return z(c)}}return z(a)}function g(a){return"function"==typeof c?c(a):a}var h=this,i=l(),j=!1;return k.nextTick(function(){h.promiseDispatch(function(a){j||(j=!0,i.resolve(e(a)))},"when",[function(a){j||(j=!0,i.resolve(f(a)))}])}),h.promiseDispatch(void 0,"when",[void 0,function(a){var b,c=!1;try{b=g(a)}catch(d){if(c=!0,!k.onerror)throw d;k.onerror(d)}c||i.notify(b)}]),i.promise},k.tap=function(a,b){return k(a).tap(b)},o.prototype.tap=function(a){return a=k(a),this.then(function(b){return a.fcall(b).thenResolve(b)})},k.when=p,o.prototype.thenResolve=function(a){return this.then(function(){return a})},k.thenResolve=function(a,b){return k(a).thenResolve(b)},o.prototype.thenReject=function(a){return this.then(function(){throw a})},k.thenReject=function(a,b){return k(a).thenReject(b)},k.nearer=q,k.isPromise=r,k.isPromiseAlike=s,k.isPending=t,o.prototype.isPending=function(){return"pending"===this.inspect().state},k.isFulfilled=u,o.prototype.isFulfilled=function(){return"fulfilled"===this.inspect().state},k.isRejected=v,o.prototype.isRejected=function(){return"rejected"===this.inspect().state};var ea=[],fa=[],ga=!0;k.resetUnhandledRejections=w,k.getUnhandledReasons=function(){return ea.slice()},k.stopUnhandledRejectionTracking=function(){w(),ga=!1},w(),k.reject=z,k.fulfill=A,k.master=C,k.spread=D,o.prototype.spread=function(a,b){return this.all().then(function(b){return a.apply(void 0,b)},b)},k.async=E,k.spawn=F,k["return"]=G,k.promised=H,k.dispatch=I,o.prototype.dispatch=function(a,b){var c=this,d=l();return k.nextTick(function(){c.promiseDispatch(d.resolve,a,b)}),d.promise},k.get=function(a,b){return k(a).dispatch("get",[b])},o.prototype.get=function(a){return this.dispatch("get",[a])},k.set=function(a,b,c){return k(a).dispatch("set",[b,c])},o.prototype.set=function(a,b){return this.dispatch("set",[a,b])},k.del=k["delete"]=function(a,b){return k(a).dispatch("delete",[b])},o.prototype.del=o.prototype["delete"]=function(a){return this.dispatch("delete",[a])},k.mapply=k.post=function(a,b,c){return k(a).dispatch("post",[b,c])},o.prototype.mapply=o.prototype.post=function(a,b){return this.dispatch("post",[a,b])},k.send=k.mcall=k.invoke=function(a,b){return k(a).dispatch("post",[b,X(arguments,2)])},o.prototype.send=o.prototype.mcall=o.prototype.invoke=function(a){return this.dispatch("post",[a,X(arguments,1)])},k.fapply=function(a,b){return k(a).dispatch("apply",[void 0,b])},o.prototype.fapply=function(a){return this.dispatch("apply",[void 0,a])},k["try"]=k.fcall=function(a){return k(a).dispatch("apply",[void 0,X(arguments,1)])},o.prototype.fcall=function(){return this.dispatch("apply",[void 0,X(arguments)])},k.fbind=function(a){var b=k(a),c=X(arguments,1);return function(){return b.dispatch("apply",[this,c.concat(X(arguments))])}},o.prototype.fbind=function(){var a=this,b=X(arguments);return function(){return a.dispatch("apply",[this,b.concat(X(arguments))])}},k.keys=function(a){return k(a).dispatch("keys",[])},o.prototype.keys=function(){return this.dispatch("keys",[])},k.all=J,o.prototype.all=function(){return J(this)},k.any=K,o.prototype.any=function(){return K(this)},k.allResolved=j(L,"allResolved","allSettled"),o.prototype.allResolved=function(){return L(this)},k.allSettled=M,o.prototype.allSettled=function(){return this.then(function(a){return J($(a,function(a){function b(){return a.inspect()}return a=k(a),a.then(b,b)}))})},k.fail=k["catch"]=function(a,b){return k(a).then(void 0,b)},o.prototype.fail=o.prototype["catch"]=function(a){return this.then(void 0,a)},k.progress=N,o.prototype.progress=function(a){return this.then(void 0,void 0,a)},k.fin=k["finally"]=function(a,b){return k(a)["finally"](b)},o.prototype.fin=o.prototype["finally"]=function(a){return a=k(a),this.then(function(b){return a.fcall().then(function(){return b})},function(b){return a.fcall().then(function(){throw b})})},k.done=function(a,b,c,d){return k(a).done(b,c,d)},o.prototype.done=function(a,b,c){var e=function(a){k.nextTick(function(){if(d(a,f),!k.onerror)throw a;k.onerror(a)})},f=a||b||c?this.then(a,b,c):this;"object"==typeof process&&process&&process.domain&&(e=process.domain.bind(e)),f.then(void 0,e)},k.timeout=function(a,b,c){return k(a).timeout(b,c)},o.prototype.timeout=function(a,b){var c=l(),d=setTimeout(function(){b&&"string"!=typeof b||(b=new Error(b||"Timed out after "+a+" ms"),b.code="ETIMEDOUT"),c.reject(b)},a);return this.then(function(a){clearTimeout(d),c.resolve(a)},function(a){clearTimeout(d),c.reject(a)},c.notify),c.promise},k.delay=function(a,b){return void 0===b&&(b=a,a=void 0),k(a).delay(b)},o.prototype.delay=function(a){return this.then(function(b){var c=l();return setTimeout(function(){c.resolve(b)},a),c.promise})},k.nfapply=function(a,b){return k(a).nfapply(b)},o.prototype.nfapply=function(a){var b=l(),c=X(a);return c.push(b.makeNodeResolver()),this.fapply(c).fail(b.reject),b.promise},k.nfcall=function(a){var b=X(arguments,1);return k(a).nfapply(b)},o.prototype.nfcall=function(){var a=X(arguments),b=l();return a.push(b.makeNodeResolver()),this.fapply(a).fail(b.reject),b.promise},k.nfbind=k.denodeify=function(a){var b=X(arguments,1);return function(){var c=b.concat(X(arguments)),d=l();return c.push(d.makeNodeResolver()),k(a).fapply(c).fail(d.reject),d.promise}},o.prototype.nfbind=o.prototype.denodeify=function(){var a=X(arguments);return a.unshift(this),k.denodeify.apply(void 0,a)},k.nbind=function(a,b){var c=X(arguments,2);return function(){function d(){return a.apply(b,arguments)}var e=c.concat(X(arguments)),f=l();return e.push(f.makeNodeResolver()),k(d).fapply(e).fail(f.reject),f.promise}},o.prototype.nbind=function(){var a=X(arguments,0);return a.unshift(this),k.nbind.apply(void 0,a)},k.nmapply=k.npost=function(a,b,c){return k(a).npost(b,c)},o.prototype.nmapply=o.prototype.npost=function(a,b){var c=X(b||[]),d=l();return c.push(d.makeNodeResolver()),this.dispatch("post",[a,c]).fail(d.reject),d.promise},k.nsend=k.nmcall=k.ninvoke=function(a,b){var c=X(arguments,2),d=l();return c.push(d.makeNodeResolver()),k(a).dispatch("post",[b,c]).fail(d.reject),d.promise},o.prototype.nsend=o.prototype.nmcall=o.prototype.ninvoke=function(a){var b=X(arguments,1),c=l();return b.push(c.makeNodeResolver()),this.dispatch("post",[a,b]).fail(c.reject),c.promise},k.nodeify=O,o.prototype.nodeify=function(a){return a?void this.then(function(b){k.nextTick(function(){a(null,b)})},function(b){k.nextTick(function(){a(b)})}):this};var ha=i();return k}),function(){var a=$.namespace("pskl.rendering");a.DrawingLoop=function(){this.requestAnimationFrame=this.getRequestAnimationFrameShim_(),this.isRunning=!1,this.previousTime=0,this.callbacks=[],this.loop_=this.loop_.bind(this)},a.DrawingLoop.prototype.addCallback=function(a,b,c){var d={fn:a,scope:b,args:c};return this.callbacks.push(d),d},a.DrawingLoop.prototype.removeCallback=function(a){var b=this.callbacks.indexOf(a);-1!=b&&this.callbacks.splice(b,1)},a.DrawingLoop.prototype.start=function(){this.isRunning=!0,this.loop_()},a.DrawingLoop.prototype.loop_=function(){var a=Date.now(),b=a-this.previousTime;this.executeCallbacks_(b),this.previousTime=a,this.requestAnimationFrame.call(window,this.loop_)},a.DrawingLoop.prototype.executeCallbacks_=function(a){for(var b=0;bd;d++){for(var e=[],f=0;b>f;f++)e.push(Constants.TRANSPARENT_COLOR);c[d]=e}return c},a.Frame.createEmptyFromFrame=function(b){return new a.Frame(b.getWidth(),b.getHeight())},a.Frame.prototype.clone=function(){var b=new a.Frame(this.width,this.height);return b.setPixels(this.getPixels()),b},a.Frame.prototype.getPixels=function(){return this.clonePixels_(this.pixels)},a.Frame.prototype.setPixels=function(a){this.pixels=this.clonePixels_(a),this.version++},a.Frame.prototype.clear=function(){var b=a.Frame.createEmptyPixelGrid_(this.getWidth(),this.getHeight());this.setPixels(b)},a.Frame.prototype.clonePixels_=function(a){for(var b=[],c=0;cd;d++)for(var e=0;c>e;e++)a(this.pixels[d][e],d,e,this)},a.Frame.prototype.getWidth=function(){return this.width},a.Frame.prototype.getHeight=function(){return this.height},a.Frame.prototype.containsPixel=function(a,b){return a>=0&&b>=0&&aa||a>1||(this.opacity=a)},a.Layer.prototype.isTransparent=function(){return this.opacity>0&&this.opacity<1},a.Layer.prototype.getFrames=function(){return this.frames},a.Layer.prototype.getFrameAt=function(a){return this.frames[a]},a.Layer.prototype.addFrame=function(a){this.frames.push(a)},a.Layer.prototype.addFrameAt=function(a,b){this.frames.splice(b,0,a)},a.Layer.prototype.removeFrame=function(a){var b=this.frames.indexOf(a);this.removeFrameAt(b)},a.Layer.prototype.removeFrameAt=function(a){this.frames[a]?this.frames.splice(a,1):console.error("Invalid index in removeFrameAt : %s (size : %s)",a,this.size())},a.Layer.prototype.moveFrame=function(a,b){var c=this.frames.splice(a,1)[0];this.frames.splice(b,0,c)},a.Layer.prototype.swapFramesAt=function(a,b){var c=this.frames[a],d=this.frames[b];c&&d?(this.frames[b]=c,this.frames[a]=d):console.error("Frame not found in moveFrameAt (from %s, to %s)",a,b)},a.Layer.prototype.duplicateFrame=function(a){var b=this.frames.indexOf(a);this.duplicateFrameAt(b)},a.Layer.prototype.duplicateFrameAt=function(a){var b=this.frames[a];if(b){var c=b.clone();this.addFrameAt(c,a)}else console.error("Frame not found in duplicateFrameAt (at %s)",a)},a.Layer.prototype.size=function(){return this.frames.length},a.Layer.prototype.getHash=function(){return this.frames.map(function(a){return a.getHash()}).join("-")}}(),function(){var a=$.namespace("pskl.model.piskel");a.Descriptor=function(a,b,c){this.name=a,this.description=b,this.isPublic=c}}(),function(){var a=$.namespace("pskl.model.frame"),b=6e5,c=function(a){return pskl.utils.FrameUtils.toImage(a)},d=function(a){return a},e="__cache_default__";a.CachedFrameProcessor=function(a){this.cache_={},this.cacheResetInterval=a||b,this.frameProcessor=c,this.outputCloner=d,this.defaultNamespace=e,window.setInterval(this.clear.bind(this),this.cacheResetInterval)},a.CachedFrameProcessor.prototype.clear=function(){this.cache_={}},a.CachedFrameProcessor.prototype.setFrameProcessor=function(a){this.frameProcessor=a},a.CachedFrameProcessor.prototype.setOutputCloner=function(a){this.outputCloner=a},a.CachedFrameProcessor.prototype.get=function(a,b){var c=null;b=b||e,this.cache_[b]||(this.cache_[b]={});var d=this.cache_[b],f=a.getHash();if(d[f])c=d[f];else if(a instanceof pskl.model.frame.RenderedFrame)c=this.frameProcessor(a),d[f]=c;else{var g=JSON.stringify(a.getPixels()),h=pskl.utils.hashCode(g);d[h]?c=this.outputCloner(d[h],a):(c=this.frameProcessor(a),d[h]=c),d[f]=c}return c}}(),function(){var a=$.namespace("pskl.model.frame");a.AsyncCachedFrameProcessor=function(b){a.CachedFrameProcessor.call(this,b)},pskl.utils.inherit(a.AsyncCachedFrameProcessor,a.CachedFrameProcessor),a.AsyncCachedFrameProcessor.prototype.get=function(a,b){var c=null;b=b||this.defaultNamespace,this.cache_[b]||(this.cache_[b]={});var d=Q.defer(),e=this.cache_[b],f=a.getHash();if(e[f])c=e[f];else if(a instanceof pskl.model.frame.RenderedFrame){var g=this.onProcessorComplete_.bind(this,d,e,f,f);this.frameProcessor(a,g)}else{var h=JSON.stringify(a.getPixels()),i=pskl.utils.hashCode(h);if(e[i])c=this.outputCloner(e[i],a),e[f]=c;else{var j=this.onProcessorComplete_.bind(this,d,e,f,i);this.frameProcessor(a,j)}}return c&&d.resolve(c),d.promise},a.AsyncCachedFrameProcessor.prototype.onProcessorComplete_=function(a,b,c,d,e){b[c]=e,b[d]=e,a.resolve(e)}}(),function(){var a=$.namespace("pskl.model.frame");a.RenderedFrame=function(a,b,c,d){this.width=b,this.height=c,this.id=d,this.renderFn=a},a.RenderedFrame.prototype.getRenderedFrame=function(){return this.renderFn()},a.RenderedFrame.prototype.getHash=function(){return this.id},a.RenderedFrame.prototype.getWidth=function(){return this.width},a.RenderedFrame.prototype.getHeight=function(){return this.height},a.RenderedFrame.prototype.getPixels=Constants.ABSTRACT_FUNCTION,a.RenderedFrame.prototype.containsPixel=Constants.ABSTRACT_FUNCTION,a.RenderedFrame.prototype.isSameSize=Constants.ABSTRACT_FUNCTION,a.RenderedFrame.prototype.clone=Constants.ABSTRACT_FUNCTION,a.RenderedFrame.prototype.setPixels=Constants.ABSTRACT_FUNCTION,a.RenderedFrame.prototype.clear=Constants.ABSTRACT_FUNCTION,a.RenderedFrame.prototype.setPixel=Constants.ABSTRACT_FUNCTION,a.RenderedFrame.prototype.getPixel=Constants.ABSTRACT_FUNCTION,a.RenderedFrame.prototype.forEachPixel=Constants.ABSTRACT_FUNCTION}(),function(){var a=$.namespace("pskl.model");a.Palette=function(a,b,c){this.id=a,this.name=b,this.colors=c},a.Palette.fromObject=function(b){var c=b.colors.slice(0,b.colors.length);return new a.Palette(b.id,b.name,c)},a.Palette.prototype.getColors=function(){return this.colors},a.Palette.prototype.setColors=function(a){this.colors=a},a.Palette.prototype.get=function(a){return this.colors[a]},a.Palette.prototype.set=function(a,b){this.colors[a]=b},a.Palette.prototype.add=function(a){this.colors.push(a)},a.Palette.prototype.size=function(){return this.colors.length},a.Palette.prototype.removeAt=function(a){this.colors.splice(a,1)},a.Palette.prototype.move=function(a,b){this.colors.splice(b,0,this.colors.splice(a,1)[0])}}(),function(){var a=$.namespace("pskl.model");a.Piskel=function(a,b,c){if(!(a&&b&&c))throw"Missing arguments in Piskel constructor : "+Array.prototype.join.call(arguments,",");this.layers=[],this.width=a,this.height=b,this.descriptor=c,this.savePath=null},a.Piskel.fromLayers=function(a,b){var c=null;if(!(a.length>0&&a[0].size()>0))throw"Piskel.fromLayers expects array of non empty pskl.model.Layer as first argument";var d=a[0].getFrameAt(0);return c=new pskl.model.Piskel(d.getWidth(),d.getHeight(),b),a.forEach(c.addLayer.bind(c)),c},a.Piskel.prototype.getLayers=function(){return this.layers},a.Piskel.prototype.getHeight=function(){return this.height},a.Piskel.prototype.getWidth=function(){return this.width},a.Piskel.prototype.getLayers=function(){return this.layers},a.Piskel.prototype.getLayerAt=function(a){return this.layers[a]},a.Piskel.prototype.getLayersByName=function(a){return this.layers.filter(function(b){return b.getName()==a})},a.Piskel.prototype.addLayer=function(a){this.layers.push(a)},a.Piskel.prototype.addLayerAt=function(a,b){this.layers.splice(b,0,a)},a.Piskel.prototype.moveLayerUp=function(a){var b=this.layers.indexOf(a);b>-1&&b0&&(this.layers[b]=this.layers[b-1],this.layers[b-1]=a)},a.Piskel.prototype.removeLayer=function(a){var b=this.layers.indexOf(a);-1!=b&&this.layers.splice(b,1)},a.Piskel.prototype.removeLayerAt=function(a){this.layers.splice(a,1)},a.Piskel.prototype.getDescriptor=function(){return this.descriptor},a.Piskel.prototype.setDescriptor=function(a){this.descriptor=a,$.publish(Events.PISKEL_DESCRIPTOR_UPDATED)},a.Piskel.prototype.setName=function(a){this.descriptor.name=a,$.publish(Events.PISKEL_DESCRIPTOR_UPDATED)},a.Piskel.prototype.getHash=function(){return this.layers.map(function(a){return a.getHash()}).join("-")}}(),function(){var a=$.namespace("pskl.selection"),b={PASTE:"REPLAY_PASTE",ERASE:"REPLAY_ERASE"};a.SelectionManager=function(a){this.piskelController=a,this.currentSelection=null},a.SelectionManager.prototype.init=function(){$.subscribe(Events.SELECTION_CREATED,$.proxy(this.onSelectionCreated_,this)),$.subscribe(Events.SELECTION_DISMISSED,$.proxy(this.onSelectionDismissed_,this)),$.subscribe(Events.SELECTION_MOVE_REQUEST,$.proxy(this.onSelectionMoved_,this));var a=pskl.service.keyboard.Shortcuts;pskl.app.shortcutService.registerShortcut(a.SELECTION.PASTE,this.paste.bind(this)),pskl.app.shortcutService.registerShortcut(a.SELECTION.CUT,this.cut.bind(this)),pskl.app.shortcutService.registerShortcut(a.SELECTION.COPY,this.copy.bind(this)),pskl.app.shortcutService.registerShortcut(a.SELECTION.DELETE,this.onDeleteShortcut_.bind(this)),$.subscribe(Events.TOOL_SELECTED,$.proxy(this.onToolSelected_,this))},a.SelectionManager.prototype.cleanSelection_=function(){this.currentSelection&&(this.currentSelection.reset(),this.currentSelection=null)},a.SelectionManager.prototype.onToolSelected_=function(a,b){var c=b instanceof pskl.tools.drawing.selection.BaseSelect;c||this.cleanSelection_()},a.SelectionManager.prototype.onSelectionDismissed_=function(a){this.cleanSelection_()},a.SelectionManager.prototype.onDeleteShortcut_=function(a){return this.currentSelection?void this.erase():!0},a.SelectionManager.prototype.erase=function(){for(var a=this.currentSelection.pixels,c=this.piskelController.getCurrentFrame(),d=0,e=a.length;e>d;d++)c.setPixel(a[d].col,a[d].row,Constants.TRANSPARENT_COLOR);$.publish(Events.PISKEL_SAVE_STATE,{type:pskl.service.HistoryService.REPLAY,scope:this,replay:{type:b.ERASE,pixels:JSON.parse(JSON.stringify(a.slice(0)))}})},a.SelectionManager.prototype.cut=function(){this.currentSelection&&(this.currentSelection.fillSelectionFromFrame(this.piskelController.getCurrentFrame()),this.erase())},a.SelectionManager.prototype.paste=function(){if(this.currentSelection&&this.currentSelection.hasPastedContent){var a=this.currentSelection.pixels,c=this.piskelController.getCurrentFrame();this.pastePixels_(c,a),$.publish(Events.PISKEL_SAVE_STATE,{type:pskl.service.HistoryService.REPLAY,scope:this,replay:{type:b.PASTE,pixels:JSON.parse(JSON.stringify(a.slice(0)))}})}},a.SelectionManager.prototype.replay=function(a,c){c.type===b.PASTE?this.pastePixels_(a,c.pixels):c.type===b.ERASE&&c.pixels.forEach(function(b){a.setPixel(b.col,b.row,Constants.TRANSPARENT_COLOR)})},a.SelectionManager.prototype.pastePixels_=function(a,b){b.forEach(function(b){b.color!==Constants.TRANSPARENT_COLOR&&null!==b.color&&a.setPixel(b.col,b.row,b.color)})},a.SelectionManager.prototype.copy=function(){this.currentSelection&&this.piskelController.getCurrentFrame()&&this.currentSelection.fillSelectionFromFrame(this.piskelController.getCurrentFrame())},a.SelectionManager.prototype.onSelectionCreated_=function(a,b){b?this.currentSelection=b:console.error("No selection provided to SelectionManager")},a.SelectionManager.prototype.onSelectionMoved_=function(a,b,c){this.currentSelection?this.currentSelection.move(b,c):console.error("Bad state: No currentSelection set when trying to move it in SelectionManager")}}(),function(){var a=$.namespace("pskl.selection");a.BaseSelection=function(){this.reset()},a.BaseSelection.prototype.reset=function(){this.pixels=[],this.hasPastedContent=!1},a.BaseSelection.prototype.move=function(a,b){for(var c=[],d=0,e=this.pixels.length;e>d;d++){var f=this.pixels[d];f.col+=a,f.row+=b,c.push(f)}this.pixels=c},a.BaseSelection.prototype.fillSelectionFromFrame=function(a){this.pixels.forEach(function(b){var c=a.getPixel(b.col,b.row);b.color=c||Constants.TRANSPARENT_COLOR}),this.hasPastedContent=!0}}(),function(){var a=$.namespace("pskl.selection"),b=-1,c=1,d=2;a.LassoSelection=function(a,b){this.pixelsMap={},a.forEach(function(a){this.setPixelInMap_(a,c)}.bind(this)),this.pixels=this.getLassoPixels_(b)},pskl.utils.inherit(a.LassoSelection,a.BaseSelection),a.LassoSelection.prototype.getLassoPixels_=function(a){var b=[];return a.forEachPixel(function(c,d,e){var f={col:d,row:e};this.isInSelection_(f,a)&&b.push(f)}.bind(this)),b},a.LassoSelection.prototype.isInSelection_=function(a,b){var d=this.getPixelInMap_(a);return d||this.visitPixel_(a,b),this.getPixelInMap_(a)==c},a.LassoSelection.prototype.visitPixel_=function(a,e){var f=!1,g=pskl.PixelUtils.visitConnectedPixels(a,e,function(a){var b=this.getPixelInMap_(a);return b?!1:e.containsPixel(a.col,a.row)?(this.setPixelInMap_(a,d),!0):(f=!0,!1)}.bind(this));g.forEach(function(a){this.setPixelInMap_(a,f?b:c)}.bind(this))},a.LassoSelection.prototype.setPixelInMap_=function(a,b){this.pixelsMap[a.col]=this.pixelsMap[a.col]||{},this.pixelsMap[a.col][a.row]=b},a.LassoSelection.prototype.getPixelInMap_=function(a){return this.pixelsMap[a.col]&&this.pixelsMap[a.col][a.row]}}(),function(){var a=$.namespace("pskl.selection");a.RectangularSelection=function(a,b,c,d){this.pixels=pskl.PixelUtils.getRectanglePixels(a,b,c,d)},pskl.utils.inherit(a.RectangularSelection,a.BaseSelection)}(),function(){var a=$.namespace("pskl.selection");a.ShapeSelection=function(a){this.pixels=a},pskl.utils.inherit(a.ShapeSelection,a.BaseSelection)}(),function(){var a=$.namespace("pskl.rendering");a.AbstractRenderer=function(){},a.AbstractRenderer.prototype.clear=Constants.ABSTRACT_FUNCTION,a.AbstractRenderer.prototype.render=Constants.ABSTRACT_FUNCTION,a.AbstractRenderer.prototype.getCoordinates=Constants.ABSTRACT_FUNCTION,a.AbstractRenderer.prototype.setGridWidth=Constants.ABSTRACT_FUNCTION,a.AbstractRenderer.prototype.getGridWidth=Constants.ABSTRACT_FUNCTION,a.AbstractRenderer.prototype.setZoom=Constants.ABSTRACT_FUNCTION,a.AbstractRenderer.prototype.getZoom=Constants.ABSTRACT_FUNCTION,a.AbstractRenderer.prototype.setOffset=Constants.ABSTRACT_FUNCTION,a.AbstractRenderer.prototype.getOffset=Constants.ABSTRACT_FUNCTION,a.AbstractRenderer.prototype.setDisplaySize=Constants.ABSTRACT_FUNCTION,a.AbstractRenderer.prototype.getDisplaySize=Constants.ABSTRACT_FUNCTION}(),function(){var a=$.namespace("pskl.rendering");a.CompositeRenderer=function(){this.renderers=[]},pskl.utils.inherit(pskl.rendering.CompositeRenderer,pskl.rendering.AbstractRenderer),a.CompositeRenderer.prototype.add=function(a){return this.renderers.push(a),this},a.CompositeRenderer.prototype.clear=function(){this.renderers.forEach(function(a){a.clear()})},a.CompositeRenderer.prototype.setZoom=function(a){this.renderers.forEach(function(b){b.setZoom(a)})},a.CompositeRenderer.prototype.getZoom=function(){return this.getSampleRenderer_().getZoom()},a.CompositeRenderer.prototype.setDisplaySize=function(a,b){this.renderers.forEach(function(c){c.setDisplaySize(a,b)})},a.CompositeRenderer.prototype.getDisplaySize=function(){return this.getSampleRenderer_().getDisplaySize()},a.CompositeRenderer.prototype.setOffset=function(a,b){this.renderers.forEach(function(c){ -c.setOffset(a,b)})},a.CompositeRenderer.prototype.getOffset=function(){return this.getSampleRenderer_().getOffset()},a.CompositeRenderer.prototype.setGridWidth=function(a){this.renderers.forEach(function(b){b.setGridWidth(a)})},a.CompositeRenderer.prototype.getGridWidth=function(){return this.getSampleRenderer_().getGridWidth()},a.CompositeRenderer.prototype.getSampleRenderer_=function(){if(this.renderers.length>0)return this.renderers[0];throw"Renderer manager is empty"}}(),function(){var a=$.namespace("pskl.rendering.layer");a.LayersRenderer=function(a,b,c){pskl.rendering.CompositeRenderer.call(this),this.piskelController=c,this.belowRenderer=new pskl.rendering.frame.FrameRenderer(a,b,["layers-canvas","layers-below-canvas"]),this.aboveRenderer=new pskl.rendering.frame.FrameRenderer(a,b,["layers-canvas","layers-above-canvas"]),this.add(this.belowRenderer),this.add(this.aboveRenderer),this.serializedRendering="",this.stylesheet_=document.createElement("style"),document.head.appendChild(this.stylesheet_),this.updateLayersCanvasOpacity_(pskl.UserSettings.get(pskl.UserSettings.LAYER_OPACITY)),$.subscribe(Events.PISKEL_RESET,this.flush.bind(this)),$.subscribe(Events.USER_SETTINGS_CHANGED,$.proxy(this.onUserSettingsChange_,this))},pskl.utils.inherit(pskl.rendering.layer.LayersRenderer,pskl.rendering.CompositeRenderer),a.LayersRenderer.prototype.render=function(){var a=this.getOffset(),b=this.getDisplaySize(),c=this.piskelController.getLayers(),d=this.piskelController.getCurrentFrameIndex(),e=this.piskelController.getCurrentLayerIndex(),f=c.slice(0,e),g=c.slice(e+1,c.length),h=[this.getZoom(),this.getGridWidth(),a.x,a.y,b.width,b.height,pskl.utils.LayerUtils.getFrameHashAt(f,d),pskl.utils.LayerUtils.getFrameHashAt(g,d),c.length].join("-");if(this.serializedRendering!=h){if(this.serializedRendering=h,this.clear(),f.length>0){var i=pskl.utils.LayerUtils.mergeFrameAt(f,d);this.belowRenderer.render(i)}if(g.length>0){var j=pskl.utils.LayerUtils.mergeFrameAt(g,d);this.aboveRenderer.render(j)}}},a.LayersRenderer.prototype.setDisplaySize=function(a,b){var c=this.getDisplaySize();c.width===a&&c.height===b||this.superclass.setDisplaySize.call(this,a,b)},a.LayersRenderer.prototype.onUserSettingsChange_=function(a,b,c){b==pskl.UserSettings.LAYER_OPACITY&&this.updateLayersCanvasOpacity_(c)},a.LayersRenderer.prototype.updateLayersCanvasOpacity_=function(a){this.stylesheet_.innerHTML=".layers-canvas { opacity : "+a+"}"},a.LayersRenderer.prototype.flush=function(){this.serializedRendering=""}}(),function(){var a=$.namespace("pskl.rendering.frame");a.FrameRenderer=function(a,b,c){if(this.defaultRenderingOptions={supportGridRendering:!1,zoom:1},b=$.extend(!0,{},this.defaultRenderingOptions,b),void 0===a)throw"Bad FrameRenderer initialization. undefined.";if(isNaN(b.zoom))throw"Bad FrameRenderer initialization. not well defined.";this.container=a,this.zoom=b.zoom,this.offset={x:0,y:0},this.margin={x:0,y:0},this.supportGridRendering=b.supportGridRendering,this.classList=c||[],this.classList.push("canvas"),this.canvas=null,this.displayCanvas=null,this.setDisplaySize(b.width,b.height),this.setGridWidth(pskl.UserSettings.get(pskl.UserSettings.GRID_WIDTH)),$.subscribe(Events.USER_SETTINGS_CHANGED,this.onUserSettingsChange_.bind(this))},pskl.utils.inherit(pskl.rendering.frame.FrameRenderer,pskl.rendering.AbstractRenderer),a.FrameRenderer.prototype.render=function(a){a&&(this.clear(),this.renderFrame_(a))},a.FrameRenderer.prototype.clear=function(){pskl.utils.CanvasUtils.clear(this.canvas),pskl.utils.CanvasUtils.clear(this.displayCanvas)},a.FrameRenderer.prototype.setZoom=function(a){if(a0;if(g||e){var h=pskl.utils.ImageResizer.resizeNearestNeighbour(this.canvas,this.zoom,f);b.drawImage(h,0,0)}else b.scale(this.zoom,this.zoom),b.drawImage(this.canvas,0,0);b.restore()}}(),function(){var a=$.namespace("pskl.rendering");a.OnionSkinRenderer=function(a,b){pskl.rendering.CompositeRenderer.call(this),this.piskelController=b,this.renderer=a,this.add(this.renderer),this.hash=""},a.OnionSkinRenderer.createInContainer=function(b,c,d){var e=new pskl.rendering.frame.FrameRenderer(b,c,["onion-skin-canvas"]);return new a.OnionSkinRenderer(e,d)},pskl.utils.inherit(pskl.rendering.OnionSkinRenderer,pskl.rendering.CompositeRenderer),a.OnionSkinRenderer.prototype.render=function(){var a=this.getOnionFrames_(),b=this.computeHash_(a);if(this.hash!=b&&(this.hash=b,this.clear(),a.length>0)){var c=pskl.utils.FrameUtils.merge(a);this.renderer.render(c)}},a.OnionSkinRenderer.prototype.getOnionFrames_=function(){var a=[],b=this.piskelController.getCurrentFrameIndex(),c=this.piskelController.getCurrentLayer(),d=b-1,e=c.getFrameAt(d);e&&a.push(e);var f=b+1,g=c.getFrameAt(f);return g&&a.push(g),a},a.OnionSkinRenderer.prototype.computeHash_=function(a){var b=this.getOffset(),c=this.getDisplaySize(),d=this.piskelController.getLayers();return[this.getZoom(),this.getGridWidth(),b.x,b.y,c.width,c.height,a.map(function(a){return a.getHash()}).join("-"),d.length].join("-")},a.OnionSkinRenderer.prototype.setDisplaySize=function(a,b){var c=this.getDisplaySize();c.width===a&&c.height===b||this.superclass.setDisplaySize.call(this,a,b)},a.OnionSkinRenderer.prototype.flush=function(){this.hash=""}}(),function(){var a=$.namespace("pskl.rendering.frame");a.BackgroundImageFrameRenderer=function(a,b){this.container=a,this.setZoom(b);var c=a.get(0),d=c.ownerDocument;this.frameContainer=d.createElement("div"),this.frameContainer.classList.add("background-image-frame-container"),a.get(0).appendChild(this.frameContainer),this.cachedFrameProcessor=new pskl.model.frame.CachedFrameProcessor,this.cachedFrameProcessor.setFrameProcessor(this.frameToDataUrl_.bind(this))},a.BackgroundImageFrameRenderer.prototype.frameToDataUrl_=function(a){var b;return b=a instanceof pskl.model.frame.RenderedFrame?pskl.utils.ImageResizer.scale(a.getRenderedFrame(),this.zoom):pskl.utils.FrameUtils.toImage(a,this.zoom),b.toDataURL("image/png")},a.BackgroundImageFrameRenderer.prototype.render=function(a){var b=this.cachedFrameProcessor.get(a,this.zoom);this.frameContainer.style.backgroundImage="url("+b+")"},a.BackgroundImageFrameRenderer.prototype.show=function(){this.frameContainer&&(this.frameContainer.style.display="block")},a.BackgroundImageFrameRenderer.prototype.setZoom=function(a){this.zoom=a},a.BackgroundImageFrameRenderer.prototype.getZoom=function(){return this.zoom},a.BackgroundImageFrameRenderer.prototype.setRepeated=function(a){var b;b=a?"repeat":"no-repeat",this.frameContainer.style.backgroundRepeat=b}}(),function(){var a=$.namespace("pskl.rendering.frame");a.CachedFrameRenderer=function(a,b,c){pskl.rendering.frame.FrameRenderer.call(this,a,b,c),this.serializedFrame=""},pskl.utils.inherit(pskl.rendering.frame.CachedFrameRenderer,pskl.rendering.frame.FrameRenderer),a.CachedFrameRenderer.prototype.setDisplaySize=function(a,b){this.displayWidth===a&&this.displayHeight===b||this.superclass.setDisplaySize.call(this,a,b)},a.CachedFrameRenderer.prototype.render=function(a){var b=this.getOffset(),c=this.getDisplaySize(),d=[this.getZoom(),this.getGridWidth(),b.x,b.y,c.width,c.height,a.getHash()].join("-");this.serializedFrame!=d&&(this.serializedFrame=d,this.superclass.render.call(this,a))}}(),function(){var a=$.namespace("pskl.rendering");a.CanvasRenderer=function(a,b){this.frame=a,this.zoom=b,this.opacity_=1,this.transparentColor_="white"},a.CanvasRenderer.prototype.drawTransparentAs=function(a){this.transparentColor_=a},a.CanvasRenderer.prototype.setOpacity=function(a){this.opacity_=a},a.CanvasRenderer.prototype.render=function(){var a=this.createCanvas_();pskl.utils.FrameUtils.drawToCanvas(this.frame,a,this.transparentColor_,this.opacity_);var b=this.createCanvas_(this.zoom),c=b.getContext("2d");return pskl.utils.CanvasUtils.disableImageSmoothing(b),c.scale(this.zoom,this.zoom),c.drawImage(a,0,0),b},a.CanvasRenderer.prototype.createCanvas_=function(a){a=a||1;var b=this.frame.getWidth()*a,c=this.frame.getHeight()*a;return pskl.utils.CanvasUtils.createCanvas(b,c)}}(),function(){var a=$.namespace("pskl.rendering");a.FramesheetRenderer=function(a){if(!(a.length>0))throw"FramesheetRenderer : Invalid argument : frames is empty";this.frames=a},a.FramesheetRenderer.prototype.renderAsCanvas=function(a){a=a||this.frames.length;for(var b=Math.ceil(this.frames.length/a),c=this.createCanvas_(a,b),d=0;d=a&&this.currentFrameIndex>0&&this.setCurrentFrameIndex(this.currentFrameIndex-1)},a.PiskelController.prototype.duplicateCurrentFrame=function(){this.duplicateFrameAt(this.currentFrameIndex)},a.PiskelController.prototype.duplicateFrameAt=function(a){this.getLayers().forEach(function(b){b.duplicateFrameAt(a)}),this.setCurrentFrameIndex(a+1)},a.PiskelController.prototype.moveFrame=function(a,b){this.getLayers().forEach(function(c){c.moveFrame(a,b)})},a.PiskelController.prototype.getFrameCount=function(){var a=this.piskel.getLayerAt(0);return a.size()},a.PiskelController.prototype.setCurrentFrameIndex=function(a){this.hasFrameAt(a)?this.currentFrameIndex=a:window.console.error("Could not set current frame index to "+a)},a.PiskelController.prototype.selectNextFrame=function(){var a=this.currentFrameIndex+1;a=0&&this.setCurrentFrameIndex(a)},a.PiskelController.prototype.setCurrentLayerIndex=function(a){this.hasLayerAt(a)?this.currentLayerIndex=a:window.console.error("Could not set current layer index to "+a)},a.PiskelController.prototype.selectLayer=function(a){var b=this.getLayers().indexOf(a);-1!=b&&this.setCurrentLayerIndex(b)},a.PiskelController.prototype.renameLayerAt=function(a,b){var c=this.getLayerByIndex(a);c&&c.setName(b)},a.PiskelController.prototype.setLayerOpacityAt=function(a,b){var c=this.getLayerByIndex(a);c&&c.setOpacity(b)},a.PiskelController.prototype.mergeDownLayerAt=function(a){var b=this.getLayerByIndex(a),c=this.getLayerByIndex(a-1);if(b&&c){var d=pskl.utils.LayerUtils.mergeLayers(b,c);this.removeLayerAt(a),this.piskel.addLayerAt(d,a),this.removeLayerAt(a-1),this.selectLayer(d)}},a.PiskelController.prototype.generateLayerName_=function(){for(var a="Layer "+this.layerIdCounter;this.hasLayerForName_(a);)this.layerIdCounter++,a="Layer "+this.layerIdCounter;return a},a.PiskelController.prototype.createLayer=function(a){if(a||(a=this.generateLayerName_()),this.hasLayerForName_(a))throw"Layer name should be unique";for(var b=new pskl.model.Layer(a),c=0;c0},a.PiskelController.prototype.moveLayerUp=function(){var a=this.getCurrentLayer();this.piskel.moveLayerUp(a),this.selectLayer(a)},a.PiskelController.prototype.moveLayerDown=function(){var a=this.getCurrentLayer();this.piskel.moveLayerDown(a),this.selectLayer(a)},a.PiskelController.prototype.removeCurrentLayer=function(){var a=this.getCurrentLayerIndex();this.removeLayerAt(a)},a.PiskelController.prototype.removeLayerAt=function(a){if(this.getLayers().length>1){var b=this.getLayerAt(a);b&&(this.piskel.removeLayer(b),this.setCurrentLayerIndex(0))}},a.PiskelController.prototype.serialize=function(a){return pskl.utils.Serializer.serializePiskel(this.piskel,a)}}(),function(){var a=$.namespace("pskl.controller.piskel");a.PublicPiskelController=function(a){this.piskelController=a,pskl.utils.wrap(this,this.piskelController)},a.PublicPiskelController.prototype.init=function(){this.resetWrap_("setCurrentFrameIndex"),this.resetWrap_("selectNextFrame"),this.resetWrap_("selectPreviousFrame"),this.resetWrap_("setCurrentLayerIndex"),this.resetWrap_("selectLayer"),this.saveWrap_("renameLayerAt",!1),this.saveWrap_("removeCurrentLayer",!0),this.saveWrap_("addFrame",!0),this.saveWrap_("addFrameAtCurrentIndex",!0),this.saveWrap_("addFrameAt",!0),this.saveWrap_("removeFrameAt",!0),this.saveWrap_("duplicateCurrentFrame",!0),this.saveWrap_("duplicateFrameAt",!0),this.saveWrap_("moveFrame",!0),this.saveWrap_("createLayer",!0),this.saveWrap_("mergeDownLayerAt",!0),this.saveWrap_("moveLayerUp",!0),this.saveWrap_("moveLayerDown",!0),this.saveWrap_("removeCurrentLayer",!0),this.saveWrap_("setLayerOpacityAt",!0);var a=pskl.service.keyboard.Shortcuts;pskl.app.shortcutService.registerShortcut(a.MISC.PREVIOUS_FRAME,this.selectPreviousFrame.bind(this)),pskl.app.shortcutService.registerShortcut(a.MISC.NEXT_FRAME,this.selectNextFrame.bind(this)),pskl.app.shortcutService.registerShortcut(a.MISC.NEW_FRAME,this.addFrameAtCurrentIndex.bind(this)),pskl.app.shortcutService.registerShortcut(a.MISC.DUPLICATE_FRAME,this.duplicateCurrentFrame.bind(this))},a.PublicPiskelController.prototype.setPiskel=function(a,b){this.piskelController.setPiskel(a,b),$.publish(Events.FRAME_SIZE_CHANGED),$.publish(Events.PISKEL_RESET),$.publish(Events.PISKEL_SAVE_STATE,{type:pskl.service.HistoryService.SNAPSHOT})},a.PublicPiskelController.prototype.resetWrap_=function(a){this[a]=function(){this.piskelController[a].apply(this.piskelController,arguments),$.publish(Events.PISKEL_RESET)}},a.PublicPiskelController.prototype.saveWrap_=function(a,b){this[a]=b?function(){var b=this.getStateInfo_();this.piskelController[a].apply(this.piskelController,arguments),this.raiseSaveStateEvent_(this.piskelController[a],arguments,b),$.publish(Events.PISKEL_RESET)}:function(){var b=this.getStateInfo_();this.piskelController[a].apply(this.piskelController,arguments),this.raiseSaveStateEvent_(this.piskelController[a],arguments,b)}},a.PublicPiskelController.prototype.getStateInfo_=function(){var a={frameIndex:this.piskelController.currentFrameIndex,layerIndex:this.piskelController.currentLayerIndex};return a},a.PublicPiskelController.prototype.raiseSaveStateEvent_=function(a,b,c){$.publish(Events.PISKEL_SAVE_STATE,{type:pskl.service.HistoryService.REPLAY,scope:this,replay:{fn:a,args:b},state:c})},a.PublicPiskelController.prototype.replay=function(a,b){b.fn.apply(this.piskelController,b.args)}}(),function(){var a=$.namespace("pskl.controller");a.CursorCoordinatesController=function(a){this.piskelController=a,this.origin=null,this.coordinates={x:-1,y:-1}},a.CursorCoordinatesController.prototype.init=function(){this.coordinatesContainer=document.querySelector(".cursor-coordinates"),$.subscribe(Events.CURSOR_MOVED,this.onCursorMoved_.bind(this)),$.subscribe(Events.DRAG_START,this.onDragStart_.bind(this)),$.subscribe(Events.DRAG_END,this.onDragEnd_.bind(this)),$.subscribe(Events.FRAME_SIZE_CHANGED,this.redraw.bind(this)),this.redraw()},a.CursorCoordinatesController.prototype.redraw=function(){var a="";this.origin&&(a+=this.origin.x+":"+this.origin.y+" to ");var b=this.coordinates.x,c=this.coordinates.y,d=this.piskelController.getCurrentFrame();if(d.containsPixel(b,c)&&(a+=b+":"+c,this.origin)){var e=Math.abs(b-this.origin.x)+1,f=Math.abs(c-this.origin.y)+1;a+=" ("+e+"x"+f+")"}this.coordinatesContainer.innerHTML=this.getFrameSizeHTML_()+a},a.CursorCoordinatesController.prototype.getFrameSizeHTML_=function(){var a=this.piskelController.getWidth(),b=this.piskelController.getHeight();return"["+a+"x"+b+"] "},a.CursorCoordinatesController.prototype.onCursorMoved_=function(a,b,c){this.coordinates={x:b,y:c},this.redraw()},a.CursorCoordinatesController.prototype.onDragStart_=function(a,b,c){this.origin={x:b,y:c},this.redraw()},a.CursorCoordinatesController.prototype.onDragEnd_=function(a){this.origin=null,this.redraw()}}(),function(){var a=$.namespace("pskl.controller");a.DrawingController=function(b,c,d){this.piskelController=b,this.paletteController=c,this.dragHandler=new a.drawing.DragHandler(this),this.overlayFrame=pskl.model.Frame.createEmptyFromFrame(b.getCurrentFrame()),this.container=d;var e={zoom:this.calculateZoom_(),supportGridRendering:!0,height:this.getContainerHeight_(),width:this.getContainerWidth_(),xOffset:0,yOffset:0};this.overlayRenderer=new pskl.rendering.frame.CachedFrameRenderer(this.container,e,["canvas-overlay"]),this.renderer=new pskl.rendering.frame.CachedFrameRenderer(this.container,e,["drawing-canvas"]),this.onionSkinRenderer=pskl.rendering.OnionSkinRenderer.createInContainer(this.container,e,b),this.layersRenderer=new pskl.rendering.layer.LayersRenderer(this.container,e,b),this.compositeRenderer=new pskl.rendering.CompositeRenderer,this.compositeRenderer.add(this.overlayRenderer).add(this.renderer).add(this.layersRenderer).add(this.onionSkinRenderer),this.isClicked=!1,this.previousMousemoveTime=0,this.currentToolBehavior=null},a.DrawingController.prototype.init=function(){this.initMouseBehavior(),$.subscribe(Events.TOOL_SELECTED,$.proxy(function(a,b){this.currentToolBehavior=b,this.overlayFrame.clear()},this)),$(window).resize($.proxy(this.startResizeTimer_,this)),$.subscribe(Events.USER_SETTINGS_CHANGED,this.onUserSettingsChange_.bind(this)),$.subscribe(Events.FRAME_SIZE_CHANGED,this.onFrameSizeChange_.bind(this));var a=pskl.service.keyboard.Shortcuts;pskl.app.shortcutService.registerShortcut(a.MISC.RESET_ZOOM,this.resetZoom_.bind(this)),pskl.app.shortcutService.registerShortcut(a.MISC.INCREASE_ZOOM,this.increaseZoom_.bind(this,1)),pskl.app.shortcutService.registerShortcut(a.MISC.DECREASE_ZOOM,this.decreaseZoom_.bind(this,1)),window.setTimeout(function(){this.afterWindowResize_(),this.resetZoom_()}.bind(this),100)},a.DrawingController.prototype.initMouseBehavior=function(){var a=$("body");this.container.mousedown($.proxy(this.onMousedown_,this)),pskl.utils.UserAgent.isChrome||pskl.utils.UserAgent.isIE11?this.container.on("mousewheel",$.proxy(this.onMousewheel_,this)):this.container.on("wheel",$.proxy(this.onMousewheel_,this)),window.addEventListener("mouseup",this.onMouseup_.bind(this)),window.addEventListener("mousemove",this.onMousemove_.bind(this)),window.addEventListener("keyup",this.onKeyup_.bind(this)),window.addEventListener("touchstart",this.onTouchstart_.bind(this)),window.addEventListener("touchmove",this.onTouchmove_.bind(this)),window.addEventListener("touchend",this.onTouchend_.bind(this)),a.contextmenu(this.onCanvasContextMenu_)},a.DrawingController.prototype.startResizeTimer_=function(){this.resizeTimer&&window.clearInterval(this.resizeTimer),this.resizeTimer=window.setTimeout($.proxy(this.afterWindowResize_,this),200)},a.DrawingController.prototype.afterWindowResize_=function(){var a=this.compositeRenderer.getDisplaySize().width;this.compositeRenderer.setDisplaySize(this.getContainerWidth_(),this.getContainerHeight_()),this.centerColumnWrapperHorizontally_();var b=this.compositeRenderer.getDisplaySize().width/a,c=b*this.compositeRenderer.getZoom();this.compositeRenderer.setZoom(c),$.publish(Events.ZOOM_CHANGED)},a.DrawingController.prototype.onUserSettingsChange_=function(a,b,c){b==pskl.UserSettings.SHOW_GRID?console.warn("DrawingController:onUserSettingsChange_ not implemented !"):b!=pskl.UserSettings.ONION_SKIN&&b!=pskl.UserSettings.LAYER_PREVIEW||(this.onionSkinRenderer.clear(),this.onionSkinRenderer.flush(),this.layersRenderer.clear(),this.layersRenderer.flush(),this.render())},a.DrawingController.prototype.onFrameSizeChange_=function(){this.compositeRenderer.setDisplaySize(this.getContainerWidth_(),this.getContainerHeight_()),this.centerColumnWrapperHorizontally_(),this.compositeRenderer.setZoom(this.calculateZoom_()),this.compositeRenderer.setOffset(0,0),$.publish(Events.ZOOM_CHANGED)},a.DrawingController.prototype.onTouchstart_=function(a){this.onMousedown_(a),a.preventDefault()},a.DrawingController.prototype.onTouchmove_=function(a){this.onMousemove_(a),a.preventDefault()},a.DrawingController.prototype.onTouchend_=function(a){this.onMouseup_(a),a.preventDefault()},a.DrawingController.prototype.onMousedown_=function(a){$.publish(Events.MOUSE_EVENT,[a,this]);var b=this.piskelController.getCurrentFrame(),c=this.getSpriteCoordinates(a.clientX,a.clientY);a.changedTouches&&a.changedTouches[0]&&(c=this.getSpriteCoordinates(a.changedTouches[0].clientX,a.changedTouches[0].clientY)),this.isClicked=!0,a.button===Constants.MIDDLE_BUTTON?this.dragHandler.startDrag(a.clientX,a.clientY):(this.currentToolBehavior.hideHighlightedPixel(this.overlayFrame),$.publish(Events.TOOL_PRESSED),this.currentToolBehavior.applyToolAt(c.x,c.y,b,this.overlayFrame,a))},a.DrawingController.prototype.onMousemove_=function(a){this._clientX=a.clientX,this._clientY=a.clientY,a.changedTouches&&a.changedTouches[0]&&(this._clientX=a.changedTouches[0].clientX,this._clientY=a.changedTouches[0].clientY);var b=(new Date).getTime();b-this.previousMousemoveTime>Constants.MOUSEMOVE_THROTTLING&&(this.moveTool_(this._clientX,this._clientY,a),this.previousMousemoveTime=b)},a.DrawingController.prototype.onKeyup_=function(a){this.moveTool_(this._clientX,this._clientY,a)},a.DrawingController.prototype.moveTool_=function(a,b,c){var d=this.getSpriteCoordinates(a,b),e=this.piskelController.getCurrentFrame();this.isClicked?pskl.app.mouseStateService.isMiddleButtonPressed()?this.dragHandler.updateDrag(a,b):($.publish(Events.MOUSE_EVENT,[c,this]),this.currentToolBehavior.moveToolAt(0|d.x,0|d.y,e,this.overlayFrame,c)):this.currentToolBehavior.moveUnactiveToolAt(d.x,d.y,e,this.overlayFrame,c),$.publish(Events.CURSOR_MOVED,[d.x,d.y])},a.DrawingController.prototype.onMousewheel_=function(a){var b,c=a.originalEvent;pskl.utils.UserAgent.isChrome?b=c.wheelDeltaY:pskl.utils.UserAgent.isIE11?b=c.wheelDelta:pskl.utils.UserAgent.isFirefox&&(b=-40*c.deltaY);var d=Math.abs(b/120);(pskl.utils.UserAgent.isMac?c.metaKey:c.ctrlKey)&&(d=5*d,c.preventDefault()),b>0?this.increaseZoom_(d):0>b&&this.decreaseZoom_(d)},a.DrawingController.prototype.increaseZoom_=function(a){var b=(a||1)*this.getZoomStep_();this.setZoom_(this.renderer.getZoom()+b)},a.DrawingController.prototype.decreaseZoom_=function(a){var b=(a||1)*this.getZoomStep_();this.setZoom_(this.renderer.getZoom()-b)},a.DrawingController.prototype.onMouseup_=function(a){var b=this.piskelController.getCurrentFrame(),c=this.getSpriteCoordinates(a.clientX,a.clientY);a.changedTouches&&a.changedTouches[0]&&(c=this.getSpriteCoordinates(a.changedTouches[0].clientX,a.changedTouches[0].clientY)),this.isClicked&&(this.isClicked=!1,pskl.app.mouseStateService.isMiddleButtonPressed()?this.dragHandler.isDragging()?this.dragHandler.stopDrag():b.containsPixel(c.x,c.y)&&$.publish(Events.SELECT_PRIMARY_COLOR,[b.getPixel(c.x,c.y)]):(this.currentToolBehavior.releaseToolAt(c.x,c.y,this.piskelController.getCurrentFrame(),this.overlayFrame,a),$.publish(Events.TOOL_RELEASED)),$.publish(Events.MOUSE_EVENT,[a,this]))},a.DrawingController.prototype.getSpriteCoordinates=function(a,b){return this.renderer.getCoordinates(a,b)},a.DrawingController.prototype.getScreenCoordinates=function(a,b){return this.renderer.reverseCoordinates(a,b)},a.DrawingController.prototype.onCanvasContextMenu_=function(a){return $(a.target).closest("#drawing-canvas-container").length?(a.preventDefault(),a.stopPropagation(),a.cancelBubble=!0,!1):void 0},a.DrawingController.prototype.render=function(){var a=this.piskelController.getCurrentFrame();a.isSameSize(this.overlayFrame)||(this.overlayFrame=pskl.model.Frame.createEmptyFromFrame(a)),pskl.UserSettings.get(pskl.UserSettings.ONION_SKIN)&&this.onionSkinRenderer.render(),pskl.UserSettings.get(pskl.UserSettings.LAYER_PREVIEW)&&this.layersRenderer.render(),this.renderer.render(a),this.overlayRenderer.render(this.overlayFrame)},a.DrawingController.prototype.calculateZoom_=function(){var a=this.piskelController.getCurrentFrame().getHeight(),b=this.piskelController.getCurrentFrame().getWidth();return Math.min(this.getAvailableWidth_()/b,this.getAvailableHeight_()/a)},a.DrawingController.prototype.getAvailableHeight_=function(){return $("#main-wrapper").height()},a.DrawingController.prototype.getAvailableWidth_=function(){var a=$(".left-column").outerWidth(!0),b=$(".right-column").outerWidth(!0),c=$("#tool-section").outerWidth(!0),d=$("#application-action-section").outerWidth(!0),e=a+b+c+d,f=$("#main-wrapper").width()-e,g=10;return f-g},a.DrawingController.prototype.getContainerHeight_=function(){return this.getAvailableHeight_()},a.DrawingController.prototype.getContainerWidth_=function(){return this.getAvailableWidth_()},a.DrawingController.prototype.centerColumnWrapperHorizontally_=function(){var a=this.getContainerHeight_(),b=Math.floor(($("#main-wrapper").height()-a)/2);$("#column-wrapper").css({top:b+"px"})},a.DrawingController.prototype.getRenderer=function(){return this.compositeRenderer},a.DrawingController.prototype.getOffset=function(){return this.compositeRenderer.getOffset()},a.DrawingController.prototype.setOffset=function(a,b){this.compositeRenderer.setOffset(a,b),$.publish(Events.ZOOM_CHANGED)},a.DrawingController.prototype.resetZoom_=function(){this.setZoom_(this.calculateZoom_())},a.DrawingController.prototype.getZoomStep_=function(){return Math.max(.1,this.renderer.getZoom()/15); -},a.DrawingController.prototype.setZoom_=function(a){this.compositeRenderer.setZoom(a),$.publish(Events.ZOOM_CHANGED)}}(),function(){var a=$.namespace("pskl.controller.drawing"),b=2;a.DragHandler=function(a){this.drawingController=a,this.isDragging_=!1,this.updateOrigin_(-1,-1)},a.DragHandler.prototype.startDrag=function(a,b){var c=this.drawingController.getSpriteCoordinates(a,b);this.updateOrigin_(c.x,c.y)},a.DragHandler.prototype.updateDrag=function(a,b){var c=this.drawingController.getOffset(),d=this.calculateOffset_(a,b);if(c.y!==d.y||c.x!==d.x){this.isDragging_=!0,this.drawingController.setOffset(d.x,d.y);var e=this.drawingController.getSpriteCoordinates(a,b);this.updateOrigin_(e.x,e.y)}},a.DragHandler.prototype.stopDrag=function(){this.isDragging_=!1,this.origin=null},a.DragHandler.prototype.isDragging=function(){return this.isDragging_},a.DragHandler.prototype.calculateOffset_=function(a,c){var d=this.drawingController.getSpriteCoordinates(a,c),e=this.drawingController.getOffset(),f={x:e.x-b*(d.x-this.origin.x),y:e.y-b*(d.y-this.origin.y)};return f},a.DragHandler.prototype.updateOrigin_=function(a,b){this.origin=this.origin||{},this.origin.x=a,this.origin.y=b}}(),function(){var a=$.namespace("pskl.controller"),b={SELECT:"select",CLONE:"clone",DELETE:"delete",NEW_FRAME:"newframe"};a.FramesListController=function(a,b){this.piskelController=a,this.container=b,this.refreshZoom_(),this.redrawFlag=!0,this.cachedFrameProcessor=new pskl.model.frame.CachedFrameProcessor,this.cachedFrameProcessor.setFrameProcessor(this.frameToPreviewCanvas_.bind(this)),this.cachedFrameProcessor.setOutputCloner(this.clonePreviewCanvas_.bind(this))},a.FramesListController.prototype.init=function(){$.subscribe(Events.TOOL_RELEASED,this.flagForRedraw_.bind(this)),$.subscribe(Events.PISKEL_RESET,this.flagForRedraw_.bind(this)),$.subscribe(Events.USER_SETTINGS_CHANGED,this.flagForRedraw_.bind(this)),$.subscribe(Events.PISKEL_RESET,this.refreshZoom_.bind(this)),$("#preview-list-scroller").scroll(this.updateScrollerOverflows.bind(this)),this.container.get(0).addEventListener("click",this.onContainerClick_.bind(this)),this.updateScrollerOverflows()},a.FramesListController.prototype.flagForRedraw_=function(){this.redrawFlag=!0},a.FramesListController.prototype.refreshZoom_=function(){this.zoom=this.calculateZoom_()},a.FramesListController.prototype.render=function(){this.redrawFlag&&(this.createPreviews_(),this.redrawFlag=!1)},a.FramesListController.prototype.updateScrollerOverflows=function(){var a=$("#preview-list-scroller"),b=a.height(),c=a.scrollTop(),d=$("#preview-list").height(),e=$(".top-overflow").height(),f=!1,g=!1;if(d>b){c>e&&(f=!0);var h=d-c-b;h>e&&(g=!0)}var i=$("#preview-list-wrapper");i.toggleClass("top-overflow-visible",f),i.toggleClass("bottom-overflow-visible",g)},a.FramesListController.prototype.onContainerClick_=function(a){var c=pskl.utils.Dom.getParentWithData(a.target,"tileAction");if(c){var d=c.dataset.tileAction,e=parseInt(c.dataset.tileNumber,10);d===b.CLONE?(this.piskelController.duplicateFrameAt(e),this.updateScrollerOverflows()):d===b.DELETE?(this.piskelController.removeFrameAt(e),this.updateScrollerOverflows()):d===b.SELECT?this.piskelController.setCurrentFrameIndex(e):d===b.NEW_FRAME&&(this.piskelController.addFrame(),this.updateScrollerOverflows())}},a.FramesListController.prototype.createPreviews_=function(){this.container.html(""),$(".tooltip").remove();for(var a=this.piskelController.getFrameCount(),c=0;a>c;c++)this.container.append(this.createPreviewTile_(c));var d=document.createElement("div");d.id="add-frame-action",d.className="add-frame-action",d.setAttribute("data-tile-action",b.NEW_FRAME),d.innerHTML='
Add new frame
',this.container.append(d);var e=a>1;e&&this.initDragndropBehavior_(),this.updateScrollerOverflows()},a.FramesListController.prototype.initDragndropBehavior_=function(){$("#preview-list").sortable({placeholder:"preview-tile preview-tile-drop-proxy",update:$.proxy(this.onUpdate_,this),items:".preview-tile",axis:"y",tolerance:"pointer"}),$("#preview-list").disableSelection()},a.FramesListController.prototype.onUpdate_=function(a,b){var c=parseInt(b.item.data("tile-number"),10),d=$(".preview-tile").index(b.item);this.piskelController.moveFrame(c,d),this.piskelController.setCurrentFrameIndex(d)},a.FramesListController.prototype.createPreviewTile_=function(a){var c=this.piskelController.getCurrentLayer().getFrameAt(a),d=document.createElement("li");d.setAttribute("data-tile-number",a),d.setAttribute("data-tile-action",b.SELECT),d.classList.add("preview-tile"),this.piskelController.getCurrentFrame()==c&&d.classList.add("selected");var e=document.createElement("div");e.classList.add("canvas-container",pskl.UserSettings.get(pskl.UserSettings.CANVAS_BACKGROUND));var f=this.zoom*this.piskelController.getCurrentFrame().getHeight(),g=(Constants.PREVIEW_FILM_SIZE-f)/2;e.style.marginTop=g+"px";var h=this.zoom*this.piskelController.getCurrentFrame().getWidth(),i=(Constants.PREVIEW_FILM_SIZE-h)/2;e.style.marginLeft=i+"px",e.style.marginRight=i+"px";var j=document.createElement("div");j.className="canvas-background",e.appendChild(j);var k=document.createElement("button");if(k.setAttribute("rel","tooltip"),k.setAttribute("data-placement","right"),k.setAttribute("data-tile-number",a),k.setAttribute("data-tile-action",b.CLONE),k.setAttribute("title","Duplicate this frame"),k.className="tile-overlay duplicate-frame-action icon-frame-duplicate-white",d.appendChild(k),e.appendChild(this.getCanvasForFrame(c)),d.appendChild(e),a>0||this.piskelController.getFrameCount()>1){var l=document.createElement("button");l.setAttribute("rel","tooltip"),l.setAttribute("data-placement","right"),l.setAttribute("title","Delete this frame"),l.setAttribute("data-tile-number",a),l.setAttribute("data-tile-action",b.DELETE),l.className="tile-overlay delete-frame-action icon-frame-recyclebin-white",d.appendChild(l);var m=document.createElement("div");m.className="tile-overlay dnd-action icon-frame-dragndrop-white",d.appendChild(m)}var n=document.createElement("div");return n.className="tile-overlay tile-count",n.innerHTML=a+1,d.appendChild(n),d},a.FramesListController.prototype.getCanvasForFrame=function(a){var b=this.cachedFrameProcessor.get(a,this.zoom);return b},a.FramesListController.prototype.frameToPreviewCanvas_=function(a){var b=new pskl.rendering.CanvasRenderer(a,this.zoom);b.drawTransparentAs(Constants.TRANSPARENT_COLOR);var c=b.render();return c.classList.add("tile-view","canvas"),c},a.FramesListController.prototype.clonePreviewCanvas_=function(a){var b=pskl.utils.CanvasUtils.clone(a);return b.classList.add("tile-view","canvas"),b},a.FramesListController.prototype.calculateZoom_=function(){var a=this.piskelController.getCurrentFrame(),b=Math.max(a.getHeight(),a.getWidth());return Constants.PREVIEW_FILM_SIZE/b}}(),function(){var a=$.namespace("pskl.controller");a.HeaderController=function(a,b){this.piskelController=a,this.savedStatusService=b},a.HeaderController.prototype.init=function(){this.piskelName_=document.querySelector(".piskel-name"),$.subscribe(Events.BEFORE_SAVING_PISKEL,this.onBeforeSavingPiskelEvent_.bind(this)),$.subscribe(Events.AFTER_SAVING_PISKEL,this.onAfterSavingPiskelEvent_.bind(this)),$.subscribe(Events.PISKEL_DESCRIPTOR_UPDATED,this.updateHeader_.bind(this)),$.subscribe(Events.PISKEL_RESET,this.updateHeader_.bind(this)),$.subscribe(Events.PISKEL_SAVED_STATUS_UPDATE,this.updateHeader_.bind(this)),this.updateHeader_()},a.HeaderController.prototype.updateHeader_=function(){try{var a=this.piskelController.getPiskel().getDescriptor().name;this.savedStatusService.isDirty()&&(a+=" *"),this.piskelName_&&(this.piskelName_.innerHTML=a)}catch(b){console.warn("Could not update header : "+b.message)}},a.HeaderController.prototype.onBeforeSavingPiskelEvent_=function(){this.piskelName_&&this.piskelName_.classList.add("piskel-name-saving")},a.HeaderController.prototype.onAfterSavingPiskelEvent_=function(){this.piskelName_&&this.piskelName_.classList.remove("piskel-name-saving")}}(),function(){var a=$.namespace("pskl.controller");a.LayersListController=function(a){this.piskelController=a,this.layerPreviewShortcut=pskl.service.keyboard.Shortcuts.MISC.LAYER_PREVIEW},a.LayersListController.prototype.init=function(){this.layerItemTemplate_=pskl.utils.Template.get("layer-item-template"),this.rootEl=document.querySelector(".layers-list-container"),this.layersListEl=document.querySelector(".layers-list"),this.toggleLayerPreviewEl=document.querySelector(".layers-toggle-preview"),this.rootEl.addEventListener("click",this.onClick_.bind(this)),this.toggleLayerPreviewEl.addEventListener("click",this.toggleLayerPreview_.bind(this)),this.initToggleLayerPreview_(),this.renderLayerList_(),this.updateToggleLayerPreview_(),$.subscribe(Events.PISKEL_RESET,this.renderLayerList_.bind(this)),$.subscribe(Events.USER_SETTINGS_CHANGED,$.proxy(this.onUserSettingsChange_,this))},a.LayersListController.prototype.renderLayerList_=function(){this.layersListEl.innerHTML="";var a=this.piskelController.getLayers();a.forEach(this.addLayerItem.bind(this)),this.updateButtonStatus_()},a.LayersListController.prototype.initToggleLayerPreview_=function(){var a=[{description:"Opacity defined in PREFERENCES"}],b="Preview all layers";pskl.app.shortcutService.registerShortcut(this.layerPreviewShortcut,this.toggleLayerPreview_.bind(this));var c=pskl.utils.TooltipFormatter.format(b,this.layerPreviewShortcut,a);this.toggleLayerPreviewEl.setAttribute("title",c)},a.LayersListController.prototype.updateButtonStatus_=function(){var a=this.piskelController.getLayers(),b=(this.piskelController.getCurrentLayer(),this.piskelController.getCurrentLayerIndex()),c=0===b,d=1===a.length,e=b===a.length-1;this.toggleButtonDisabledState_("up",e),this.toggleButtonDisabledState_("down",c),this.toggleButtonDisabledState_("merge",c),this.toggleButtonDisabledState_("delete",d)},a.LayersListController.prototype.toggleButtonDisabledState_=function(a,b){var c=document.querySelector('.layers-button[data-action="'+a+'"]');b?(c.setAttribute("disabled","disabled"),c.blur()):c.removeAttribute("disabled")},a.LayersListController.prototype.updateToggleLayerPreview_=function(){var a="layers-toggle-preview-enabled";pskl.UserSettings.get(pskl.UserSettings.LAYER_PREVIEW)?this.toggleLayerPreviewEl.classList.add(a):this.toggleLayerPreviewEl.classList.remove(a)},a.LayersListController.prototype.onUserSettingsChange_=function(a,b,c){b==pskl.UserSettings.LAYER_PREVIEW&&this.updateToggleLayerPreview_()},a.LayersListController.prototype.addLayerItem=function(a,b){var c=this.piskelController.getCurrentLayer()===a,d=pskl.utils.Template.replace(this.layerItemTemplate_,{layername:a.getName(),layerindex:b,"isselected:current-layer-item":c,opacity:a.getOpacity()}),e=pskl.utils.Template.createFromHTML(d);this.layersListEl.insertBefore(e,this.layersListEl.firstChild)},a.LayersListController.prototype.onClick_=function(a){var b,c=a.target||a.srcElement;if(c.classList.contains("button"))this.onButtonClick_(c);else if(c.classList.contains("layer-item"))b=c.dataset.layerIndex,this.piskelController.setCurrentLayerIndex(parseInt(b,10));else if(c.classList.contains("layer-item-opacity")){b=pskl.utils.Dom.getData(c,"layerIndex");var d=this.piskelController.getLayerAt(parseInt(b,10)),e=window.prompt("Set layer opacity (value between 0 and 1)",d.getOpacity());this.piskelController.setLayerOpacityAt(b,e)}},a.LayersListController.prototype.renameCurrentLayer_=function(){var a=this.piskelController.getCurrentLayer(),b=window.prompt("Please enter the layer name",a.getName());if(b){var c=this.piskelController.getCurrentLayerIndex();this.piskelController.renameLayerAt(c,b),this.renderLayerList_()}},a.LayersListController.prototype.mergeDownCurrentLayer_=function(){var a=this.piskelController.getCurrentLayerIndex();this.piskelController.mergeDownLayerAt(a),this.renderLayerList_()},a.LayersListController.prototype.onButtonClick_=function(a){var b=a.getAttribute("data-action");"up"==b?this.piskelController.moveLayerUp():"down"==b?this.piskelController.moveLayerDown():"add"==b?this.piskelController.createLayer():"delete"==b?this.piskelController.removeCurrentLayer():"merge"==b?this.mergeDownCurrentLayer_():"edit"==b&&this.renameCurrentLayer_()},a.LayersListController.prototype.toggleLayerPreview_=function(){var a=pskl.UserSettings.get(pskl.UserSettings.LAYER_PREVIEW),b=pskl.UserSettings.get(pskl.UserSettings.LAYER_OPACITY),c=!a;pskl.UserSettings.set(pskl.UserSettings.LAYER_PREVIEW,c),c&&0===b&&pskl.UserSettings.set(pskl.UserSettings.LAYER_OPACITY,Constants.DEFAULT.LAYER_OPACITY)}}(),function(){var a=$.namespace("pskl.controller.preview"),b="Piskel - preview";a.PopupPreviewController=function(a){this.piskelController=a,this.popup=null,this.renderer=null,this.renderFlag=!1},a.PopupPreviewController.prototype.init=function(){pskl.utils.Event.addEventListener(window,"unload",this.onMainWindowUnload_,this)},a.PopupPreviewController.prototype.isOpen=function(){return!!this.popup},a.PopupPreviewController.prototype.open=function(){this.isOpen()?this.popup.focus():(this.popup=window.open("about:blank","","width=320,height=320"),window.setTimeout(this.onPopupLoaded.bind(this),500))},a.PopupPreviewController.prototype.onPopupLoaded=function(){this.popup.document.title=b,this.popup.document.body.innerHTML=pskl.utils.Template.get("popup-preview-partial"),pskl.utils.Event.addEventListener(this.popup,"resize",this.onWindowResize_,this),pskl.utils.Event.addEventListener(this.popup,"unload",this.onPopupClosed_,this);var a=this.popup.document.querySelector(".preview-container");this.renderer=new pskl.rendering.frame.BackgroundImageFrameRenderer($(a)),this.updateZoom_(),this.renderFlag=!0},a.PopupPreviewController.prototype.render=function(a){this.isOpen()&&this.renderer&&(this.renderer.render(a),this.renderFlag=!1)},a.PopupPreviewController.prototype.onWindowResize_=function(a){this.updateZoom_(),this.renderFlag=!0},a.PopupPreviewController.prototype.updateZoom_=function(){var a=this.popup.document.documentElement,b=a.clientWidth/this.piskelController.getWidth(),c=a.clientHeight/this.piskelController.getHeight(),d=Math.min(b,c);this.renderer.setZoom(d);var e=this.piskelController.getHeight()*d,f=this.piskelController.getWidth()*d,g=this.popup.document.querySelector(".preview-container");g.style.height=e+"px",g.style.width=f+"px";var h=(a.clientHeight-e)/2;g.style.marginTop=h+"px",g.style.marginBottom=h+"px";var i=(a.clientWidth-f)/2;g.style.marginLeft=i+"px",g.style.marginRight=i+"px"},a.PopupPreviewController.prototype.onPopupClosed_=function(){this.popup;this.popup=null},a.PopupPreviewController.prototype.onMainWindowUnload_=function(){this.isOpen()&&this.popup.close()}}(),function(){var a=$.namespace("pskl.controller.preview"),b=200;a.PreviewController=function(b,c){this.piskelController=b,this.container=c,this.elapsedTime=0,this.currentIndex=0,this.onionSkinShortcut=pskl.service.keyboard.Shortcuts.MISC.ONION_SKIN,this.originalSizeShortcut=pskl.service.keyboard.Shortcuts.MISC.X1_PREVIEW,this.renderFlag=!0,this.fpsRangeInput=document.querySelector("#preview-fps"),this.fpsCounterDisplay=document.querySelector("#display-fps"),this.openPopupPreview=document.querySelector(".open-popup-preview-button"),this.originalSizeButton=document.querySelector(".original-size-button"),this.toggleOnionSkinButton=document.querySelector(".preview-toggle-onion-skin"),this.setFPS(Constants.DEFAULT.FPS),this.renderer=new pskl.rendering.frame.BackgroundImageFrameRenderer(this.container),this.popupPreviewController=new a.PopupPreviewController(b)},a.PreviewController.prototype.init=function(){this.fpsRangeInput.addEventListener("change",this.onFpsRangeInputUpdate_.bind(this)),this.fpsRangeInput.addEventListener("input",this.onFpsRangeInputUpdate_.bind(this)),document.querySelector(".right-column").style.width=Constants.ANIMATED_PREVIEW_WIDTH+"px",pskl.utils.Event.addEventListener(this.toggleOnionSkinButton,"click",this.toggleOnionSkin_,this),pskl.utils.Event.addEventListener(this.openPopupPreview,"click",this.onOpenPopupPreviewClick_,this),pskl.utils.Event.addEventListener(this.originalSizeButton,"click",this.onOriginalSizeButtonClick_,this),pskl.app.shortcutService.registerShortcut(this.onionSkinShortcut,this.toggleOnionSkin_.bind(this)),pskl.app.shortcutService.registerShortcut(this.originalSizeShortcut,this.onOriginalSizeButtonClick_.bind(this)),$.subscribe(Events.FRAME_SIZE_CHANGED,this.onFrameSizeChange_.bind(this)),$.subscribe(Events.USER_SETTINGS_CHANGED,$.proxy(this.onUserSettingsChange_,this)),$.subscribe(Events.PISKEL_SAVE_STATE,this.setRenderFlag_.bind(this,!0)),$.subscribe(Events.PISKEL_RESET,this.setRenderFlag_.bind(this,!0)),this.initTooltips_(),this.popupPreviewController.init(),this.updateZoom_(),this.updateOnionSkinPreview_(),this.updateOriginalSizeButton_(),this.updateMaxFPS_(),this.updateContainerDimensions_()},a.PreviewController.prototype.initTooltips_=function(){var a=pskl.utils.TooltipFormatter.format("Toggle onion skin",this.onionSkinShortcut);this.toggleOnionSkinButton.setAttribute("title",a);var b=pskl.utils.TooltipFormatter.format("Original size preview",this.originalSizeShortcut);this.originalSizeButton.setAttribute("title",b)},a.PreviewController.prototype.onOpenPopupPreviewClick_=function(){this.popupPreviewController.open()},a.PreviewController.prototype.onOriginalSizeButtonClick_=function(){var a=pskl.UserSettings.get(pskl.UserSettings.ORIGINAL_SIZE_PREVIEW);pskl.UserSettings.set(pskl.UserSettings.ORIGINAL_SIZE_PREVIEW,!a)},a.PreviewController.prototype.onUserSettingsChange_=function(a,b,c){b==pskl.UserSettings.ONION_SKIN?this.updateOnionSkinPreview_():b==pskl.UserSettings.MAX_FPS?this.updateMaxFPS_():(this.updateZoom_(),this.updateOriginalSizeButton_(),this.updateContainerDimensions_())},a.PreviewController.prototype.updateOnionSkinPreview_=function(){var a="preview-toggle-onion-skin-enabled",b=pskl.UserSettings.get(pskl.UserSettings.ONION_SKIN);this.toggleOnionSkinButton.classList.toggle(a,b)},a.PreviewController.prototype.updateOriginalSizeButton_=function(){var a="original-size-button-enabled",b=pskl.UserSettings.get(pskl.UserSettings.ORIGINAL_SIZE_PREVIEW);this.originalSizeButton.classList.toggle(a,b)},a.PreviewController.prototype.updateMaxFPS_=function(){var a=pskl.UserSettings.get(pskl.UserSettings.MAX_FPS);this.fpsRangeInput.setAttribute("max",a),this.setFPS(Math.min(this.fps,a))},a.PreviewController.prototype.updateZoom_=function(){var a=pskl.UserSettings.get(pskl.UserSettings.ORIGINAL_SIZE_PREVIEW),b=pskl.UserSettings.get(pskl.UserSettings.TILED_PREVIEW),c=a||b,d=c?1:this.calculateZoom_();this.renderer.setZoom(d),this.setRenderFlag_(!0)},a.PreviewController.prototype.getZoom=function(){return this.calculateZoom_()},a.PreviewController.prototype.getCoordinates=function(a,b){var c=this.container.offset();a-=c.left,b-=c.top;var d=this.getZoom();return{x:Math.floor(a/d),y:Math.floor(b/d)}},a.PreviewController.prototype.onFpsRangeInputUpdate_=function(a){this.setFPS(parseInt(this.fpsRangeInput.value,10)),"change"===a.type&&this.fpsRangeInput.blur()},a.PreviewController.prototype.setFPS=function(a){"number"==typeof a&&(this.fps=a,this.fpsRangeInput.value=0,this.fpsRangeInput.value=this.fps,this.fpsCounterDisplay.innerHTML=this.fps+" FPS")},a.PreviewController.prototype.getFPS=function(){return this.fps},a.PreviewController.prototype.render=function(a){this.elapsedTime+=a;var b=this.getNextIndex_(a);if(this.shouldRender_()||this.currentIndex!=b){this.currentIndex=b;var c=pskl.utils.LayerUtils.mergeFrameAt(this.piskelController.getLayers(),b);this.renderer.render(c),this.renderFlag=!1,this.popupPreviewController.render(c)}},a.PreviewController.prototype.getNextIndex_=function(a){if(0===this.fps)return this.piskelController.getCurrentFrameIndex();var b=Math.floor(this.elapsedTime/(1e3/this.fps));return this.piskelController.hasFrameAt(b)||(this.elapsedTime=0,b=0),b},a.PreviewController.prototype.calculateZoom_=function(){var a=this.piskelController.getCurrentFrame(),c=b/a.getHeight(),d=b/a.getWidth();return Math.min(c,d)},a.PreviewController.prototype.onFrameSizeChange_=function(){this.updateZoom_(),this.updateContainerDimensions_()},a.PreviewController.prototype.updateContainerDimensions_=function(){var a=pskl.UserSettings.get(pskl.UserSettings.TILED_PREVIEW);this.renderer.setRepeated(a);var c,d;if(a)c=b,d=b;else{var e=this.getZoom(),f=this.piskelController.getCurrentFrame();c=f.getHeight()*e,d=f.getWidth()*e}var g=this.container.get(0);g.style.height=c+"px",g.style.width=d+"px";var h=(b-c)/2;g.style.marginTop=h+"px",g.style.marginBottom=h+"px";var i=(b-d)/2;g.style.marginLeft=i+"px",g.style.marginRight=i+"px"},a.PreviewController.prototype.setRenderFlag_=function(a){this.renderFlag=a},a.PreviewController.prototype.shouldRender_=function(){return this.renderFlag||this.popupPreviewController.renderFlag},a.PreviewController.prototype.toggleOnionSkin_=function(){var a=pskl.UserSettings.get(pskl.UserSettings.ONION_SKIN);pskl.UserSettings.set(pskl.UserSettings.ONION_SKIN,!a)}}(),function(){var a=$.namespace("pskl.controller");a.MinimapController=function(a,b,c,d){this.piskelController=a,this.previewController=b,this.drawingController=c,this.container=d,this.isClicked=!1,this.isVisible=!1},a.MinimapController.prototype.init=function(){this.minimapEl=document.createElement("DIV"),this.minimapEl.className="minimap-crop-frame",this.minimapEl.style.display="none",$(this.container).append(this.minimapEl),$(this.container).mousedown(this.onMinimapMousedown_.bind(this)),$("body").mousemove(this.onMinimapMousemove_.bind(this)),$("body").mouseup(this.onMinimapMouseup_.bind(this)),$.subscribe(Events.ZOOM_CHANGED,$.proxy(this.renderMinimap_,this))},a.MinimapController.prototype.renderMinimap_=function(){var a=this.getVerticalRatio_(),b=this.getHorizontalRatio_();a>1||b>1?this.displayMinimap_():this.hideMinimap_()},a.MinimapController.prototype.displayMinimap_=function(){var a=this.getMinimapSize_(),b=this.getPreviewSize_(),c=this.container.height(),d=this.container.width(),e=this.drawingController.getRenderer().getOffset(),f=(d-Math.max(a.width,b.width))/2,g=e.x*this.previewController.getZoom(),h=f+g,i=(c-Math.max(a.height,b.height))/2,j=e.y*this.previewController.getZoom(),k=i+j;this.minimapEl.style.display="block",this.minimapEl.style.width=Math.min(a.width,d)+"px",this.minimapEl.style.height=Math.min(a.height,c)+"px",this.minimapEl.style.left=Math.max(0,h)+"px",this.minimapEl.style.top=Math.max(0,k)+"px",this.isVisible=!0},a.MinimapController.prototype.getMinimapSize_=function(){var a=this.drawingController.getRenderer().getZoom(),b=this.previewController.getZoom(),c=a/b,d=this.drawingController.getRenderer().getDisplaySize(),e=d.width/c,f=d.height/c;return{width:e,height:f}},a.MinimapController.prototype.getPreviewSize_=function(){var a=this.piskelController.getCurrentFrame(),b=a.getWidth()*this.previewController.getZoom(),c=a.getHeight()*this.previewController.getZoom();return{width:b,height:c}},a.MinimapController.prototype.hideMinimap_=function(){this.minimapEl.style.display="none",this.isVisible=!1},a.MinimapController.prototype.onMinimapMousemove_=function(a){if(this.isVisible&&this.isClicked){var b=this.getCoordinatesCenteredAround_(a.clientX,a.clientY);this.drawingController.setOffset(b.x,b.y)}},a.MinimapController.prototype.onMinimapMousedown_=function(a){this.isClicked=!0},a.MinimapController.prototype.onMinimapMouseup_=function(a){this.isClicked=!1},a.MinimapController.prototype.getCoordinatesCenteredAround_=function(a,b){var c=this.previewController.getCoordinates(a,b),d=this.piskelController.getCurrentFrame().getWidth(),e=this.piskelController.getCurrentFrame().getHeight(),f=d/this.getHorizontalRatio_(),g=e/this.getVerticalRatio_();return{x:c.x-f/2,y:c.y-g/2}},a.MinimapController.prototype.getVerticalRatio_=function(){var a=this.drawingController.getRenderer().getZoom(),b=this.piskelController.getCurrentFrame(),c=b.getHeight()*a,d=this.drawingController.getRenderer().getDisplaySize().height;return c/d},a.MinimapController.prototype.getHorizontalRatio_=function(){var a=this.drawingController.getRenderer().getZoom(),b=this.piskelController.getCurrentFrame(),c=b.getWidth()*a,d=this.drawingController.getRenderer().getDisplaySize().width;return c/d}}(),function(){var a=$.namespace("pskl.controller");a.ToolController=function(){this.tools=[new pskl.tools.drawing.SimplePen,new pskl.tools.drawing.VerticalMirrorPen,new pskl.tools.drawing.PaintBucket,new pskl.tools.drawing.ColorSwap,new pskl.tools.drawing.Eraser,new pskl.tools.drawing.Stroke,new pskl.tools.drawing.Rectangle,new pskl.tools.drawing.Circle,new pskl.tools.drawing.Move,new pskl.tools.drawing.selection.ShapeSelect,new pskl.tools.drawing.selection.RectangleSelect,new pskl.tools.drawing.selection.LassoSelect,new pskl.tools.drawing.Lighten,new pskl.tools.drawing.DitheringTool,new pskl.tools.drawing.ColorPicker],this.toolIconBuilder=new pskl.tools.ToolIconBuilder},a.ToolController.prototype.init=function(){this.createToolsDom_(),this.addKeyboardShortcuts_(),this.selectTool_(this.tools[0]),$("#tool-section").mousedown($.proxy(this.onToolIconClicked_,this)),$.subscribe(Events.SELECT_TOOL,this.onSelectToolEvent_.bind(this)),$.subscribe(Events.SHORTCUTS_CHANGED,this.createToolsDom_.bind(this))},a.ToolController.prototype.activateToolOnStage_=function(a){var b=$("body"),c=b.data("selected-tool-class");c&&(b.removeClass(c),b.removeClass(pskl.tools.drawing.Move.TOOL_ID)),b.addClass(a.toolId),b.data("selected-tool-class",a.toolId)},a.ToolController.prototype.onSelectToolEvent_=function(a,b){var c=this.getToolById_(b);c&&this.selectTool_(c)},a.ToolController.prototype.selectTool_=function(a){this.currentSelectedTool=a,this.activateToolOnStage_(this.currentSelectedTool);var b=$("#tool-section .tool-icon.selected"),c=$("[data-tool-id="+a.toolId+"]");b.removeClass("selected"),c.addClass("selected"),$.publish(Events.TOOL_SELECTED,[a])},a.ToolController.prototype.onToolIconClicked_=function(a){var b=$(a.target),c=b.closest(".tool-icon");if(c.length){var d=c.data().toolId,e=this.getToolById_(d);e&&this.selectTool_(e)}},a.ToolController.prototype.onKeyboardShortcut_=function(a,b){var c=this.getToolById_(a);null!==c&&this.selectTool_(c)},a.ToolController.prototype.getToolById_=function(a){return pskl.utils.Array.find(this.tools,function(b){return b.toolId==a})},a.ToolController.prototype.createToolsDom_=function(){for(var a="",b=0;b"+a,c.attr("data-original-title",a)}}(),function(){var a=$.namespace("pskl.controller"),b="palettes-list-primary-color",c="palettes-list-secondary-color";a.PalettesListController=function(a){this.usedColorService=a,this.paletteService=pskl.app.paletteService},a.PalettesListController.prototype.init=function(){this.paletteColorTemplate_=pskl.utils.Template.get("palette-color-template"),this.colorListContainer_=document.querySelector(".palettes-list-colors"),this.colorPaletteSelect_=document.querySelector(".palettes-list-select");var a=document.querySelector(".create-palette-button"),b=document.querySelector(".edit-palette-button");this.colorPaletteSelect_.addEventListener("change",this.onPaletteSelected_.bind(this)),this.colorListContainer_.addEventListener("mouseup",this.onColorContainerMouseup.bind(this)),this.colorListContainer_.addEventListener("contextmenu",this.onColorContainerContextMenu.bind(this)),a.addEventListener("click",this.onCreatePaletteClick_.bind(this)),b.addEventListener("click",this.onEditPaletteClick_.bind(this)),$.subscribe(Events.PALETTE_LIST_UPDATED,this.onPaletteListUpdated.bind(this)),$.subscribe(Events.CURRENT_COLORS_UPDATED,this.fillColorListContainer.bind(this)),$.subscribe(Events.PRIMARY_COLOR_SELECTED,this.highlightSelectedColors.bind(this)),$.subscribe(Events.SECONDARY_COLOR_SELECTED,this.highlightSelectedColors.bind(this)),$.subscribe(Events.USER_SETTINGS_CHANGED,$.proxy(this.onUserSettingsChange_,this));var c=pskl.service.keyboard.Shortcuts;pskl.app.shortcutService.registerShortcut(c.COLOR.PREVIOUS_COLOR,this.selectPreviousColor_.bind(this)),pskl.app.shortcutService.registerShortcut(c.COLOR.NEXT_COLOR,this.selectNextColor_.bind(this)),pskl.app.shortcutService.registerShortcut(c.COLOR.SELECT_COLOR,this.selectColorForKey_.bind(this)),this.fillPaletteList(),this.updateFromUserSettings(),this.fillColorListContainer()},a.PalettesListController.prototype.fillPaletteList=function(){var a=this.paletteService.getPalettes(),b=a.map(function(a){return pskl.utils.Template.replace('',a)}).join("");this.colorPaletteSelect_.innerHTML=b},a.PalettesListController.prototype.fillColorListContainer=function(){var a=this.getSelectedPaletteColors_();if(a.length>0){var b=a.map(function(a,b){return pskl.utils.Template.replace(this.paletteColorTemplate_,{color:a,index:b})}.bind(this)).join("");this.colorListContainer_.innerHTML=b,this.highlightSelectedColors()}else this.colorListContainer_.innerHTML=pskl.utils.Template.get("palettes-list-no-colors-partial")},a.PalettesListController.prototype.selectPalette=function(a){pskl.UserSettings.set(pskl.UserSettings.SELECTED_PALETTE,a)},a.PalettesListController.prototype.getSelectedPaletteColors_=function(){ +c.setOffset(a,b)})},a.CompositeRenderer.prototype.getOffset=function(){return this.getSampleRenderer_().getOffset()},a.CompositeRenderer.prototype.setGridWidth=function(a){this.renderers.forEach(function(b){b.setGridWidth(a)})},a.CompositeRenderer.prototype.getGridWidth=function(){return this.getSampleRenderer_().getGridWidth()},a.CompositeRenderer.prototype.getSampleRenderer_=function(){if(this.renderers.length>0)return this.renderers[0];throw"Renderer manager is empty"}}(),function(){var a=$.namespace("pskl.rendering.layer");a.LayersRenderer=function(a,b,c){pskl.rendering.CompositeRenderer.call(this),this.piskelController=c,this.belowRenderer=new pskl.rendering.frame.FrameRenderer(a,b,["layers-canvas","layers-below-canvas"]),this.aboveRenderer=new pskl.rendering.frame.FrameRenderer(a,b,["layers-canvas","layers-above-canvas"]),this.add(this.belowRenderer),this.add(this.aboveRenderer),this.serializedRendering="",this.stylesheet_=document.createElement("style"),document.head.appendChild(this.stylesheet_),this.updateLayersCanvasOpacity_(pskl.UserSettings.get(pskl.UserSettings.LAYER_OPACITY)),$.subscribe(Events.PISKEL_RESET,this.flush.bind(this)),$.subscribe(Events.USER_SETTINGS_CHANGED,$.proxy(this.onUserSettingsChange_,this))},pskl.utils.inherit(pskl.rendering.layer.LayersRenderer,pskl.rendering.CompositeRenderer),a.LayersRenderer.prototype.render=function(){var a=this.getOffset(),b=this.getDisplaySize(),c=this.piskelController.getLayers(),d=this.piskelController.getCurrentFrameIndex(),e=this.piskelController.getCurrentLayerIndex(),f=c.slice(0,e),g=c.slice(e+1,c.length),h=[this.getZoom(),this.getGridWidth(),a.x,a.y,b.width,b.height,pskl.utils.LayerUtils.getFrameHashAt(f,d),pskl.utils.LayerUtils.getFrameHashAt(g,d),c.length].join("-");if(this.serializedRendering!=h){if(this.serializedRendering=h,this.clear(),f.length>0){var i=pskl.utils.LayerUtils.mergeFrameAt(f,d);this.belowRenderer.render(i)}if(g.length>0){var j=pskl.utils.LayerUtils.mergeFrameAt(g,d);this.aboveRenderer.render(j)}}},a.LayersRenderer.prototype.setDisplaySize=function(a,b){var c=this.getDisplaySize();c.width===a&&c.height===b||this.superclass.setDisplaySize.call(this,a,b)},a.LayersRenderer.prototype.onUserSettingsChange_=function(a,b,c){b==pskl.UserSettings.LAYER_OPACITY&&this.updateLayersCanvasOpacity_(c)},a.LayersRenderer.prototype.updateLayersCanvasOpacity_=function(a){this.stylesheet_.innerHTML=".layers-canvas { opacity : "+a+"}"},a.LayersRenderer.prototype.flush=function(){this.serializedRendering=""}}(),function(){var a=$.namespace("pskl.rendering.frame");a.FrameRenderer=function(a,b,c){if(this.defaultRenderingOptions={supportGridRendering:!1,zoom:1},b=$.extend(!0,{},this.defaultRenderingOptions,b),void 0===a)throw"Bad FrameRenderer initialization. undefined.";if(isNaN(b.zoom))throw"Bad FrameRenderer initialization. not well defined.";this.container=a,this.zoom=b.zoom,this.offset={x:0,y:0},this.margin={x:0,y:0},this.supportGridRendering=b.supportGridRendering,this.classList=c||[],this.classList.push("canvas"),this.canvas=null,this.displayCanvas=null,this.setDisplaySize(b.width,b.height),this.setGridWidth(pskl.UserSettings.get(pskl.UserSettings.GRID_WIDTH)),$.subscribe(Events.USER_SETTINGS_CHANGED,this.onUserSettingsChange_.bind(this))},pskl.utils.inherit(pskl.rendering.frame.FrameRenderer,pskl.rendering.AbstractRenderer),a.FrameRenderer.prototype.render=function(a){a&&(this.clear(),this.renderFrame_(a))},a.FrameRenderer.prototype.clear=function(){pskl.utils.CanvasUtils.clear(this.canvas),pskl.utils.CanvasUtils.clear(this.displayCanvas)},a.FrameRenderer.prototype.setZoom=function(a){if(a0;if(g||e){var h=pskl.utils.ImageResizer.resizeNearestNeighbour(this.canvas,this.zoom,f);b.drawImage(h,0,0)}else b.scale(this.zoom,this.zoom),b.drawImage(this.canvas,0,0);b.restore()}}(),function(){var a=$.namespace("pskl.rendering");a.OnionSkinRenderer=function(a,b){pskl.rendering.CompositeRenderer.call(this),this.piskelController=b,this.renderer=a,this.add(this.renderer),this.hash=""},a.OnionSkinRenderer.createInContainer=function(b,c,d){var e=new pskl.rendering.frame.FrameRenderer(b,c,["onion-skin-canvas"]);return new a.OnionSkinRenderer(e,d)},pskl.utils.inherit(pskl.rendering.OnionSkinRenderer,pskl.rendering.CompositeRenderer),a.OnionSkinRenderer.prototype.render=function(){var a=this.getOnionFrames_(),b=this.computeHash_(a);if(this.hash!=b&&(this.hash=b,this.clear(),a.length>0)){var c=pskl.utils.FrameUtils.merge(a);this.renderer.render(c)}},a.OnionSkinRenderer.prototype.getOnionFrames_=function(){var a=[],b=this.piskelController.getCurrentFrameIndex(),c=this.piskelController.getCurrentLayer(),d=b-1,e=c.getFrameAt(d);e&&a.push(e);var f=b+1,g=c.getFrameAt(f);return g&&a.push(g),a},a.OnionSkinRenderer.prototype.computeHash_=function(a){var b=this.getOffset(),c=this.getDisplaySize(),d=this.piskelController.getLayers();return[this.getZoom(),this.getGridWidth(),b.x,b.y,c.width,c.height,a.map(function(a){return a.getHash()}).join("-"),d.length].join("-")},a.OnionSkinRenderer.prototype.setDisplaySize=function(a,b){var c=this.getDisplaySize();c.width===a&&c.height===b||this.superclass.setDisplaySize.call(this,a,b)},a.OnionSkinRenderer.prototype.flush=function(){this.hash=""}}(),function(){var a=$.namespace("pskl.rendering.frame");a.BackgroundImageFrameRenderer=function(a,b){this.container=a,this.setZoom(b);var c=a.get(0),d=c.ownerDocument;this.frameContainer=d.createElement("div"),this.frameContainer.classList.add("background-image-frame-container"),a.get(0).appendChild(this.frameContainer),this.cachedFrameProcessor=new pskl.model.frame.CachedFrameProcessor,this.cachedFrameProcessor.setFrameProcessor(this.frameToDataUrl_.bind(this))},a.BackgroundImageFrameRenderer.prototype.frameToDataUrl_=function(a){var b;return b=a instanceof pskl.model.frame.RenderedFrame?pskl.utils.ImageResizer.scale(a.getRenderedFrame(),this.zoom):pskl.utils.FrameUtils.toImage(a,this.zoom),b.toDataURL("image/png")},a.BackgroundImageFrameRenderer.prototype.render=function(a){var b=this.cachedFrameProcessor.get(a,this.zoom);this.frameContainer.style.backgroundImage="url("+b+")"},a.BackgroundImageFrameRenderer.prototype.show=function(){this.frameContainer&&(this.frameContainer.style.display="block")},a.BackgroundImageFrameRenderer.prototype.setZoom=function(a){this.zoom=a},a.BackgroundImageFrameRenderer.prototype.getZoom=function(){return this.zoom},a.BackgroundImageFrameRenderer.prototype.setRepeated=function(a){var b;b=a?"repeat":"no-repeat",this.frameContainer.style.backgroundRepeat=b}}(),function(){var a=$.namespace("pskl.rendering.frame");a.CachedFrameRenderer=function(a,b,c){pskl.rendering.frame.FrameRenderer.call(this,a,b,c),this.serializedFrame=""},pskl.utils.inherit(pskl.rendering.frame.CachedFrameRenderer,pskl.rendering.frame.FrameRenderer),a.CachedFrameRenderer.prototype.setDisplaySize=function(a,b){this.displayWidth===a&&this.displayHeight===b||this.superclass.setDisplaySize.call(this,a,b)},a.CachedFrameRenderer.prototype.render=function(a){var b=this.getOffset(),c=this.getDisplaySize(),d=[this.getZoom(),this.getGridWidth(),b.x,b.y,c.width,c.height,a.getHash()].join("-");this.serializedFrame!=d&&(this.serializedFrame=d,this.superclass.render.call(this,a))}}(),function(){var a=$.namespace("pskl.rendering");a.CanvasRenderer=function(a,b){this.frame=a,this.zoom=b,this.opacity_=1,this.transparentColor_="white"},a.CanvasRenderer.prototype.drawTransparentAs=function(a){this.transparentColor_=a},a.CanvasRenderer.prototype.setOpacity=function(a){this.opacity_=a},a.CanvasRenderer.prototype.render=function(){var a=this.createCanvas_();pskl.utils.FrameUtils.drawToCanvas(this.frame,a,this.transparentColor_,this.opacity_);var b=this.createCanvas_(this.zoom),c=b.getContext("2d");return pskl.utils.CanvasUtils.disableImageSmoothing(b),c.scale(this.zoom,this.zoom),c.drawImage(a,0,0),b},a.CanvasRenderer.prototype.createCanvas_=function(a){a=a||1;var b=this.frame.getWidth()*a,c=this.frame.getHeight()*a;return pskl.utils.CanvasUtils.createCanvas(b,c)}}(),function(){var a=$.namespace("pskl.rendering");a.FramesheetRenderer=function(a){if(!(a.length>0))throw"FramesheetRenderer : Invalid argument : frames is empty";this.frames=a},a.FramesheetRenderer.prototype.renderAsCanvas=function(a){a=a||this.frames.length;for(var b=Math.ceil(this.frames.length/a),c=this.createCanvas_(a,b),d=0;d=a&&this.currentFrameIndex>0&&this.setCurrentFrameIndex(this.currentFrameIndex-1)},a.PiskelController.prototype.duplicateCurrentFrame=function(){this.duplicateFrameAt(this.currentFrameIndex)},a.PiskelController.prototype.duplicateFrameAt=function(a){this.getLayers().forEach(function(b){b.duplicateFrameAt(a)}),this.setCurrentFrameIndex(a+1)},a.PiskelController.prototype.moveFrame=function(a,b){this.getLayers().forEach(function(c){c.moveFrame(a,b)})},a.PiskelController.prototype.getFrameCount=function(){var a=this.piskel.getLayerAt(0);return a.size()},a.PiskelController.prototype.setCurrentFrameIndex=function(a){this.hasFrameAt(a)?this.currentFrameIndex=a:window.console.error("Could not set current frame index to "+a)},a.PiskelController.prototype.selectNextFrame=function(){var a=this.currentFrameIndex+1;a=0&&this.setCurrentFrameIndex(a)},a.PiskelController.prototype.setCurrentLayerIndex=function(a){this.hasLayerAt(a)?this.currentLayerIndex=a:window.console.error("Could not set current layer index to "+a)},a.PiskelController.prototype.selectLayer=function(a){var b=this.getLayers().indexOf(a);-1!=b&&this.setCurrentLayerIndex(b)},a.PiskelController.prototype.renameLayerAt=function(a,b){var c=this.getLayerByIndex(a);c&&c.setName(b)},a.PiskelController.prototype.setLayerOpacityAt=function(a,b){var c=this.getLayerByIndex(a);c&&c.setOpacity(b)},a.PiskelController.prototype.mergeDownLayerAt=function(a){var b=this.getLayerByIndex(a),c=this.getLayerByIndex(a-1);if(b&&c){var d=pskl.utils.LayerUtils.mergeLayers(b,c);this.removeLayerAt(a),this.piskel.addLayerAt(d,a),this.removeLayerAt(a-1),this.selectLayer(d)}},a.PiskelController.prototype.generateLayerName_=function(){for(var a="Layer "+this.layerIdCounter;this.hasLayerForName_(a);)this.layerIdCounter++,a="Layer "+this.layerIdCounter;return a},a.PiskelController.prototype.createLayer=function(a){if(a||(a=this.generateLayerName_()),this.hasLayerForName_(a))throw"Layer name should be unique";for(var b=new pskl.model.Layer(a),c=0;c0},a.PiskelController.prototype.moveLayerUp=function(){var a=this.getCurrentLayer();this.piskel.moveLayerUp(a),this.selectLayer(a)},a.PiskelController.prototype.moveLayerDown=function(){var a=this.getCurrentLayer();this.piskel.moveLayerDown(a),this.selectLayer(a)},a.PiskelController.prototype.removeCurrentLayer=function(){var a=this.getCurrentLayerIndex();this.removeLayerAt(a)},a.PiskelController.prototype.removeLayerAt=function(a){if(this.getLayers().length>1){var b=this.getLayerAt(a);b&&(this.piskel.removeLayer(b),this.setCurrentLayerIndex(0))}},a.PiskelController.prototype.serialize=function(a){return pskl.utils.Serializer.serializePiskel(this.piskel,a)}}(),function(){var a=$.namespace("pskl.controller.piskel");a.PublicPiskelController=function(a){this.piskelController=a,pskl.utils.wrap(this,this.piskelController)},a.PublicPiskelController.prototype.init=function(){this.resetWrap_("setCurrentFrameIndex"),this.resetWrap_("selectNextFrame"),this.resetWrap_("selectPreviousFrame"),this.resetWrap_("setCurrentLayerIndex"),this.resetWrap_("selectLayer"),this.saveWrap_("renameLayerAt",!1),this.saveWrap_("removeCurrentLayer",!0),this.saveWrap_("addFrame",!0),this.saveWrap_("addFrameAtCurrentIndex",!0),this.saveWrap_("addFrameAt",!0),this.saveWrap_("removeFrameAt",!0),this.saveWrap_("duplicateCurrentFrame",!0),this.saveWrap_("duplicateFrameAt",!0),this.saveWrap_("moveFrame",!0),this.saveWrap_("createLayer",!0),this.saveWrap_("mergeDownLayerAt",!0),this.saveWrap_("moveLayerUp",!0),this.saveWrap_("moveLayerDown",!0),this.saveWrap_("removeCurrentLayer",!0),this.saveWrap_("setLayerOpacityAt",!0);var a=pskl.service.keyboard.Shortcuts;pskl.app.shortcutService.registerShortcut(a.MISC.PREVIOUS_FRAME,this.selectPreviousFrame.bind(this)),pskl.app.shortcutService.registerShortcut(a.MISC.NEXT_FRAME,this.selectNextFrame.bind(this)),pskl.app.shortcutService.registerShortcut(a.MISC.NEW_FRAME,this.addFrameAtCurrentIndex.bind(this)),pskl.app.shortcutService.registerShortcut(a.MISC.DUPLICATE_FRAME,this.duplicateCurrentFrame.bind(this))},a.PublicPiskelController.prototype.setPiskel=function(a,b){this.piskelController.setPiskel(a,b),$.publish(Events.FRAME_SIZE_CHANGED),$.publish(Events.PISKEL_RESET),$.publish(Events.PISKEL_SAVE_STATE,{type:pskl.service.HistoryService.SNAPSHOT})},a.PublicPiskelController.prototype.resetWrap_=function(a){this[a]=function(){this.piskelController[a].apply(this.piskelController,arguments),$.publish(Events.PISKEL_RESET)}},a.PublicPiskelController.prototype.saveWrap_=function(a,b){this[a]=b?function(){var b=this.getStateInfo_();this.piskelController[a].apply(this.piskelController,arguments),this.raiseSaveStateEvent_(this.piskelController[a],arguments,b),$.publish(Events.PISKEL_RESET)}:function(){var b=this.getStateInfo_();this.piskelController[a].apply(this.piskelController,arguments),this.raiseSaveStateEvent_(this.piskelController[a],arguments,b)}},a.PublicPiskelController.prototype.getStateInfo_=function(){var a={frameIndex:this.piskelController.currentFrameIndex,layerIndex:this.piskelController.currentLayerIndex};return a},a.PublicPiskelController.prototype.raiseSaveStateEvent_=function(a,b,c){$.publish(Events.PISKEL_SAVE_STATE,{type:pskl.service.HistoryService.REPLAY,scope:this,replay:{fn:a,args:b},state:c})},a.PublicPiskelController.prototype.replay=function(a,b){b.fn.apply(this.piskelController,b.args)}}(),function(){var a=$.namespace("pskl.controller");a.CursorCoordinatesController=function(a){this.piskelController=a,this.origin=null,this.coordinates={x:-1,y:-1}},a.CursorCoordinatesController.prototype.init=function(){this.coordinatesContainer=document.querySelector(".cursor-coordinates"),$.subscribe(Events.CURSOR_MOVED,this.onCursorMoved_.bind(this)),$.subscribe(Events.DRAG_START,this.onDragStart_.bind(this)),$.subscribe(Events.DRAG_END,this.onDragEnd_.bind(this)),$.subscribe(Events.FRAME_SIZE_CHANGED,this.redraw.bind(this)),this.redraw()},a.CursorCoordinatesController.prototype.redraw=function(){var a="";this.origin&&(a+=this.origin.x+":"+this.origin.y+" to ");var b=this.coordinates.x,c=this.coordinates.y,d=this.piskelController.getCurrentFrame();if(d.containsPixel(b,c)&&(a+=b+":"+c,this.origin)){var e=Math.abs(b-this.origin.x)+1,f=Math.abs(c-this.origin.y)+1;a+=" ("+e+"x"+f+")"}this.coordinatesContainer.innerHTML=this.getFrameSizeHTML_()+a},a.CursorCoordinatesController.prototype.getFrameSizeHTML_=function(){var a=this.piskelController.getWidth(),b=this.piskelController.getHeight();return"["+a+"x"+b+"] "},a.CursorCoordinatesController.prototype.onCursorMoved_=function(a,b,c){this.coordinates={x:b,y:c},this.redraw()},a.CursorCoordinatesController.prototype.onDragStart_=function(a,b,c){this.origin={x:b,y:c},this.redraw()},a.CursorCoordinatesController.prototype.onDragEnd_=function(a){this.origin=null,this.redraw()}}(),function(){var a=$.namespace("pskl.controller");a.DrawingController=function(b,c,d){this.piskelController=b,this.paletteController=c,this.dragHandler=new a.drawing.DragHandler(this),this.overlayFrame=pskl.model.Frame.createEmptyFromFrame(b.getCurrentFrame()),this.container=d;var e={zoom:this.calculateZoom_(),supportGridRendering:!0,height:this.getContainerHeight_(),width:this.getContainerWidth_(),xOffset:0,yOffset:0};this.overlayRenderer=new pskl.rendering.frame.CachedFrameRenderer(this.container,e,["canvas-overlay"]),this.renderer=new pskl.rendering.frame.CachedFrameRenderer(this.container,e,["drawing-canvas"]),this.onionSkinRenderer=pskl.rendering.OnionSkinRenderer.createInContainer(this.container,e,b),this.layersRenderer=new pskl.rendering.layer.LayersRenderer(this.container,e,b),this.compositeRenderer=new pskl.rendering.CompositeRenderer,this.compositeRenderer.add(this.overlayRenderer).add(this.renderer).add(this.layersRenderer).add(this.onionSkinRenderer),this.isClicked=!1,this.previousMousemoveTime=0,this.currentToolBehavior=null},a.DrawingController.prototype.init=function(){this.initMouseBehavior(),$.subscribe(Events.TOOL_SELECTED,$.proxy(function(a,b){this.currentToolBehavior=b,this.overlayFrame.clear()},this)),$(window).resize($.proxy(this.startResizeTimer_,this)),$.subscribe(Events.USER_SETTINGS_CHANGED,this.onUserSettingsChange_.bind(this)),$.subscribe(Events.FRAME_SIZE_CHANGED,this.onFrameSizeChange_.bind(this));var a=pskl.service.keyboard.Shortcuts;pskl.app.shortcutService.registerShortcut(a.MISC.RESET_ZOOM,this.resetZoom_.bind(this)),pskl.app.shortcutService.registerShortcut(a.MISC.INCREASE_ZOOM,this.increaseZoom_.bind(this,1)),pskl.app.shortcutService.registerShortcut(a.MISC.DECREASE_ZOOM,this.decreaseZoom_.bind(this,1)),window.setTimeout(function(){this.afterWindowResize_(),this.resetZoom_()}.bind(this),100)},a.DrawingController.prototype.initMouseBehavior=function(){var a=$("body");this.container.mousedown($.proxy(this.onMousedown_,this)),pskl.utils.UserAgent.isChrome||pskl.utils.UserAgent.isIE11?this.container.on("mousewheel",$.proxy(this.onMousewheel_,this)):this.container.on("wheel",$.proxy(this.onMousewheel_,this)),window.addEventListener("mouseup",this.onMouseup_.bind(this)),window.addEventListener("mousemove",this.onMousemove_.bind(this)),window.addEventListener("keyup",this.onKeyup_.bind(this)),window.addEventListener("touchstart",this.onTouchstart_.bind(this)),window.addEventListener("touchmove",this.onTouchmove_.bind(this)),window.addEventListener("touchend",this.onTouchend_.bind(this)),a.contextmenu(this.onCanvasContextMenu_)},a.DrawingController.prototype.startResizeTimer_=function(){this.resizeTimer&&window.clearInterval(this.resizeTimer),this.resizeTimer=window.setTimeout($.proxy(this.afterWindowResize_,this),200)},a.DrawingController.prototype.afterWindowResize_=function(){var a=this.compositeRenderer.getDisplaySize().width;this.compositeRenderer.setDisplaySize(this.getContainerWidth_(),this.getContainerHeight_()),this.centerColumnWrapperHorizontally_();var b=this.compositeRenderer.getDisplaySize().width/a,c=b*this.compositeRenderer.getZoom();this.compositeRenderer.setZoom(c),$.publish(Events.ZOOM_CHANGED)},a.DrawingController.prototype.onUserSettingsChange_=function(a,b,c){b==pskl.UserSettings.SHOW_GRID?console.warn("DrawingController:onUserSettingsChange_ not implemented !"):b!=pskl.UserSettings.ONION_SKIN&&b!=pskl.UserSettings.LAYER_PREVIEW||(this.onionSkinRenderer.clear(),this.onionSkinRenderer.flush(),this.layersRenderer.clear(),this.layersRenderer.flush(),this.render())},a.DrawingController.prototype.onFrameSizeChange_=function(){this.compositeRenderer.setDisplaySize(this.getContainerWidth_(),this.getContainerHeight_()),this.centerColumnWrapperHorizontally_(),this.compositeRenderer.setZoom(this.calculateZoom_()),this.compositeRenderer.setOffset(0,0),$.publish(Events.ZOOM_CHANGED)},a.DrawingController.prototype.onTouchstart_=function(a){this.onMousedown_(a)},a.DrawingController.prototype.onTouchmove_=function(a){this.onMousemove_(a),a.preventDefault()},a.DrawingController.prototype.onTouchend_=function(a){this.onMouseup_(a)},a.DrawingController.prototype.onMousedown_=function(a){$.publish(Events.MOUSE_EVENT,[a,this]);var b=this.piskelController.getCurrentFrame(),c=this.getSpriteCoordinates(a.clientX,a.clientY);a.changedTouches&&a.changedTouches[0]&&(c=this.getSpriteCoordinates(a.changedTouches[0].clientX,a.changedTouches[0].clientY)),this.isClicked=!0,a.button===Constants.MIDDLE_BUTTON?this.dragHandler.startDrag(a.clientX,a.clientY):(this.currentToolBehavior.hideHighlightedPixel(this.overlayFrame),$.publish(Events.TOOL_PRESSED),this.currentToolBehavior.applyToolAt(c.x,c.y,b,this.overlayFrame,a))},a.DrawingController.prototype.onMousemove_=function(a){this._clientX=a.clientX,this._clientY=a.clientY,a.changedTouches&&a.changedTouches[0]&&(this._clientX=a.changedTouches[0].clientX,this._clientY=a.changedTouches[0].clientY);var b=(new Date).getTime();b-this.previousMousemoveTime>Constants.MOUSEMOVE_THROTTLING&&(this.moveTool_(this._clientX,this._clientY,a),this.previousMousemoveTime=b)},a.DrawingController.prototype.onKeyup_=function(a){this.moveTool_(this._clientX,this._clientY,a)},a.DrawingController.prototype.moveTool_=function(a,b,c){var d=this.getSpriteCoordinates(a,b),e=this.piskelController.getCurrentFrame();this.isClicked?pskl.app.mouseStateService.isMiddleButtonPressed()?this.dragHandler.updateDrag(a,b):($.publish(Events.MOUSE_EVENT,[c,this]),this.currentToolBehavior.moveToolAt(0|d.x,0|d.y,e,this.overlayFrame,c)):this.currentToolBehavior.moveUnactiveToolAt(d.x,d.y,e,this.overlayFrame,c),$.publish(Events.CURSOR_MOVED,[d.x,d.y])},a.DrawingController.prototype.onMousewheel_=function(a){var b,c=a.originalEvent;pskl.utils.UserAgent.isChrome?b=c.wheelDeltaY:pskl.utils.UserAgent.isIE11?b=c.wheelDelta:pskl.utils.UserAgent.isFirefox&&(b=-40*c.deltaY);var d=Math.abs(b/120);(pskl.utils.UserAgent.isMac?c.metaKey:c.ctrlKey)&&(d=5*d,c.preventDefault()),b>0?this.increaseZoom_(d):0>b&&this.decreaseZoom_(d)},a.DrawingController.prototype.increaseZoom_=function(a){var b=(a||1)*this.getZoomStep_();this.setZoom_(this.renderer.getZoom()+b)},a.DrawingController.prototype.decreaseZoom_=function(a){var b=(a||1)*this.getZoomStep_();this.setZoom_(this.renderer.getZoom()-b)},a.DrawingController.prototype.onMouseup_=function(a){var b=this.piskelController.getCurrentFrame(),c=this.getSpriteCoordinates(a.clientX,a.clientY);a.changedTouches&&a.changedTouches[0]&&(c=this.getSpriteCoordinates(a.changedTouches[0].clientX,a.changedTouches[0].clientY)),this.isClicked&&(this.isClicked=!1,pskl.app.mouseStateService.isMiddleButtonPressed()?this.dragHandler.isDragging()?this.dragHandler.stopDrag():b.containsPixel(c.x,c.y)&&$.publish(Events.SELECT_PRIMARY_COLOR,[b.getPixel(c.x,c.y)]):(this.currentToolBehavior.releaseToolAt(c.x,c.y,this.piskelController.getCurrentFrame(),this.overlayFrame,a),$.publish(Events.TOOL_RELEASED)),$.publish(Events.MOUSE_EVENT,[a,this]))},a.DrawingController.prototype.getSpriteCoordinates=function(a,b){return this.renderer.getCoordinates(a,b)},a.DrawingController.prototype.getScreenCoordinates=function(a,b){return this.renderer.reverseCoordinates(a,b)},a.DrawingController.prototype.onCanvasContextMenu_=function(a){return $(a.target).closest("#drawing-canvas-container").length?(a.preventDefault(),a.stopPropagation(),a.cancelBubble=!0,!1):void 0},a.DrawingController.prototype.render=function(){var a=this.piskelController.getCurrentFrame();a.isSameSize(this.overlayFrame)||(this.overlayFrame=pskl.model.Frame.createEmptyFromFrame(a)),pskl.UserSettings.get(pskl.UserSettings.ONION_SKIN)&&this.onionSkinRenderer.render(),pskl.UserSettings.get(pskl.UserSettings.LAYER_PREVIEW)&&this.layersRenderer.render(),this.renderer.render(a),this.overlayRenderer.render(this.overlayFrame)},a.DrawingController.prototype.calculateZoom_=function(){var a=this.piskelController.getCurrentFrame().getHeight(),b=this.piskelController.getCurrentFrame().getWidth();return Math.min(this.getAvailableWidth_()/b,this.getAvailableHeight_()/a)},a.DrawingController.prototype.getAvailableHeight_=function(){return $("#main-wrapper").height()},a.DrawingController.prototype.getAvailableWidth_=function(){var a=$(".left-column").outerWidth(!0),b=$(".right-column").outerWidth(!0),c=$("#tool-section").outerWidth(!0),d=$("#application-action-section").outerWidth(!0),e=a+b+c+d,f=$("#main-wrapper").width()-e,g=10;return f-g},a.DrawingController.prototype.getContainerHeight_=function(){return this.getAvailableHeight_()},a.DrawingController.prototype.getContainerWidth_=function(){return this.getAvailableWidth_()},a.DrawingController.prototype.centerColumnWrapperHorizontally_=function(){var a=this.getContainerHeight_(),b=Math.floor(($("#main-wrapper").height()-a)/2);$("#column-wrapper").css({top:b+"px"})},a.DrawingController.prototype.getRenderer=function(){return this.compositeRenderer},a.DrawingController.prototype.getOffset=function(){return this.compositeRenderer.getOffset()},a.DrawingController.prototype.setOffset=function(a,b){this.compositeRenderer.setOffset(a,b),$.publish(Events.ZOOM_CHANGED)},a.DrawingController.prototype.resetZoom_=function(){this.setZoom_(this.calculateZoom_())},a.DrawingController.prototype.getZoomStep_=function(){return Math.max(.1,this.renderer.getZoom()/15)},a.DrawingController.prototype.setZoom_=function(a){ +this.compositeRenderer.setZoom(a),$.publish(Events.ZOOM_CHANGED)}}(),function(){var a=$.namespace("pskl.controller.drawing"),b=2;a.DragHandler=function(a){this.drawingController=a,this.isDragging_=!1,this.updateOrigin_(-1,-1)},a.DragHandler.prototype.startDrag=function(a,b){var c=this.drawingController.getSpriteCoordinates(a,b);this.updateOrigin_(c.x,c.y)},a.DragHandler.prototype.updateDrag=function(a,b){var c=this.drawingController.getOffset(),d=this.calculateOffset_(a,b);if(c.y!==d.y||c.x!==d.x){this.isDragging_=!0,this.drawingController.setOffset(d.x,d.y);var e=this.drawingController.getSpriteCoordinates(a,b);this.updateOrigin_(e.x,e.y)}},a.DragHandler.prototype.stopDrag=function(){this.isDragging_=!1,this.origin=null},a.DragHandler.prototype.isDragging=function(){return this.isDragging_},a.DragHandler.prototype.calculateOffset_=function(a,c){var d=this.drawingController.getSpriteCoordinates(a,c),e=this.drawingController.getOffset(),f={x:e.x-b*(d.x-this.origin.x),y:e.y-b*(d.y-this.origin.y)};return f},a.DragHandler.prototype.updateOrigin_=function(a,b){this.origin=this.origin||{},this.origin.x=a,this.origin.y=b}}(),function(){var a=$.namespace("pskl.controller"),b={SELECT:"select",CLONE:"clone",DELETE:"delete",NEW_FRAME:"newframe"};a.FramesListController=function(a,b){this.piskelController=a,this.container=b,this.refreshZoom_(),this.redrawFlag=!0,this.cachedFrameProcessor=new pskl.model.frame.CachedFrameProcessor,this.cachedFrameProcessor.setFrameProcessor(this.frameToPreviewCanvas_.bind(this)),this.cachedFrameProcessor.setOutputCloner(this.clonePreviewCanvas_.bind(this))},a.FramesListController.prototype.init=function(){$.subscribe(Events.TOOL_RELEASED,this.flagForRedraw_.bind(this)),$.subscribe(Events.PISKEL_RESET,this.flagForRedraw_.bind(this)),$.subscribe(Events.USER_SETTINGS_CHANGED,this.flagForRedraw_.bind(this)),$.subscribe(Events.PISKEL_RESET,this.refreshZoom_.bind(this)),$("#preview-list-scroller").scroll(this.updateScrollerOverflows.bind(this)),this.container.get(0).addEventListener("click",this.onContainerClick_.bind(this)),this.updateScrollerOverflows()},a.FramesListController.prototype.flagForRedraw_=function(){this.redrawFlag=!0},a.FramesListController.prototype.refreshZoom_=function(){this.zoom=this.calculateZoom_()},a.FramesListController.prototype.render=function(){this.redrawFlag&&(this.createPreviews_(),this.redrawFlag=!1)},a.FramesListController.prototype.updateScrollerOverflows=function(){var a=$("#preview-list-scroller"),b=a.height(),c=a.scrollTop(),d=$("#preview-list").height(),e=$(".top-overflow").height(),f=!1,g=!1;if(d>b){c>e&&(f=!0);var h=d-c-b;h>e&&(g=!0)}var i=$("#preview-list-wrapper");i.toggleClass("top-overflow-visible",f),i.toggleClass("bottom-overflow-visible",g)},a.FramesListController.prototype.onContainerClick_=function(a){var c=pskl.utils.Dom.getParentWithData(a.target,"tileAction");if(c){var d=c.dataset.tileAction,e=parseInt(c.dataset.tileNumber,10);d===b.CLONE?(this.piskelController.duplicateFrameAt(e),this.updateScrollerOverflows()):d===b.DELETE?(this.piskelController.removeFrameAt(e),this.updateScrollerOverflows()):d===b.SELECT?this.piskelController.setCurrentFrameIndex(e):d===b.NEW_FRAME&&(this.piskelController.addFrame(),this.updateScrollerOverflows())}},a.FramesListController.prototype.createPreviews_=function(){this.container.html(""),$(".tooltip").remove();for(var a=this.piskelController.getFrameCount(),c=0;a>c;c++)this.container.append(this.createPreviewTile_(c));var d=document.createElement("div");d.id="add-frame-action",d.className="add-frame-action",d.setAttribute("data-tile-action",b.NEW_FRAME),d.innerHTML='
Add new frame
',this.container.append(d);var e=a>1;e&&this.initDragndropBehavior_(),this.updateScrollerOverflows()},a.FramesListController.prototype.initDragndropBehavior_=function(){$("#preview-list").sortable({placeholder:"preview-tile preview-tile-drop-proxy",update:$.proxy(this.onUpdate_,this),items:".preview-tile",axis:"y",tolerance:"pointer"}),$("#preview-list").disableSelection()},a.FramesListController.prototype.onUpdate_=function(a,b){var c=parseInt(b.item.data("tile-number"),10),d=$(".preview-tile").index(b.item);this.piskelController.moveFrame(c,d),this.piskelController.setCurrentFrameIndex(d)},a.FramesListController.prototype.createPreviewTile_=function(a){var c=this.piskelController.getCurrentLayer().getFrameAt(a),d=document.createElement("li");d.setAttribute("data-tile-number",a),d.setAttribute("data-tile-action",b.SELECT),d.classList.add("preview-tile"),this.piskelController.getCurrentFrame()==c&&d.classList.add("selected");var e=document.createElement("div");e.classList.add("canvas-container",pskl.UserSettings.get(pskl.UserSettings.CANVAS_BACKGROUND));var f=this.zoom*this.piskelController.getCurrentFrame().getHeight(),g=(Constants.PREVIEW_FILM_SIZE-f)/2;e.style.marginTop=g+"px";var h=this.zoom*this.piskelController.getCurrentFrame().getWidth(),i=(Constants.PREVIEW_FILM_SIZE-h)/2;e.style.marginLeft=i+"px",e.style.marginRight=i+"px";var j=document.createElement("div");j.className="canvas-background",e.appendChild(j);var k=document.createElement("button");if(k.setAttribute("rel","tooltip"),k.setAttribute("data-placement","right"),k.setAttribute("data-tile-number",a),k.setAttribute("data-tile-action",b.CLONE),k.setAttribute("title","Duplicate this frame"),k.className="tile-overlay duplicate-frame-action icon-frame-duplicate-white",d.appendChild(k),e.appendChild(this.getCanvasForFrame(c)),d.appendChild(e),a>0||this.piskelController.getFrameCount()>1){var l=document.createElement("button");l.setAttribute("rel","tooltip"),l.setAttribute("data-placement","right"),l.setAttribute("title","Delete this frame"),l.setAttribute("data-tile-number",a),l.setAttribute("data-tile-action",b.DELETE),l.className="tile-overlay delete-frame-action icon-frame-recyclebin-white",d.appendChild(l);var m=document.createElement("div");m.className="tile-overlay dnd-action icon-frame-dragndrop-white",d.appendChild(m)}var n=document.createElement("div");return n.className="tile-overlay tile-count",n.innerHTML=a+1,d.appendChild(n),d},a.FramesListController.prototype.getCanvasForFrame=function(a){var b=this.cachedFrameProcessor.get(a,this.zoom);return b},a.FramesListController.prototype.frameToPreviewCanvas_=function(a){var b=new pskl.rendering.CanvasRenderer(a,this.zoom);b.drawTransparentAs(Constants.TRANSPARENT_COLOR);var c=b.render();return c.classList.add("tile-view","canvas"),c},a.FramesListController.prototype.clonePreviewCanvas_=function(a){var b=pskl.utils.CanvasUtils.clone(a);return b.classList.add("tile-view","canvas"),b},a.FramesListController.prototype.calculateZoom_=function(){var a=this.piskelController.getCurrentFrame(),b=Math.max(a.getHeight(),a.getWidth());return Constants.PREVIEW_FILM_SIZE/b}}(),function(){var a=$.namespace("pskl.controller");a.HeaderController=function(a,b){this.piskelController=a,this.savedStatusService=b},a.HeaderController.prototype.init=function(){this.piskelName_=document.querySelector(".piskel-name"),$.subscribe(Events.BEFORE_SAVING_PISKEL,this.onBeforeSavingPiskelEvent_.bind(this)),$.subscribe(Events.AFTER_SAVING_PISKEL,this.onAfterSavingPiskelEvent_.bind(this)),$.subscribe(Events.PISKEL_DESCRIPTOR_UPDATED,this.updateHeader_.bind(this)),$.subscribe(Events.PISKEL_RESET,this.updateHeader_.bind(this)),$.subscribe(Events.PISKEL_SAVED_STATUS_UPDATE,this.updateHeader_.bind(this)),this.updateHeader_()},a.HeaderController.prototype.updateHeader_=function(){try{var a=this.piskelController.getPiskel().getDescriptor().name;this.savedStatusService.isDirty()&&(a+=" *"),this.piskelName_&&(this.piskelName_.innerHTML=a)}catch(b){console.warn("Could not update header : "+b.message)}},a.HeaderController.prototype.onBeforeSavingPiskelEvent_=function(){this.piskelName_&&this.piskelName_.classList.add("piskel-name-saving")},a.HeaderController.prototype.onAfterSavingPiskelEvent_=function(){this.piskelName_&&this.piskelName_.classList.remove("piskel-name-saving")}}(),function(){var a=$.namespace("pskl.controller");a.LayersListController=function(a){this.piskelController=a,this.layerPreviewShortcut=pskl.service.keyboard.Shortcuts.MISC.LAYER_PREVIEW},a.LayersListController.prototype.init=function(){this.layerItemTemplate_=pskl.utils.Template.get("layer-item-template"),this.rootEl=document.querySelector(".layers-list-container"),this.layersListEl=document.querySelector(".layers-list"),this.toggleLayerPreviewEl=document.querySelector(".layers-toggle-preview"),this.rootEl.addEventListener("click",this.onClick_.bind(this)),this.toggleLayerPreviewEl.addEventListener("click",this.toggleLayerPreview_.bind(this)),this.initToggleLayerPreview_(),this.renderLayerList_(),this.updateToggleLayerPreview_(),$.subscribe(Events.PISKEL_RESET,this.renderLayerList_.bind(this)),$.subscribe(Events.USER_SETTINGS_CHANGED,$.proxy(this.onUserSettingsChange_,this))},a.LayersListController.prototype.renderLayerList_=function(){this.layersListEl.innerHTML="";var a=this.piskelController.getLayers();a.forEach(this.addLayerItem.bind(this)),this.updateButtonStatus_()},a.LayersListController.prototype.initToggleLayerPreview_=function(){var a=[{description:"Opacity defined in PREFERENCES"}],b="Preview all layers";pskl.app.shortcutService.registerShortcut(this.layerPreviewShortcut,this.toggleLayerPreview_.bind(this));var c=pskl.utils.TooltipFormatter.format(b,this.layerPreviewShortcut,a);this.toggleLayerPreviewEl.setAttribute("title",c)},a.LayersListController.prototype.updateButtonStatus_=function(){var a=this.piskelController.getLayers(),b=(this.piskelController.getCurrentLayer(),this.piskelController.getCurrentLayerIndex()),c=0===b,d=1===a.length,e=b===a.length-1;this.toggleButtonDisabledState_("up",e),this.toggleButtonDisabledState_("down",c),this.toggleButtonDisabledState_("merge",c),this.toggleButtonDisabledState_("delete",d)},a.LayersListController.prototype.toggleButtonDisabledState_=function(a,b){var c=document.querySelector('.layers-button[data-action="'+a+'"]');b?(c.setAttribute("disabled","disabled"),c.blur()):c.removeAttribute("disabled")},a.LayersListController.prototype.updateToggleLayerPreview_=function(){var a="layers-toggle-preview-enabled";pskl.UserSettings.get(pskl.UserSettings.LAYER_PREVIEW)?this.toggleLayerPreviewEl.classList.add(a):this.toggleLayerPreviewEl.classList.remove(a)},a.LayersListController.prototype.onUserSettingsChange_=function(a,b,c){b==pskl.UserSettings.LAYER_PREVIEW&&this.updateToggleLayerPreview_()},a.LayersListController.prototype.addLayerItem=function(a,b){var c=this.piskelController.getCurrentLayer()===a,d=pskl.utils.Template.replace(this.layerItemTemplate_,{layername:a.getName(),layerindex:b,"isselected:current-layer-item":c,opacity:a.getOpacity()}),e=pskl.utils.Template.createFromHTML(d);this.layersListEl.insertBefore(e,this.layersListEl.firstChild)},a.LayersListController.prototype.onClick_=function(a){var b,c=a.target||a.srcElement;if(c.classList.contains("button"))this.onButtonClick_(c);else if(c.classList.contains("layer-item"))b=c.dataset.layerIndex,this.piskelController.setCurrentLayerIndex(parseInt(b,10));else if(c.classList.contains("layer-item-opacity")){b=pskl.utils.Dom.getData(c,"layerIndex");var d=this.piskelController.getLayerAt(parseInt(b,10)),e=window.prompt("Set layer opacity (value between 0 and 1)",d.getOpacity());this.piskelController.setLayerOpacityAt(b,e)}},a.LayersListController.prototype.renameCurrentLayer_=function(){var a=this.piskelController.getCurrentLayer(),b=window.prompt("Please enter the layer name",a.getName());if(b){var c=this.piskelController.getCurrentLayerIndex();this.piskelController.renameLayerAt(c,b),this.renderLayerList_()}},a.LayersListController.prototype.mergeDownCurrentLayer_=function(){var a=this.piskelController.getCurrentLayerIndex();this.piskelController.mergeDownLayerAt(a),this.renderLayerList_()},a.LayersListController.prototype.onButtonClick_=function(a){var b=a.getAttribute("data-action");"up"==b?this.piskelController.moveLayerUp():"down"==b?this.piskelController.moveLayerDown():"add"==b?this.piskelController.createLayer():"delete"==b?this.piskelController.removeCurrentLayer():"merge"==b?this.mergeDownCurrentLayer_():"edit"==b&&this.renameCurrentLayer_()},a.LayersListController.prototype.toggleLayerPreview_=function(){var a=pskl.UserSettings.get(pskl.UserSettings.LAYER_PREVIEW),b=pskl.UserSettings.get(pskl.UserSettings.LAYER_OPACITY),c=!a;pskl.UserSettings.set(pskl.UserSettings.LAYER_PREVIEW,c),c&&0===b&&pskl.UserSettings.set(pskl.UserSettings.LAYER_OPACITY,Constants.DEFAULT.LAYER_OPACITY)}}(),function(){var a=$.namespace("pskl.controller.preview"),b="Piskel - preview";a.PopupPreviewController=function(a){this.piskelController=a,this.popup=null,this.renderer=null,this.renderFlag=!1},a.PopupPreviewController.prototype.init=function(){pskl.utils.Event.addEventListener(window,"unload",this.onMainWindowUnload_,this)},a.PopupPreviewController.prototype.isOpen=function(){return!!this.popup},a.PopupPreviewController.prototype.open=function(){this.isOpen()?this.popup.focus():(this.popup=window.open("about:blank","","width=320,height=320"),window.setTimeout(this.onPopupLoaded.bind(this),500))},a.PopupPreviewController.prototype.onPopupLoaded=function(){this.popup.document.title=b,this.popup.document.body.innerHTML=pskl.utils.Template.get("popup-preview-partial"),pskl.utils.Event.addEventListener(this.popup,"resize",this.onWindowResize_,this),pskl.utils.Event.addEventListener(this.popup,"unload",this.onPopupClosed_,this);var a=this.popup.document.querySelector(".preview-container");this.renderer=new pskl.rendering.frame.BackgroundImageFrameRenderer($(a)),this.updateZoom_(),this.renderFlag=!0},a.PopupPreviewController.prototype.render=function(a){this.isOpen()&&this.renderer&&(this.renderer.render(a),this.renderFlag=!1)},a.PopupPreviewController.prototype.onWindowResize_=function(a){this.updateZoom_(),this.renderFlag=!0},a.PopupPreviewController.prototype.updateZoom_=function(){var a=this.popup.document.documentElement,b=a.clientWidth/this.piskelController.getWidth(),c=a.clientHeight/this.piskelController.getHeight(),d=Math.min(b,c);this.renderer.setZoom(d);var e=this.piskelController.getHeight()*d,f=this.piskelController.getWidth()*d,g=this.popup.document.querySelector(".preview-container");g.style.height=e+"px",g.style.width=f+"px";var h=(a.clientHeight-e)/2;g.style.marginTop=h+"px",g.style.marginBottom=h+"px";var i=(a.clientWidth-f)/2;g.style.marginLeft=i+"px",g.style.marginRight=i+"px"},a.PopupPreviewController.prototype.onPopupClosed_=function(){this.popup;this.popup=null},a.PopupPreviewController.prototype.onMainWindowUnload_=function(){this.isOpen()&&this.popup.close()}}(),function(){var a=$.namespace("pskl.controller.preview"),b=200;a.PreviewController=function(b,c){this.piskelController=b,this.container=c,this.elapsedTime=0,this.currentIndex=0,this.onionSkinShortcut=pskl.service.keyboard.Shortcuts.MISC.ONION_SKIN,this.originalSizeShortcut=pskl.service.keyboard.Shortcuts.MISC.X1_PREVIEW,this.renderFlag=!0,this.fpsRangeInput=document.querySelector("#preview-fps"),this.fpsCounterDisplay=document.querySelector("#display-fps"),this.openPopupPreview=document.querySelector(".open-popup-preview-button"),this.originalSizeButton=document.querySelector(".original-size-button"),this.toggleOnionSkinButton=document.querySelector(".preview-toggle-onion-skin"),this.setFPS(Constants.DEFAULT.FPS),this.renderer=new pskl.rendering.frame.BackgroundImageFrameRenderer(this.container),this.popupPreviewController=new a.PopupPreviewController(b)},a.PreviewController.prototype.init=function(){this.fpsRangeInput.addEventListener("change",this.onFpsRangeInputUpdate_.bind(this)),this.fpsRangeInput.addEventListener("input",this.onFpsRangeInputUpdate_.bind(this)),document.querySelector(".right-column").style.width=Constants.ANIMATED_PREVIEW_WIDTH+"px",pskl.utils.Event.addEventListener(this.toggleOnionSkinButton,"click",this.toggleOnionSkin_,this),pskl.utils.Event.addEventListener(this.openPopupPreview,"click",this.onOpenPopupPreviewClick_,this),pskl.utils.Event.addEventListener(this.originalSizeButton,"click",this.onOriginalSizeButtonClick_,this),pskl.app.shortcutService.registerShortcut(this.onionSkinShortcut,this.toggleOnionSkin_.bind(this)),pskl.app.shortcutService.registerShortcut(this.originalSizeShortcut,this.onOriginalSizeButtonClick_.bind(this)),$.subscribe(Events.FRAME_SIZE_CHANGED,this.onFrameSizeChange_.bind(this)),$.subscribe(Events.USER_SETTINGS_CHANGED,$.proxy(this.onUserSettingsChange_,this)),$.subscribe(Events.PISKEL_SAVE_STATE,this.setRenderFlag_.bind(this,!0)),$.subscribe(Events.PISKEL_RESET,this.setRenderFlag_.bind(this,!0)),this.initTooltips_(),this.popupPreviewController.init(),this.updateZoom_(),this.updateOnionSkinPreview_(),this.updateOriginalSizeButton_(),this.updateMaxFPS_(),this.updateContainerDimensions_()},a.PreviewController.prototype.initTooltips_=function(){var a=pskl.utils.TooltipFormatter.format("Toggle onion skin",this.onionSkinShortcut);this.toggleOnionSkinButton.setAttribute("title",a);var b=pskl.utils.TooltipFormatter.format("Original size preview",this.originalSizeShortcut);this.originalSizeButton.setAttribute("title",b)},a.PreviewController.prototype.onOpenPopupPreviewClick_=function(){this.popupPreviewController.open()},a.PreviewController.prototype.onOriginalSizeButtonClick_=function(){var a=pskl.UserSettings.get(pskl.UserSettings.ORIGINAL_SIZE_PREVIEW);pskl.UserSettings.set(pskl.UserSettings.ORIGINAL_SIZE_PREVIEW,!a)},a.PreviewController.prototype.onUserSettingsChange_=function(a,b,c){b==pskl.UserSettings.ONION_SKIN?this.updateOnionSkinPreview_():b==pskl.UserSettings.MAX_FPS?this.updateMaxFPS_():(this.updateZoom_(),this.updateOriginalSizeButton_(),this.updateContainerDimensions_())},a.PreviewController.prototype.updateOnionSkinPreview_=function(){var a="preview-toggle-onion-skin-enabled",b=pskl.UserSettings.get(pskl.UserSettings.ONION_SKIN);this.toggleOnionSkinButton.classList.toggle(a,b)},a.PreviewController.prototype.updateOriginalSizeButton_=function(){var a="original-size-button-enabled",b=pskl.UserSettings.get(pskl.UserSettings.ORIGINAL_SIZE_PREVIEW);this.originalSizeButton.classList.toggle(a,b)},a.PreviewController.prototype.updateMaxFPS_=function(){var a=pskl.UserSettings.get(pskl.UserSettings.MAX_FPS);this.fpsRangeInput.setAttribute("max",a),this.setFPS(Math.min(this.fps,a))},a.PreviewController.prototype.updateZoom_=function(){var a=pskl.UserSettings.get(pskl.UserSettings.ORIGINAL_SIZE_PREVIEW),b=pskl.UserSettings.get(pskl.UserSettings.TILED_PREVIEW),c=a||b,d=c?1:this.calculateZoom_();this.renderer.setZoom(d),this.setRenderFlag_(!0)},a.PreviewController.prototype.getZoom=function(){return this.calculateZoom_()},a.PreviewController.prototype.getCoordinates=function(a,b){var c=this.container.offset();a-=c.left,b-=c.top;var d=this.getZoom();return{x:Math.floor(a/d),y:Math.floor(b/d)}},a.PreviewController.prototype.onFpsRangeInputUpdate_=function(a){this.setFPS(parseInt(this.fpsRangeInput.value,10)),"change"===a.type&&this.fpsRangeInput.blur()},a.PreviewController.prototype.setFPS=function(a){"number"==typeof a&&(this.fps=a,this.fpsRangeInput.value=0,this.fpsRangeInput.value=this.fps,this.fpsCounterDisplay.innerHTML=this.fps+" FPS")},a.PreviewController.prototype.getFPS=function(){return this.fps},a.PreviewController.prototype.render=function(a){this.elapsedTime+=a;var b=this.getNextIndex_(a);if(this.shouldRender_()||this.currentIndex!=b){this.currentIndex=b;var c=pskl.utils.LayerUtils.mergeFrameAt(this.piskelController.getLayers(),b);this.renderer.render(c),this.renderFlag=!1,this.popupPreviewController.render(c)}},a.PreviewController.prototype.getNextIndex_=function(a){if(0===this.fps)return this.piskelController.getCurrentFrameIndex();var b=Math.floor(this.elapsedTime/(1e3/this.fps));return this.piskelController.hasFrameAt(b)||(this.elapsedTime=0,b=0),b},a.PreviewController.prototype.calculateZoom_=function(){var a=this.piskelController.getCurrentFrame(),c=b/a.getHeight(),d=b/a.getWidth();return Math.min(c,d)},a.PreviewController.prototype.onFrameSizeChange_=function(){this.updateZoom_(),this.updateContainerDimensions_()},a.PreviewController.prototype.updateContainerDimensions_=function(){var a=pskl.UserSettings.get(pskl.UserSettings.TILED_PREVIEW);this.renderer.setRepeated(a);var c,d;if(a)c=b,d=b;else{var e=this.getZoom(),f=this.piskelController.getCurrentFrame();c=f.getHeight()*e,d=f.getWidth()*e}var g=this.container.get(0);g.style.height=c+"px",g.style.width=d+"px";var h=(b-c)/2;g.style.marginTop=h+"px",g.style.marginBottom=h+"px";var i=(b-d)/2;g.style.marginLeft=i+"px",g.style.marginRight=i+"px"},a.PreviewController.prototype.setRenderFlag_=function(a){this.renderFlag=a},a.PreviewController.prototype.shouldRender_=function(){return this.renderFlag||this.popupPreviewController.renderFlag},a.PreviewController.prototype.toggleOnionSkin_=function(){var a=pskl.UserSettings.get(pskl.UserSettings.ONION_SKIN);pskl.UserSettings.set(pskl.UserSettings.ONION_SKIN,!a)}}(),function(){var a=$.namespace("pskl.controller");a.MinimapController=function(a,b,c,d){this.piskelController=a,this.previewController=b,this.drawingController=c,this.container=d,this.isClicked=!1,this.isVisible=!1},a.MinimapController.prototype.init=function(){this.minimapEl=document.createElement("DIV"),this.minimapEl.className="minimap-crop-frame",this.minimapEl.style.display="none",$(this.container).append(this.minimapEl),$(this.container).mousedown(this.onMinimapMousedown_.bind(this)),$("body").mousemove(this.onMinimapMousemove_.bind(this)),$("body").mouseup(this.onMinimapMouseup_.bind(this)),$.subscribe(Events.ZOOM_CHANGED,$.proxy(this.renderMinimap_,this))},a.MinimapController.prototype.renderMinimap_=function(){var a=this.getVerticalRatio_(),b=this.getHorizontalRatio_();a>1||b>1?this.displayMinimap_():this.hideMinimap_()},a.MinimapController.prototype.displayMinimap_=function(){var a=this.getMinimapSize_(),b=this.getPreviewSize_(),c=this.container.height(),d=this.container.width(),e=this.drawingController.getRenderer().getOffset(),f=(d-Math.max(a.width,b.width))/2,g=e.x*this.previewController.getZoom(),h=f+g,i=(c-Math.max(a.height,b.height))/2,j=e.y*this.previewController.getZoom(),k=i+j;this.minimapEl.style.display="block",this.minimapEl.style.width=Math.min(a.width,d)+"px",this.minimapEl.style.height=Math.min(a.height,c)+"px",this.minimapEl.style.left=Math.max(0,h)+"px",this.minimapEl.style.top=Math.max(0,k)+"px",this.isVisible=!0},a.MinimapController.prototype.getMinimapSize_=function(){var a=this.drawingController.getRenderer().getZoom(),b=this.previewController.getZoom(),c=a/b,d=this.drawingController.getRenderer().getDisplaySize(),e=d.width/c,f=d.height/c;return{width:e,height:f}},a.MinimapController.prototype.getPreviewSize_=function(){var a=this.piskelController.getCurrentFrame(),b=a.getWidth()*this.previewController.getZoom(),c=a.getHeight()*this.previewController.getZoom();return{width:b,height:c}},a.MinimapController.prototype.hideMinimap_=function(){this.minimapEl.style.display="none",this.isVisible=!1},a.MinimapController.prototype.onMinimapMousemove_=function(a){if(this.isVisible&&this.isClicked){var b=this.getCoordinatesCenteredAround_(a.clientX,a.clientY);this.drawingController.setOffset(b.x,b.y)}},a.MinimapController.prototype.onMinimapMousedown_=function(a){this.isClicked=!0},a.MinimapController.prototype.onMinimapMouseup_=function(a){this.isClicked=!1},a.MinimapController.prototype.getCoordinatesCenteredAround_=function(a,b){var c=this.previewController.getCoordinates(a,b),d=this.piskelController.getCurrentFrame().getWidth(),e=this.piskelController.getCurrentFrame().getHeight(),f=d/this.getHorizontalRatio_(),g=e/this.getVerticalRatio_();return{x:c.x-f/2,y:c.y-g/2}},a.MinimapController.prototype.getVerticalRatio_=function(){var a=this.drawingController.getRenderer().getZoom(),b=this.piskelController.getCurrentFrame(),c=b.getHeight()*a,d=this.drawingController.getRenderer().getDisplaySize().height;return c/d},a.MinimapController.prototype.getHorizontalRatio_=function(){var a=this.drawingController.getRenderer().getZoom(),b=this.piskelController.getCurrentFrame(),c=b.getWidth()*a,d=this.drawingController.getRenderer().getDisplaySize().width;return c/d}}(),function(){var a=$.namespace("pskl.controller");a.ToolController=function(){this.tools=[new pskl.tools.drawing.SimplePen,new pskl.tools.drawing.VerticalMirrorPen,new pskl.tools.drawing.PaintBucket,new pskl.tools.drawing.ColorSwap,new pskl.tools.drawing.Eraser,new pskl.tools.drawing.Stroke,new pskl.tools.drawing.Rectangle,new pskl.tools.drawing.Circle,new pskl.tools.drawing.Move,new pskl.tools.drawing.selection.ShapeSelect,new pskl.tools.drawing.selection.RectangleSelect,new pskl.tools.drawing.selection.LassoSelect,new pskl.tools.drawing.Lighten,new pskl.tools.drawing.DitheringTool,new pskl.tools.drawing.ColorPicker],this.toolIconBuilder=new pskl.tools.ToolIconBuilder},a.ToolController.prototype.init=function(){this.createToolsDom_(),this.addKeyboardShortcuts_(),this.selectTool_(this.tools[0]),$("#tool-section").mousedown($.proxy(this.onToolIconClicked_,this)),$.subscribe(Events.SELECT_TOOL,this.onSelectToolEvent_.bind(this)),$.subscribe(Events.SHORTCUTS_CHANGED,this.createToolsDom_.bind(this))},a.ToolController.prototype.activateToolOnStage_=function(a){var b=$("body"),c=b.data("selected-tool-class");c&&(b.removeClass(c),b.removeClass(pskl.tools.drawing.Move.TOOL_ID)),b.addClass(a.toolId),b.data("selected-tool-class",a.toolId)},a.ToolController.prototype.onSelectToolEvent_=function(a,b){var c=this.getToolById_(b);c&&this.selectTool_(c)},a.ToolController.prototype.selectTool_=function(a){this.currentSelectedTool=a,this.activateToolOnStage_(this.currentSelectedTool);var b=$("#tool-section .tool-icon.selected"),c=$("[data-tool-id="+a.toolId+"]");b.removeClass("selected"),c.addClass("selected"),$.publish(Events.TOOL_SELECTED,[a])},a.ToolController.prototype.onToolIconClicked_=function(a){var b=$(a.target),c=b.closest(".tool-icon");if(c.length){var d=c.data().toolId,e=this.getToolById_(d);e&&this.selectTool_(e)}},a.ToolController.prototype.onKeyboardShortcut_=function(a,b){var c=this.getToolById_(a);null!==c&&this.selectTool_(c)},a.ToolController.prototype.getToolById_=function(a){return pskl.utils.Array.find(this.tools,function(b){return b.toolId==a})},a.ToolController.prototype.createToolsDom_=function(){for(var a="",b=0;b"+a,c.attr("data-original-title",a)}}(),function(){var a=$.namespace("pskl.controller"),b="palettes-list-primary-color",c="palettes-list-secondary-color";a.PalettesListController=function(a){this.usedColorService=a,this.paletteService=pskl.app.paletteService},a.PalettesListController.prototype.init=function(){this.paletteColorTemplate_=pskl.utils.Template.get("palette-color-template"),this.colorListContainer_=document.querySelector(".palettes-list-colors"),this.colorPaletteSelect_=document.querySelector(".palettes-list-select");var a=document.querySelector(".create-palette-button"),b=document.querySelector(".edit-palette-button");this.colorPaletteSelect_.addEventListener("change",this.onPaletteSelected_.bind(this)),this.colorListContainer_.addEventListener("mouseup",this.onColorContainerMouseup.bind(this)),this.colorListContainer_.addEventListener("contextmenu",this.onColorContainerContextMenu.bind(this)),a.addEventListener("click",this.onCreatePaletteClick_.bind(this)),b.addEventListener("click",this.onEditPaletteClick_.bind(this)),$.subscribe(Events.PALETTE_LIST_UPDATED,this.onPaletteListUpdated.bind(this)),$.subscribe(Events.CURRENT_COLORS_UPDATED,this.fillColorListContainer.bind(this)),$.subscribe(Events.PRIMARY_COLOR_SELECTED,this.highlightSelectedColors.bind(this)),$.subscribe(Events.SECONDARY_COLOR_SELECTED,this.highlightSelectedColors.bind(this)),$.subscribe(Events.USER_SETTINGS_CHANGED,$.proxy(this.onUserSettingsChange_,this));var c=pskl.service.keyboard.Shortcuts;pskl.app.shortcutService.registerShortcut(c.COLOR.PREVIOUS_COLOR,this.selectPreviousColor_.bind(this)),pskl.app.shortcutService.registerShortcut(c.COLOR.NEXT_COLOR,this.selectNextColor_.bind(this)),pskl.app.shortcutService.registerShortcut(c.COLOR.SELECT_COLOR,this.selectColorForKey_.bind(this)),this.fillPaletteList(),this.updateFromUserSettings(),this.fillColorListContainer()},a.PalettesListController.prototype.fillPaletteList=function(){var a=this.paletteService.getPalettes(),b=a.map(function(a){return pskl.utils.Template.replace('',a)}).join("");this.colorPaletteSelect_.innerHTML=b},a.PalettesListController.prototype.fillColorListContainer=function(){var a=this.getSelectedPaletteColors_();if(a.length>0){var b=a.map(function(a,b){return pskl.utils.Template.replace(this.paletteColorTemplate_,{color:a,index:b})}.bind(this)).join("");this.colorListContainer_.innerHTML=b,this.highlightSelectedColors()}else this.colorListContainer_.innerHTML=pskl.utils.Template.get("palettes-list-no-colors-partial")},a.PalettesListController.prototype.selectPalette=function(a){pskl.UserSettings.set(pskl.UserSettings.SELECTED_PALETTE,a)},a.PalettesListController.prototype.getSelectedPaletteColors_=function(){ var a=[],b=this.getSelectedPalette_();return b&&(a=b.getColors()),a.length>Constants.MAX_PALETTE_COLORS&&(a=a.slice(0,Constants.MAX_PALETTE_COLORS)),a},a.PalettesListController.prototype.getSelectedPalette_=function(){var a=pskl.UserSettings.get(pskl.UserSettings.SELECTED_PALETTE);return this.paletteService.getPaletteById(a)},a.PalettesListController.prototype.selectNextColor_=function(){this.selectColor_(this.getCurrentColorIndex_()+1)},a.PalettesListController.prototype.selectPreviousColor_=function(){this.selectColor_(this.getCurrentColorIndex_()-1)},a.PalettesListController.prototype.getCurrentColorIndex_=function(){var a=0,c=document.querySelector("."+b);return c&&(a=parseInt(c.dataset.colorIndex,10)),a},a.PalettesListController.prototype.selectColorForKey_=function(a){var b=parseInt(a,10);b=(b+9)%10,this.selectColor_(b)},a.PalettesListController.prototype.selectColor_=function(a){var b=this.getSelectedPaletteColors_(),c=b[a];c&&$.publish(Events.SELECT_PRIMARY_COLOR,[c])},a.PalettesListController.prototype.onUserSettingsChange_=function(a,b,c){b==pskl.UserSettings.SELECTED_PALETTE&&this.updateFromUserSettings()},a.PalettesListController.prototype.updateFromUserSettings=function(){var a=pskl.UserSettings.get(pskl.UserSettings.SELECTED_PALETTE);this.fillColorListContainer(),this.colorPaletteSelect_.value=a},a.PalettesListController.prototype.onPaletteSelected_=function(a){var b=this.colorPaletteSelect_.value;this.selectPalette(b),this.colorPaletteSelect_.blur()},a.PalettesListController.prototype.onCreatePaletteClick_=function(a){$.publish(Events.DIALOG_DISPLAY,{dialogId:"create-palette"})},a.PalettesListController.prototype.onEditPaletteClick_=function(a){var b=this.colorPaletteSelect_.value;$.publish(Events.DIALOG_DISPLAY,{dialogId:"create-palette",initArgs:b})},a.PalettesListController.prototype.onColorContainerContextMenu=function(a){a.preventDefault()},a.PalettesListController.prototype.onColorContainerMouseup=function(a){var b=a.target,c=b.dataset.color;c&&(a.button==Constants.LEFT_BUTTON?$.publish(Events.SELECT_PRIMARY_COLOR,[c]):a.button==Constants.RIGHT_BUTTON&&$.publish(Events.SELECT_SECONDARY_COLOR,[c]))},a.PalettesListController.prototype.highlightSelectedColors=function(){this.removeClass_(b),this.removeClass_(c);var a=this.getColorContainer_(pskl.app.selectedColorsService.getSecondaryColor());a&&(a.classList.remove(b),a.classList.add(c)),a=this.getColorContainer_(pskl.app.selectedColorsService.getPrimaryColor()),a&&(a.classList.remove(c),a.classList.add(b))},a.PalettesListController.prototype.getColorContainer_=function(a){return this.colorListContainer_.querySelector('.palettes-list-color[data-color="'+a+'"]')},a.PalettesListController.prototype.removeClass_=function(a){var b=document.querySelector("."+a);b&&b.classList.remove(a)},a.PalettesListController.prototype.onPaletteListUpdated=function(){this.fillPaletteList(),this.updateFromUserSettings()}}(),function(){var a=$.namespace("pskl.controller");a.PenSizeController=function(){},a.PenSizeController.prototype.init=function(){this.container=document.querySelector(".pen-size-container"),pskl.utils.Event.addEventListener(this.container,"click",this.onPenSizeOptionClick_,this),$.subscribe(Events.PEN_SIZE_CHANGED,this.onPenSizeChanged_.bind(this)),this.updateSelectedOption_()},a.PenSizeController.prototype.onPenSizeOptionClick_=function(a){var b=a.target.dataset.size;isNaN(b)||(b=parseInt(b,10),pskl.app.penSizeService.setPenSize(b))},a.PenSizeController.prototype.onPenSizeChanged_=function(a){this.updateSelectedOption_()},a.PenSizeController.prototype.updateSelectedOption_=function(){pskl.utils.Dom.removeClass("selected",this.container);var a=pskl.app.penSizeService.getPenSize(),b=this.container.querySelector('[data-size="'+a+'"]');b&&b.classList.add("selected")}}(),function(){var a=$.namespace("pskl.controller");a.ProgressBarController=function(){this.template=pskl.utils.Template.get("progress-bar-template"),this.progressBar=null,this.progressBarStatus=null,this.showProgressTimer_=0},a.ProgressBarController.prototype.init=function(){$.subscribe(Events.SHOW_PROGRESS,$.proxy(this.showProgress_,this)),$.subscribe(Events.UPDATE_PROGRESS,$.proxy(this.updateProgress_,this)),$.subscribe(Events.HIDE_PROGRESS,$.proxy(this.hideProgress_,this))},a.ProgressBarController.prototype.showProgress_=function(a,b){this.removeProgressBar_(),this.showProgressTimer_=window.setTimeout(this.onTimerExpired_.bind(this,b),300)},a.ProgressBarController.prototype.onTimerExpired_=function(a){var b=pskl.utils.Template.replace(this.template,{name:a.name,status:0}),c=pskl.utils.Template.createFromHTML(b);document.body.appendChild(c),this.progressBar=document.querySelector(".progress-bar"),this.progressBarStatus=document.querySelector(".progress-bar-status")},a.ProgressBarController.prototype.updateProgress_=function(a,b){if(this.progressBar&&this.progressBarStatus){var c=b.progress,d=this.progressBar.offsetWidth,e=d-c*d/100;this.progressBar.style.backgroundPosition=-e+"px 0",this.progressBarStatus.innerHTML=c+"%"}},a.ProgressBarController.prototype.hideProgress_=function(a,b){this.showProgressTimer_&&window.clearTimeout(this.showProgressTimer_),this.removeProgressBar_()},a.ProgressBarController.prototype.removeProgressBar_=function(){var a=document.querySelector(".progress-bar-container");a&&(a.parentNode.removeChild(a),this.progressBar=null,this.progressBarStatus=null)}}(),function(){var a=$.namespace("pskl.controller");a.NotificationController=function(){},a.NotificationController.prototype.init=function(){$.subscribe(Events.SHOW_NOTIFICATION,$.proxy(this.displayMessage_,this)),$.subscribe(Events.HIDE_NOTIFICATION,$.proxy(this.removeMessage_,this))},a.NotificationController.prototype.displayMessage_=function(a,b){this.removeMessage_();var c=document.createElement("div");c.id="user-message",c.className="user-message",c.innerHTML=b.content,c.innerHTML=c.innerHTML+'
x
',document.body.appendChild(c),c.querySelector(".close").addEventListener("click",this.removeMessage_.bind(this)),b.hideDelay&&window.setTimeout(this.removeMessage_.bind(this),b.hideDelay)},a.NotificationController.prototype.removeMessage_=function(a){var b=$("#user-message");b.length&&b.remove()}}(),function(){var a=$.namespace("pskl.controller");a.TransformationsController=function(){this.tools=[new pskl.tools.transform.Flip,new pskl.tools.transform.Rotate,new pskl.tools.transform.Clone,new pskl.tools.transform.Center],this.toolIconBuilder=new pskl.tools.ToolIconBuilder},a.TransformationsController.prototype.init=function(){var a=document.querySelector(".transformations-container");this.toolsContainer=a.querySelector(".tools-wrapper"),a.addEventListener("click",this.onTransformationClick_.bind(this)),this.createToolsDom_()},a.TransformationsController.prototype.applyTool=function(a,b){this.tools.forEach(function(c){c.toolId===a&&($.publish(Events.TRANSFORMATION_EVENT,[a,b]),c.applyTransformation(b))}.bind(this))},a.TransformationsController.prototype.onTransformationClick_=function(a){var b=a.target.dataset.toolId;this.applyTool(b,a)},a.TransformationsController.prototype.createToolsDom_=function(){var a=this.tools.reduce(function(a,b){return a+this.toolIconBuilder.createIcon(b,"left")}.bind(this),"");this.toolsContainer.innerHTML=a}}(),function(){var a=$.namespace("pskl.controller");a.CanvasBackgroundController=function(){this.body=document.body},a.CanvasBackgroundController.prototype.init=function(){$.subscribe(Events.USER_SETTINGS_CHANGED,this.onUserSettingsChange_.bind(this)),this.updateBackgroundClass_(pskl.UserSettings.get(pskl.UserSettings.CANVAS_BACKGROUND))},a.CanvasBackgroundController.prototype.onUserSettingsChange_=function(a,b,c){b==pskl.UserSettings.CANVAS_BACKGROUND&&this.updateBackgroundClass_(c)},a.CanvasBackgroundController.prototype.updateBackgroundClass_=function(a){var b=this.body.dataset.currentBackgroundClass;b&&this.body.classList.remove(b),this.body.classList.add(a),this.body.dataset.currentBackgroundClass=a}}(),function(){var a=$.namespace("pskl.controller.settings");a.AbstractSettingController=function(){},a.AbstractSettingController.prototype.addEventListener=function(a,b,c){pskl.utils.Event.addEventListener(a,b,c,this)},a.AbstractSettingController.prototype.destroy=function(){pskl.utils.Event.removeAllEventListeners(this),this.nullifyDomReferences_()},a.AbstractSettingController.prototype.nullifyDomReferences_=function(){for(var a in this)if(this.hasOwnProperty(a)){var b=this[a]&&this[a].nodeName;b&&(this[a]=null)}}}(),function(){var a=$.namespace("pskl.controller.settings");a.ApplicationSettingsController=function(){},pskl.utils.inherit(a.ApplicationSettingsController,pskl.controller.settings.AbstractSettingController),a.ApplicationSettingsController.prototype.init=function(){this.backgroundContainer=document.querySelector(".background-picker-wrapper"),this.addEventListener(this.backgroundContainer,"click",this.onBackgroundClick_);var a=pskl.UserSettings.get(pskl.UserSettings.CANVAS_BACKGROUND),b=this.backgroundContainer.querySelector("[data-background="+a+"]");b&&b.classList.add("selected");var c=pskl.UserSettings.get(pskl.UserSettings.GRID_WIDTH),d=document.querySelector(".grid-width-select"),e=d.querySelector('option[value="'+c+'"]');e&&e.setAttribute("selected","selected"),this.addEventListener(d,"change",this.onGridWidthChange_);var f=pskl.UserSettings.get(pskl.UserSettings.TILED_PREVIEW),g=document.querySelector(".tiled-preview-checkbox");f&&g.setAttribute("checked",f),this.addEventListener(g,"change",this.onTiledPreviewChange_);var h=document.querySelector(".max-fps-input");h.value=pskl.UserSettings.get(pskl.UserSettings.MAX_FPS),this.addEventListener(h,"change",this.onMaxFpsChange_);var i=document.querySelector(".layer-opacity-input");i.value=pskl.UserSettings.get(pskl.UserSettings.LAYER_OPACITY),this.addEventListener(i,"change",this.onLayerOpacityChange_),this.updateLayerOpacityText_(i.value),this.applicationSettingsForm=document.querySelector('[name="application-settings-form"]'),this.addEventListener(this.applicationSettingsForm,"submit",this.onFormSubmit_)},a.ApplicationSettingsController.prototype.onGridWidthChange_=function(a){var b=parseInt(a.target.value,10);pskl.UserSettings.set(pskl.UserSettings.GRID_WIDTH,b)},a.ApplicationSettingsController.prototype.onTiledPreviewChange_=function(a){pskl.UserSettings.set(pskl.UserSettings.TILED_PREVIEW,a.currentTarget.checked)},a.ApplicationSettingsController.prototype.onBackgroundClick_=function(a){var b=a.target,c=b.dataset.background;if(c){pskl.UserSettings.set(pskl.UserSettings.CANVAS_BACKGROUND,c);var d=this.backgroundContainer.querySelector(".selected");d&&d.classList.remove("selected"),b.classList.add("selected")}},a.ApplicationSettingsController.prototype.onMaxFpsChange_=function(a){var b=a.target,c=parseInt(b.value,10);c&&!isNaN(c)?pskl.UserSettings.set(pskl.UserSettings.MAX_FPS,c):b.value=pskl.UserSettings.get(pskl.UserSettings.MAX_FPS)},a.ApplicationSettingsController.prototype.onLayerOpacityChange_=function(a){var b=a.target,c=parseFloat(b.value);isNaN(c)?b.value=pskl.UserSettings.get(pskl.UserSettings.LAYER_OPACITY):(pskl.UserSettings.set(pskl.UserSettings.LAYER_OPACITY,c),pskl.UserSettings.set(pskl.UserSettings.LAYER_PREVIEW,0!==c),this.updateLayerOpacityText_(c))},a.ApplicationSettingsController.prototype.updateLayerOpacityText_=function(a){var b=document.querySelector(".layer-opacity-text");b.innerHTML=a},a.ApplicationSettingsController.prototype.onFormSubmit_=function(a){a.preventDefault(),$.publish(Events.CLOSE_SETTINGS_DRAWER)}}(),function(){var a=$.namespace("pskl.controller.settings.exportimage"),b=30,c=256,d="#FF00FF",e="#FFFFFF";a.GifExportController=function(a,b){this.piskelController=a,this.exportController=b},pskl.utils.inherit(a.GifExportController,pskl.controller.settings.AbstractSettingController),a.GifExportController.prototype.init=function(){this.uploadStatusContainerEl=document.querySelector(".gif-upload-status"),this.previewContainerEl=document.querySelector(".gif-export-preview"),this.uploadButton=document.querySelector(".gif-upload-button"),this.downloadButton=document.querySelector(".gif-download-button"),this.addEventListener(this.uploadButton,"click",this.onUploadButtonClick_),this.addEventListener(this.downloadButton,"click",this.onDownloadButtonClick_)},a.GifExportController.prototype.getZoom_=function(){return this.exportController.getExportZoom()},a.GifExportController.prototype.onUploadButtonClick_=function(a){a.preventDefault();var b=this.getZoom_(),c=this.piskelController.getFPS();this.renderAsImageDataAnimatedGIF(b,c,this.uploadImageData_.bind(this))},a.GifExportController.prototype.onDownloadButtonClick_=function(a){var b=this.getZoom_(),c=this.piskelController.getFPS();this.renderAsImageDataAnimatedGIF(b,c,this.downloadImageData_.bind(this))},a.GifExportController.prototype.downloadImageData_=function(a){var b=this.piskelController.getPiskel().getDescriptor().name+".gif";pskl.utils.BlobUtils.dataToBlob(a,"image/gif",function(a){pskl.utils.FileUtils.downloadAsFile(a,b)})},a.GifExportController.prototype.uploadImageData_=function(a){this.updatePreview_(a),this.previewContainerEl.classList.add("preview-upload-ongoing"),pskl.app.imageUploadService.upload(a,this.onImageUploadCompleted_.bind(this),this.onImageUploadFailed_.bind(this))},a.GifExportController.prototype.onImageUploadCompleted_=function(a){this.updatePreview_(a),this.updateStatus_(a),this.previewContainerEl.classList.remove("preview-upload-ongoing")},a.GifExportController.prototype.onImageUploadFailed_=function(a,b){500===b.status&&$.publish(Events.SHOW_NOTIFICATION,[{content:"Upload failed : "+b.responseText,hideDelay:5e3}])},a.GifExportController.prototype.updatePreview_=function(a){this.previewContainerEl.innerHTML='
'},a.GifExportController.prototype.renderAsImageDataAnimatedGIF=function(a,b,d){var f,g,h=pskl.app.currentColorsService.getCurrentColors(),i=this.piskelController.getLayers(),j=i.some(function(a){return a.isTransparent()}),k=!j&&h.lengthb){var d=Math.round((b-c.length)/2),e=a.substring(0,d),f=a.substring(a.length-d,a.length);a=e+c+f}return a}}(),function(){var a=$.namespace("pskl.controller.settings.exportimage"),b="{{width}} x {{height}} px, {{frames}}
{{rows}}, {{columns}}.",c=pskl.utils.Template.replace,d=function(a,b){return 1===b?"1 "+a:b+" "+a+"s"},e=function(a){return Math.pow(2,Math.ceil(Math.log(a)/Math.log(2)))};a.PngExportController=function(a,b){this.piskelController=a,this.exportController=b,this.onScaleChanged_=this.onScaleChanged_.bind(this)},pskl.utils.inherit(a.PngExportController,pskl.controller.settings.AbstractSettingController),a.PngExportController.prototype.init=function(){this.layoutContainer=document.querySelector(".png-export-layout-section"),this.dimensionInfo=document.querySelector(".png-export-dimension-info"),this.columnsInput=document.querySelector("#png-export-columns"),this.powerTwo=document.querySelector("#png-export-power-two");var a=document.querySelector(".png-download-button");this.initLayoutSection_(),this.updateDimensionLabel_(),this.addEventListener(a,"click",this.onDownloadClick_),this.addEventListener(this.columnsInput,"input",this.onColumnsChanged_),this.addEventListener(this.powerTwo,"change",this.onPowerTwoChanged_),$.subscribe(Events.EXPORT_SCALE_CHANGED,this.onScaleChanged_)},a.PngExportController.prototype.destroy=function(){$.unsubscribe(Events.EXPORT_SCALE_CHANGED,this.onScaleChanged_),this.superclass.destroy.call(this)},a.PngExportController.prototype.initLayoutSection_=function(){var a=this.piskelController.getFrameCount();1===a?this.layoutContainer.style.display="none":(this.columnsInput.value=this.getBestFit_(),this.powerTwo.checked=pskl.UserSettings.get("EXPORT_PNG_POWER_TWO"))},a.PngExportController.prototype.updateDimensionLabel_=function(){var a=this.exportController.getExportZoom(),f=this.piskelController.getFrameCount(),g=this.piskelController.getWidth()*a,h=this.piskelController.getHeight()*a,i=this.getColumns_(),j=Math.ceil(f/i);g=i*g,h=j*h,this.isPowerTwoEnabled_()&&(g=e(g),h=e(h)),this.dimensionInfo.innerHTML=c(b,{width:g,height:h,rows:d("row",j),columns:d("column",i),frames:d("frame",f)})},a.PngExportController.prototype.getColumns_=function(){return parseInt(this.columnsInput.value||1,10)},a.PngExportController.prototype.getBestFit_=function(){var a=this.piskelController.getWidth()/this.piskelController.getHeight(),b=this.piskelController.getFrameCount(),c=Math.round(Math.sqrt(b/a));return Math.max(1,Math.min(c,b))},a.PngExportController.prototype.isPowerTwoEnabled_=function(){return pskl.UserSettings.get("EXPORT_PNG_POWER_TWO")},a.PngExportController.prototype.onScaleChanged_=function(){this.updateDimensionLabel_()},a.PngExportController.prototype.onColumnsChanged_=function(){this.getColumns_()>this.piskelController.getFrameCount()?this.columnsInput.value=this.piskelController.getFrameCount():this.getColumns_()<1&&(this.columnsInput.value=1),this.updateDimensionLabel_()},a.PngExportController.prototype.onPowerTwoChanged_=function(){pskl.UserSettings.set("EXPORT_PNG_POWER_TWO",this.powerTwo.checked),this.updateDimensionLabel_()},a.PngExportController.prototype.onDownloadClick_=function(a){var b=this.piskelController.getPiskel().getDescriptor().name,c=b+".png",d=new pskl.rendering.PiskelRenderer(this.piskelController),f=d.renderAsCanvas(this.getColumns_()),g=f.width,h=f.height,i=this.exportController.getExportZoom();if(1!=i&&(f=pskl.utils.ImageResizer.resize(f,g*i,h*i,!1)),this.isPowerTwoEnabled_()){var j=pskl.utils.CanvasUtils.createCanvas(e(g*i),e(h*i));j.getContext("2d").drawImage(f,0,0),f=j}pskl.utils.BlobUtils.canvasToBlob(f,function(a){pskl.utils.FileUtils.downloadAsFile(a,c)})}}(),function(){var a=$.namespace("pskl.controller.settings.exportimage");a.ZipExportController=function(a,b){this.piskelController=a,this.exportController=b},pskl.utils.inherit(a.ZipExportController,pskl.controller.settings.AbstractSettingController),a.ZipExportController.prototype.init=function(){this.pngFilePrefixInput=document.querySelector(".zip-prefix-name"),this.pngFilePrefixInput.value="sprite_",this.splitByLayersCheckbox=document.querySelector(".zip-split-layers-checkbox");var a=document.querySelector(".zip-generate-button");this.addEventListener(a,"click",this.onZipButtonClick_)},a.ZipExportController.prototype.onZipButtonClick_=function(){var a=new window.JSZip;this.splitByLayersCheckbox.checked?this.splittedExport_(a):this.mergedExport_(a);var b=this.getPiskelName_()+".zip",c=a.generate({type:"blob"});pskl.utils.FileUtils.downloadAsFile(c,b)},a.ZipExportController.prototype.mergedExport_=function(a){for(var b=(""+this.piskelController.getFrameCount()).length,c=this.exportController.getExportZoom(),d=0;d\n\n";g+="#define "+c.toUpperCase()+"_FRAME_COUNT "+this.piskelController.getFrameCount()+"\n",g+="#define "+c.toUpperCase()+"_FRAME_WIDTH "+d+"\n",g+="#define "+c.toUpperCase()+"_FRAME_HEIGHT "+e+"\n\n",g+='/* Piskel data for "'+this.getPiskelName_()+'" */\n\n',g+="static const uint32_t "+c.toLowerCase(),g+="_data["+f+"]["+d*e+"] = {\n";for(var h=0;f>h;h++){var i=this.piskelController.renderFrameAt(h,!0),j=i.getContext("2d"),k=j.getImageData(0,0,d,e),l=k.data;g+="{\n";for(var m=0;m=1&&32>=a&&this.onScaleChange_())},a.ExportController.prototype.getExportZoom=function(){return parseInt(this.widthInput.value,10)/this.piskelController.getWidth()}}(),function(){var a=$.namespace("pskl.controller.settings.resize"),b="resize-origin-option";a.AnchorWidget=function(a){this.container=a,this.disabled=!1,pskl.utils.Event.addEventListener(this.container,"click",this.onResizeOriginClick_,this)},a.AnchorWidget.ORIGIN={TOPLEFT:"TOPLEFT",TOP:"TOP",TOPRIGHT:"TOPRIGHT",MIDDLELEFT:"MIDDLELEFT",MIDDLE:"MIDDLE",MIDDLERIGHT:"MIDDLERIGHT",BOTTOMLEFT:"BOTTOMLEFT",BOTTOM:"BOTTOM",BOTTOMRIGHT:"BOTTOMRIGHT"},a.AnchorWidget.prototype.destroy=function(a){pskl.utils.Event.removeAllEventListeners(this),this.container=null},a.AnchorWidget.prototype.onResizeOriginClick_=function(b){var c=b.target.dataset.origin;c&&a.AnchorWidget.ORIGIN[c]&&!this.disabled&&this.setOrigin(c)},a.AnchorWidget.prototype.setOrigin=function(a){this.origin=a;var c=document.querySelector("."+b+".selected");c&&c.classList.remove("selected");var d=document.querySelector("."+b+'[data-origin="'+a+'"]');d&&(d.classList.add("selected"),this.refreshNeighbors_(d))},a.AnchorWidget.prototype.getOrigin=function(){return this.origin},a.AnchorWidget.prototype.disable=function(){this.disabled=!0,this.container.classList.add("transition"),this.container.classList.add("disabled")},a.AnchorWidget.prototype.enable=function(){this.disabled=!1,this.container.classList.remove("disabled"),window.setTimeout(this.container.classList.remove.bind(this.container.classList,"transition"),250)},a.AnchorWidget.prototype.refreshNeighbors_=function(a){for(var c=document.querySelectorAll("."+b),d=0;d=c||isNaN(c))&&(a.val(b),c=b),c},a.ImportImageController.prototype.getImportType_=function(){return this.importType.filter(":checked").val()},a.ImportImageController.prototype.onImageLoaded_=function(a){this.importedImage_=a;var b=this.importedImage_.width,c=this.importedImage_.height;this.importedImage_.onload=function(){};var d=this.extractFileNameFromPath_(this.file_.name);this.fileNameContainer.html(d),this.fileNameContainer.attr("title",d),this.resizeWidth.val(b),this.resizeHeight.val(c),this.frameSizeX.val(b),this.frameSizeY.val(c),this.frameOffsetX.val(0),this.frameOffsetY.val(0),this.importPreview.width("auto"),this.importPreview.height("auto"),this.importPreview.html(""),this.importPreview.append(this.createImagePreview_())},a.ImportImageController.prototype.createImagePreview_=function(){var a=document.createElement("IMG");return a.src=this.importedImage_.src,a},a.ImportImageController.prototype.extractFileNameFromPath_=function(a){var b=[];return b=-1!==a.indexOf("/")?a.split("/"):-1!==a.indexOf("\\")?a.split("\\"):[a],b[b.length-1]},a.ImportImageController.prototype.importImageToPiskel_=function(){var a=this.importedImage_;if(a&&window.confirm("You are about to create a new Piskel, unsaved changes will be lost.")){var b=new window.SuperGif({gif:a}),c=this.resizeWidth.val(),d=this.resizeHeight.val();b.load({success:function(){var a=b.getFrames().map(function(a){return pskl.utils.CanvasUtils.createFromImageData(a.data)});"single"===this.getImportType_()||a.length>1?this.createPiskelFromImages_(a,c,d):this.createImagesFromSheet_(a[0]),this.closeDialog()}.bind(this),error:function(){"single"===this.getImportType_()?this.createPiskelFromImages_([a],c,d):this.createImagesFromSheet_(a),this.closeDialog()}.bind(this)})}},a.ImportImageController.prototype.createImagesFromSheet_=function(a){var b=this.sanitizeInputValue_(this.frameOffsetX,0),c=this.sanitizeInputValue_(this.frameOffsetY,0),d=this.sanitizeInputValue_(this.frameSizeX,1),e=this.sanitizeInputValue_(this.frameSizeY,1),f=pskl.utils.CanvasUtils.createFramesFromImage(a,b,c,d,e,!0,!0);this.createPiskelFromImages_(f,d,e)},a.ImportImageController.prototype.createFramesFromImages_=function(a,b,c){var d=!!this.smoothResize.prop("checked"),e=a.map(function(a){var e=pskl.utils.ImageResizer.resize(a,b,c,d);return pskl.utils.FrameUtils.createFromImage(e)});return e},a.ImportImageController.prototype.createPiskelFromImages_=function(a,b,c){var d=this.createFramesFromImages_(a,b,c),e=pskl.model.Layer.fromFrames("Layer 1",d),f=new pskl.model.piskel.Descriptor("Imported piskel",""),g=pskl.model.Piskel.fromLayers([e],f);pskl.app.piskelController.setPiskel(g),pskl.app.previewController.setFPS(Constants.DEFAULT.FPS)},a.ImportImageController.prototype.drawFrameGrid_=function(a,b,c,d){if(this.importedImage_){var e=this.importedImage_.width,f=this.importedImage_.height,g=this.importPreview.width(),h=this.importPreview.height(),i=this.importPreview.children("canvas"),j=i.get(0);i.length||(j=pskl.utils.CanvasUtils.createCanvas(g+1,h+1),this.importPreview.append(j),i=$(j));var k=j.getContext("2d");k.clearRect(0,0,j.width,j.height),k.beginPath();var l=Math.floor((e-a)/c),m=Math.floor((f-b)/d);if(l>0&&m>0){for(var n=g/e,o=h/f,p=l*c+a,q=m*d+b,r=a+.5;p+1>r&&e+1>r;r+=c)k.moveTo(r*n,b*o),k.lineTo(r*n,q*o);for(var s=b+.5;q+1>s&&f+1>s;s+=d)k.moveTo(a*n,s*o),k.lineTo(p*n,s*o);k.lineWidth=1,k.setLineDash([2,1]),k.strokeStyle="#000000",k.stroke(),i.show(),this.importPreview.addClass("no-border")}else this.hideFrameGrid_()}},a.ImportImageController.prototype.hideFrameGrid_=function(){this.importPreview.children("canvas").hide(),this.importPreview.removeClass("no-border")}}(),function(){var a=$.namespace("pskl.controller.dialogs");a.BrowseLocalController=function(a){},pskl.utils.inherit(a.BrowseLocalController,a.AbstractDialogController),a.BrowseLocalController.prototype.init=function(){this.superclass.init.call(this),this.localStorageItemTemplate_=pskl.utils.Template.get("local-storage-item-template"),this.service_=pskl.app.localStorageService,this.piskelList=$(".local-piskel-list"),this.prevSessionContainer=$(".previous-session"),this.fillLocalPiskelsList_(),this.piskelList.click(this.onPiskelsListClick_.bind(this))},a.BrowseLocalController.prototype.onPiskelsListClick_=function(a){var b=a.target.getAttribute("data-action"),c=a.target.getAttribute("data-name");"load"===b?window.confirm("This will erase your current piskel. Continue ?")&&(this.service_.load(c),this.closeDialog()):"delete"===b&&window.confirm("This will permanently DELETE this piskel from your computer. Continue ?")&&(this.service_.remove(c),this.fillLocalPiskelsList_())},a.BrowseLocalController.prototype.fillLocalPiskelsList_=function(){var a="",b=this.service_.getKeys();b.sort(function(a,b){return a.dateb.date?-1:0}),b.forEach(function(b){var c=pskl.utils.DateUtils.format(b.date,"{{Y}}/{{M}}/{{D}} {{H}}:{{m}}");a+=pskl.utils.Template.replace(this.localStorageItemTemplate_,{name:b.name,date:c})}.bind(this));var c=this.piskelList.get(0).tBodies[0];c.innerHTML=a}}(),function(){var a=$.namespace("pskl.controller.dialogs"),b="cheatsheet-shortcut-editing";a.CheatsheetController=function(){},pskl.utils.inherit(a.CheatsheetController,a.AbstractDialogController),a.CheatsheetController.prototype.init=function(){this.superclass.init.call(this),this.cheatsheetEl=document.getElementById("cheatsheetContainer"),this.eventTrapInput=document.getElementById("cheatsheetEventTrap"),pskl.utils.Event.addEventListener(".cheatsheet-restore-defaults","click",this.onRestoreDefaultsClick_,this),pskl.utils.Event.addEventListener(this.cheatsheetEl,"click",this.onCheatsheetClick_,this),pskl.utils.Event.addEventListener(this.eventTrapInput,"keydown",this.onEventTrapKeydown_,this),$.subscribe(Events.SHORTCUTS_CHANGED,this.onShortcutsChanged_.bind(this)),this.initMarkup_(),document.querySelector(".cheatsheet-helptext").setAttribute("title",this.getHelptextTitle_())},a.CheatsheetController.prototype.destroy=function(){this.eventTrapInput.blur(),pskl.utils.Event.removeAllEventListeners(),this.cheatsheetEl=null},a.CheatsheetController.prototype.onRestoreDefaultsClick_=function(){window.confirm("Replace all custom shortcuts by the default Piskel shortcuts ?")&&pskl.app.shortcutService.restoreDefaultShortcuts()},a.CheatsheetController.prototype.onShortcutsChanged_=function(){this.initMarkup_()},a.CheatsheetController.prototype.onCheatsheetClick_=function(a){var c=pskl.utils.Dom.getParentWithData(a.target,"shortcutId");if(!c)return void pskl.utils.Dom.removeClass(b);var d=c.dataset.shortcutId,e=pskl.app.shortcutService.getShortcutById(d);c.classList.contains(b)?(pskl.utils.Dom.removeClass(b),this.eventTrapInput.blur()):e.isEditable()&&(pskl.utils.Dom.removeClass(b),c.classList.add(b),this.eventTrapInput.focus())},a.CheatsheetController.prototype.onEventTrapKeydown_=function(a){var c=document.querySelector("."+b);if(c){var d=pskl.service.keyboard.KeyUtils.createKeyFromEvent(a);if(d){var e=pskl.service.keyboard.KeyUtils.stringify(d),f=c.dataset.shortcutId,g=pskl.app.shortcutService.getShortcutById(f);pskl.app.shortcutService.updateShortcut(g,e),c.classList.remove(b),this.eventTrapInput.blur(),a.preventDefault()}}},a.CheatsheetController.prototype.initMarkup_=function(){this.initMarkupForCategory_("TOOL",".cheatsheet-tool-shortcuts",this.getToolIconClass_),this.initMarkupForCategory_("MISC",".cheatsheet-misc-shortcuts"),this.initMarkupForCategory_("COLOR",".cheatsheet-color-shortcuts"),this.initMarkupForCategory_("SELECTION",".cheatsheet-selection-shortcuts"),this.initMarkupForCategory_("STORAGE",".cheatsheet-storage-shortcuts")},a.CheatsheetController.prototype.getToolIconClass_=function(a){return"tool-icon cheatsheet-icon-"+a.getId()},a.CheatsheetController.prototype.initMarkupForCategory_=function(a,b,c){var d=pskl.service.keyboard.Shortcuts[a],e=Object.keys(d).map(function(a){return this.toDescriptor_(d[a],c)}.bind(this));this.initMarkupForDescriptors_(e,b)},a.CheatsheetController.prototype.toDescriptor_=function(a,b){var c="function"==typeof b?b(a):"";return{shortcut:a,iconClass:c}},a.CheatsheetController.prototype.initMarkupForDescriptors_=function(a,b){var c=document.querySelector(b);if(c){var d=a.map(this.getMarkupForDescriptor_.bind(this));c.innerHTML=d.join("")}},a.CheatsheetController.prototype.getMarkupForDescriptor_=function(a){var b=pskl.utils.Template.get("cheatsheet-shortcut-template"),c=a.shortcut,d=c.isCustom()?c.getDescription()+" *":c.getDescription(),e=[];c.isUndefined()&&e.push("cheatsheet-shortcut-undefined"),c.isEditable()&&e.push("cheatsheet-shortcut-editable");var f=c.isEditable()?"Click to edit the key":"Shortcut cannot be remapped",g=pskl.utils.Template.replace(b,{id:c.getId(),title:f,icon:a.iconClass,description:d,key:this.formatKey_(c.getDisplayKey()),className:e.join(" ")});return g},a.CheatsheetController.prototype.formatKey_=function(a){return pskl.utils.UserAgent.isMac&&(a=a.replace("ctrl","cmd")),a=a.replace(/left/i,"←"),a=a.replace(/up/i,"↑"),a=a.replace(/right/i,"→"),a=a.replace(/down/i,"↓"),a=a.replace(/>/g,">"),a=a.replace(/'+b+""},"");return b='
'+b+"
"}}(),function(){var a=$.namespace("pskl.controller.dialogs"),b={cheatsheet:{template:"templates/dialogs/cheatsheet.html",controller:a.CheatsheetController},"create-palette":{template:"templates/dialogs/create-palette.html",controller:a.CreatePaletteController},"browse-local":{template:"templates/dialogs/browse-local.html",controller:a.BrowseLocalController},"import-image":{template:"templates/dialogs/import-image.html",controller:a.ImportImageController}};a.DialogsController=function(a){this.piskelController=a,this.closePopupShortcut=pskl.service.keyboard.Shortcuts.MISC.CLOSE_POPUP,this.currentDialog_=null},a.DialogsController.prototype.init=function(){this.dialogContainer_=document.getElementById("dialog-container"),this.dialogWrapper_=document.getElementById("dialog-container-wrapper"),$.subscribe(Events.DIALOG_DISPLAY,this.onDialogDisplayEvent_.bind(this)),$.subscribe(Events.DIALOG_HIDE,this.hideDialog.bind(this));var a=pskl.service.keyboard.Shortcuts.COLOR.CREATE_PALETTE;pskl.app.shortcutService.registerShortcut(a,this.onCreatePaletteShortcut_.bind(this));var b=pskl.service.keyboard.Shortcuts.MISC.CHEATSHEET;pskl.app.shortcutService.registerShortcut(b,this.onCheatsheetShortcut_.bind(this)),pskl.utils.Event.addEventListener(".cheatsheet-link","click",this.onCheatsheetShortcut_,this),this.dialogWrapper_.classList.add("animated")},a.DialogsController.prototype.onCreatePaletteShortcut_=function(){this.toggleDialog_("create-palette")},a.DialogsController.prototype.onCheatsheetShortcut_=function(){this.toggleDialog_("cheatsheet")},a.DialogsController.prototype.toggleDialog_=function(a){this.isDisplayingDialog_()?this.getCurrentDialogId_()===a&&this.hideDialog():this.showDialog(a)},a.DialogsController.prototype.onDialogDisplayEvent_=function(a,b){this.showDialog(b.dialogId,b.initArgs)},a.DialogsController.prototype.showDialog=function(a,c){if(!this.isDisplayingDialog_()){var d=b[a];if(!d)return void console.error("Could not find dialog configuration for dialogId : "+a);this.dialogContainer_.classList.add(a),this.dialogContainer_.innerHTML=pskl.utils.Template.get(d.template);var e=new d.controller(this.piskelController);e.init(c),this.currentDialog_={id:a,controller:e},pskl.app.shortcutService.registerShortcut(this.closePopupShortcut,this.hideDialog.bind(this)),this.dialogWrapper_.classList.add("show")}},a.DialogsController.prototype.hideDialog=function(){!this.isHiding_&&this.isDisplayingDialog_()&&(pskl.app.shortcutService.unregisterShortcut(this.closePopupShortcut),this.dialogWrapper_.classList.remove("show"),window.setTimeout(this.cleanupDialogContainer_.bind(this),500),this.isHiding_=!0)},a.DialogsController.prototype.cleanupDialogContainer_=function(){this.dialogContainer_.classList.remove(this.currentDialog_.id),this.currentDialog_.controller.destroy(),this.currentDialog_=null,this.dialogContainer_.innerHTML="",this.isHiding_=!1},a.DialogsController.prototype.isDisplayingDialog_=function(){return null!==this.currentDialog_},a.DialogsController.prototype.getCurrentDialogId_=function(){return this.currentDialog_?this.currentDialog_.id:null}}(),function(){var a=$.namespace("pskl.widgets"),b="#000000"; a.ColorsList=function(a){this.selectedIndex=-1,this.palette=new pskl.model.Palette("tmp","tmp",[]),this.container=a,this.colorsList=this.container.querySelector(".colors-list"),this.colorPreviewEl=this.container.querySelector(".color-preview"),$(a).sortable({placeholder:"colors-list-drop-proxy",update:this.onColorDrop_.bind(this),items:".create-palette-color"}),this.colorsList.addEventListener("click",this.onColorContainerClick_.bind(this));var b=a.querySelector(".color-picker-container");this.hslRgbColorPicker=new pskl.widgets.HslRgbColorPicker(b,this.onColorUpdated_.bind(this)),this.hslRgbColorPicker.init()},a.ColorsList.prototype.setColors=function(a){0===a.length&&a.push(b),this.palette.setColors(a),this.selectColor_(0),this.refresh_()},a.ColorsList.prototype.getColors=function(){return this.palette.getColors()},a.ColorsList.prototype.destroy=function(){this.hslRgbColorPicker.destroy(),this.container=null,this.colorsList=null,this.colorPreviewEl=null},a.ColorsList.prototype.refreshColorElement_=function(a){var b=this.palette.get(this.selectedIndex),c=document.querySelector('[data-palette-index="'+a+'"]');c&&(c.style.background=b,c.classList.toggle("light-color",this.isLight_(b)))},a.ColorsList.prototype.onColorContainerClick_=function(a){var b=a.target;b.classList.contains("create-palette-color")?this.onPaletteColorClick_(a,b):b.classList.contains("create-palette-new-color")?this.onNewColorClick_(a,b):b.classList.contains("create-palette-remove-color")&&this.onRemoveColorClick_(a,b),this.refresh_()},a.ColorsList.prototype.onColorUpdated_=function(a){var b=a.toHexString();this.colorPreviewEl.style.background=b,this.palette&&(this.palette.set(this.selectedIndex,b),this.refreshColorElement_(this.selectedIndex))},a.ColorsList.prototype.onPaletteColorClick_=function(a,b){var c=parseInt(b.dataset.paletteIndex,10);this.selectColor_(c)},a.ColorsList.prototype.onRemoveColorClick_=function(a,b){var c=b.parentNode,d=parseInt(c.dataset.paletteIndex,10);this.removeColor_(d)},a.ColorsList.prototype.onNewColorClick_=function(a,b){var c=this.palette.get(this.selectedIndex)||"#000000";this.palette.add(c),this.selectColor_(this.palette.size()-1)},a.ColorsList.prototype.refresh_=function(){var a="",b=pskl.utils.Template.get("create-palette-color-template"),c=this.palette.getColors();c.forEach(function(c,d){var e=d===this.selectedIndex;a+=pskl.utils.Template.replace(b,{color:c,index:d,":selected":e,":light-color":this.isLight_(c)})}.bind(this)),a+='
  • +
  • ',this.colorsList.innerHTML=a},a.ColorsList.prototype.selectColor_=function(a){this.selectedIndex=a,this.hslRgbColorPicker.setColor(this.palette.get(a))},a.ColorsList.prototype.removeColor_=function(a){this.palette.removeAt(a),this.refresh_()},a.ColorsList.prototype.isLight_=function(a){var b=window.tinycolor(a).toRgb();return b.r+b.b+b.g>384},a.ColorsList.prototype.onColorDrop_=function(a,b){var c=b.item.get(0),d=parseInt(c.dataset.paletteIndex,10),e=$(".create-palette-color").index(b.item);this.palette.move(d,e),this.selectedIndex=e,this.refresh_()}}(),function(){var a=$.namespace("pskl.widgets");a.HslRgbColorPicker=function(a,b){this.container=a,this.colorUpdatedCallback=b,this.tinyColor=null,this.hsvColor=null,this.rgbColor=null,this.lastInputTimestamp_=0},a.HslRgbColorPicker.prototype.init=function(){var a=pskl.utils.UserAgent.isFirefox,b=pskl.utils.UserAgent.isChrome,c=b||a?"input":"change";this.container.addEventListener(c,this.onPickerChange_.bind(this)),this.container.addEventListener("keydown",this.onKeydown_.bind(this)),this.container.addEventListener("blur",this.onBlur_.bind(this),!0),this.spectrumEl=this.container.querySelector(".color-picker-spectrum"),$(this.spectrumEl).spectrum({flat:!0,showButtons:!1,move:this.setColor.bind(this),change:this.setColor.bind(this)}),this.setColor("#000000")},a.HslRgbColorPicker.prototype.destroy=function(){this.container=null,this.spectrumEl=null},a.HslRgbColorPicker.prototype.onPickerChange_=function(a){var b=a.target;if(b.dataset.dimension){var c=b.dataset.model,d=b.dataset.dimension,e=b.value;this.updateColor_(e,c,d)}},a.HslRgbColorPicker.prototype.onKeydown_=function(a){var b=a.target,c="text"===b.getAttribute("type").toLowerCase();if(c&&b.dataset.dimension){var d=b.dataset.model;if("rgb"===d||"hsv"===d){var e=this.getIncrement_(a);if(e){var f=b.dataset.dimension,g=parseInt(b.value,10);this.updateColor_(g+e,d,f)}}}},a.HslRgbColorPicker.prototype.getIncrement_=function(a){var b=0,c=pskl.service.keyboard.KeycodeTranslator.toChar(a.keyCode);return"up"===c?b=1:"down"===c&&(b=-1),a.shiftKey&&(b=5*b),b},a.HslRgbColorPicker.prototype.updateColor_=function(a,b,c){var d=this.toModelValue_(a,b,c);if("hsv"===b||"rgb"===b){if(!isNaN(d)){var e=this.getColor_(b);e[c]=this.normalizeDimension_(d,c),this.setColor(e)}}else"hex"===b&&/^#([a-f0-9]{3}){1,2}$/i.test(d)&&this.setColor(d)},a.HslRgbColorPicker.prototype.onBlur_=function(a){var b=a.target,c="text"===b.getAttribute("type").toLowerCase();if(c&&b.dataset.dimension){var d=b.dataset.model,e=b.dataset.dimension;b.value=this.toInputValue_(d,e)}},a.HslRgbColorPicker.prototype.setColor=function(a){this.unplugged||(this.unplugged=!0,this.hsvColor=this.toHsvColor_(a),this.tinyColor=this.toTinyColor_(a),this.rgbColor=this.tinyColor.toRgb(),this.updateInputs(),$(".color-picker-spectrum").spectrum("set",this.tinyColor),this.colorUpdatedCallback(this.tinyColor),this.unplugged=!1)},a.HslRgbColorPicker.prototype.updateInputs=function(){for(var a=this.container.querySelectorAll("input"),b=0;b";this.piskelController=a},a.LocalStorageService.prototype.init=function(){},a.LocalStorageService.prototype.save=function(a){var b=a.getDescriptor().name,c=a.getDescriptor().description,d=pskl.utils.Serializer.serializePiskel(a,!1);if(pskl.app.localStorageService.getPiskel(b)){var e=window.confirm("There is already a piskel saved as "+b+". Overwrite ?");if(!e)return Q.reject('Cancelled by user, "'+b+'" already exists')}try{return this.removeFromKeys_(b),this.addToKeys_(b,c,Date.now()),window.localStorage.setItem("piskel."+b,d),Q.resolve()}catch(f){return Q.reject(f.message)}},a.LocalStorageService.prototype.load=function(a){var b=this.getPiskel(a),c=(this.getKey_(a),JSON.parse(b)),d=c.piskel.fps,e=c.piskel.description;pskl.utils.serialization.Deserializer.deserialize(c,function(b){b.setDescriptor(new pskl.model.piskel.Descriptor(a,e,!0)),pskl.app.piskelController.setPiskel(b),pskl.app.previewController.setFPS(d)})},a.LocalStorageService.prototype.remove=function(a){this.removeFromKeys_(a),window.localStorage.removeItem("piskel."+a)},a.LocalStorageService.prototype.saveKeys_=function(a){window.localStorage.setItem("piskel.keys",JSON.stringify(a))},a.LocalStorageService.prototype.removeFromKeys_=function(a){var b=this.getKeys(),c=b.filter(function(b){return b.name!==a});this.saveKeys_(c)},a.LocalStorageService.prototype.getKey_=function(a){var b=this.getKeys().filter(function(b){return b.name===a});return b.length>0?b[0]:null},a.LocalStorageService.prototype.addToKeys_=function(a,b,c){var d=this.getKeys();d.push({name:a,description:b,date:c}),this.saveKeys_(d)},a.LocalStorageService.prototype.getPiskel=function(a){return window.localStorage.getItem("piskel."+a)},a.LocalStorageService.prototype.getKeys=function(a){var b=window.localStorage.getItem("piskel.keys");return JSON.parse(b)||[]}}(),function(){var a=$.namespace("pskl.service.storage");a.GalleryStorageService=function(a){this.piskelController=a},a.GalleryStorageService.prototype.init=function(){},a.GalleryStorageService.prototype.save=function(a){var b=a.getDescriptor(),c=Q.defer(),d={framesheet:this.piskelController.serialize(),fps:this.piskelController.getFPS(),name:b.name,description:b.description,frames:this.piskelController.getFrameCount(),first_frame_as_png:pskl.app.getFirstFrameAsPng(),framesheet_as_png:pskl.app.getFramesheetAsPng()};b.isPublic&&(d["public"]=!0);var e=function(a){c.resolve()},f=function(a){c.reject(this.getErrorMessage_(a))};return pskl.utils.Xhr.post(Constants.APPENGINE_SAVE_URL,d,e,f.bind(this)),c.promise},a.GalleryStorageService.prototype.getErrorMessage_=function(a){var b="";return b=401===a.status?"Session expired, please log in again.":403===a.status?"Unauthorized action, this sprite belongs to another account.":500===a.status?"Unexpected server error, please contact us on Github (piskel) or Twitter (@piskelapp)":"Unknown error"}}(),function(){var a=$.namespace("pskl.service.storage"),b=".piskel";a.DesktopStorageService=function(a){this.piskelController=a||pskl.app.piskelController,this.hideNotificationTimeoutID=0},a.DesktopStorageService.prototype.init=function(){},a.DesktopStorageService.prototype.save=function(a,c){if(a.savePath&&!c)return this.saveAtPath_(a,a.savePath);var d=a.getDescriptor().name,e=pskl.utils.FileUtilsDesktop.chooseFilenameDialog(d,b);return e.then(this.saveAtPath_.bind(this,a))},a.DesktopStorageService.prototype.saveAtPath_=function(a,b){if(!b)return Q.reject("Invalid file name");var c=pskl.utils.Serializer.serializePiskel(a,!1);return b=this.addExtensionIfNeeded_(b),a.savePath=b,a.setName(this.extractFilename_(b)),pskl.utils.FileUtilsDesktop.saveToFile(c,b)},a.DesktopStorageService.prototype.openPiskel=function(){return pskl.utils.FileUtilsDesktop.chooseFilenameDialog().then(this.load)},a.DesktopStorageService.prototype.load=function(a){pskl.utils.FileUtilsDesktop.readFile(a).then(function(b){pskl.utils.PiskelFileUtils.decodePiskelFile(b,function(b,c,d){b.setDescriptor(c),b.savePath=a,pskl.app.piskelController.setPiskel(b),pskl.app.previewController.setFPS(d)})})},a.DesktopStorageService.prototype.addExtensionIfNeeded_=function(a){var c=a.substr(-b.length)===b;return c?a:a+b},a.DesktopStorageService.prototype.extractFilename_=function(a){var b=/[\/\\]([^\/\\]*)\.piskel$/gi.exec(a);return b&&b[1]?b[1]:void 0}}(),function(){var a=$.namespace("pskl.service"),b=6e4;a.BackupService=function(a){this.piskelController=a,this.lastHash=null},a.BackupService.prototype.init=function(){var a=window.localStorage.getItem("bkp.next.piskel"),c=window.localStorage.getItem("bkp.next.info");a&&c&&this.savePiskel_("prev",a,c),window.setInterval(this.backup.bind(this),b)},a.BackupService.prototype.backup=function(){var a=this.piskelController.getPiskel(),b=a.getDescriptor(),c=a.getHash(),d={name:b.name,description:b.info,fps:this.piskelController.getFPS(),date:Date.now(),hash:c};c!==this.lastHash&&(this.lastHash=c,this.savePiskel_("next",this.piskelController.serialize(),JSON.stringify(d)))},a.BackupService.prototype.getPreviousPiskelInfo=function(){var a=window.localStorage.getItem("bkp.prev.info");return a?JSON.parse(a):void 0},a.BackupService.prototype.load=function(){var a=window.localStorage.getItem("bkp.prev.piskel"),b=window.localStorage.getItem("bkp.prev.info");a=JSON.parse(a),b=JSON.parse(b),pskl.utils.serialization.Deserializer.deserialize(a,function(a){a.setDescriptor(new pskl.model.piskel.Descriptor(b.name,b.description,!0)),pskl.app.piskelController.setPiskel(a),pskl.app.previewController.setFPS(b.fps)})},a.BackupService.prototype.savePiskel_=function(a,b,c){try{window.localStorage.setItem("bkp."+a+".piskel",b),window.localStorage.setItem("bkp."+a+".info",c)}catch(d){console.error("Could not save piskel backup in localStorage.",d)}}}(),function(){var a=$.namespace("pskl.service");a.BeforeUnloadService=function(a){this.piskelController=a},a.BeforeUnloadService.prototype.init=function(){window.addEventListener("beforeunload",this.onBeforeUnload.bind(this))},a.BeforeUnloadService.prototype.onBeforeUnload=function(a){if(pskl.app.backupService.backup(),pskl.app.savedStatusService.isDirty()){var b="Your Piskel seems to have unsaved changes";return(a||window.event).returnValue=b,b}}}(),function(){var a=$.namespace("pskl.service");a.HistoryService=function(a,b,c){this.piskelController=a||pskl.app.piskelController,this.shortcutService=b||pskl.app.shortcutService,this.deserializer=c||pskl.utils.serialization.Deserializer,this.stateQueue=[],this.currentIndex=-1,this.lastLoadState=-1},a.HistoryService.SNAPSHOT="SNAPSHOT",a.HistoryService.REPLAY="REPLAY",a.HistoryService.SNAPSHOT_PERIOD=50,a.HistoryService.LOAD_STATE_INTERVAL=50,a.HistoryService.prototype.init=function(){$.subscribe(Events.PISKEL_SAVE_STATE,this.onSaveStateEvent.bind(this));var b=pskl.service.keyboard.Shortcuts;this.shortcutService.registerShortcut(b.MISC.UNDO,this.undo.bind(this)),this.shortcutService.registerShortcut(b.MISC.REDO,this.redo.bind(this)),this.saveState({type:a.HistoryService.SNAPSHOT})},a.HistoryService.prototype.onSaveStateEvent=function(a,b){this.saveState(b)},a.HistoryService.prototype.saveState=function(b){this.stateQueue=this.stateQueue.slice(0,this.currentIndex+1),this.currentIndex=this.currentIndex+1;var c={action:b,frameIndex:b.state?b.state.frameIndex:this.piskelController.currentFrameIndex,layerIndex:b.state?b.state.layerIndex:this.piskelController.currentLayerIndex,uuid:pskl.utils.Uuid.generate()},d=b.type===a.HistoryService.SNAPSHOT,e=this.currentIndex%a.HistoryService.SNAPSHOT_PERIOD===0;(d||e)&&(c.piskel=this.piskelController.serialize(!0)),this.stateQueue.push(c),$.publish(Events.HISTORY_STATE_SAVED)},a.HistoryService.prototype.getCurrentStateId=function(){var a=this.stateQueue[this.currentIndex];return a?a.uuid:!1},a.HistoryService.prototype.undo=function(){this.loadState(this.currentIndex-1)},a.HistoryService.prototype.redo=function(){this.loadState(this.currentIndex+1)},a.HistoryService.prototype.isLoadStateAllowed_=function(b){var c=Date.now()-this.lastLoadState>a.HistoryService.LOAD_STATE_INTERVAL,d=b>=0&&bb)throw"Could not find previous SNAPSHOT saved in history stateQueue";var c=this.getSnapshotFromState_(b),d=this.onPiskelLoaded_.bind(this,a,b);this.deserializer.deserialize(c,d)}}catch(e){console.error("[CRITICAL ERROR] : Unable to load a history state."),this.logError_(e),this.stateQueue=[],this.currentIndex=-1}},a.HistoryService.prototype.logError_=function(a){"string"==typeof a?console.error(a):(console.error(a.message),console.error(a.stack))},a.HistoryService.prototype.getSnapshotFromState_=function(a){var b=this.stateQueue[a],c=b.piskel;return"string"==typeof c&&(c=JSON.parse(c),b.piskel=c),c},a.HistoryService.prototype.onPiskelLoaded_=function(a,b,c){var d=this.getPiskelSize_();c.setDescriptor(this.piskelController.piskel.getDescriptor()),c.savePath=this.piskelController.piskel.savePath,this.piskelController.setPiskel(c);for(var e=b+1;a>=e;e++){var f=this.stateQueue[e];this.setupState(f),this.replayState(f)}var g=this.stateQueue[a+1];g&&this.setupState(g),this.currentIndex=a,$.publish(Events.PISKEL_RESET),$.publish(Events.HISTORY_STATE_LOADED),d!==this.getPiskelSize_()&&$.publish(Events.FRAME_SIZE_CHANGED)},a.HistoryService.prototype.getPiskelSize_=function(){return this.piskelController.getWidth()+"x"+this.piskelController.getHeight()},a.HistoryService.prototype.setupState=function(a){this.piskelController.setCurrentFrameIndex(a.frameIndex),this.piskelController.setCurrentLayerIndex(a.layerIndex)},a.HistoryService.prototype.replayState=function(a){var b=a.action,c=(b.type,this.piskelController.getLayerAt(a.layerIndex)),d=c.getFrameAt(a.frameIndex);b.scope.replay(d,b.replay)}}(),function(){for(var a=$.namespace("pskl.service.color"),b=.1,c=.1,d=.9,e=36,f=10,g=[],h=0;f>h;h++)g.push(h*e);a.ColorSorter=function(){this.colorsHslMap_={}},a.ColorSorter.prototype.sort=function(a){this.colorsHslMap_={},a.forEach(function(a){this.colorsHslMap_[a]=window.tinycolor(a).toHsl()}.bind(this));var f=a.filter(function(a){var b=this.colorsHslMap_[a];return b.l<=c}.bind(this)),h=a.filter(function(a){var b=this.colorsHslMap_[a];return b.l>=d}.bind(this)),i=a.filter(function(a){return-1===h.indexOf(a)&&-1===f.indexOf(a)}).filter(function(a){var c=this.colorsHslMap_[a];return c.s<=b}.bind(this));f=this.sortOnHslProperty_(f,"l"),h=this.sortOnHslProperty_(h,"l"),i=this.sortOnHslProperty_(i,"h");var j=f.concat(h,i),k=a.filter(function(a){return-1===j.indexOf(a)}),l=g.map(function(a){var b=k.filter(function(b){var c=this.colorsHslMap_[b];return c.h>=a&&c.he?f>g?this.compareValues_(c.s,d.s):this.compareValues_(c.l,d.l):this.compareValues_(c.h,d.h)}.bind(this));return b},a.ColorSorter.prototype.sortOnHslProperty_=function(a,b){return a.sort(function(a,c){var d=this.colorsHslMap_[a],e=this.colorsHslMap_[c];return this.compareValues_(d[b],e[b])}.bind(this))},a.ColorSorter.prototype.compareValues_=function(a,b){return a>b?1:b>a?-1:0}}(),function(){var a=$.namespace("pskl.service.palette");a.CurrentColorsPalette=function(){this.name="Current colors",this.id=Constants.CURRENT_COLORS_PALETTE_ID,this.colorSorter=new pskl.service.color.ColorSorter},a.CurrentColorsPalette.prototype.getColors=function(){var a=pskl.app.currentColorsService.getCurrentColors();return a=a.slice(0,Constants.MAX_PALETTE_COLORS),this.colorSorter.sort(a)}}(),function(){var a=$.namespace("pskl.service.palette");a.PaletteService=function(){this.dynamicPalettes=[],this.localStorageService=window.localStorage},a.PaletteService.prototype.getPalettes=function(){var a=this.localStorageService.getItem("piskel.palettes"),b=JSON.parse(a)||[];return b=b.map(function(a){return pskl.model.Palette.fromObject(a)}),this.dynamicPalettes.concat(b)},a.PaletteService.prototype.getPaletteById=function(a){var b=this.getPalettes();return this.findPaletteInArray_(a,b)},a.PaletteService.prototype.savePalette=function(a){var b=this.getPalettes(),c=this.findPaletteInArray_(a.id,b);if(c){var d=b.indexOf(c);b.splice(d,1,a)}else b.push(a);this.savePalettes_(b),$.publish(Events.SHOW_NOTIFICATION,[{content:"Palette "+a.name+" successfully saved !"}]),window.setTimeout($.publish.bind($,Events.HIDE_NOTIFICATION),2e3)},a.PaletteService.prototype.addDynamicPalette=function(a){this.dynamicPalettes.push(a)},a.PaletteService.prototype.deletePaletteById=function(a){var b=this.getPalettes(),c=b.filter(function(b){return b.id!==a});this.savePalettes_(c)},a.PaletteService.prototype.savePalettes_=function(a){a=a.filter(function(a){return-1===this.dynamicPalettes.indexOf(a)}.bind(this)),this.localStorageService.setItem("piskel.palettes",JSON.stringify(a)),$.publish(Events.PALETTE_LIST_UPDATED)},a.PaletteService.prototype.findPaletteInArray_=function(a,b){var c=null;return b.forEach(function(b){b.id===a&&(c=b)}),c}}(),function(){var a=$.namespace("pskl.service.palette");a.PaletteGplWriter=function(a){this.palette=a},a.PaletteGplWriter.prototype.write=function(){var a=[];return a.push("GIMP Palette"),a.push("Name: "+this.palette.name),a.push("Columns: 0"),a.push("#"),this.palette.getColors().forEach(function(b){a.push(this.writeColorLine(b))}.bind(this)),a.push("\r\n"),a.join("\r\n")},a.PaletteGplWriter.prototype.writeColorLine=function(a){var b=window.tinycolor(a),c=b.toRgb(),d=[];return d.push(this.padString(c.r,3)),d.push(this.padString(c.g,3)),d.push(this.padString(c.b,3)),d.push("Untitled"),d.join(" ")},a.PaletteGplWriter.prototype.padString=function(a,b){a=a.toString();var c=new Array(1+b-a.length).join(" ");return c+a}}(),function(){var a=$.namespace("pskl.service.palette.reader");a.AbstractPaletteFileReader=function(a,b,c,d){this.file=a,this.onSuccess=b,this.onError=c,this.colorLineRegexp=d},a.AbstractPaletteFileReader.prototype.extractColorFromLine=Constants.ABSTRACT_FUNCTION,a.AbstractPaletteFileReader.prototype.read=function(){pskl.utils.FileUtils.readFile(this.file,this.onFileLoaded_.bind(this))},a.AbstractPaletteFileReader.prototype.onFileLoaded_=function(a){var b=pskl.utils.Base64.toText(a),c=b.match(/[^\r\n]+/g),d=c.filter(function(a){return this.colorLineRegexp.test(a)}.bind(this)),e=d.map(this.extractColorFromLine.bind(this));if(e.length){var f=pskl.utils.Uuid.generate(),g=new pskl.model.Palette(f,this.file.name,e);this.onSuccess(g)}else this.onError()}}(),function(){var a=$.namespace("pskl.service.palette.reader"),b=/^(\s*\d{1,3})(\s*\d{1,3})(\s*\d{1,3})/;a.PaletteGplReader=function(a,c,d){this.superclass.constructor.call(this,a,c,d,b)},pskl.utils.inherit(a.PaletteGplReader,a.AbstractPaletteFileReader),a.PaletteGplReader.prototype.extractColorFromLine=function(a){var c=a.match(b),d=window.tinycolor({r:parseInt(c[1],10),g:parseInt(c[2],10),b:parseInt(c[3],10)});return d.toHexString()}}(),function(){var a=$.namespace("pskl.service.palette.reader");a.PaletteImageReader=function(a,b,c){this.file=a,this.onSuccess=b,this.onError=c,this.colorSorter_=new pskl.service.color.ColorSorter},a.PaletteImageReader.prototype.read=function(){pskl.utils.FileUtils.readImageFile(this.file,this.onImageLoaded_.bind(this))},a.PaletteImageReader.prototype.onImageLoaded_=function(a){var b=new pskl.worker.imageprocessor.ImageProcessor(a,this.onWorkerSuccess_.bind(this),this.onWorkerStep_.bind(this),this.onWorkerError_.bind(this));$.publish(Events.SHOW_PROGRESS,[{name:"Processing image colors ..."}]),b.process()},a.PaletteImageReader.prototype.onWorkerSuccess_=function(a){var b=a.data,c=b.colorsMap,d=Object.keys(c);if(d.length>Constants.MAX_PALETTE_COLORS)this.onError("Too many colors : "+d.length);else{var e=pskl.utils.Uuid.generate(),f=this.colorSorter_.sort(d),g=new pskl.model.Palette(e,this.file.name+" palette",f);this.onSuccess(g)}$.publish(Events.HIDE_PROGRESS)},a.PaletteImageReader.prototype.onWorkerStep_=function(a){var b=a.data.progress;$.publish(Events.UPDATE_PROGRESS,[{progress:b}])},a.PaletteImageReader.prototype.onWorkerError_=function(a){$.publish(Events.HIDE_PROGRESS),this.onError("Unable to process the image : "+a.data.message)}}(),function(){var a=$.namespace("pskl.service.palette.reader"),b=/^(\d{1,3})\s+(\d{1,3})\s+(\d{1,3})/;a.PalettePalReader=function(a,c,d){this.superclass.constructor.call(this,a,c,d,b)},pskl.utils.inherit(a.PalettePalReader,a.AbstractPaletteFileReader),a.PalettePalReader.prototype.extractColorFromLine=function(a){var c=a.match(b),d="rgb("+c[1]+","+c[2]+","+c[3]+")",e=window.tinycolor(d);return e.toHexString()}}(),function(){var a=$.namespace("pskl.service.palette.reader"),b=/^[A-F0-9]{2}([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})/;a.PaletteTxtReader=function(a,c,d){this.superclass.constructor.call(this,a,c,d,b)},pskl.utils.inherit(a.PaletteTxtReader,a.AbstractPaletteFileReader),a.PaletteTxtReader.prototype.extractColorFromLine=function(a){var c=a.match(b),d="#"+c[1]+c[2]+c[3];return d.toLowerCase()}}(),function(){var a=$.namespace("pskl.service.palette"),b={gpl:a.reader.PaletteGplReader,pal:a.reader.PalettePalReader,txt:a.reader.PaletteTxtReader,img:a.reader.PaletteImageReader};a.PaletteImportService=function(){},a.PaletteImportService.prototype.read=function(a,b,c){var d=this.getReader_(a,b,c);d?d.read():console.error("Could not find reader for file : %s",a.name)},a.PaletteImportService.prototype.isImage_=function(a){return 0===a.type.indexOf("image")},a.PaletteImportService.prototype.getReader_=function(a,b,c){var d=this.getReaderClass_(a);return d?new d(a,b,c):null},a.PaletteImportService.prototype.getReaderClass_=function(a){var c;if(this.isImage_(a))c=b.img;else{var d=this.getExtension_(a);c=b[d]}return c},a.PaletteImportService.prototype.getExtension_=function(a){var b=a.name.split("."),c=b[b.length-1];return c.toLowerCase()}}(),function(){var a=$.namespace("pskl.service.pensize"),b=1,c=4;a.PenSizeService=function(){this.size=b},a.PenSizeService.prototype.init=function(){this.size=pskl.UserSettings.get(pskl.UserSettings.PEN_SIZE);var a=pskl.service.keyboard.Shortcuts;pskl.app.shortcutService.registerShortcut(a.MISC.INCREASE_PENSIZE,this.increasePenSize_.bind(this)),pskl.app.shortcutService.registerShortcut(a.MISC.DECREASE_PENSIZE,this.decreasePenSize_.bind(this))},a.PenSizeService.prototype.increasePenSize_=function(){this.setPenSize(this.size+1)},a.PenSizeService.prototype.decreasePenSize_=function(){this.setPenSize(this.size-1)},a.PenSizeService.prototype.getPenSize=function(){return this.size},a.PenSizeService.prototype.setPenSize=function(a){this.isPenSizeValid_(a)&&a!=this.size&&(this.size=a,pskl.UserSettings.set(pskl.UserSettings.PEN_SIZE,a),$.publish(Events.PEN_SIZE_CHANGED))},a.PenSizeService.prototype.isPenSizeValid_=function(a){return isNaN(a)?!1:a>=b&&c>=a}}(),function(){var a=$.namespace("pskl.service");a.SavedStatusService=function(a,b){this.piskelController=a,this.historyService=b,this.lastSavedStateIndex="",this.publishStatusUpdateEvent_=this.publishStatusUpdateEvent_.bind(this)},a.SavedStatusService.prototype.init=function(){$.subscribe(Events.TOOL_RELEASED,this.publishStatusUpdateEvent_),$.subscribe(Events.PISKEL_RESET,this.publishStatusUpdateEvent_),$.subscribe(Events.PISKEL_SAVED,this.onPiskelSaved.bind(this)), diff --git a/piskelapp-partials/main-partial.html b/piskelapp-partials/main-partial.html index 27206e98..1e6cd74f 100644 --- a/piskelapp-partials/main-partial.html +++ b/piskelapp-partials/main-partial.html @@ -896,9 +896,9 @@ (function () { /** - * See @Gruntfile.js => after build, -2016-06-02-07-21 is replaced by the build version + * See @Gruntfile.js => after build, -2016-06-02-07-27 is replaced by the build version */ -var version = '-2016-06-02-07-21'; +var version = '-2016-06-02-07-27'; var versionHasNotBeenReplaced = version.indexOf('@@') === 0; if (versionHasNotBeenReplaced) { version = '';