From a8758ffbe1f10a0761c5a0e8885522a429b1d7b2 Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 8 Dec 2011 09:15:37 -0500 Subject: [PATCH] Use `requestAnimFrame` polyfill instead of setInterval in `fabric.util.animate`. Add `fabric.util.requestAnimFrame`. --- HEADER.js | 2 +- dist/all.js | 42 ++++++++++++++++++++++++++++++++++-------- dist/all.min.js | 4 ++-- dist/all.min.js.gz | Bin 34887 -> 34997 bytes package.json | 2 +- src/util/misc.js | 32 +++++++++++++++++++++++++------- 6 files changed, 63 insertions(+), 19 deletions(-) diff --git a/HEADER.js b/HEADER.js index 44f88549..5ed5b784 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2011, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "0.7.1" }; +var fabric = fabric || { version: "0.7.2" }; if (typeof exports != 'undefined') { exports.fabric = fabric; diff --git a/dist/all.js b/dist/all.js index 0e16b493..d6c46b56 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2011, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "0.7.1" }; +var fabric = fabric || { version: "0.7.2" }; if (typeof exports != 'undefined') { exports.fabric = fabric; @@ -1849,19 +1849,36 @@ fabric.Observable = { endValue = 'endValue' in options ? options.endValue : 100; options.onStart && options.onStart(); - - var interval = setInterval(function() { + + (function tick() { time = +new Date(); pos = time > finish ? 1 : (time - start) / duration; onChange(startValue + (endValue - startValue) * easing(pos)); if (time > finish || abort()) { - clearInterval(interval); options.onComplete && options.onComplete(); - } - }, 10); - - return interval; + return; + } + requestAnimFrame(tick); + })(); } + + /** + * requestAnimationFrame polyfill from http://paulirish.com/2011/requestanimationframe-for-smart-animating/ + * @method requestAnimFrame + * @memberOf fabric.util + * @param {Function} callback Callback to invoke + * @param {DOMElement} element optional Element to associate with animation + */ + var requestAnimFrame = (function() { + return window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function(callback, element) { + window.setTimeout(callback, 1000 / 60); + }; + })(); /** * Loads image element from given url and passes it to a callback @@ -1889,6 +1906,7 @@ fabric.Observable = { fabric.util.getRandomInt = getRandomInt; fabric.util.falseFunction = falseFunction; fabric.util.animate = animate; + fabric.util.requestAnimFrame = requestAnimFrame; fabric.util.loadImage = loadImage; })(); (function() { @@ -4393,6 +4411,14 @@ fabric.util.string = { */ renderOnAddition: true, + /** + * Function that determines clipping of entire canvas area + * Being passed context as first argument. See clipping canvas area in https://github.com/kangax/fabric.js/wiki/FAQ + * @property + * @type Function + */ + clipTo: null, + /** * @constant * @type Number diff --git a/dist/all.min.js b/dist/all.min.js index 92c73a81..fc862296 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,7 +1,7 @@ /* Fabric.js Copyright 2008-2011, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ -var fabric=fabric||{version:"0.7.1"};if(typeof exports!="undefined"){exports.fabric=fabric}if(typeof document!="undefined"&&typeof window!="undefined"){fabric.document=document;fabric.window=window}else{fabric.document=require("jsdom").jsdom("");fabric.window=fabric.document.createWindow()}fabric.isTouchSupported="ontouchstart" in fabric.document.documentElement;if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i");fabric.window=fabric.document.createWindow()}fabric.isTouchSupported="ontouchstart" in fabric.document.documentElement;if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i=y.length+G){B()}else{setTimeout(arguments.callee,10)}});return function(D){if(A){D()}else{z.push(D)}}})(),supports:function(A,z){var y=fabric.document.createElement("span").style;if(y[A]===undefined){return false}y[A]=z;return y[A]===z},textAlign:function(B,A,y,z){if(A.get("textAlign")=="right"){if(y>0){B=" "+B}}else{if(y400}if(F==500){F=400}for(var G in D){G=parseInt(G,10);if(!C||GA){A=G}H.push(G)}if(FA){F=A}H.sort(function(J,I){return(B?(J>F&&I>F)?JI:(JI:JU){U=P}if(O>S){S=O}if(Pw){w=h}K.push(h);h=0;continue}var A=aa.glyphs[af[Z]]||aa.missingGlyph;if(!A){continue}h+=C=Number(A.w||aa.w)+T}K.push(h);h=Math.max(w,h);var m=[];for(var Z=K.length;Z--;){m[Z]=h-K[Z]}if(C===null){return null}U+=(G.width-C);B+=G.minX;var v,p;if(n){v=I;p=I.firstChild}else{v=fabric.document.createElement("span");v.className="cufon cufon-canvas";v.alt=D;p=fabric.document.createElement("canvas");v.appendChild(p);if(z.printable){var X=fabric.document.createElement("span");X.className="cufon-alt";X.appendChild(fabric.document.createTextNode(D));v.appendChild(X)}}var ag=v.style;var N=p.style||{};var k=o.convert(G.height-H+S);var ae=Math.ceil(k);var R=ae/k;p.width=Math.ceil(o.convert(h+U-B)*R);p.height=ae;H+=G.minY;N.top=Math.round(o.convert(H-aa.ascent))+"px";N.left=Math.round(o.convert(B))+"px";var j=Math.ceil(o.convert(h*R));var t=j+"px";var s=o.convert(aa.height);var E=(z.lineHeight-1)*o.convert(-aa.ascent/5)*(L-1);Cufon.textOptions.width=j;Cufon.textOptions.height=(s*L)+E;Cufon.textOptions.lines=L;if(a){ag.width=t;ag.height=s+"px"}else{ag.paddingLeft=t;ag.paddingBottom=(s-1)+"px"}var ac=Cufon.textOptions.context||p.getContext("2d"),J=ae/G.height;ac.save();ac.scale(J,J);ac.translate(-B-((1/J*p.width)/2)+(Cufon.fonts[aa.family].offsetLeft||0),-H-(Cufon.textOptions.height/J)/2);ac.lineWidth=aa.face["underline-thickness"];ac.save();function q(i,g){ac.strokeStyle=g;ac.beginPath();ac.moveTo(0,i);ac.lineTo(h,i);ac.stroke()}var r=Cufon.getTextDecoration(z),u=z.fontStyle==="italic";function ad(){ac.save();ac.fillStyle=z.backgroundColor;var aj=0,ak=0;if(z.textAlign==="right"){ac.translate(m[ak],0)}else{if(z.textAlign==="center"){ac.translate(m[ak]/2,0)}}for(var ah=0,x=af.length;ah.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}');function c(e,f){return a(e,/(?:em|ex|%)$/i.test(f)?"1em":f)}function a(h,i){if(/px$/i.test(i)){return parseFloat(i)}var g=h.style.left,f=h.runtimeStyle.left;h.runtimeStyle.left=h.currentStyle.left;h.style.left=i;var e=h.style.pixelLeft;h.style.left=g;h.runtimeStyle.left=f;return e}return function(T,z,O,w,D,U,M){var h=(z===null);if(h){z=D.alt}var B=T.viewBox;var j=O.computedFontSize||(O.computedFontSize=new Cufon.CSS.Size(c(U,O.get("fontSize"))+"px",T.baseSize));var L=O.computedLSpacing;if(L==undefined){L=O.get("letterSpacing");O.computedLSpacing=L=(L=="normal")?0:~~j.convertFrom(a(U,L))}var t,m;if(h){t=D;m=D.firstChild}else{t=fabric.document.createElement("span");t.className="cufon cufon-vml";t.alt=z;m=fabric.document.createElement("span");m.className="cufon-vml-canvas";t.appendChild(m);if(w.printable){var R=fabric.document.createElement("span");R.className="cufon-alt";R.appendChild(fabric.document.createTextNode(z));t.appendChild(R)}if(!M){t.appendChild(fabric.document.createElement("cvml:shape"))}}var Z=t.style;var G=m.style;var f=j.convert(B.height),W=Math.ceil(f);var K=W/f;var J=B.minX,I=B.minY;G.height=W;G.top=Math.round(j.convert(I-T.ascent));G.left=Math.round(j.convert(J));Z.height=j.convert(T.height)+"px";var p=Cufon.getTextDecoration(w);var y=O.get("color");var X=Cufon.CSS.textTransform(z,O).split("");var e=0,H=0,q=null;var x,r,A=w.textShadow;for(var S=0,Q=0,P=X.length;Ss?1:(l-j)/m;o(i+(q-i)*p(r));if(l>s||n()){clearInterval(k);t.onComplete&&t.onComplete()}},10);return k}function f(j,l,k){if(j){var i=new Image();i.onload=function(){l&&l.call(k,i);i=i.onload=null};i.src=j}}fabric.util.removeFromArray=h;fabric.util.degreesToRadians=d;fabric.util.toFixed=a;fabric.util.getRandomInt=e;fabric.util.falseFunction=g;fabric.util.animate=c;fabric.util.loadImage=f})();(function(){var d=Array.prototype.slice;if(!Array.prototype.indexOf){Array.prototype.indexOf=function(g){if(this===void 0||this===null){throw new TypeError()}var h=Object(this),e=h.length>>>0;if(e===0){return -1}var i=0;if(arguments.length>0){i=Number(arguments[1]);if(i!==i){i=0}else{if(i!==0&&i!==(1/0)&&i!==-(1/0)){i=(i>0||-1)*Math.floor(Math.abs(i))}}}if(i>=e){return -1}var f=i>=0?i:Math.max(e-Math.abs(i),0);for(;f>>0;f>>0;g>>0;f>>0;f>>0;g>>0,f=0,h;if(arguments.length>1){h=arguments[1]}else{do{if(f in this){h=this[f++];break}if(++f>=e){throw new TypeError()}}while(true)}for(;f=e){e=h[f][g]}}}else{while(f--){if(h[f]>=e){e=h[f]}}}return e}function c(h,g){if(!h||h.length===0){return undefined}var f=h.length-1,e=g?h[f][g]:h[f];if(g){while(f--){if(h[f][g]-1?c(j,l.match(/opacity:\s*(\d?\.?\d*)/)[1]):j}for(var m in l){if(m==="opacity"){c(j,l[m])}else{var k=(m==="float"||m==="cssFloat")?(typeof n.styleFloat==="undefined"?"cssFloat":"styleFloat"):m;n[k]=l[m]}}return j}var h=fabric.document.createElement("div"),g=typeof h.style.opacity==="string",b=typeof h.style.filter==="string",a=fabric.document.defaultView,f=a&&typeof a.getComputedStyle!=="undefined",d=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,c=function(i){return i};if(g){c=function(i,j){i.style.opacity=j;return i}}else{if(b){c=function(i,j){var k=i.style;if(i.currentStyle&&!i.currentStyle.hasLayout){k.zoom=1}if(d.test(k.filter)){j=j>=0.9999?"":("alpha(opacity="+(j*100)+")");k.filter=k.filter.replace(d,j)}else{k.filter+=" alpha(opacity="+(j*100)+")"}return i}}}fabric.util.setStyle=e})();(function(){var h=Array.prototype.slice;function g(j){return typeof j==="string"?fabric.document.getElementById(j):j}function b(j){return h.call(j,0)}try{var i=b(fabric.document.childNodes) instanceof Array}catch(a){}if(!i){b=function(k){var j=new Array(k.length),l=k.length;while(l--){j[l]=k[l]}return j}}function c(k,j){var l=fabric.document.createElement(k);for(var m in j){if(m==="class"){l.className=j[m]}else{if(m==="for"){l.htmlFor=j[m]}else{l.setAttribute(m,j[m])}}}return l}function f(j,k){if((" "+j.className+" ").indexOf(" "+k+" ")===-1){j.className+=(j.className?" ":"")+k}}function e(k,l,j){if(typeof l==="string"){l=c(l,j)}if(k.parentNode){k.parentNode.replaceChild(l,k)}l.appendChild(k);return l}function d(k){var j=0,l=0;do{j+=k.offsetTop||0;l+=k.offsetLeft||0;k=k.offsetParent}while(k);return({left:l,top:j})}(function(){var k=fabric.document.documentElement.style;var l="userSelect" in k?"userSelect":"MozUserSelect" in k?"MozUserSelect":"WebkitUserSelect" in k?"WebkitUserSelect":"KhtmlUserSelect" in k?"KhtmlUserSelect":"";function m(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=fabric.util.falseFunction}if(l){n.style[l]="none"}else{if(typeof n.unselectable=="string"){n.unselectable="on"}}return n}function j(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=null}if(l){n.style[l]=""}else{if(typeof n.unselectable=="string"){n.unselectable=""}}return n}fabric.util.makeElementUnselectable=m;fabric.util.makeElementSelectable=j})();(function(){function j(k,o){var m=fabric.document.getElementsByTagName("head")[0],l=fabric.document.createElement("script"),n=true;l.type="text/javascript";l.setAttribute("runat","server");l.onload=l.onreadystatechange=function(p){if(n){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete"){return}n=false;o(p||fabric.window.event);l=l.onload=l.onreadystatechange=null}};l.src=k;m.appendChild(l)}fabric.util.getScript=j})();fabric.util.getById=g;fabric.util.toArray=b;fabric.util.makeElement=c;fabric.util.addClass=f;fabric.util.wrapElement=e;fabric.util.getElementOffset=d})();(function(){function d(e,f){return e+(/\?/.test(e)?"&":"?")+f}var c=(function(){var h=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest()}];for(var e=h.length;e--;){try{var g=h[e]();if(g){return h[e]}}catch(f){}}})();function a(){}function b(g,f){f||(f={});var j=f.method?f.method.toUpperCase():"GET",i=f.onComplete||function(){},h=c(),e;h.onreadystatechange=function(){if(h.readyState===4){i(h);h.onreadystatechange=a}};if(j==="GET"){e=null;if(typeof f.parameters=="string"){g=d(g,f.parameters)}}h.open(j,g,true);if(j==="POST"||j==="PUT"){h.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}h.send(e);return h}fabric.util.request=b})();(function(b){var c=b.fabric||(b.fabric={}),i=c.util.object.extend,f=c.util.string.capitalize,j=c.util.object.clone;var d={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix"};function p(u,t){if(!u){return}var w,s,r={};if(u.parentNode&&/^g$/i.test(u.parentNode.nodeName)){r=c.parseAttributes(u.parentNode,t)}var v=t.reduce(function(y,x){w=u.getAttribute(x);s=parseFloat(w);if(w){if((x==="fill"||x==="stroke")&&w==="none"){w=""}if(x==="fill-rule"){w=(w==="evenodd")?"destination-over":w}if(x==="transform"){w=c.parseTransformAttribute(w)}if(x in d){x=d[x]}y[x]=isNaN(s)?w:s}return y},{});v=i(v,i(a(u),c.parseStyleAttribute(u)));return i(r,v)}c.parseTransformAttribute=(function(){function r(K,L){var M=L[0];K[0]=Math.cos(M);K[1]=Math.sin(M);K[2]=-Math.sin(M);K[3]=Math.cos(M)}function w(M,N){var L=N[0],K=(N.length===2)?N[1]:N[0];M[0]=L;M[3]=K}function H(K,L){K[2]=L[0]}function t(K,L){K[1]=L[0]}function E(K,L){K[4]=L[0];if(L.length===2){K[5]=L[1]}}var y=[1,0,0,1,0,0],s="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",I="(?:\\s+,?\\s*|,\\s*)",z="(?:(skewX)\\s*\\(\\s*("+s+")\\s*\\))",x="(?:(skewY)\\s*\\(\\s*("+s+")\\s*\\))",G="(?:(rotate)\\s*\\(\\s*("+s+")(?:"+I+"("+s+")"+I+"("+s+"))?\\s*\\))",J="(?:(scale)\\s*\\(\\s*("+s+")(?:"+I+"("+s+"))?\\s*\\))",C="(?:(translate)\\s*\\(\\s*("+s+")(?:"+I+"("+s+"))?\\s*\\))",F="(?:(matrix)\\s*\\(\\s*("+s+")"+I+"("+s+")"+I+"("+s+")"+I+"("+s+")"+I+"("+s+")"+I+"("+s+")\\s*\\))",D="(?:"+F+"|"+C+"|"+J+"|"+G+"|"+z+"|"+x+")",A="(?:"+D+"(?:"+I+D+")*)",u="^\\s*(?:"+A+"?)\\s*$",B=new RegExp(u),v=new RegExp(D);return function(L){var K=y.concat();if(!L||(L&&!B.test(L))){return K}L.replace(v,function(P){var M=new RegExp(D).exec(P).filter(function(Q){return(Q!==""&&Q!=null)}),N=M[1],O=M.slice(2).map(parseFloat);switch(N){case"translate":E(K,O);break;case"rotate":r(K,O);break;case"scale":w(K,O);break;case"skewX":H(K,O);break;case"skewY":t(K,O);break;case"matrix":K=O;break}});return K}})();function l(u){if(!u){return null}u=u.trim();var w=u.indexOf(",")>-1;u=u.split(/\s+/);var s=[];if(w){for(var t=0,r=u.length;t0){this.init(d,e)}}a.prototype={constructor:a,init:function(d,e){this.x=d;this.y=e},add:function(d){return new a(this.x+d.x,this.y+d.y)},addEquals:function(d){this.x+=d.x;this.y+=d.y;return this},scalarAdd:function(d){return new a(this.x+d,this.y+d)},scalarAddEquals:function(d){this.x+=d;this.y+=d;return this},subtract:function(d){return new a(this.x-d.x,this.y-d.y)},subtractEquals:function(d){this.x-=d.x;this.y-=d.y;return this},scalarSubtract:function(d){return new a(this.x-d,this.y-d)},scalarSubtractEquals:function(d){this.x-=d;this.y-=d;return this},multiply:function(d){return new a(this.x*d,this.y*d)},multiplyEquals:function(d){this.x*=d;this.y*=d;return this},divide:function(d){return new a(this.x/d,this.y/d)},divideEquals:function(d){this.x/=d;this.y/=d;return this},eq:function(d){return(this.x==d.x&&this.y==d.y)},lt:function(d){return(this.xd.x&&this.y>d.y)},gte:function(d){return(this.x>=d.x&&this.y>=d.y)},lerp:function(e,d){return new a(this.x+(e.x-this.x)*d,this.y+(e.y-this.y)*d)},distanceFrom:function(f){var e=this.x-f.x,d=this.y-f.y;return Math.sqrt(e*e+d*d)},min:function(d){return new a(Math.min(this.x,d.x),Math.min(this.y,d.y))},max:function(d){return new a(Math.max(this.x,d.x),Math.max(this.y,d.y))},toString:function(){return this.x+","+this.y},setXY:function(d,e){this.x=d;this.y=e},setFromPoint:function(d){this.x=d.x;this.y=d.y},swap:function(e){var d=this.x,f=this.y;this.x=e.x;this.y=e.y;e.x=d;e.y=f}}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Intersection){b.warn("fabric.Intersection is already defined");return}function c(d){if(arguments.length>0){this.init(d)}}b.Intersection=c;b.Intersection.prototype={init:function(d){this.status=d;this.points=[]},appendPoint:function(d){this.points.push(d)},appendPoints:function(d){this.points=this.points.concat(d)}};b.Intersection.intersectLineLine=function(h,f,l,k){var m,i=(k.x-l.x)*(h.y-l.y)-(k.y-l.y)*(h.x-l.x),j=(f.x-h.x)*(h.y-l.y)-(f.y-h.y)*(h.x-l.x),g=(k.y-l.y)*(f.x-h.x)-(k.x-l.x)*(f.y-h.y);if(g!=0){var e=i/g,d=j/g;if(0<=e&&e<=1&&0<=d&&d<=1){m=new c("Intersection");m.points.push(new b.Point(h.x+e*(f.x-h.x),h.y+e*(f.y-h.y)))}else{m=new c("No Intersection")}}else{if(i==0||j==0){m=new c("Coincident")}else{m=new c("Parallel")}}return m};b.Intersection.intersectLinePolygon=function(e,d,l){var m=new c("No Intersection"),f=l.length;for(var h=0;h0){m.status="Intersection"}return m};b.Intersection.intersectPolygonPolygon=function(j,h){var f=new c("No Intersection"),l=j.length;for(var k=0;k0){f.status="Intersection"}return f};b.Intersection.intersectPolygonRectangle=function(n,e,d){var g=e.min(d),m=e.max(d),f=new b.Point(m.x,g.y),l=new b.Point(g.x,m.y),k=c.intersectLinePolygon(g,f,n),j=c.intersectLinePolygon(f,m,n),i=c.intersectLinePolygon(m,l,n),h=c.intersectLinePolygon(l,g,n),o=new c("No Intersection");o.appendPoints(k.points);o.appendPoints(j.points);o.appendPoints(i.points);o.appendPoints(h.points);if(o.points.length>0){o.status="Intersection"}return o}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Color){b.warn("fabric.Color is already defined.");return}function c(d){if(!d){this.setSource([0,0,0,1])}else{this._tryParsingColor(d)}}b.Color=c;b.Color.prototype={_tryParsingColor:function(d){var e=c.sourceFromHex(d);if(!e){e=c.sourceFromRgb(d)}if(e){this.setSource(e)}},getSource:function(){return this._source},setSource:function(d){this._source=d},toRgb:function(){var d=this.getSource();return"rgb("+d[0]+","+d[1]+","+d[2]+")"},toRgba:function(){var d=this.getSource();return"rgba("+d[0]+","+d[1]+","+d[2]+","+d[3]+")"},toHex:function(){var h=this.getSource();var f=h[0].toString(16);f=(f.length==1)?("0"+f):f;var e=h[1].toString(16);e=(e.length==1)?("0"+e):e;var d=h[2].toString(16);d=(d.length==1)?("0"+d):d;return f.toUpperCase()+e.toUpperCase()+d.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var d=this.getSource();d[3]=e;this.setSource(d);return this},toGrayscale:function(){var f=this.getSource(),e=parseInt((f[0]*0.3+f[1]*0.59+f[2]*0.11).toFixed(0),10),d=f[3];this.setSource([e,e,e,d]);return this},toBlackWhite:function(d){var g=this.getSource(),f=(g[0]*0.3+g[1]*0.59+g[2]*0.11).toFixed(0),e=g[3],d=d||127;f=(Number(f)=0;--k){if(j.intersectsWithObject(this._objects[k])||j.isContainedWithinObject(this._objects[k])){g=k;break}}e(this._objects,j);this._objects.splice(g,0,j)}return this.renderAll()},bringForward:function(k){var n=this.getObjects(),h=n.indexOf(k),g=h;if(h!==n.length-1){for(var m=h+1,j=this._objects.length;m"};f(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(l){var k=l.getContext("2d"),g=k.getImageData(0,0,l.width,l.height),p=g.data,m=g.width,r=g.height,q,h,o,n;for(o=0;o0)?0:-v),r.ey-((u>0)?0:-u),t,s);this.contextTop.lineWidth=this.selectionLineWidth;this.contextTop.strokeStyle=this.selectionBorderColor;this.contextTop.strokeRect(r.ex+a-((v>0)?0:t),r.ey+a-((u>0)?0:s),t,s)},_findSelectedObjects:function(x){var y,t,D=[],s=this._groupSelector.ex,C=this._groupSelector.ey,r=s+this._groupSelector.left,A=C+this._groupSelector.top,z,w=new fabric.Point(f(s,r),f(C,A)),B=new fabric.Point(l(s,r),l(C,A));for(var u=0,v=this._objects.length;u1){var D=new fabric.Group(D);this.setActiveGroup(D);D.saveCoords();this.fire("selection:created",{target:D})}}this.renderAll()},findTarget:function(v,s){var u,w=this.getPointer(v);var t=this.getActiveGroup();if(t&&!s&&this.containsPoint(v,t)){u=t;return u}for(var r=this._objects.length;r--;){if(this._objects[r]&&this.containsPoint(v,this._objects[r])){u=this._objects[r];this.relatedTarget=u;break}}if(u&&u.selectable){return u}},getPointer:function(r){var s=q(r);return{x:s.x-this._offset.left,y:s.y-this._offset.top}},_createUpperCanvas:function(){this.upperCanvasEl=this._createCanvasElement();this.upperCanvasEl.className="upper-canvas";this.wrapperEl.appendChild(this.upperCanvasEl);this._applyCanvasStyle(this.upperCanvasEl);this.contextTop=this.upperCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.CONTAINER_CLASS});fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"});fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(s){var t=this.getWidth()||s.width,r=this.getHeight()||s.height;fabric.util.setStyle(s,{position:"absolute",width:t+"px",height:r+"px",left:0,top:0});s.width=t;s.height=r;fabric.util.makeElementUnselectable(s)},getContext:function(){return this.contextTop},setActiveObject:function(r,s){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=r;r.setActive(true);this.renderAll();this.fire("object:selected",{target:r,e:s});return this},getActiveObject:function(){return this._activeObject},discardActiveObject:function(){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=null;return this},setActiveGroup:function(r){this._activeGroup=r;return this},getActiveGroup:function(){return this._activeGroup},discardActiveGroup:function(){var r=this.getActiveGroup();if(r){r.destroy()}return this.setActiveGroup(null)},deactivateAll:function(){var s=this.getObjects(),t=0,r=s.length;for(;t1){var o=new fabric.PathGroup(q,n)}else{var o=q[0]}o.setSourcePath(m);if(!(o instanceof fabric.PathGroup)){fabric.util.object.extend(o,n);if(typeof n.angle!=="undefined"){o.setAngle(n.angle)}}g(o,l)})}}}},this)}catch(c){fabric.log(c.message)}},loadFromJSON:function(a,d){if(!a){return}var b=JSON.parse(a);if(!b||(b&&!b.objects)){return}this.clear();var c=this;this._enlivenObjects(b.objects,function(){c.backgroundColor=b.background;if(d){d()}});return this},_enlivenObjects:function(b,e){var c=0,a=b.filter(function(f){return f.type==="image"}).length;var d=this;b.forEach(function(h,g){if(!h.type){return}switch(h.type){case"image":case"font":fabric[fabric.util.string.capitalize(h.type)].fromObject(h,function(i){d.insertAt(i,g,true);if(++c===a){if(e){e()}}});break;default:var f=fabric[fabric.util.string.camelize(fabric.util.string.capitalize(h.type))];if(f&&f.fromObject){d.insertAt(f.fromObject(h),g,true)}break}});if(a===0&&e){e()}},_toDataURL:function(a,b){this.clone(function(c){b(c.toDataURL(a))})},_toDataURLWithMultiplier:function(a,c,b){this.clone(function(d){b(d.toDataURLWithMultiplier(a,c))})},clone:function(c){var a=fabric.document.createElement("canvas");a.width=this.getWidth();a.height=this.getHeight();var b=this.__clone||(this.__clone=new fabric.Canvas(a));b.clipTo=this.clipTo;return b.loadFromJSON(JSON.stringify(this.toJSON()),function(){if(c){c(b)}})}});(function(a){var d=a.fabric||(a.fabric={}),l=d.util.object.extend,m=d.util.object.clone,c=d.util.toFixed,k=d.util.string.capitalize,p=d.util.getPointer,b=d.util.degreesToRadians,o=Array.prototype.slice;if(d.Object){return}d.Object=d.util.createClass({type:"object",includeDefaultValues:true,NUM_FRACTION_DIGITS:2,FX_DURATION:500,MIN_SCALE_LIMIT:0.1,stateProperties:("top left width height scaleX scaleY flipX flipY theta angle opacity cornersize fill overlayFill stroke strokeWidth fillRule borderScaleFactor transformMatrix selectable").split(" "),top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:false,flipY:false,theta:0,opacity:1,angle:0,cornersize:12,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",fill:"rgb(0,0,0)",fillRule:"source-over",overlayFill:null,stroke:null,strokeWidth:1,borderOpacityWhenMoving:0.4,borderScaleFactor:1,transformMatrix:null,selectable:true,hasControls:true,hasBorders:true,callSuper:function(i){var q=this.constructor.superclass.prototype[i];return(arguments.length>1)?q.apply(this,o.call(arguments,1)):q.call(this)},initialize:function(i){i&&this.setOptions(i)},setOptions:function(q){var r=this.stateProperties.length,s;while(r--){s=this.stateProperties[r];if(s in q){this.set(s,q[s])}}},transform:function(i){i.globalAlpha=this.opacity;i.translate(this.left,this.top);i.rotate(this.theta);i.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(){var i={type:this.type,left:c(this.left,this.NUM_FRACTION_DIGITS),top:c(this.top,this.NUM_FRACTION_DIGITS),width:c(this.width,this.NUM_FRACTION_DIGITS),height:c(this.height,this.NUM_FRACTION_DIGITS),fill:this.fill,overlayFill:this.overlayFill,stroke:this.stroke,strokeWidth:this.strokeWidth,scaleX:c(this.scaleX,this.NUM_FRACTION_DIGITS),scaleY:c(this.scaleY,this.NUM_FRACTION_DIGITS),angle:c(this.getAngle(),this.NUM_FRACTION_DIGITS),flipX:this.flipX,flipY:this.flipY,opacity:c(this.opacity,this.NUM_FRACTION_DIGITS),selectable:this.selectable};if(!this.includeDefaultValues){i=this._removeDefaultValues(i)}return i},toDatalessObject:function(){return this.toObject()},_removeDefaultValues:function(q){var i=d.Object.prototype.options;if(i){this.stateProperties.forEach(function(r){if(q[r]===i[r]){delete q[r]}})}return q},isActive:function(){return !!this.active},setActive:function(i){this.active=!!i;return this},toString:function(){return"#"},set:function(q,i){var s=(q==="scaleX"||q==="scaleY")&&ir.x&&s.xr.y&&u.y=v)&&(s.d.y>=v)){continue}if((s.o.x==s.d.x)&&(s.o.x>=w)){x=s.o.x;u=v}else{z=0;y=(s.d.y-s.o.y)/(s.d.x-s.o.x);r=v-z*w;q=s.o.y-y*s.o.x;x=-(r-q)/(z-y);u=r+z*x}if(x>=w){t+=1}if(t==2){break}}return t},_getImageLines:function(r,q){return{topline:{o:r.tl,d:r.tr},rightline:{o:r.tr,d:r.br},bottomline:{o:r.br,d:r.bl},leftline:{o:r.bl,d:r.tl}}},_setCornerCoords:function(){var t=this.oCoords,q=b(45-this.getAngle()),s=Math.sqrt(2*Math.pow(this.cornersize,2))/2,i=s*Math.cos(q),r=s*Math.sin(q);t.tl.corner={tl:{x:t.tl.x-r,y:t.tl.y-i},tr:{x:t.tl.x+i,y:t.tl.y-r},bl:{x:t.tl.x-i,y:t.tl.y+r},br:{x:t.tl.x+r,y:t.tl.y+i}};t.tr.corner={tl:{x:t.tr.x-r,y:t.tr.y-i},tr:{x:t.tr.x+i,y:t.tr.y-r},br:{x:t.tr.x+r,y:t.tr.y+i},bl:{x:t.tr.x-i,y:t.tr.y+r}};t.bl.corner={tl:{x:t.bl.x-r,y:t.bl.y-i},bl:{x:t.bl.x-i,y:t.bl.y+r},br:{x:t.bl.x+r,y:t.bl.y+i},tr:{x:t.bl.x+i,y:t.bl.y-r}};t.br.corner={tr:{x:t.br.x+i,y:t.br.y-r},bl:{x:t.br.x-i,y:t.br.y+r},br:{x:t.br.x+r,y:t.br.y+i},tl:{x:t.br.x-r,y:t.br.y-i}};t.ml.corner={tl:{x:t.ml.x-r,y:t.ml.y-i},tr:{x:t.ml.x+i,y:t.ml.y-r},bl:{x:t.ml.x-i,y:t.ml.y+r},br:{x:t.ml.x+r,y:t.ml.y+i}};t.mt.corner={tl:{x:t.mt.x-r,y:t.mt.y-i},tr:{x:t.mt.x+i,y:t.mt.y-r},bl:{x:t.mt.x-i,y:t.mt.y+r},br:{x:t.mt.x+r,y:t.mt.y+i}};t.mr.corner={tl:{x:t.mr.x-r,y:t.mr.y-i},tr:{x:t.mr.x+i,y:t.mr.y-r},bl:{x:t.mr.x-i,y:t.mr.y+r},br:{x:t.mr.x+r,y:t.mr.y+i}};t.mb.corner={tl:{x:t.mb.x-r,y:t.mb.y-i},tr:{x:t.mb.x+i,y:t.mb.y-r},bl:{x:t.mb.x-i,y:t.mb.y+r},br:{x:t.mb.x+r,y:t.mb.y+i}}},toGrayscale:function(){var i=this.get("fill");if(i){this.set("overlayFill",new d.Color(i).toGrayscale().toRgb())}return this},complexity:function(){return 0},getCenter:function(){return{x:this.get("left")+this.width/2,y:this.get("top")+this.height/2}},straighten:function(){var i=this._getAngleValueForStraighten();this.setAngle(i);return this},fxStraighten:function(q){q=q||{};var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(u){t.setAngle(u);i()},onComplete:function(){t.setCoords();s()},onStart:function(){t.setActive(false)}});return this},fxRemove:function(q){q||(q={});var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("opacity"),endValue:0,duration:this.FX_DURATION,onChange:function(u){t.set("opacity",u);i()},onComplete:s,onStart:function(){t.setActive(false)}});return this},_getAngleValueForStraighten:function(){var i=this.get("angle");if(i>-225&&i<=-135){return -180}else{if(i>-135&&i<=-45){return -90}else{if(i>-45&&i<=45){return 0}else{if(i>45&&i<=135){return 90}else{if(i>135&&i<=225){return 180}else{if(i>225&&i<=315){return 270}else{if(i>315){return 360}}}}}}}return 0},toJSON:function(){return this.toObject()},setGradientFill:function(i,q){this.set("fill",d.Gradient.forObject(this,i,q))},animate:function(q,s,i){var r=this;if(!("from" in i)){i.from=this.get(q)}if(/[+-]/.test(s.charAt(0))){s=this.get(q)+parseFloat(s)}d.util.animate({startValue:i.from,endValue:s,duration:i.duration,onChange:function(t){r.set(q,t);i.onChange&&i.onChange()},onComplete:function(){r.setCoords();i.onComplete&&i.onComplete()}})}});d.Object.prototype.rotate=d.Object.prototype.setAngle;var j=d.Object.prototype;for(var g=j.stateProperties.length;g--;){var h=j.stateProperties[g],e=h.charAt(0).toUpperCase()+h.slice(1),f="set"+e,n="get"+e;if(!j[n]){j[n]=(function(i){return new Function('return this.get("'+i+'")')})(h)}if(!j[f]){j[f]=(function(i){return new Function("value",'return this.set("'+i+'", value)')})(h)}}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),e=c.util.object.extend,d=c.Object.prototype.set,a={x1:1,x2:1,y1:1,y2:1};if(c.Line){c.warn("fabric.Line is already defined");return}c.Line=c.util.createClass(c.Object,{type:"line",initialize:function(g,f){if(!g){g=[0,0,0,0]}this.callSuper("initialize",f);this.set("x1",g[0]);this.set("y1",g[1]);this.set("x2",g[2]);this.set("y2",g[3]);this._setWidthHeight()},_setWidthHeight:function(){this.set("width",(this.x2-this.x1)||1);this.set("height",(this.y2-this.y1)||1);this.set("left",this.x1+this.width/2);this.set("top",this.y1+this.height/2)},set:function(f,g){d.call(this,f,g);if(f in a){this._setWidthHeight()}return this},_render:function(f){f.beginPath();f.moveTo(-this.width/2,-this.height/2);f.lineTo(this.width/2,this.height/2);f.lineWidth=this.strokeWidth;var g=f.strokeStyle;f.strokeStyle=f.fillStyle;f.stroke();f.strokeStyle=g},complexity:function(){return 1},toObject:function(){return e(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})}});c.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");c.Line.fromElement=function(g,f){var i=c.parseAttributes(g,c.Line.ATTRIBUTE_NAMES);var h=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new c.Line(h,e(i,f))};c.Line.fromObject=function(f){var g=[f.x1,f.y1,f.x2,f.y2];return new c.Line(g,f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),d=Math.PI*2,e=b.util.object.extend;if(b.Circle){b.warn("fabric.Circle is already defined.");return}b.Circle=b.util.createClass(b.Object,{type:"circle",initialize:function(f){f=f||{};this.set("radius",f.radius||0);this.callSuper("initialize",f);var g=this.get("radius")*2*this.get("scaleX");this.set("width",g).set("height",g)},toObject:function(){return e(this.callSuper("toObject"),{radius:this.get("radius")})},_render:function(f,g){f.beginPath();f.globalAlpha*=this.opacity;f.arc(g?this.left:0,g?this.top:0,this.radius,0,d,false);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},complexity:function(){return 1}});b.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Circle.fromElement=function(g,f){f||(f={});var h=b.parseAttributes(g,b.Circle.ATTRIBUTE_NAMES);if(!c(h)){throw Error("value of `r` attribute is required and can not be negative")}if("left" in h){h.left-=(f.width/2)||0}if("top" in h){h.top-=(f.height/2)||0}return new b.Circle(e(h,f))};function c(f){return(("radius" in f)&&(f.radius>0))}b.Circle.fromObject=function(f){return new b.Circle(f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Triangle){b.warn("fabric.Triangle is already defined");return}b.Triangle=b.util.createClass(b.Object,{type:"triangle",initialize:function(c){c=c||{};this.callSuper("initialize",c);this.set("width",c.width||100).set("height",c.height||100)},_render:function(c){var d=this.width/2,e=this.height/2;c.beginPath();c.moveTo(-d,e);c.lineTo(0,-e);c.lineTo(d,e);c.closePath();if(this.fill){c.fill()}if(this.stroke){c.stroke()}},complexity:function(){return 1}});b.Triangle.fromObject=function(c){return new b.Triangle(c)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),c=Math.PI*2,d=b.util.object.extend;if(b.Ellipse){b.warn("fabric.Ellipse is already defined.");return}b.Ellipse=b.util.createClass(b.Object,{type:"ellipse",initialize:function(e){e=e||{};this.callSuper("initialize",e);this.set("rx",e.rx||0);this.set("ry",e.ry||0);this.set("width",this.get("rx")*2);this.set("height",this.get("ry")*2)},toObject:function(){return d(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},render:function(e,f){if(this.rx===0||this.ry===0){return}return this.callSuper("render",e,f)},_render:function(e,f){e.beginPath();e.save();e.globalAlpha*=this.opacity;e.transform(1,0,0,this.ry/this.rx,0,0);e.arc(f?this.left:0,f?this.top:0,this.rx,0,c,false);if(this.stroke){e.stroke()}if(this.fill){e.fill()}e.restore()},complexity:function(){return 1}});b.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Ellipse.fromElement=function(f,e){e||(e={});var g=b.parseAttributes(f,b.Ellipse.ATTRIBUTE_NAMES);if("left" in g){g.left-=(e.width/2)||0}if("top" in g){g.top-=(e.height/2)||0}return new b.Ellipse(d(g,e))};b.Ellipse.fromObject=function(e){return new b.Ellipse(e)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={});if(c.Rect){console.warn("fabric.Rect is already defined");return}c.Rect=c.util.createClass(c.Object,{type:"rect",options:{rx:0,ry:0},initialize:function(d){this._initStateProperties();this.callSuper("initialize",d);this._initRxRy()},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){if(this.rx&&!this.ry){this.ry=this.rx}else{if(this.ry&&!this.rx){this.rx=this.ry}}},_render:function(f){var j=this.rx||0,i=this.ry||0,d=-this.width/2,k=-this.height/2,e=this.width,g=this.height;f.beginPath();f.globalAlpha*=this.opacity;if(this.group){f.translate(this.x,this.y)}f.moveTo(d+j,k);f.lineTo(d+e-j,k);f.bezierCurveTo(d+e,k,d+e,k+i,d+e,k+i);f.lineTo(d+e,k+g-i);f.bezierCurveTo(d+e,k+g,d+e-j,k+g,d+e-j,k+g);f.lineTo(d+j,k+g);f.bezierCurveTo(d,k+g,d,k+g-i,d,k+g-i);f.lineTo(d,k+i);f.bezierCurveTo(d,k,d+j,k,d+j,k);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},_normalizeLeftTopProperties:function(d){if(d.left){this.set("left",d.left+this.getWidth()/2)}this.set("x",d.left||0);if(d.top){this.set("top",d.top+this.getHeight()/2)}this.set("y",d.top||0);return this},complexity:function(){return 1}});c.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");function a(d){d.left=d.left||0;d.top=d.top||0;return d}c.Rect.fromElement=function(e,d){if(!e){return null}var g=c.parseAttributes(e,c.Rect.ATTRIBUTE_NAMES);g=a(g);var f=new c.Rect(c.util.object.extend((d?c.util.object.clone(d):{}),g));f._normalizeLeftTopProperties(g);return f};c.Rect.fromObject=function(d){return new c.Rect(d)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Polyline){b.warn("fabric.Polyline is already defined");return}b.Polyline=b.util.createClass(b.Object,{type:"polyline",initialize:function(d,c){c=c||{};this.set("points",d);this.callSuper("initialize",c);this._calcDimensions()},_calcDimensions:function(){return b.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return b.Polygon.prototype.toObject.call(this)},_render:function(e){var d;e.beginPath();for(var f=0,c=this.points.length;f1){E=Math.sqrt(E);O*=E;N*=E}var R=aa/O;var Q=W/O;var D=(-W)/N;var C=(aa)/N;var H=R*M+Q*L;var q=D*M+C*L;var F=R*T+Q*S;var ab=D*T+C*S;var Z=(F-H)*(F-H)+(ab-q)*(ab-q);var U=1/Z-0.25;if(U<0){U=0}var w=Math.sqrt(U);if(P==J){w=-w}var V=0.5*(H+F)-w*(ab-q);var K=0.5*(q+ab)+w*(F-H);var v=Math.atan2(q-K,H-V);var u=Math.atan2(ab-K,F-V);var Y=u-v;if(Y<0&&P==1){Y+=2*Math.PI}else{if(Y>0&&P==0){Y-=2*Math.PI}}var B=Math.ceil(Math.abs(Y/(Math.PI*0.5+0.001)));var I=[];for(var X=0;X"},toObject:function(){var q=g(this.callSuper("toObject"),{path:this.path});if(this.sourcePath){q.sourcePath=this.sourcePath}if(this.transformMatrix){q.transformMatrix=this.transformMatrix}return q},toDatalessObject:function(){var q=this.toObject();if(this.sourcePath){q.path=this.sourcePath}delete q.sourcePath;return q},complexity:function(){return this.path.length},_parsePath:function(){var C=[],z,v,y;for(var u=0,t,q,w=this.path.length;uB){for(var r=1,x=q.length;r"},isSameColor:function(){var j=this.getObjects()[0].get("fill");return this.getObjects().every(function(k){return k.get("fill")===j})},complexity:function(){return this.paths.reduce(function(j,k){return j+((k&&k.complexity)?k.complexity():0)},0)},toGrayscale:function(){var j=this.paths.length;while(j--){this.paths[j].toGrayscale()}return this},getObjects:function(){return this.paths}});function c(m){for(var l=0,j=m.length;l"},getObjects:function(){return this.objects},add:function(h){this._restoreObjectsState();this.objects.push(h);h.setActive(true);this._calcBounds();this._updateObjectsCoords();return this},remove:function(h){this._restoreObjectsState();f(this.objects,h);h.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},size:function(){return this.getObjects().length},set:function(h,k){if(typeof k=="function"){this.set(h,k(this[h]))}else{if(h==="fill"||h==="opacity"){var j=this.objects.length;this[h]=k;while(j--){this.objects[j].set(h,k)}}else{this[h]=k}}return this},contains:function(h){return this.objects.indexOf(h)>-1},toObject:function(){return g(this.callSuper("toObject"),{objects:b(this.objects,"clone")})},render:function(j){j.save();this.transform(j);var n=Math.max(this.scaleX,this.scaleY);for(var l=0,h=this.objects.length,k;k=this.objects[l];l++){var m=k.borderScaleFactor;k.borderScaleFactor=n;k.render(j);k.borderScaleFactor=m}this.hideBorders||this.drawBorders(j);this.hideCorners||this.drawCorners(j);j.restore();this.setCoords()},item:function(h){return this.getObjects()[h]},complexity:function(){return this.getObjects().reduce(function(i,h){i+=(typeof h.complexity=="function")?h.complexity():0;return i},0)},_restoreObjectsState:function(){this.objects.forEach(this._restoreObjectState,this);return this},_restoreObjectState:function(j){var l=this.get("left"),m=this.get("top"),h=this.getAngle()*(Math.PI/180),k=j.get("originalLeft"),n=j.get("originalTop"),i=Math.cos(h)*j.get("top")+Math.sin(h)*j.get("left"),o=-Math.sin(h)*j.get("top")+Math.cos(h)*j.get("left");j.setAngle(j.getAngle()+this.getAngle());j.set("left",l+o*this.get("scaleX"));j.set("top",m+i*this.get("scaleY"));j.set("scaleX",j.get("scaleX")*this.get("scaleX"));j.set("scaleY",j.get("scaleY")*this.get("scaleY"));j.setCoords();j.hideCorners=false;j.setActive(false);j.setCoords();return this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){this._originalLeft=this.get("left");this._originalTop=this.get("top");return this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){this.forEachObject(function(h){h.setCoords()});return this},activateAllObjects:function(){return this.setActive(true)},setActive:function(h){this.forEachObject(function(i){i.setActive(h)});return this},forEachObject:e.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var j=this.getObjects(),i=j[0]?j[0].get("opacity"):1;var h=j.every(function(k){return k.get("opacity")===i});if(h){this.opacity=i}},_calcBounds:function(){var s=[],q=[],p,n,k,h,m,l,u,r=0,t=this.objects.length;for(;ri.x&&j-hi.y},toGrayscale:function(){var h=this.objects.length;while(h--){this.objects[h].toGrayscale()}}});e.Group.fromObject=function(h){return new e.Group(h.objects,h)}})(typeof exports!="undefined"?exports:this);(function(a){var b=fabric.util.object.extend;if(!a.fabric){a.fabric={}}if(a.fabric.Image){fabric.warn("fabric.Image is already defined.");return}if(!fabric.Object){fabric.warn("fabric.Object is required for fabric.Image initialization");return}fabric.Image=fabric.util.createClass(fabric.Object,{maxwidth:null,maxheight:null,active:false,bordervisibility:false,cornervisibility:false,type:"image",filters:[],initialize:function(d,c){c||(c={});this.callSuper("initialize",c);this._initElement(d);this._originalImage=this.getElement();this._initConfig(c);if(c.filters){this.filters=c.filters;this.applyFilters()}},getElement:function(){return this._element},setElement:function(c){this._element=c;this._initConfig();return this},getNormalizedSize:function(d,c,e){if(e&&c&&(d.width>d.height&&(d.width/d.height)<(c/e))){normalizedWidth=~~((d.width*e)/d.height);normalizedHeight=e}else{if(e&&((d.height==d.width)||(d.height>d.width)||(d.height>e))){normalizedWidth=~~((d.width*e)/d.height);normalizedHeight=e}else{if(c&&(c'},clone:function(c){this.constructor.fromObject(this.toObject(),c)},applyFilters:function(i){if(this.filters.length===0){this.setElement(this._originalImage);i&&i();return}var c=typeof Buffer!=="undefined"&&typeof window==="undefined",g=this._originalImage,e=fabric.document.createElement("canvas"),f=c?new (require("canvas").Image):fabric.document.createElement("img"),h=this;e.width=g.width;e.height=g.height;e.getContext("2d").drawImage(g,0,0);this.filters.forEach(function(j){j&&j.applyTo(e)});f.onload=function(){h.setElement(f);i&&i();f.onload=e=g=null};f.width=g.width;f.height=g.height;if(c){var d=e.toDataURL("image/png").replace(/data:image\/png;base64,/,"");f.src=new Buffer(d,"base64");h.setElement(f);i&&i()}else{f.src=e.toDataURL("image/png")}return this},_render:function(d){var c=this.getOriginalSize();d.drawImage(this.getElement(),-c.width/2,-c.height/2,c.width,c.height)},_adjustWidthHeightToBorders:function(c){if(c){this.currentBorder=this.borderwidth;this.width+=(2*this.currentBorder);this.height+=(2*this.currentBorder)}else{this.currentBorder=0}},_resetWidthHeight:function(){var c=this.getElement();this.set("width",c.width);this.set("height",c.height)},_initElement:function(c){this.setElement(fabric.util.getById(c));fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(c){this.setOptions(c||{});this._setBorder();this._setWidthHeight()},_initFilters:function(c){if(c.filters&&c.filters.length){this.filters=c.filters.map(function(d){return fabric.Image.filters[d.type].fromObject(d)})}},_setBorder:function(){if(this.bordervisibility){this.currentBorder=this.borderwidth}else{this.currentBorder=0}},_setWidthHeight:function(){var c=2*this.currentBorder;this.width=(this.getElement().width||0)+c;this.height=(this.getElement().height||0)+c},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.fromObject=function(d,f){var c=fabric.document.createElement("img"),e=d.src;if(d.width){c.width=d.width}if(d.height){c.height=d.height}c.onload=function(){fabric.Image.prototype._initFilters.call(d,d);var g=new fabric.Image(c,d);f&&f(g);c=c.onload=null};c.src=e};fabric.Image.fromURL=function(d,f,e){var c=fabric.document.createElement("img");c.onload=function(){if(f){f(new fabric.Image(c,e))}c=c.onload=null};c.src=d};fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" ");fabric.Image.fromElement=function(d,f,c){c||(c={});var e=fabric.parseAttributes(d,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(e["xlink:href"],f,b(e,c))};fabric.Image.async=true})(typeof exports!="undefined"?exports:this);fabric.Image.filters={};fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(d){var c=d.getContext("2d"),a=c.getImageData(0,0,d.width,d.height),h=a.data,e=a.width,l=a.height,k,b,g,f;for(g=0;gh&&m>h&&o>h&&p(a-m)'},_render:function(e){var g=Cufon.textOptions||(Cufon.textOptions={});g.left=this.left;g.top=this.top;g.context=e;g.color=this.fill;var f=this._initDummyElement();this.transform(e);Cufon.replaceElement(f,{separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor});this.width=g.width;this.height=g.height;this.setCoords()},_initDummyElement:function(){var f=b.document.createElement("div"),e=b.document.createElement("div");e.appendChild(f);f.innerHTML=this.text;f.style.fontSize=this.fontSize+"px";f.style.letterSpacing="normal";return f},render:function(e,f){e.save();this._render(e);if(!f&&this.active){this.drawBorders(e);this.hideCorners||this.drawCorners(e)}e.restore()},toObject:function(){return d(this.callSuper("toObject"),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor})},setColor:function(e){this.set("fill",e);return this},setFontsize:function(e){this.set("fontSize",e);this.setCoords();return this},getText:function(){return this.text},setText:function(e){this.set("text",e);this.setCoords();return this},set:function(e,f){if(typeof e=="object"){for(var g in e){this.set(g,e[g])}}else{this[e]=f;if(e==="fontFamily"&&this.path){this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+f+"$3")}}return this}});b.Text.fromObject=function(e){return new b.Text(e.text,c(e))};b.Text.fromElement=function(e){}})(typeof exports!="undefined"?exports:this);(function(){if(typeof document!="undefined"&&typeof window!="undefined"){return}var XML=require("o3-xml"),URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;function request(url,encoding,callback){var oURL=URL.parse(url),client=HTTP.createClient(80,oURL.hostname),request=client.request("GET",oURL.pathname,{host:oURL.hostname});client.addListener("error",function(err){if(err.errno===process.ECONNREFUSED){fabric.log("ECONNREFUSED: connection refused to "+client.host+":"+client.port)}else{fabric.log(err.message)}});request.end();request.on("response",function(response){var body="";if(encoding){response.setEncoding(encoding)}response.on("end",function(){callback(body)});response.on("data",function(chunk){if(response.statusCode==200){body+=chunk}})})}fabric.util.loadImage=function(url,callback){request(url,"binary",function(body){var img=new Image();img.src=new Buffer(body,"binary");callback(new fabric.Image(img))})};fabric.loadSVGFromURL=function(url,callback){url=url.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();request(url,"",function(body){var doc=XML.parseFromString(body);fabric.parseSVGDocument(doc.documentElement,function(results,options){callback(results,options)})})};fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body);callback&&callback()})};fabric.Image.fromObject=function(object,callback){fabric.util.loadImage(object.src,function(img){var oImg=new fabric.Image(img);oImg._initConfig(object);oImg._initFilters(object);callback(oImg)})};fabric.createCanvasForNode=function(width,height){var canvasEl=fabric.document.createElement("canvas"),nodeCanvas=new Canvas(width||600,height||600);canvasEl.style={};canvasEl.width=nodeCanvas.width;canvasEl.height=nodeCanvas.height;var Canvas=fabric.Canvas||fabric.StaticCanvas;var fabricCanvas=new Canvas(canvasEl);fabricCanvas.contextContainer=nodeCanvas.getContext("2d");fabricCanvas.nodeCanvas=nodeCanvas;return fabricCanvas};fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};if(fabric.Canvas){fabric.Canvas.prototype.createPNGStream}var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(width){origSetWidth.call(this);this.nodeCanvas.width=width;return this};if(fabric.Canvas){fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth}var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(height){origSetHeight.call(this);this.nodeCanvas.height=height;return this};if(fabric.Canvas){fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight}})(); \ No newline at end of file +var Cufon=(function(){var k=function(){return k.replace.apply(null,arguments)};var u=k.DOM={ready:(function(){var z=false,B={loaded:1,complete:1};var y=[],A=function(){if(z){return}z=true;for(var C;C=y.shift();C()){}};if(fabric.document.addEventListener){fabric.document.addEventListener("DOMContentLoaded",A,false);fabric.window.addEventListener("pageshow",A,false)}if(!fabric.window.opera&&fabric.document.readyState){(function(){B[fabric.document.readyState]?A():setTimeout(arguments.callee,10)})()}if(fabric.document.readyState&&fabric.document.createStyleSheet){(function(){try{fabric.document.body.doScroll("left");A()}catch(C){setTimeout(arguments.callee,1)}})()}o(fabric.window,"load",A);return function(C){if(!arguments.length){A()}else{z?C():y.push(C)}}})()};var l=k.CSS={Size:function(z,y){this.value=parseFloat(z);this.unit=String(z).match(/[a-z%]*$/)[0]||"px";this.convert=function(A){return A/y*this.value};this.convertFrom=function(A){return A/this.value*y};this.toString=function(){return this.value+this.unit}},getStyle:function(y){return new a(y.style)},quotedList:i(function(B){var A=[],z=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,y;while(y=z.exec(B)){A.push(y[3]||y[1])}return A}),ready:(function(){var A=false;var z=[],B=function(){A=true;for(var D;D=z.shift();D()){}};var y=Object.prototype.propertyIsEnumerable?f("style"):{length:0};var C=f("link");u.ready(function(){var G=0,F;for(var E=0,D=C.length;F=C[E],E=y.length+G){B()}else{setTimeout(arguments.callee,10)}});return function(D){if(A){D()}else{z.push(D)}}})(),supports:function(A,z){var y=fabric.document.createElement("span").style;if(y[A]===undefined){return false}y[A]=z;return y[A]===z},textAlign:function(B,A,y,z){if(A.get("textAlign")=="right"){if(y>0){B=" "+B}}else{if(y400}if(F==500){F=400}for(var G in D){G=parseInt(G,10);if(!C||GA){A=G}H.push(G)}if(FA){F=A}H.sort(function(J,I){return(B?(J>F&&I>F)?JI:(JI:JU){U=P}if(O>S){S=O}if(Pw){w=h}K.push(h);h=0;continue}var A=aa.glyphs[af[Z]]||aa.missingGlyph;if(!A){continue}h+=C=Number(A.w||aa.w)+T}K.push(h);h=Math.max(w,h);var m=[];for(var Z=K.length;Z--;){m[Z]=h-K[Z]}if(C===null){return null}U+=(G.width-C);B+=G.minX;var v,p;if(n){v=I;p=I.firstChild}else{v=fabric.document.createElement("span");v.className="cufon cufon-canvas";v.alt=D;p=fabric.document.createElement("canvas");v.appendChild(p);if(z.printable){var X=fabric.document.createElement("span");X.className="cufon-alt";X.appendChild(fabric.document.createTextNode(D));v.appendChild(X)}}var ag=v.style;var N=p.style||{};var k=o.convert(G.height-H+S);var ae=Math.ceil(k);var R=ae/k;p.width=Math.ceil(o.convert(h+U-B)*R);p.height=ae;H+=G.minY;N.top=Math.round(o.convert(H-aa.ascent))+"px";N.left=Math.round(o.convert(B))+"px";var j=Math.ceil(o.convert(h*R));var t=j+"px";var s=o.convert(aa.height);var E=(z.lineHeight-1)*o.convert(-aa.ascent/5)*(L-1);Cufon.textOptions.width=j;Cufon.textOptions.height=(s*L)+E;Cufon.textOptions.lines=L;if(a){ag.width=t;ag.height=s+"px"}else{ag.paddingLeft=t;ag.paddingBottom=(s-1)+"px"}var ac=Cufon.textOptions.context||p.getContext("2d"),J=ae/G.height;ac.save();ac.scale(J,J);ac.translate(-B-((1/J*p.width)/2)+(Cufon.fonts[aa.family].offsetLeft||0),-H-(Cufon.textOptions.height/J)/2);ac.lineWidth=aa.face["underline-thickness"];ac.save();function q(i,g){ac.strokeStyle=g;ac.beginPath();ac.moveTo(0,i);ac.lineTo(h,i);ac.stroke()}var r=Cufon.getTextDecoration(z),u=z.fontStyle==="italic";function ad(){ac.save();ac.fillStyle=z.backgroundColor;var aj=0,ak=0;if(z.textAlign==="right"){ac.translate(m[ak],0)}else{if(z.textAlign==="center"){ac.translate(m[ak]/2,0)}}for(var ah=0,x=af.length;ah.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}');function c(e,f){return a(e,/(?:em|ex|%)$/i.test(f)?"1em":f)}function a(h,i){if(/px$/i.test(i)){return parseFloat(i)}var g=h.style.left,f=h.runtimeStyle.left;h.runtimeStyle.left=h.currentStyle.left;h.style.left=i;var e=h.style.pixelLeft;h.style.left=g;h.runtimeStyle.left=f;return e}return function(T,z,O,w,D,U,M){var h=(z===null);if(h){z=D.alt}var B=T.viewBox;var j=O.computedFontSize||(O.computedFontSize=new Cufon.CSS.Size(c(U,O.get("fontSize"))+"px",T.baseSize));var L=O.computedLSpacing;if(L==undefined){L=O.get("letterSpacing");O.computedLSpacing=L=(L=="normal")?0:~~j.convertFrom(a(U,L))}var t,m;if(h){t=D;m=D.firstChild}else{t=fabric.document.createElement("span");t.className="cufon cufon-vml";t.alt=z;m=fabric.document.createElement("span");m.className="cufon-vml-canvas";t.appendChild(m);if(w.printable){var R=fabric.document.createElement("span");R.className="cufon-alt";R.appendChild(fabric.document.createTextNode(z));t.appendChild(R)}if(!M){t.appendChild(fabric.document.createElement("cvml:shape"))}}var Z=t.style;var G=m.style;var f=j.convert(B.height),W=Math.ceil(f);var K=W/f;var J=B.minX,I=B.minY;G.height=W;G.top=Math.round(j.convert(I-T.ascent));G.left=Math.round(j.convert(J));Z.height=j.convert(T.height)+"px";var p=Cufon.getTextDecoration(w);var y=O.get("color");var X=Cufon.CSS.textTransform(z,O).split("");var e=0,H=0,q=null;var x,r,A=w.textShadow;for(var S=0,Q=0,P=X.length;St?1:(l-k)/m;p(j+(r-j)*q(s));if(l>t||n()){u.onComplete&&u.onComplete();return}h(o)})()}var h=(function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(k,j){window.setTimeout(k,1000/60)}})();function a(k,m,l){if(k){var j=new Image();j.onload=function(){m&&m.call(l,j);j=j.onload=null};j.src=k}}fabric.util.removeFromArray=g;fabric.util.degreesToRadians=b;fabric.util.toFixed=d;fabric.util.getRandomInt=e;fabric.util.falseFunction=i;fabric.util.animate=c;fabric.util.requestAnimFrame=h;fabric.util.loadImage=a})();(function(){var d=Array.prototype.slice;if(!Array.prototype.indexOf){Array.prototype.indexOf=function(g){if(this===void 0||this===null){throw new TypeError()}var h=Object(this),e=h.length>>>0;if(e===0){return -1}var i=0;if(arguments.length>0){i=Number(arguments[1]);if(i!==i){i=0}else{if(i!==0&&i!==(1/0)&&i!==-(1/0)){i=(i>0||-1)*Math.floor(Math.abs(i))}}}if(i>=e){return -1}var f=i>=0?i:Math.max(e-Math.abs(i),0);for(;f>>0;f>>0;g>>0;f>>0;f>>0;g>>0,f=0,h;if(arguments.length>1){h=arguments[1]}else{do{if(f in this){h=this[f++];break}if(++f>=e){throw new TypeError()}}while(true)}for(;f=e){e=h[f][g]}}}else{while(f--){if(h[f]>=e){e=h[f]}}}return e}function c(h,g){if(!h||h.length===0){return undefined}var f=h.length-1,e=g?h[f][g]:h[f];if(g){while(f--){if(h[f][g]-1?c(j,l.match(/opacity:\s*(\d?\.?\d*)/)[1]):j}for(var m in l){if(m==="opacity"){c(j,l[m])}else{var k=(m==="float"||m==="cssFloat")?(typeof n.styleFloat==="undefined"?"cssFloat":"styleFloat"):m;n[k]=l[m]}}return j}var h=fabric.document.createElement("div"),g=typeof h.style.opacity==="string",b=typeof h.style.filter==="string",a=fabric.document.defaultView,f=a&&typeof a.getComputedStyle!=="undefined",d=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,c=function(i){return i};if(g){c=function(i,j){i.style.opacity=j;return i}}else{if(b){c=function(i,j){var k=i.style;if(i.currentStyle&&!i.currentStyle.hasLayout){k.zoom=1}if(d.test(k.filter)){j=j>=0.9999?"":("alpha(opacity="+(j*100)+")");k.filter=k.filter.replace(d,j)}else{k.filter+=" alpha(opacity="+(j*100)+")"}return i}}}fabric.util.setStyle=e})();(function(){var h=Array.prototype.slice;function g(j){return typeof j==="string"?fabric.document.getElementById(j):j}function b(j){return h.call(j,0)}try{var i=b(fabric.document.childNodes) instanceof Array}catch(a){}if(!i){b=function(k){var j=new Array(k.length),l=k.length;while(l--){j[l]=k[l]}return j}}function c(k,j){var l=fabric.document.createElement(k);for(var m in j){if(m==="class"){l.className=j[m]}else{if(m==="for"){l.htmlFor=j[m]}else{l.setAttribute(m,j[m])}}}return l}function f(j,k){if((" "+j.className+" ").indexOf(" "+k+" ")===-1){j.className+=(j.className?" ":"")+k}}function e(k,l,j){if(typeof l==="string"){l=c(l,j)}if(k.parentNode){k.parentNode.replaceChild(l,k)}l.appendChild(k);return l}function d(k){var j=0,l=0;do{j+=k.offsetTop||0;l+=k.offsetLeft||0;k=k.offsetParent}while(k);return({left:l,top:j})}(function(){var k=fabric.document.documentElement.style;var l="userSelect" in k?"userSelect":"MozUserSelect" in k?"MozUserSelect":"WebkitUserSelect" in k?"WebkitUserSelect":"KhtmlUserSelect" in k?"KhtmlUserSelect":"";function m(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=fabric.util.falseFunction}if(l){n.style[l]="none"}else{if(typeof n.unselectable=="string"){n.unselectable="on"}}return n}function j(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=null}if(l){n.style[l]=""}else{if(typeof n.unselectable=="string"){n.unselectable=""}}return n}fabric.util.makeElementUnselectable=m;fabric.util.makeElementSelectable=j})();(function(){function j(k,o){var m=fabric.document.getElementsByTagName("head")[0],l=fabric.document.createElement("script"),n=true;l.type="text/javascript";l.setAttribute("runat","server");l.onload=l.onreadystatechange=function(p){if(n){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete"){return}n=false;o(p||fabric.window.event);l=l.onload=l.onreadystatechange=null}};l.src=k;m.appendChild(l)}fabric.util.getScript=j})();fabric.util.getById=g;fabric.util.toArray=b;fabric.util.makeElement=c;fabric.util.addClass=f;fabric.util.wrapElement=e;fabric.util.getElementOffset=d})();(function(){function d(e,f){return e+(/\?/.test(e)?"&":"?")+f}var c=(function(){var h=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest()}];for(var e=h.length;e--;){try{var g=h[e]();if(g){return h[e]}}catch(f){}}})();function a(){}function b(g,f){f||(f={});var j=f.method?f.method.toUpperCase():"GET",i=f.onComplete||function(){},h=c(),e;h.onreadystatechange=function(){if(h.readyState===4){i(h);h.onreadystatechange=a}};if(j==="GET"){e=null;if(typeof f.parameters=="string"){g=d(g,f.parameters)}}h.open(j,g,true);if(j==="POST"||j==="PUT"){h.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}h.send(e);return h}fabric.util.request=b})();(function(b){var c=b.fabric||(b.fabric={}),i=c.util.object.extend,f=c.util.string.capitalize,j=c.util.object.clone;var d={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix"};function p(u,t){if(!u){return}var w,s,r={};if(u.parentNode&&/^g$/i.test(u.parentNode.nodeName)){r=c.parseAttributes(u.parentNode,t)}var v=t.reduce(function(y,x){w=u.getAttribute(x);s=parseFloat(w);if(w){if((x==="fill"||x==="stroke")&&w==="none"){w=""}if(x==="fill-rule"){w=(w==="evenodd")?"destination-over":w}if(x==="transform"){w=c.parseTransformAttribute(w)}if(x in d){x=d[x]}y[x]=isNaN(s)?w:s}return y},{});v=i(v,i(a(u),c.parseStyleAttribute(u)));return i(r,v)}c.parseTransformAttribute=(function(){function r(K,L){var M=L[0];K[0]=Math.cos(M);K[1]=Math.sin(M);K[2]=-Math.sin(M);K[3]=Math.cos(M)}function w(M,N){var L=N[0],K=(N.length===2)?N[1]:N[0];M[0]=L;M[3]=K}function H(K,L){K[2]=L[0]}function t(K,L){K[1]=L[0]}function E(K,L){K[4]=L[0];if(L.length===2){K[5]=L[1]}}var y=[1,0,0,1,0,0],s="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",I="(?:\\s+,?\\s*|,\\s*)",z="(?:(skewX)\\s*\\(\\s*("+s+")\\s*\\))",x="(?:(skewY)\\s*\\(\\s*("+s+")\\s*\\))",G="(?:(rotate)\\s*\\(\\s*("+s+")(?:"+I+"("+s+")"+I+"("+s+"))?\\s*\\))",J="(?:(scale)\\s*\\(\\s*("+s+")(?:"+I+"("+s+"))?\\s*\\))",C="(?:(translate)\\s*\\(\\s*("+s+")(?:"+I+"("+s+"))?\\s*\\))",F="(?:(matrix)\\s*\\(\\s*("+s+")"+I+"("+s+")"+I+"("+s+")"+I+"("+s+")"+I+"("+s+")"+I+"("+s+")\\s*\\))",D="(?:"+F+"|"+C+"|"+J+"|"+G+"|"+z+"|"+x+")",A="(?:"+D+"(?:"+I+D+")*)",u="^\\s*(?:"+A+"?)\\s*$",B=new RegExp(u),v=new RegExp(D);return function(L){var K=y.concat();if(!L||(L&&!B.test(L))){return K}L.replace(v,function(P){var M=new RegExp(D).exec(P).filter(function(Q){return(Q!==""&&Q!=null)}),N=M[1],O=M.slice(2).map(parseFloat);switch(N){case"translate":E(K,O);break;case"rotate":r(K,O);break;case"scale":w(K,O);break;case"skewX":H(K,O);break;case"skewY":t(K,O);break;case"matrix":K=O;break}});return K}})();function l(u){if(!u){return null}u=u.trim();var w=u.indexOf(",")>-1;u=u.split(/\s+/);var s=[];if(w){for(var t=0,r=u.length;t0){this.init(d,e)}}a.prototype={constructor:a,init:function(d,e){this.x=d;this.y=e},add:function(d){return new a(this.x+d.x,this.y+d.y)},addEquals:function(d){this.x+=d.x;this.y+=d.y;return this},scalarAdd:function(d){return new a(this.x+d,this.y+d)},scalarAddEquals:function(d){this.x+=d;this.y+=d;return this},subtract:function(d){return new a(this.x-d.x,this.y-d.y)},subtractEquals:function(d){this.x-=d.x;this.y-=d.y;return this},scalarSubtract:function(d){return new a(this.x-d,this.y-d)},scalarSubtractEquals:function(d){this.x-=d;this.y-=d;return this},multiply:function(d){return new a(this.x*d,this.y*d)},multiplyEquals:function(d){this.x*=d;this.y*=d;return this},divide:function(d){return new a(this.x/d,this.y/d)},divideEquals:function(d){this.x/=d;this.y/=d;return this},eq:function(d){return(this.x==d.x&&this.y==d.y)},lt:function(d){return(this.xd.x&&this.y>d.y)},gte:function(d){return(this.x>=d.x&&this.y>=d.y)},lerp:function(e,d){return new a(this.x+(e.x-this.x)*d,this.y+(e.y-this.y)*d)},distanceFrom:function(f){var e=this.x-f.x,d=this.y-f.y;return Math.sqrt(e*e+d*d)},min:function(d){return new a(Math.min(this.x,d.x),Math.min(this.y,d.y))},max:function(d){return new a(Math.max(this.x,d.x),Math.max(this.y,d.y))},toString:function(){return this.x+","+this.y},setXY:function(d,e){this.x=d;this.y=e},setFromPoint:function(d){this.x=d.x;this.y=d.y},swap:function(e){var d=this.x,f=this.y;this.x=e.x;this.y=e.y;e.x=d;e.y=f}}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Intersection){b.warn("fabric.Intersection is already defined");return}function c(d){if(arguments.length>0){this.init(d)}}b.Intersection=c;b.Intersection.prototype={init:function(d){this.status=d;this.points=[]},appendPoint:function(d){this.points.push(d)},appendPoints:function(d){this.points=this.points.concat(d)}};b.Intersection.intersectLineLine=function(h,f,l,k){var m,i=(k.x-l.x)*(h.y-l.y)-(k.y-l.y)*(h.x-l.x),j=(f.x-h.x)*(h.y-l.y)-(f.y-h.y)*(h.x-l.x),g=(k.y-l.y)*(f.x-h.x)-(k.x-l.x)*(f.y-h.y);if(g!=0){var e=i/g,d=j/g;if(0<=e&&e<=1&&0<=d&&d<=1){m=new c("Intersection");m.points.push(new b.Point(h.x+e*(f.x-h.x),h.y+e*(f.y-h.y)))}else{m=new c("No Intersection")}}else{if(i==0||j==0){m=new c("Coincident")}else{m=new c("Parallel")}}return m};b.Intersection.intersectLinePolygon=function(e,d,l){var m=new c("No Intersection"),f=l.length;for(var h=0;h0){m.status="Intersection"}return m};b.Intersection.intersectPolygonPolygon=function(j,h){var f=new c("No Intersection"),l=j.length;for(var k=0;k0){f.status="Intersection"}return f};b.Intersection.intersectPolygonRectangle=function(n,e,d){var g=e.min(d),m=e.max(d),f=new b.Point(m.x,g.y),l=new b.Point(g.x,m.y),k=c.intersectLinePolygon(g,f,n),j=c.intersectLinePolygon(f,m,n),i=c.intersectLinePolygon(m,l,n),h=c.intersectLinePolygon(l,g,n),o=new c("No Intersection");o.appendPoints(k.points);o.appendPoints(j.points);o.appendPoints(i.points);o.appendPoints(h.points);if(o.points.length>0){o.status="Intersection"}return o}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Color){b.warn("fabric.Color is already defined.");return}function c(d){if(!d){this.setSource([0,0,0,1])}else{this._tryParsingColor(d)}}b.Color=c;b.Color.prototype={_tryParsingColor:function(d){var e=c.sourceFromHex(d);if(!e){e=c.sourceFromRgb(d)}if(e){this.setSource(e)}},getSource:function(){return this._source},setSource:function(d){this._source=d},toRgb:function(){var d=this.getSource();return"rgb("+d[0]+","+d[1]+","+d[2]+")"},toRgba:function(){var d=this.getSource();return"rgba("+d[0]+","+d[1]+","+d[2]+","+d[3]+")"},toHex:function(){var h=this.getSource();var f=h[0].toString(16);f=(f.length==1)?("0"+f):f;var e=h[1].toString(16);e=(e.length==1)?("0"+e):e;var d=h[2].toString(16);d=(d.length==1)?("0"+d):d;return f.toUpperCase()+e.toUpperCase()+d.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var d=this.getSource();d[3]=e;this.setSource(d);return this},toGrayscale:function(){var f=this.getSource(),e=parseInt((f[0]*0.3+f[1]*0.59+f[2]*0.11).toFixed(0),10),d=f[3];this.setSource([e,e,e,d]);return this},toBlackWhite:function(d){var g=this.getSource(),f=(g[0]*0.3+g[1]*0.59+g[2]*0.11).toFixed(0),e=g[3],d=d||127;f=(Number(f)=0;--k){if(j.intersectsWithObject(this._objects[k])||j.isContainedWithinObject(this._objects[k])){g=k;break}}e(this._objects,j);this._objects.splice(g,0,j)}return this.renderAll()},bringForward:function(k){var n=this.getObjects(),h=n.indexOf(k),g=h;if(h!==n.length-1){for(var m=h+1,j=this._objects.length;m"};f(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(l){var k=l.getContext("2d"),g=k.getImageData(0,0,l.width,l.height),p=g.data,m=g.width,r=g.height,q,h,o,n;for(o=0;o0)?0:-v),r.ey-((u>0)?0:-u),t,s);this.contextTop.lineWidth=this.selectionLineWidth;this.contextTop.strokeStyle=this.selectionBorderColor;this.contextTop.strokeRect(r.ex+a-((v>0)?0:t),r.ey+a-((u>0)?0:s),t,s)},_findSelectedObjects:function(x){var y,t,D=[],s=this._groupSelector.ex,C=this._groupSelector.ey,r=s+this._groupSelector.left,A=C+this._groupSelector.top,z,w=new fabric.Point(f(s,r),f(C,A)),B=new fabric.Point(l(s,r),l(C,A));for(var u=0,v=this._objects.length;u1){var D=new fabric.Group(D);this.setActiveGroup(D);D.saveCoords();this.fire("selection:created",{target:D})}}this.renderAll()},findTarget:function(v,s){var u,w=this.getPointer(v);var t=this.getActiveGroup();if(t&&!s&&this.containsPoint(v,t)){u=t;return u}for(var r=this._objects.length;r--;){if(this._objects[r]&&this.containsPoint(v,this._objects[r])){u=this._objects[r];this.relatedTarget=u;break}}if(u&&u.selectable){return u}},getPointer:function(r){var s=q(r);return{x:s.x-this._offset.left,y:s.y-this._offset.top}},_createUpperCanvas:function(){this.upperCanvasEl=this._createCanvasElement();this.upperCanvasEl.className="upper-canvas";this.wrapperEl.appendChild(this.upperCanvasEl);this._applyCanvasStyle(this.upperCanvasEl);this.contextTop=this.upperCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.CONTAINER_CLASS});fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"});fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(s){var t=this.getWidth()||s.width,r=this.getHeight()||s.height;fabric.util.setStyle(s,{position:"absolute",width:t+"px",height:r+"px",left:0,top:0});s.width=t;s.height=r;fabric.util.makeElementUnselectable(s)},getContext:function(){return this.contextTop},setActiveObject:function(r,s){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=r;r.setActive(true);this.renderAll();this.fire("object:selected",{target:r,e:s});return this},getActiveObject:function(){return this._activeObject},discardActiveObject:function(){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=null;return this},setActiveGroup:function(r){this._activeGroup=r;return this},getActiveGroup:function(){return this._activeGroup},discardActiveGroup:function(){var r=this.getActiveGroup();if(r){r.destroy()}return this.setActiveGroup(null)},deactivateAll:function(){var s=this.getObjects(),t=0,r=s.length;for(;t1){var o=new fabric.PathGroup(q,n)}else{var o=q[0]}o.setSourcePath(m);if(!(o instanceof fabric.PathGroup)){fabric.util.object.extend(o,n);if(typeof n.angle!=="undefined"){o.setAngle(n.angle)}}g(o,l)})}}}},this)}catch(c){fabric.log(c.message)}},loadFromJSON:function(a,d){if(!a){return}var b=JSON.parse(a);if(!b||(b&&!b.objects)){return}this.clear();var c=this;this._enlivenObjects(b.objects,function(){c.backgroundColor=b.background;if(d){d()}});return this},_enlivenObjects:function(b,e){var c=0,a=b.filter(function(f){return f.type==="image"}).length;var d=this;b.forEach(function(h,g){if(!h.type){return}switch(h.type){case"image":case"font":fabric[fabric.util.string.capitalize(h.type)].fromObject(h,function(i){d.insertAt(i,g,true);if(++c===a){if(e){e()}}});break;default:var f=fabric[fabric.util.string.camelize(fabric.util.string.capitalize(h.type))];if(f&&f.fromObject){d.insertAt(f.fromObject(h),g,true)}break}});if(a===0&&e){e()}},_toDataURL:function(a,b){this.clone(function(c){b(c.toDataURL(a))})},_toDataURLWithMultiplier:function(a,c,b){this.clone(function(d){b(d.toDataURLWithMultiplier(a,c))})},clone:function(c){var a=fabric.document.createElement("canvas");a.width=this.getWidth();a.height=this.getHeight();var b=this.__clone||(this.__clone=new fabric.Canvas(a));b.clipTo=this.clipTo;return b.loadFromJSON(JSON.stringify(this.toJSON()),function(){if(c){c(b)}})}});(function(a){var d=a.fabric||(a.fabric={}),l=d.util.object.extend,m=d.util.object.clone,c=d.util.toFixed,k=d.util.string.capitalize,p=d.util.getPointer,b=d.util.degreesToRadians,o=Array.prototype.slice;if(d.Object){return}d.Object=d.util.createClass({type:"object",includeDefaultValues:true,NUM_FRACTION_DIGITS:2,FX_DURATION:500,MIN_SCALE_LIMIT:0.1,stateProperties:("top left width height scaleX scaleY flipX flipY theta angle opacity cornersize fill overlayFill stroke strokeWidth fillRule borderScaleFactor transformMatrix selectable").split(" "),top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:false,flipY:false,theta:0,opacity:1,angle:0,cornersize:12,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",fill:"rgb(0,0,0)",fillRule:"source-over",overlayFill:null,stroke:null,strokeWidth:1,borderOpacityWhenMoving:0.4,borderScaleFactor:1,transformMatrix:null,selectable:true,hasControls:true,hasBorders:true,callSuper:function(i){var q=this.constructor.superclass.prototype[i];return(arguments.length>1)?q.apply(this,o.call(arguments,1)):q.call(this)},initialize:function(i){i&&this.setOptions(i)},setOptions:function(q){var r=this.stateProperties.length,s;while(r--){s=this.stateProperties[r];if(s in q){this.set(s,q[s])}}},transform:function(i){i.globalAlpha=this.opacity;i.translate(this.left,this.top);i.rotate(this.theta);i.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(){var i={type:this.type,left:c(this.left,this.NUM_FRACTION_DIGITS),top:c(this.top,this.NUM_FRACTION_DIGITS),width:c(this.width,this.NUM_FRACTION_DIGITS),height:c(this.height,this.NUM_FRACTION_DIGITS),fill:this.fill,overlayFill:this.overlayFill,stroke:this.stroke,strokeWidth:this.strokeWidth,scaleX:c(this.scaleX,this.NUM_FRACTION_DIGITS),scaleY:c(this.scaleY,this.NUM_FRACTION_DIGITS),angle:c(this.getAngle(),this.NUM_FRACTION_DIGITS),flipX:this.flipX,flipY:this.flipY,opacity:c(this.opacity,this.NUM_FRACTION_DIGITS),selectable:this.selectable};if(!this.includeDefaultValues){i=this._removeDefaultValues(i)}return i},toDatalessObject:function(){return this.toObject()},_removeDefaultValues:function(q){var i=d.Object.prototype.options;if(i){this.stateProperties.forEach(function(r){if(q[r]===i[r]){delete q[r]}})}return q},isActive:function(){return !!this.active},setActive:function(i){this.active=!!i;return this},toString:function(){return"#"},set:function(q,i){var s=(q==="scaleX"||q==="scaleY")&&ir.x&&s.xr.y&&u.y=v)&&(s.d.y>=v)){continue}if((s.o.x==s.d.x)&&(s.o.x>=w)){x=s.o.x;u=v}else{z=0;y=(s.d.y-s.o.y)/(s.d.x-s.o.x);r=v-z*w;q=s.o.y-y*s.o.x;x=-(r-q)/(z-y);u=r+z*x}if(x>=w){t+=1}if(t==2){break}}return t},_getImageLines:function(r,q){return{topline:{o:r.tl,d:r.tr},rightline:{o:r.tr,d:r.br},bottomline:{o:r.br,d:r.bl},leftline:{o:r.bl,d:r.tl}}},_setCornerCoords:function(){var t=this.oCoords,q=b(45-this.getAngle()),s=Math.sqrt(2*Math.pow(this.cornersize,2))/2,i=s*Math.cos(q),r=s*Math.sin(q);t.tl.corner={tl:{x:t.tl.x-r,y:t.tl.y-i},tr:{x:t.tl.x+i,y:t.tl.y-r},bl:{x:t.tl.x-i,y:t.tl.y+r},br:{x:t.tl.x+r,y:t.tl.y+i}};t.tr.corner={tl:{x:t.tr.x-r,y:t.tr.y-i},tr:{x:t.tr.x+i,y:t.tr.y-r},br:{x:t.tr.x+r,y:t.tr.y+i},bl:{x:t.tr.x-i,y:t.tr.y+r}};t.bl.corner={tl:{x:t.bl.x-r,y:t.bl.y-i},bl:{x:t.bl.x-i,y:t.bl.y+r},br:{x:t.bl.x+r,y:t.bl.y+i},tr:{x:t.bl.x+i,y:t.bl.y-r}};t.br.corner={tr:{x:t.br.x+i,y:t.br.y-r},bl:{x:t.br.x-i,y:t.br.y+r},br:{x:t.br.x+r,y:t.br.y+i},tl:{x:t.br.x-r,y:t.br.y-i}};t.ml.corner={tl:{x:t.ml.x-r,y:t.ml.y-i},tr:{x:t.ml.x+i,y:t.ml.y-r},bl:{x:t.ml.x-i,y:t.ml.y+r},br:{x:t.ml.x+r,y:t.ml.y+i}};t.mt.corner={tl:{x:t.mt.x-r,y:t.mt.y-i},tr:{x:t.mt.x+i,y:t.mt.y-r},bl:{x:t.mt.x-i,y:t.mt.y+r},br:{x:t.mt.x+r,y:t.mt.y+i}};t.mr.corner={tl:{x:t.mr.x-r,y:t.mr.y-i},tr:{x:t.mr.x+i,y:t.mr.y-r},bl:{x:t.mr.x-i,y:t.mr.y+r},br:{x:t.mr.x+r,y:t.mr.y+i}};t.mb.corner={tl:{x:t.mb.x-r,y:t.mb.y-i},tr:{x:t.mb.x+i,y:t.mb.y-r},bl:{x:t.mb.x-i,y:t.mb.y+r},br:{x:t.mb.x+r,y:t.mb.y+i}}},toGrayscale:function(){var i=this.get("fill");if(i){this.set("overlayFill",new d.Color(i).toGrayscale().toRgb())}return this},complexity:function(){return 0},getCenter:function(){return{x:this.get("left")+this.width/2,y:this.get("top")+this.height/2}},straighten:function(){var i=this._getAngleValueForStraighten();this.setAngle(i);return this},fxStraighten:function(q){q=q||{};var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(u){t.setAngle(u);i()},onComplete:function(){t.setCoords();s()},onStart:function(){t.setActive(false)}});return this},fxRemove:function(q){q||(q={});var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("opacity"),endValue:0,duration:this.FX_DURATION,onChange:function(u){t.set("opacity",u);i()},onComplete:s,onStart:function(){t.setActive(false)}});return this},_getAngleValueForStraighten:function(){var i=this.get("angle");if(i>-225&&i<=-135){return -180}else{if(i>-135&&i<=-45){return -90}else{if(i>-45&&i<=45){return 0}else{if(i>45&&i<=135){return 90}else{if(i>135&&i<=225){return 180}else{if(i>225&&i<=315){return 270}else{if(i>315){return 360}}}}}}}return 0},toJSON:function(){return this.toObject()},setGradientFill:function(i,q){this.set("fill",d.Gradient.forObject(this,i,q))},animate:function(q,s,i){var r=this;if(!("from" in i)){i.from=this.get(q)}if(/[+-]/.test(s.charAt(0))){s=this.get(q)+parseFloat(s)}d.util.animate({startValue:i.from,endValue:s,duration:i.duration,onChange:function(t){r.set(q,t);i.onChange&&i.onChange()},onComplete:function(){r.setCoords();i.onComplete&&i.onComplete()}})}});d.Object.prototype.rotate=d.Object.prototype.setAngle;var j=d.Object.prototype;for(var g=j.stateProperties.length;g--;){var h=j.stateProperties[g],e=h.charAt(0).toUpperCase()+h.slice(1),f="set"+e,n="get"+e;if(!j[n]){j[n]=(function(i){return new Function('return this.get("'+i+'")')})(h)}if(!j[f]){j[f]=(function(i){return new Function("value",'return this.set("'+i+'", value)')})(h)}}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),e=c.util.object.extend,d=c.Object.prototype.set,a={x1:1,x2:1,y1:1,y2:1};if(c.Line){c.warn("fabric.Line is already defined");return}c.Line=c.util.createClass(c.Object,{type:"line",initialize:function(g,f){if(!g){g=[0,0,0,0]}this.callSuper("initialize",f);this.set("x1",g[0]);this.set("y1",g[1]);this.set("x2",g[2]);this.set("y2",g[3]);this._setWidthHeight()},_setWidthHeight:function(){this.set("width",(this.x2-this.x1)||1);this.set("height",(this.y2-this.y1)||1);this.set("left",this.x1+this.width/2);this.set("top",this.y1+this.height/2)},set:function(f,g){d.call(this,f,g);if(f in a){this._setWidthHeight()}return this},_render:function(f){f.beginPath();f.moveTo(-this.width/2,-this.height/2);f.lineTo(this.width/2,this.height/2);f.lineWidth=this.strokeWidth;var g=f.strokeStyle;f.strokeStyle=f.fillStyle;f.stroke();f.strokeStyle=g},complexity:function(){return 1},toObject:function(){return e(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})}});c.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");c.Line.fromElement=function(g,f){var i=c.parseAttributes(g,c.Line.ATTRIBUTE_NAMES);var h=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new c.Line(h,e(i,f))};c.Line.fromObject=function(f){var g=[f.x1,f.y1,f.x2,f.y2];return new c.Line(g,f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),d=Math.PI*2,e=b.util.object.extend;if(b.Circle){b.warn("fabric.Circle is already defined.");return}b.Circle=b.util.createClass(b.Object,{type:"circle",initialize:function(f){f=f||{};this.set("radius",f.radius||0);this.callSuper("initialize",f);var g=this.get("radius")*2*this.get("scaleX");this.set("width",g).set("height",g)},toObject:function(){return e(this.callSuper("toObject"),{radius:this.get("radius")})},_render:function(f,g){f.beginPath();f.globalAlpha*=this.opacity;f.arc(g?this.left:0,g?this.top:0,this.radius,0,d,false);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},complexity:function(){return 1}});b.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Circle.fromElement=function(g,f){f||(f={});var h=b.parseAttributes(g,b.Circle.ATTRIBUTE_NAMES);if(!c(h)){throw Error("value of `r` attribute is required and can not be negative")}if("left" in h){h.left-=(f.width/2)||0}if("top" in h){h.top-=(f.height/2)||0}return new b.Circle(e(h,f))};function c(f){return(("radius" in f)&&(f.radius>0))}b.Circle.fromObject=function(f){return new b.Circle(f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Triangle){b.warn("fabric.Triangle is already defined");return}b.Triangle=b.util.createClass(b.Object,{type:"triangle",initialize:function(c){c=c||{};this.callSuper("initialize",c);this.set("width",c.width||100).set("height",c.height||100)},_render:function(c){var d=this.width/2,e=this.height/2;c.beginPath();c.moveTo(-d,e);c.lineTo(0,-e);c.lineTo(d,e);c.closePath();if(this.fill){c.fill()}if(this.stroke){c.stroke()}},complexity:function(){return 1}});b.Triangle.fromObject=function(c){return new b.Triangle(c)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),c=Math.PI*2,d=b.util.object.extend;if(b.Ellipse){b.warn("fabric.Ellipse is already defined.");return}b.Ellipse=b.util.createClass(b.Object,{type:"ellipse",initialize:function(e){e=e||{};this.callSuper("initialize",e);this.set("rx",e.rx||0);this.set("ry",e.ry||0);this.set("width",this.get("rx")*2);this.set("height",this.get("ry")*2)},toObject:function(){return d(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},render:function(e,f){if(this.rx===0||this.ry===0){return}return this.callSuper("render",e,f)},_render:function(e,f){e.beginPath();e.save();e.globalAlpha*=this.opacity;e.transform(1,0,0,this.ry/this.rx,0,0);e.arc(f?this.left:0,f?this.top:0,this.rx,0,c,false);if(this.stroke){e.stroke()}if(this.fill){e.fill()}e.restore()},complexity:function(){return 1}});b.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Ellipse.fromElement=function(f,e){e||(e={});var g=b.parseAttributes(f,b.Ellipse.ATTRIBUTE_NAMES);if("left" in g){g.left-=(e.width/2)||0}if("top" in g){g.top-=(e.height/2)||0}return new b.Ellipse(d(g,e))};b.Ellipse.fromObject=function(e){return new b.Ellipse(e)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={});if(c.Rect){console.warn("fabric.Rect is already defined");return}c.Rect=c.util.createClass(c.Object,{type:"rect",options:{rx:0,ry:0},initialize:function(d){this._initStateProperties();this.callSuper("initialize",d);this._initRxRy()},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){if(this.rx&&!this.ry){this.ry=this.rx}else{if(this.ry&&!this.rx){this.rx=this.ry}}},_render:function(f){var j=this.rx||0,i=this.ry||0,d=-this.width/2,k=-this.height/2,e=this.width,g=this.height;f.beginPath();f.globalAlpha*=this.opacity;if(this.group){f.translate(this.x,this.y)}f.moveTo(d+j,k);f.lineTo(d+e-j,k);f.bezierCurveTo(d+e,k,d+e,k+i,d+e,k+i);f.lineTo(d+e,k+g-i);f.bezierCurveTo(d+e,k+g,d+e-j,k+g,d+e-j,k+g);f.lineTo(d+j,k+g);f.bezierCurveTo(d,k+g,d,k+g-i,d,k+g-i);f.lineTo(d,k+i);f.bezierCurveTo(d,k,d+j,k,d+j,k);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},_normalizeLeftTopProperties:function(d){if(d.left){this.set("left",d.left+this.getWidth()/2)}this.set("x",d.left||0);if(d.top){this.set("top",d.top+this.getHeight()/2)}this.set("y",d.top||0);return this},complexity:function(){return 1}});c.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");function a(d){d.left=d.left||0;d.top=d.top||0;return d}c.Rect.fromElement=function(e,d){if(!e){return null}var g=c.parseAttributes(e,c.Rect.ATTRIBUTE_NAMES);g=a(g);var f=new c.Rect(c.util.object.extend((d?c.util.object.clone(d):{}),g));f._normalizeLeftTopProperties(g);return f};c.Rect.fromObject=function(d){return new c.Rect(d)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Polyline){b.warn("fabric.Polyline is already defined");return}b.Polyline=b.util.createClass(b.Object,{type:"polyline",initialize:function(d,c){c=c||{};this.set("points",d);this.callSuper("initialize",c);this._calcDimensions()},_calcDimensions:function(){return b.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return b.Polygon.prototype.toObject.call(this)},_render:function(e){var d;e.beginPath();for(var f=0,c=this.points.length;f1){E=Math.sqrt(E);O*=E;N*=E}var R=aa/O;var Q=W/O;var D=(-W)/N;var C=(aa)/N;var H=R*M+Q*L;var q=D*M+C*L;var F=R*T+Q*S;var ab=D*T+C*S;var Z=(F-H)*(F-H)+(ab-q)*(ab-q);var U=1/Z-0.25;if(U<0){U=0}var w=Math.sqrt(U);if(P==J){w=-w}var V=0.5*(H+F)-w*(ab-q);var K=0.5*(q+ab)+w*(F-H);var v=Math.atan2(q-K,H-V);var u=Math.atan2(ab-K,F-V);var Y=u-v;if(Y<0&&P==1){Y+=2*Math.PI}else{if(Y>0&&P==0){Y-=2*Math.PI}}var B=Math.ceil(Math.abs(Y/(Math.PI*0.5+0.001)));var I=[];for(var X=0;X"},toObject:function(){var q=g(this.callSuper("toObject"),{path:this.path});if(this.sourcePath){q.sourcePath=this.sourcePath}if(this.transformMatrix){q.transformMatrix=this.transformMatrix}return q},toDatalessObject:function(){var q=this.toObject();if(this.sourcePath){q.path=this.sourcePath}delete q.sourcePath;return q},complexity:function(){return this.path.length},_parsePath:function(){var C=[],z,v,y;for(var u=0,t,q,w=this.path.length;uB){for(var r=1,x=q.length;r"},isSameColor:function(){var j=this.getObjects()[0].get("fill");return this.getObjects().every(function(k){return k.get("fill")===j})},complexity:function(){return this.paths.reduce(function(j,k){return j+((k&&k.complexity)?k.complexity():0)},0)},toGrayscale:function(){var j=this.paths.length;while(j--){this.paths[j].toGrayscale()}return this},getObjects:function(){return this.paths}});function c(m){for(var l=0,j=m.length;l"},getObjects:function(){return this.objects},add:function(h){this._restoreObjectsState();this.objects.push(h);h.setActive(true);this._calcBounds();this._updateObjectsCoords();return this},remove:function(h){this._restoreObjectsState();f(this.objects,h);h.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},size:function(){return this.getObjects().length},set:function(h,k){if(typeof k=="function"){this.set(h,k(this[h]))}else{if(h==="fill"||h==="opacity"){var j=this.objects.length;this[h]=k;while(j--){this.objects[j].set(h,k)}}else{this[h]=k}}return this},contains:function(h){return this.objects.indexOf(h)>-1},toObject:function(){return g(this.callSuper("toObject"),{objects:b(this.objects,"clone")})},render:function(j){j.save();this.transform(j);var n=Math.max(this.scaleX,this.scaleY);for(var l=0,h=this.objects.length,k;k=this.objects[l];l++){var m=k.borderScaleFactor;k.borderScaleFactor=n;k.render(j);k.borderScaleFactor=m}this.hideBorders||this.drawBorders(j);this.hideCorners||this.drawCorners(j);j.restore();this.setCoords()},item:function(h){return this.getObjects()[h]},complexity:function(){return this.getObjects().reduce(function(i,h){i+=(typeof h.complexity=="function")?h.complexity():0;return i},0)},_restoreObjectsState:function(){this.objects.forEach(this._restoreObjectState,this);return this},_restoreObjectState:function(j){var l=this.get("left"),m=this.get("top"),h=this.getAngle()*(Math.PI/180),k=j.get("originalLeft"),n=j.get("originalTop"),i=Math.cos(h)*j.get("top")+Math.sin(h)*j.get("left"),o=-Math.sin(h)*j.get("top")+Math.cos(h)*j.get("left");j.setAngle(j.getAngle()+this.getAngle());j.set("left",l+o*this.get("scaleX"));j.set("top",m+i*this.get("scaleY"));j.set("scaleX",j.get("scaleX")*this.get("scaleX"));j.set("scaleY",j.get("scaleY")*this.get("scaleY"));j.setCoords();j.hideCorners=false;j.setActive(false);j.setCoords();return this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){this._originalLeft=this.get("left");this._originalTop=this.get("top");return this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){this.forEachObject(function(h){h.setCoords()});return this},activateAllObjects:function(){return this.setActive(true)},setActive:function(h){this.forEachObject(function(i){i.setActive(h)});return this},forEachObject:e.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var j=this.getObjects(),i=j[0]?j[0].get("opacity"):1;var h=j.every(function(k){return k.get("opacity")===i});if(h){this.opacity=i}},_calcBounds:function(){var s=[],q=[],p,n,k,h,m,l,u,r=0,t=this.objects.length;for(;ri.x&&j-hi.y},toGrayscale:function(){var h=this.objects.length;while(h--){this.objects[h].toGrayscale()}}});e.Group.fromObject=function(h){return new e.Group(h.objects,h)}})(typeof exports!="undefined"?exports:this);(function(a){var b=fabric.util.object.extend;if(!a.fabric){a.fabric={}}if(a.fabric.Image){fabric.warn("fabric.Image is already defined.");return}if(!fabric.Object){fabric.warn("fabric.Object is required for fabric.Image initialization");return}fabric.Image=fabric.util.createClass(fabric.Object,{maxwidth:null,maxheight:null,active:false,bordervisibility:false,cornervisibility:false,type:"image",filters:[],initialize:function(d,c){c||(c={});this.callSuper("initialize",c);this._initElement(d);this._originalImage=this.getElement();this._initConfig(c);if(c.filters){this.filters=c.filters;this.applyFilters()}},getElement:function(){return this._element},setElement:function(c){this._element=c;this._initConfig();return this},getNormalizedSize:function(d,c,e){if(e&&c&&(d.width>d.height&&(d.width/d.height)<(c/e))){normalizedWidth=~~((d.width*e)/d.height);normalizedHeight=e}else{if(e&&((d.height==d.width)||(d.height>d.width)||(d.height>e))){normalizedWidth=~~((d.width*e)/d.height);normalizedHeight=e}else{if(c&&(c'},clone:function(c){this.constructor.fromObject(this.toObject(),c)},applyFilters:function(i){if(this.filters.length===0){this.setElement(this._originalImage);i&&i();return}var c=typeof Buffer!=="undefined"&&typeof window==="undefined",g=this._originalImage,e=fabric.document.createElement("canvas"),f=c?new (require("canvas").Image):fabric.document.createElement("img"),h=this;e.width=g.width;e.height=g.height;e.getContext("2d").drawImage(g,0,0);this.filters.forEach(function(j){j&&j.applyTo(e)});f.onload=function(){h.setElement(f);i&&i();f.onload=e=g=null};f.width=g.width;f.height=g.height;if(c){var d=e.toDataURL("image/png").replace(/data:image\/png;base64,/,"");f.src=new Buffer(d,"base64");h.setElement(f);i&&i()}else{f.src=e.toDataURL("image/png")}return this},_render:function(d){var c=this.getOriginalSize();d.drawImage(this.getElement(),-c.width/2,-c.height/2,c.width,c.height)},_adjustWidthHeightToBorders:function(c){if(c){this.currentBorder=this.borderwidth;this.width+=(2*this.currentBorder);this.height+=(2*this.currentBorder)}else{this.currentBorder=0}},_resetWidthHeight:function(){var c=this.getElement();this.set("width",c.width);this.set("height",c.height)},_initElement:function(c){this.setElement(fabric.util.getById(c));fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(c){this.setOptions(c||{});this._setBorder();this._setWidthHeight()},_initFilters:function(c){if(c.filters&&c.filters.length){this.filters=c.filters.map(function(d){return fabric.Image.filters[d.type].fromObject(d)})}},_setBorder:function(){if(this.bordervisibility){this.currentBorder=this.borderwidth}else{this.currentBorder=0}},_setWidthHeight:function(){var c=2*this.currentBorder;this.width=(this.getElement().width||0)+c;this.height=(this.getElement().height||0)+c},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.fromObject=function(d,f){var c=fabric.document.createElement("img"),e=d.src;if(d.width){c.width=d.width}if(d.height){c.height=d.height}c.onload=function(){fabric.Image.prototype._initFilters.call(d,d);var g=new fabric.Image(c,d);f&&f(g);c=c.onload=null};c.src=e};fabric.Image.fromURL=function(d,f,e){var c=fabric.document.createElement("img");c.onload=function(){if(f){f(new fabric.Image(c,e))}c=c.onload=null};c.src=d};fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" ");fabric.Image.fromElement=function(d,f,c){c||(c={});var e=fabric.parseAttributes(d,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(e["xlink:href"],f,b(e,c))};fabric.Image.async=true})(typeof exports!="undefined"?exports:this);fabric.Image.filters={};fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(d){var c=d.getContext("2d"),a=c.getImageData(0,0,d.width,d.height),h=a.data,e=a.width,l=a.height,k,b,g,f;for(g=0;gh&&m>h&&o>h&&p(a-m)'},_render:function(e){var g=Cufon.textOptions||(Cufon.textOptions={});g.left=this.left;g.top=this.top;g.context=e;g.color=this.fill;var f=this._initDummyElement();this.transform(e);Cufon.replaceElement(f,{separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor});this.width=g.width;this.height=g.height;this.setCoords()},_initDummyElement:function(){var f=b.document.createElement("div"),e=b.document.createElement("div");e.appendChild(f);f.innerHTML=this.text;f.style.fontSize=this.fontSize+"px";f.style.letterSpacing="normal";return f},render:function(e,f){e.save();this._render(e);if(!f&&this.active){this.drawBorders(e);this.hideCorners||this.drawCorners(e)}e.restore()},toObject:function(){return d(this.callSuper("toObject"),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor})},setColor:function(e){this.set("fill",e);return this},setFontsize:function(e){this.set("fontSize",e);this.setCoords();return this},getText:function(){return this.text},setText:function(e){this.set("text",e);this.setCoords();return this},set:function(e,f){if(typeof e=="object"){for(var g in e){this.set(g,e[g])}}else{this[e]=f;if(e==="fontFamily"&&this.path){this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+f+"$3")}}return this}});b.Text.fromObject=function(e){return new b.Text(e.text,c(e))};b.Text.fromElement=function(e){}})(typeof exports!="undefined"?exports:this);(function(){if(typeof document!="undefined"&&typeof window!="undefined"){return}var XML=require("o3-xml"),URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;function request(url,encoding,callback){var oURL=URL.parse(url),client=HTTP.createClient(80,oURL.hostname),request=client.request("GET",oURL.pathname,{host:oURL.hostname});client.addListener("error",function(err){if(err.errno===process.ECONNREFUSED){fabric.log("ECONNREFUSED: connection refused to "+client.host+":"+client.port)}else{fabric.log(err.message)}});request.end();request.on("response",function(response){var body="";if(encoding){response.setEncoding(encoding)}response.on("end",function(){callback(body)});response.on("data",function(chunk){if(response.statusCode==200){body+=chunk}})})}fabric.util.loadImage=function(url,callback){request(url,"binary",function(body){var img=new Image();img.src=new Buffer(body,"binary");callback(new fabric.Image(img))})};fabric.loadSVGFromURL=function(url,callback){url=url.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();request(url,"",function(body){var doc=XML.parseFromString(body);fabric.parseSVGDocument(doc.documentElement,function(results,options){callback(results,options)})})};fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body);callback&&callback()})};fabric.Image.fromObject=function(object,callback){fabric.util.loadImage(object.src,function(img){var oImg=new fabric.Image(img);oImg._initConfig(object);oImg._initFilters(object);callback(oImg)})};fabric.createCanvasForNode=function(width,height){var canvasEl=fabric.document.createElement("canvas"),nodeCanvas=new Canvas(width||600,height||600);canvasEl.style={};canvasEl.width=nodeCanvas.width;canvasEl.height=nodeCanvas.height;var Canvas=fabric.Canvas||fabric.StaticCanvas;var fabricCanvas=new Canvas(canvasEl);fabricCanvas.contextContainer=nodeCanvas.getContext("2d");fabricCanvas.nodeCanvas=nodeCanvas;return fabricCanvas};fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};if(fabric.Canvas){fabric.Canvas.prototype.createPNGStream}var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(width){origSetWidth.call(this);this.nodeCanvas.width=width;return this};if(fabric.Canvas){fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth}var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(height){origSetHeight.call(this);this.nodeCanvas.height=height;return this};if(fabric.Canvas){fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight}})(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index aa4c15f36dd832bf7a7585139167ee80d05edd57..15d166a6043599e4bc7c7ed3433d7bdbb7471d4d 100644 GIT binary patch literal 34997 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 VfP7uYkU0&T{}2Aj*+}oj0RZpfb0h!& literal 34887 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 PG-~~SW(#pH_{0GKz3#i| diff --git a/package.json b/package.json index e3bb39bb..0d3500d0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "0.7.1", + "version": "0.7.2", "author": "Juriy Zaytsev ", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "repository": "git://github.com/kangax/fabric.js", diff --git a/src/util/misc.js b/src/util/misc.js index 4982ba3d..ea9e809b 100644 --- a/src/util/misc.js +++ b/src/util/misc.js @@ -100,19 +100,36 @@ endValue = 'endValue' in options ? options.endValue : 100; options.onStart && options.onStart(); - - var interval = setInterval(function() { + + (function tick() { time = +new Date(); pos = time > finish ? 1 : (time - start) / duration; onChange(startValue + (endValue - startValue) * easing(pos)); if (time > finish || abort()) { - clearInterval(interval); options.onComplete && options.onComplete(); - } - }, 10); - - return interval; + return; + } + requestAnimFrame(tick); + })(); } + + /** + * requestAnimationFrame polyfill from http://paulirish.com/2011/requestanimationframe-for-smart-animating/ + * @method requestAnimFrame + * @memberOf fabric.util + * @param {Function} callback Callback to invoke + * @param {DOMElement} element optional Element to associate with animation + */ + var requestAnimFrame = (function() { + return window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function(callback, element) { + window.setTimeout(callback, 1000 / 60); + }; + })(); /** * Loads image element from given url and passes it to a callback @@ -140,5 +157,6 @@ fabric.util.getRandomInt = getRandomInt; fabric.util.falseFunction = falseFunction; fabric.util.animate = animate; + fabric.util.requestAnimFrame = requestAnimFrame; fabric.util.loadImage = loadImage; })(); \ No newline at end of file