mirror of
https://github.com/Hopiu/fabric.js.git
synced 2026-05-23 04:35:48 +00:00
7 lines
No EOL
102 KiB
JavaScript
7 lines
No EOL
102 KiB
JavaScript
/*! Fabric.js Copyright 2008-2011, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */
|
|
var fabric=fabric||{version:"0.4"};fabric.log=function(){};fabric.warn=function(){};if(typeof console!=="undefined"){if(typeof console.log!=="undefined"&&console.log.apply){fabric.log=function(){return console.log.apply(console,arguments)}}if(typeof console.warn!=="undefined"&&console.warn.apply){fabric.warn=function(){return console.warn.apply(console,arguments)}}}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<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==="string"){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof JSON.stringify!=="function"){JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":value})}}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}}());(function(){var a=document.defaultView;if(a&&a.getComputedStyle){var b=a.getComputedStyle(document.documentElement,"");if(b===null){a.getComputedStyle=function c(d,e){return d.style}}}})();
|
|
/*!
|
|
* Copyright (c) 2009 Simo Kinnunen.
|
|
* Licensed under the MIT license.
|
|
*/
|
|
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(document.addEventListener){document.addEventListener("DOMContentLoaded",A,false);window.addEventListener("pageshow",A,false)}if(!window.opera&&document.readyState){(function(){B[document.readyState]?A():setTimeout(arguments.callee,10)})()}if(document.readyState&&document.createStyleSheet){(function(){try{document.body.doScroll("left");A()}catch(C){setTimeout(arguments.callee,1)}})()}o(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<D;++E){if(!F.disabled&&F.rel.toLowerCase()=="stylesheet"){++G}}if(document.styleSheets.length>=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=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(y<z-1){B+=" "}}return B},textDecoration:function(D,C){if(!C){C=this.getStyle(D)}var z={underline:null,overline:null,"line-through":null};for(var y=D;y.parentNode&&y.parentNode.nodeType==1;){var B=true;for(var A in z){if(z[A]){continue}if(C.get("textDecoration").indexOf(A)!=-1){z[A]=C.get("color")}B=false}if(B){break}C=this.getStyle(y=y.parentNode)}return z},textShadow:i(function(C){if(C=="none"){return null}var B=[],D={},y,z=0;var A=/(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;while(y=A.exec(C)){if(y[0]==","){B.push(D);D={},z=0}else{if(y[1]){D.color=y[1]}else{D[["offX","offY","blur"][z++]]=y[2]}}}B.push(D);return B}),color:i(function(z){var y={};y.color=z.replace(/^rgba\((.*?),\s*([\d.]+)\)/,function(B,A,C){y.opacity=parseFloat(C);return"rgb("+A+")"});return y}),textTransform:function(z,y){return z[{uppercase:"toUpperCase",lowercase:"toLowerCase"}[y.get("textTransform")]||"toString"]()}};function q(z){var y=this.face=z.face;this.glyphs=z.glyphs;this.w=z.w;this.baseSize=parseInt(y["units-per-em"],10);this.family=y["font-family"].toLowerCase();this.weight=y["font-weight"];this.style=y["font-style"]||"normal";this.viewBox=(function(){var B=y.bbox.split(/\s+/);var A={minX:parseInt(B[0],10),minY:parseInt(B[1],10),maxX:parseInt(B[2],10),maxY:parseInt(B[3],10)};A.width=A.maxX-A.minX,A.height=A.maxY-A.minY;A.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")};return A})();this.ascent=-parseInt(y.ascent,10);this.descent=-parseInt(y.descent,10);this.height=-this.ascent+this.descent}function e(){var z={},y={oblique:"italic",italic:"oblique"};this.add=function(A){(z[A.style]||(z[A.style]={}))[A.weight]=A};this.get=function(E,F){var D=z[E]||z[y[E]]||z.normal||z.italic||z.oblique;if(!D){return null}F={normal:400,bold:700}[F]||parseInt(F,10);if(D[F]){return D[F]}var B={1:1,99:0}[F%100],H=[],C,A;if(B===undefined){B=F>400}if(F==500){F=400}for(var G in D){G=parseInt(G,10);if(!C||G<C){C=G}if(!A||G>A){A=G}H.push(G)}if(F<C){F=C}if(F>A){F=A}H.sort(function(J,I){return(B?(J>F&&I>F)?J<I:J>I:(J<F&&I<F)?J>I:J<I)?-1:1});return D[H[0]]}}function p(){function A(C,D){if(C.contains){return C.contains(D)}return C.compareDocumentPosition(D)&16}function y(D){var C=D.relatedTarget;if(!C||A(this,C)){return}z(this)}function B(C){z(this)}function z(C){setTimeout(function(){k.replace(C,d.get(C).options,true)},10)}this.attach=function(C){if(C.onmouseenter===undefined){o(C,"mouseover",y);o(C,"mouseout",y)}else{o(C,"mouseenter",B);o(C,"mouseleave",B)}}}function x(){var A={},y=0;function z(B){return B.cufid||(B.cufid=++y)}this.get=function(B){var C=z(B);return A[C]||(A[C]={})}}function a(y){var A={},z={};this.get=function(B){return A[B]!=undefined?A[B]:y[B]};this.getSize=function(C,B){return z[C]||(z[C]=new l.Size(this.get(C),B))};this.extend=function(B){for(var C in B){A[C]=B[C]}return this}}function o(z,y,A){if(z.addEventListener){z.addEventListener(y,A,false)}else{if(z.attachEvent){z.attachEvent("on"+y,function(){return A.call(z,window.event)})}}}function r(z,y){var A=d.get(z);if(A.options){return z}if(y.hover&&y.hoverables[z.nodeName.toLowerCase()]){b.attach(z)}A.options=y;return z}function i(y){var z={};return function(A){if(!z.hasOwnProperty(A)){z[A]=y.apply(null,arguments)}return z[A]}}function c(D,C){if(!C){C=l.getStyle(D)}var z=l.quotedList(C.get("fontFamily").toLowerCase()),B;for(var A=0,y=z.length;A<y;++A){B=z[A];if(h[B]){return h[B].get(C.get("fontStyle"),C.get("fontWeight"))}}return null}function f(y){return document.getElementsByTagName(y)}function g(){var y={},B;for(var A=0,z=arguments.length;A<z;++A){for(B in arguments[A]){y[B]=arguments[A][B]}}return y}function m(B,J,z,K,C,A){var I=K.separate;if(I=="none"){return w[K.engine].apply(null,arguments)}var H=document.createDocumentFragment(),E;var F=J.split(n[I]),y=(I=="words");if(y&&s){if(/^\s/.test(J)){F.unshift("")}if(/\s$/.test(J)){F.push("")}}for(var G=0,D=F.length;G<D;++G){E=w[K.engine](B,y?l.textAlign(F[G],z,G,D):F[G],z,K,C,A,G<D-1);if(E){H.appendChild(E)}}return H}function j(z,G){var A,y,D,F;for(var B=r(z,G).firstChild;B;B=D){D=B.nextSibling;F=false;if(B.nodeType==1){if(!B.firstChild){continue}if(!/cufon/.test(B.className)){arguments.callee(B,G);continue}else{F=true}}if(!y){y=l.getStyle(z).extend(G)}if(!A){A=c(z,y)}if(!A){continue}if(F){w[G.engine](A,null,y,G,B,z);continue}var E=B.data;if(E===""){continue}var C=m(A,E,y,G,B,z);if(C){B.parentNode.replaceChild(C,B)}else{B.parentNode.removeChild(B)}}}var s=" ".split(/\s+/).length==0;var d=new x();var b=new p();var v=[];var w={},h={},t={enableTextDecoration:false,engine:null,hover:false,hoverables:{a:true},printable:true,selector:(window.Sizzle||(window.jQuery&&function(y){return jQuery(y)})||(window.dojo&&dojo.query)||(window.$$&&function(y){return $$(y)})||(window.$&&function(y){return $(y)})||(document.querySelectorAll&&function(y){return document.querySelectorAll(y)})||f),separate:"words",textShadow:"none"};var n={words:/\s+/,characters:""};k.now=function(){u.ready();return k};k.refresh=function(){var A=v.splice(0,v.length);for(var z=0,y=A.length;z<y;++z){k.replace.apply(null,A[z])}return k};k.registerEngine=function(z,y){if(!y){return k}w[z]=y;return k.set("engine",z)};k.registerFont=function(A){var y=new q(A),z=y.family;if(!h[z]){h[z]=new e()}h[z].add(y);return k.set("fontFamily",'"'+z+'"')};k.replace=function(A,z,y){z=g(t,z);if(!z.engine){return k}if(typeof z.textShadow=="string"&&z.textShadow){z.textShadow=l.textShadow(z.textShadow)}if(!y){v.push(arguments)}if(A.nodeType||typeof A=="string"){A=[A]}l.ready(function(){for(var C=0,B=A.length;C<B;++C){var D=A[C];if(typeof D=="string"){k.replace(z.selector(D),z,true)}else{j(D,z)}}});return k};k.replaceElement=function(z,y){y=g(t,y);if(typeof y.textShadow=="string"&&y.textShadow){y.textShadow=l.textShadow(y.textShadow)}return j(z,y)};k.engines=w;k.fonts=h;k.getOptions=function(){return g(t)};k.set=function(y,z){t[y]=z;return k};return k})();Cufon.registerEngine("canvas",(function(){var b=document.createElement("canvas");if(!b||!b.getContext||!b.getContext.apply){return}b=null;var a=Cufon.CSS.supports("display","inline-block");var e=!a&&(document.compatMode=="BackCompat"||/frameset|transitional/i.test(document.doctype.publicId));var f=document.createElement("style");f.type="text/css";f.appendChild(document.createTextNode(".cufon-canvas{text-indent:0}@media screen,projection{.cufon-canvas{display:inline;display:inline-block;position:relative;vertical-align:middle"+(e?"":";font-size:1px;line-height:1px")+"}.cufon-canvas .cufon-alt{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden}"+(a?".cufon-canvas canvas{position:relative}":".cufon-canvas canvas{position:absolute}")+"}@media print{.cufon-canvas{padding:0 !important}.cufon-canvas canvas{display:none}.cufon-canvas .cufon-alt{display:inline}}"));document.getElementsByTagName("head")[0].appendChild(f);function d(p,h){var n=0,m=0;var g=[],o=/([mrvxe])([^a-z]*)/g,k;generate:for(var j=0;k=o.exec(p);++j){var l=k[2].split(",");switch(k[1]){case"v":g[j]={m:"bezierCurveTo",a:[n+~~l[0],m+~~l[1],n+~~l[2],m+~~l[3],n+=~~l[4],m+=~~l[5]]};break;case"r":g[j]={m:"lineTo",a:[n+=~~l[0],m+=~~l[1]]};break;case"m":g[j]={m:"moveTo",a:[n=~~l[0],m=~~l[1]]};break;case"x":g[j]={m:"closePath"};break;case"e":break generate}h[g[j].m].apply(h,g[j].a)}return g}function c(m,k){for(var j=0,h=m.length;j<h;++j){var g=m[j];k[g.m].apply(k,g.a)}}return function(Y,C,T,w,H,Z){var m=(C===null);var F=Y.viewBox;var n=T.getSize("fontSize",Y.baseSize);var R=T.get("letterSpacing");R=(R=="normal")?0:n.convertFrom(parseInt(R,10));var G=0,S=0,Q=0,A=0;var E=w.textShadow,O=[];if(E){for(var X=0,U=E.length;X<U;++X){var K=E[X];var N=n.convertFrom(parseFloat(K.offX));var M=n.convertFrom(parseFloat(K.offY));O[X]=[N,M];if(M<G){G=M}if(N>S){S=N}if(M>Q){Q=M}if(N<A){A=N}}}var ad=Cufon.CSS.textTransform(m?H.alt:C,T).split("");var h=0,B=null;var v=0,J=1;for(var X=0,U=ad.length;X<U;++X){if(ad[X]==="\n"){J++;if(h>v){v=h}h=0;continue}var z=Y.glyphs[ad[X]]||Y.missingGlyph;if(!z){continue}h+=B=Number(z.w||Y.w)+R}h=Math.max(v,h);if(B===null){return null}S+=(F.width-B);A+=F.minX;var u,o;if(m){u=H;o=H.firstChild}else{u=document.createElement("span");u.className="cufon cufon-canvas";u.alt=C;o=document.createElement("canvas");u.appendChild(o);if(w.printable){var V=document.createElement("span");V.className="cufon-alt";V.appendChild(document.createTextNode(C));u.appendChild(V)}}var ae=u.style;var L=o.style;var k=n.convert(F.height-G+Q);var ac=Math.ceil(k);var P=ac/k;o.width=Math.ceil(n.convert(h+S-A)*P);o.height=ac;G+=F.minY;L.top=Math.round(n.convert(G-Y.ascent))+"px";L.left=Math.round(n.convert(A))+"px";var j=Math.ceil(n.convert(h*P));var s=j+"px";var r=n.convert(Y.height);var D=(w.lineHeight-1)*n.convert(-Y.ascent/5)*(J-1);Cufon.textOptions.width=j;Cufon.textOptions.height=(r*J)+D;Cufon.textOptions.lines=J;if(a){ae.width=s;ae.height=r+"px"}else{ae.paddingLeft=s;ae.paddingBottom=(r-1)+"px"}var aa=Cufon.textOptions.context||o.getContext("2d"),I=ac/F.height;aa.save();aa.scale(I,I);aa.translate(-A-((1/I*o.width)/2)+(Cufon.fonts[Y.family].offsetLeft||0),-G-(Cufon.textOptions.height/I)/2);aa.lineWidth=Y.face["underline-thickness"];aa.save();function p(i,g){aa.strokeStyle=g;aa.beginPath();aa.moveTo(0,i);aa.lineTo(h,i);aa.stroke()}var q=w.enableTextDecoration?Cufon.CSS.textDecoration(Z,T):{},t=w.fontStyle==="italic";function ab(){aa.save();aa.fillStyle=w.backgroundColor;var ag=0;for(var y=0,x=ad.length;y<x;++y){if(ad[y]==="\n"){aa.translate(-ag,-Y.ascent-((Y.ascent/5)*w.lineHeight));ag=0;continue}var af=Y.glyphs[ad[y]]||Y.missingGlyph;if(!af){continue}var g=Number(af.w||Y.w)+R;aa.save();aa.translate(0,Y.ascent);aa.fillRect(0,0,g+10,-Y.ascent+Y.descent);aa.restore();aa.translate(g,0);ag+=g}aa.restore()}function W(){aa.fillStyle=Cufon.textOptions.color||T.get("color");var ag=0;for(var y=0,x=ad.length;y<x;++y){if(ad[y]==="\n"){aa.translate(-ag,-Y.ascent-((Y.ascent/5)*w.lineHeight));ag=0;continue}var af=Y.glyphs[ad[y]]||Y.missingGlyph;if(!af){continue}var g=Number(af.w||Y.w)+R;if(q){aa.save();aa.strokeStyle=aa.fillStyle;aa.beginPath();if(q.underline){aa.moveTo(0,-Y.face["underline-position"]);aa.lineTo(g,-Y.face["underline-position"])}if(q.overline){aa.moveTo(0,Y.ascent);aa.lineTo(g,Y.ascent)}if(q["line-through"]){aa.moveTo(0,-Y.descent);aa.lineTo(g,-Y.descent)}aa.stroke();aa.restore()}if(t){aa.save();aa.transform(1,0,-0.25,1,0,0)}aa.beginPath();if(af.d){if(af.code){c(af.code,aa)}else{af.code=d("m"+af.d,aa)}}aa.fill();if(w.strokeStyle){aa.closePath();aa.save();aa.lineWidth=w.strokeWidth;aa.strokeStyle=w.strokeStyle;aa.stroke();aa.restore()}if(t){aa.restore()}aa.translate(g,0);ag+=g}}if(E){for(var X=0,U=E.length;X<U;++X){var K=E[X];aa.save();aa.fillStyle=K.color;aa.translate.apply(aa,O[X]);W();aa.restore()}}aa.save();ab();W();aa.restore();aa.restore();aa.restore();return u}})());Cufon.registerEngine("vml",(function(){if(!document.namespaces){return}var d=document.createElement("canvas");if(d&&d.getContext&&d.getContext.apply){return}if(document.namespaces.cvml==null){document.namespaces.add("cvml","urn:schemas-microsoft-com:vml")}var b=document.createElement("cvml:shape");b.style.behavior="url(#default#VML)";if(!b.coordsize){return}b=null;document.write('<style type="text/css">.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}}</style>');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=document.createElement("span");t.className="cufon cufon-vml";t.alt=z;m=document.createElement("span");m.className="cufon-vml-canvas";t.appendChild(m);if(w.printable){var R=document.createElement("span");R.className="cufon-alt";R.appendChild(document.createTextNode(z));t.appendChild(R)}if(!M){t.appendChild(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=w.enableTextDecoration?Cufon.CSS.textDecoration(U,O):{};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;S<P;++S){x=T.glyphs[X[S]]||T.missingGlyph;if(x){e+=q=~~(x.w||T.w)+L}}if(q===null){return null}var s=-J+e+(B.width-q);var Y=j.convert(s*K),N=Math.round(Y);var F=s+","+B.height,g;var C="r"+F+"nsnf";for(S=0;S<P;++S){x=T.glyphs[X[S]]||T.missingGlyph;if(!x){continue}if(h){r=m.childNodes[Q];if(r.firstChild){r.removeChild(r.firstChild)}}else{r=document.createElement("cvml:shape");m.appendChild(r)}r.stroked="f";r.coordsize=F;r.coordorigin=g=(J-H)+","+I;r.path=(x.d?"m"+x.d+"xe":"")+"m"+g+C;r.fillcolor=y;var V=r.style;V.width=N;V.height=W;if(A){var o=A[0],n=A[1];var v=Cufon.CSS.color(o.color),u;var E=document.createElement("cvml:shadow");E.on="t";E.color=v.color;E.offset=o.offX+","+o.offY;if(n){u=Cufon.CSS.color(n.color);E.type="double";E.color2=u.color;E.offset2=n.offX+","+n.offY}E.opacity=v.opacity||(u&&u.opacity)||1;r.appendChild(E)}H+=~~(x.w||T.w)+L;++Q}Z.width=Math.max(Math.ceil(j.convert(e*K)),0);return t}})());(function(m){var h=m.fabric||(m.fabric={}),j=Array.prototype.slice,i=Function.prototype.apply;h.util={};h.Observable={observe:function(u,v){if(!this.__eventListeners){this.__eventListeners={}}if(arguments.length===1){for(var w in u){this.observe(w,u[w])}}else{if(!this.__eventListeners[u]){this.__eventListeners[u]=[]}this.__eventListeners[u].push(v)}},stopObserving:function(u,v){if(!this.__eventListeners){this.__eventListeners={}}if(this.__eventListeners[u]){h.util.removeFromArray(this.__eventListeners[u],v)}},fire:function(x,w){if(!this.__eventListeners){this.__eventListeners={}}var v=this.__eventListeners[x];if(!v){return}for(var y=0,u=v.length;y<u;y++){v[y]({memo:w})}}};(function(){function A(D,C){var B=D.indexOf(C);if(B!==-1){D.splice(B,1)}return D}function y(C,B){return Math.floor(Math.random()*(B-C+1))+C}var v=Math.PI/180;function x(B){return B*v}function u(C,B){return parseFloat(Number(C).toFixed(B))}function z(){return false}function w(N){N||(N={});var C=+new Date(),G=N.duration||500,M=C+G,F,L,I=N.onChange||function(){},H=N.abort||function(){return false},J=N.easing||function(O){return(-Math.cos(O*Math.PI)/2)+0.5},B="startValue" in N?N.startValue:0,K="endValue" in N?N.endValue:100,E=B>K;N.onStart&&N.onStart();var D=setInterval(function(){F=+new Date();L=F>M?1:(F-C)/G;I(E?(B-(B-K)*J(L)):(B+(K-B)*J(L)));if(F>M||H()){clearInterval(D);N.onComplete&&N.onComplete()}},10);return D}h.util.removeFromArray=A;h.util.degreesToRadians=x;h.util.toFixed=u;h.util.getRandomInt=y;h.util.falseFunction=z;h.util.animate=w})();if(!Array.prototype.indexOf){Array.prototype.indexOf=function(v,w){var u=this.length>>>0;w=Number(w)||0;w=Math[w<0?"ceil":"floor"](w);if(w<0){w+=u}for(;w<u;w++){if(w in this&&this[w]===v){return w}}return -1}}if(!Array.prototype.forEach){Array.prototype.forEach=function(x,w){for(var v=0,u=this.length>>>0;v<u;v++){if(v in this){x.call(w,this[v],v,this)}}}}if(!Array.prototype.map){Array.prototype.map=function(y,x){var v=[];for(var w=0,u=this.length>>>0;w<u;w++){if(w in this){v[w]=y.call(x,this[w],w,this)}}return v}}if(!Array.prototype.every){Array.prototype.every=function(x,w){for(var v=0,u=this.length>>>0;v<u;v++){if(v in this&&!x.call(w,this[v],v,this)){return false}}return true}}if(!Array.prototype.some){Array.prototype.some=function(x,w){for(var v=0,u=this.length>>>0;v<u;v++){if(v in this&&x.call(w,this[v],v,this)){return true}}return false}}if(!Array.prototype.filter){Array.prototype.filter=function(y,x){var v=[],z;for(var w=0,u=this.length>>>0;w<u;w++){if(w in this){z=this[w];if(y.call(x,z,w,this)){v.push(z)}}}return v}}if(!Array.prototype.reduce){Array.prototype.reduce=function(w){var u=this.length>>>0,v=0,x;if(arguments.length>1){x=arguments[1]}else{do{if(v in this){x=this[v++];break}if(++v>=u){throw new TypeError()}}while(true)}for(;v<u;v++){if(v in this){x=w.call(null,x,this[v],v,this)}}return x}}function t(z,y){var w=j.call(arguments,2),v=[];for(var x=0,u=z.length;x<u;x++){v[x]=w.length?z[x][y].apply(z[x],w):z[x][y].call(z[x])}return v}function o(x,w){var v=x.length-1,u=w?x[v][w]:x[v];if(w){while(v--){if(x[v][w]>=u){u=x[v][w]}}}else{while(v--){if(x[v]>=u){u=x[v]}}}return u}function l(x,w){var v=x.length-1,u=w?x[v][w]:x[v];if(w){while(v--){if(x[v][w]<u){u=x[v][w]}}}else{while(v--){if(x[v]<u){u=x[v]}}}return u}h.util.array={invoke:t,min:l,max:o};function q(u,w){for(var v in w){u[v]=w[v]}return u}function r(u){return q({},u)}h.util.object={extend:q,clone:r};if(!String.prototype.trim){String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}}function s(u){return u.replace(/-+(.)?/g,function(v,w){return w?w.toUpperCase():""})}function e(u){return u.charAt(0).toUpperCase()+u.slice(1).toLowerCase()}h.util.string={camelize:s,capitalize:e};if(!Function.prototype.bind){Function.prototype.bind=function(u){var w=this,v=j.call(arguments,1);return v.length?function(){return i.call(w,u,v.concat(j.call(arguments)))}:function(){return i.call(w,u,arguments)}}}(function(){var w=(function(){for(var y in {toString:1}){if(y==="toString"){return false}}return true})();var v;if(w){v=function(y,A){if(A.toString!==Object.prototype.toString){y.prototype.toString=A.toString}if(A.valueOf!==Object.prototype.valueOf){y.prototype.valueOf=A.valueOf}for(var z in A){y.prototype[z]=A[z]}}}else{v=function(y,A){for(var z in A){y.prototype[z]=A[z]}}}function u(){}function x(){var B=null,A=j.call(arguments,0);if(typeof A[0]==="function"){B=A.shift()}function y(){this.initialize.apply(this,arguments)}y.superclass=B;y.subclasses=[];if(B){u.prototype=B.prototype;y.prototype=new u;B.subclasses.push(y)}for(var z=0,C=A.length;z<C;z++){v(y,A[z])}if(!y.prototype.initialize){y.prototype.initialize=emptyFunction}y.prototype.constructor=y;return y}h.util.createClass=x})();(function(x){function B(M){var P=Array.prototype.slice.call(arguments,1),O,N,L=P.length;for(N=0;N<L;N++){O=typeof M[P[N]];if(!(/^(?:function|object|unknown)$/).test(O)){return false}}return true}var y=(function(){if(typeof document.documentElement.uniqueID!=="undefined"){return function(M){return M.uniqueID}}var L=0;return function(M){return M.__uniqueID||(M.__uniqueID="uniqueID__"+L++)}})();var z,w;(function(){var L={};z=function(M){return L[M]};w=function(N,M){L[N]=M}})();function C(L,M){return{handler:M,wrappedHandler:F(L,M)}}function F(L,M){return function(N){M.call(z(L),N||window.event)}}function D(M,L){return function(Q){if(A[M]&&A[M][L]){var O=A[M][L];for(var P=0,N=O.length;P<N;P++){O[P].call(this,Q||window.event)}}}}var I=(B(document.documentElement,"addEventListener","removeEventListener")&&B(window,"addEventListener","removeEventListener")),G=(B(document.documentElement,"attachEvent","detachEvent")&&B(window,"attachEvent","detachEvent")),H={},A={},v,E;if(I){v=function(M,L,N){M.addEventListener(L,N,false)};E=function(M,L,N){M.removeEventListener(L,N,false)}}else{if(G){v=function(N,L,O){var M=y(N);w(M,N);if(!H[M]){H[M]={}}if(!H[M][L]){H[M][L]=[]}var P=C(M,O);H[M][L].push(P);N.attachEvent("on"+L,P.wrappedHandler)};E=function(P,M,Q){var O=y(P),R;if(H[O]&&H[O][M]){for(var N=0,L=H[O][M].length;N<L;N++){R=H[O][M][N];if(R&&R.handler===Q){P.detachEvent("on"+M,R.wrappedHandler);H[O][M][N]=null}}}}}else{v=function(N,L,O){var M=y(N);if(!A[M]){A[M]={}}if(!A[M][L]){A[M][L]=[];var P=N["on"+L];if(P){A[M][L].push(P)}N["on"+L]=D(M,L)}A[M][L].push(O)};E=function(Q,N,R){var P=y(Q);if(A[P]&&A[P][N]){var M=A[P][N];for(var O=0,L=M.length;O<L;O++){if(M[O]===R){M.splice(O,1)}}}}}}h.util.addListener=v;h.util.removeListener=E;function K(L){return{x:u(L),y:J(L)}}function u(N){var M=document.documentElement,L=document.body||{scrollLeft:0};return N.pageX||((typeof N.clientX!="unknown"?N.clientX:0)+(M.scrollLeft||L.scrollLeft)-(M.clientLeft||0))}function J(N){var M=document.documentElement,L=document.body||{scrollTop:0};return N.pageY||((typeof N.clientY!="unknown"?N.clientY:0)+(M.scrollTop||L.scrollTop)-(M.clientTop||0))}h.util.getPointer=K;h.util.object.extend(h.util,h.Observable)})(this);(function(){function y(D,F){var H=D.style,C;if(typeof F==="string"){D.style.cssText+=";"+F;return F.indexOf("opacity")>-1?w(D,F.match(/opacity:\s*(\d?\.?\d*)/)[1]):D}for(var G in F){if(G==="opacity"){w(D,F[G])}else{var E=(G==="float"||G==="cssFloat")?(typeof H.styleFloat==="undefined"?"cssFloat":"styleFloat"):G;H[E]=F[G]}}return D}var B=document.createElement("div"),A=typeof B.style.opacity==="string",v=typeof B.style.filter==="string",u=document.defaultView,z=u&&typeof u.getComputedStyle!=="undefined",x=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,w=function(C){return C};if(A){w=function(C,D){C.style.opacity=D;return C}}else{if(v){w=function(C,D){var E=C.style;if(C.currentStyle&&!C.currentStyle.hasLayout){E.zoom=1}if(x.test(E.filter)){D=D>=0.9999?"":("alpha(opacity="+(D*100)+")");E.filter=E.filter.replace(x,D)}else{E.filter+=" alpha(opacity="+(D*100)+")"}return C}}}h.util.setStyle=y})();var c=Array.prototype.slice;function p(u){return typeof u==="string"?document.getElementById(u):u}function n(u){return c.call(u,0)}try{var g=n(document.childNodes) instanceof Array}catch(d){}if(!g){n=function(v){var u=new Array(v.length),w=v.length;while(w--){u[w]=v[w]}return u}}function b(v,u){var w=document.createElement(v);for(var x in u){if(x==="class"){w.className=u[x]}else{if(x==="for"){w.htmlFor=u[x]}else{w.setAttribute(x,u[x])}}}return w}function f(u,v){if((" "+u.className+" ").indexOf(" "+v+" ")===-1){u.className+=(u.className?" ":"")+v}}function a(v,w,u){if(typeof w==="string"){w=b(w,u)}if(v.parentNode){v.parentNode.replaceChild(w,v)}w.appendChild(v);return w}function k(v){var u=0,w=0;do{u+=v.offsetTop||0;w+=v.offsetLeft||0;v=v.offsetParent}while(v);return({left:w,top:u})}(function(){var u=document.documentElement.style;var v="userSelect" in u?"userSelect":"MozUserSelect" in u?"MozUserSelect":"WebkitUserSelect" in u?"WebkitUserSelect":"KhtmlUserSelect" in u?"KhtmlUserSelect":"";function w(x){if(typeof x.onselectstart!=="undefined"){x.onselectstart=h.util.falseFunction}if(v){x.style[v]="none"}else{if(typeof x.unselectable=="string"){x.unselectable="on"}}return x}h.util.makeElementUnselectable=w})();(function(){function u(x,B){var z=document.getElementsByTagName("head")[0],y=document.createElement("script"),A=true;y.type="text/javascript";y.setAttribute("runat","server");y.onload=y.onreadystatechange=function(C){if(A){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete"){return}A=false;B(C||window.event);y=y.onload=y.onreadystatechange=null}};y.src=x;z.appendChild(y)}function w(x,y){v.load(x);y()}h.util.getScript=u;var v=m.Jaxer;if(v&&v.load){h.util.getScript=w}})();h.util.getById=p;h.util.toArray=n;h.util.makeElement=b;h.util.addClass=f;h.util.wrapElement=a;h.util.getElementOffset=k;(function(){function x(y,z){return y+(/\?/.test(y)?"&":"?")+z}var w=(function(){var B=[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 y=B.length;y--;){try{var A=B[y]();if(A){return B[y]}}catch(z){}}})();function u(){}function v(A,z){z||(z={});var D=z.method?z.method.toUpperCase():"GET",C=z.onComplete||function(){},B=w(),y;B.onreadystatechange=function(){if(B.readyState===4){C(B);B.onreadystatechange=u}};if(D==="GET"){y=null;if(typeof z.parameters=="string"){A=x(A,z.parameters)}}B.open(D,A,true);if(D==="POST"||D==="PUT"){B.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}B.send(y);return B}h.util.request=v})()})(this);(function(b){var c=b.fabric||(b.fabric={}),h=c.util.object.extend,f=c.util.string.capitalize,i=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 m(q,p){if(!q){return}var s,o,n={};if(q.parentNode&&/^g$/i.test(q.parentNode.nodeName)){n=c.parseAttributes(q.parentNode,p)}var r=p.reduce(function(u,t){s=q.getAttribute(t);o=parseFloat(s);if(s){if((t==="fill"||t==="stroke")&&s==="none"){s=""}if(t==="fill-rule"){s=(s==="evenodd")?"destination-over":s}if(t==="transform"){s=c.parseTransformAttribute(s)}if(t in d){t=d[t]}u[t]=isNaN(o)?s:o}return u},{});r=h(r,h(a(q),c.parseStyleAttribute(q)));return h(n,r)}c.parseTransformAttribute=(function(){function n(G,H){var I=H[0];G[0]=Math.cos(I);G[1]=Math.sin(I);G[2]=-Math.sin(I);G[3]=Math.cos(I)}function s(I,J){var H=J[0],G=(J.length===2)?J[1]:J[0];I[0]=H;I[3]=G}function D(G,H){G[2]=H[0]}function p(G,H){G[1]=H[0]}function A(G,H){G[4]=H[0];if(H.length===2){G[5]=H[1]}}var u=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",E="(?:\\s+,?\\s*|,\\s*)",v="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",t="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",C="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+E+"("+o+")"+E+"("+o+"))?\\s*\\))",F="(?:(scale)\\s*\\(\\s*("+o+")(?:"+E+"("+o+"))?\\s*\\))",y="(?:(translate)\\s*\\(\\s*("+o+")(?:"+E+"("+o+"))?\\s*\\))",B="(?:(matrix)\\s*\\(\\s*("+o+")"+E+"("+o+")"+E+"("+o+")"+E+"("+o+")"+E+"("+o+")"+E+"("+o+")\\s*\\))",z="(?:"+B+"|"+y+"|"+F+"|"+C+"|"+v+"|"+t+")",w="(?:"+z+"(?:"+E+z+")*)",q="^\\s*(?:"+w+"?)\\s*$",x=new RegExp(q),r=new RegExp(z);return function(H){var G=u.concat();if(!H||(H&&!x.test(H))){return G}H.replace(r,function(L){var I=new RegExp(z).exec(L).filter(function(M){return(M!==""&&M!=null)}),J=I[1],K=I.slice(2).map(parseFloat);switch(J){case"translate":A(G,K);break;case"rotate":n(G,K);break;case"scale":s(G,K);break;case"skewX":D(G,K);break;case"skewY":p(G,K);break;case"matrix":G=K;break}});return G}})();function j(q){if(!q){return null}q=q.trim();var s=q.indexOf(",")>-1;q=q.split(/\s+/);var o=[];if(s){for(var p=0,n=q.length;p<n;p++){var r=q[p].split(",");o.push({x:parseFloat(r[0]),y:parseFloat(r[1])})}}else{for(var p=0,n=q.length;p<n;p+=2){o.push({x:parseFloat(q[p]),y:parseFloat(q[p+1])})}}if(o.length%2!==0){}return o}function g(o){var n={},p=o.getAttribute("style");if(p){if(typeof p=="string"){p=p.replace(/;$/,"").split(";");n=p.reduce(function(s,v){var r=v.split(":"),t=r[0].trim(),u=r[1].trim();s[t]=u;return s},{})}else{for(var q in p){if(typeof p[q]!=="undefined"){n[q]=p[q]}}}}return n}function l(s){var o=c.Canvas.activeInstance,n=o?o.getContext():null;if(!n){return}for(var p=s.length;p--;){var q=s[p].get("fill");if(/^url\(/.test(q)){var r=q.slice(5,q.length-1);if(c.gradientDefs[r]){s[p].set("fill",c.Gradient.fromElement(c.gradientDefs[r],n,s[p]))}}}}function e(o,w,x){var n=Array(o.length),r=o.length;function p(){if(--r===0){n=n.filter(function(y){return y!=null});l(n);w(n)}}for(var t=0,q,s=o.length;t<s;t++){q=o[t];var v=c[f(q.tagName)];if(v&&v.fromElement){try{if(v.fromElement.async){v.fromElement(q,(function(y){return function(z){n.splice(y,0,z);p()}})(t),x)}else{n.splice(t,0,v.fromElement(q,x));p()}}catch(u){c.log(u.message||u)}}else{p()}}}function k(s){var q=s.getElementsByTagName("style"),o={},t;for(var p=0,n=q.length;p<n;p++){var r=q[0].textContent;r=r.replace(/\/\*[\s\S]*?\*\//g,"");t=r.match(/[^{]*\{[\s\S]*?\}/g);t=t.map(function(u){return u.trim()});t.forEach(function(z){var x=z.match(/([\s\S]*?)\s*\{([^}]*)\}/),z=x[1],u=x[2].trim(),B=u.replace(/;$/,"").split(/\s*;\s*/);if(!o[z]){o[z]={}}for(var w=0,y=B.length;w<y;w++){var v=B[w].split(/\s*:\s*/),C=v[0],A=v[1];o[z][C]=A}})}return o}function a(o){var u=o.nodeName,p=o.getAttribute("class"),t=o.getAttribute("id"),q={};for(var s in c.cssRules){var n=(p&&new RegExp("^\\."+p).test(s))||(t&&new RegExp("^#"+t).test(s))||(new RegExp("^"+u).test(s));if(n){for(var r in c.cssRules[s]){q[r]=c.cssRules[s][r]}}}return q}c.parseSVGDocument=(function(){var n=/^(path|circle|polygon|polyline|ellipse|rect|line|image)$/;var o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)";var p=new RegExp("^\\s*("+o+"+)\\s*,?\\s*("+o+"+)\\s*,?\\s*("+o+"+)\\s*,?\\s*("+o+"+)\\s*$");function q(r,s){while(r&&(r=r.parentNode)){if(s.test(r.nodeName)){return true}}return false}return function(A,C){if(!A){return}var u=new Date(),z=c.util.toArray(A.getElementsByTagName("*"));var r=z.filter(function(E){return n.test(E.tagName)&&!q(E,/^(?:pattern|defs)$/)});if(!r||(r&&!r.length)){return}var s=A.getAttribute("viewBox"),x=A.getAttribute("width"),v=A.getAttribute("height"),t=null,B=null,y,w;if(s&&(s=s.match(p))){y=parseInt(s[1],10);w=parseInt(s[2],10);t=parseInt(s[3],10);B=parseInt(s[4],10)}t=x?parseFloat(x):t;B=v?parseFloat(v):B;var D={width:t,height:B};c.gradientDefs=c.getGradientDefs(A);c.cssRules=k(A);c.parseElements(r,function(E){c.documentParsingTime=new Date()-u;if(C){C(E,D)}},i(D))}})();h(c,{parseAttributes:m,parseElements:e,parseStyleAttribute:g,parsePointsAttribute:j,getCSSRules:k})})(this);(function(){function c(h){var g=h.getAttribute("style");if(g){var k=g.split(/\s*;\s*/);for(var f=k.length;f--;){var e=k[f].split(/\s*:\s*/),d=e[0].trim(),j=e[1].trim();if(d==="stop-color"){return j}}}}fabric.Gradient={create:function(l,m){m||(m={});var f=m.x1||0,k=m.y1||0,e=m.x2||l.canvas.width,i=m.y2||0,g=m.colorStops;var j=l.createLinearGradient(f,k,e,i);for(var h in g){var d=g[h];j.addColorStop(parseFloat(h),d)}return j},fromElement:function(d,m,l){var k=d.getElementsByTagName("stop"),d,f,e={},g;for(var h=k.length;h--;){d=k[h];f=parseInt(d.getAttribute("offset"),10)/100;e[f]=c(d)||d.getAttribute("stop-color")}var j={x1:d.getAttribute("x1")||0,y1:d.getAttribute("y1")||0,x2:d.getAttribute("x2")||"100%",y2:d.getAttribute("y2")||0};a(l,j);return fabric.Gradient.create(m,{x1:j.x1,y1:j.y1,x2:j.x2,y2:j.y2,colorStops:e})},forObject:function(g,d,e){e||(e={});a(g,e);var f=fabric.Gradient.create(d,{x1:e.x1-(g.width/2),y1:e.y1-(g.height/2),x2:e.x2-(g.width/2),y2:e.y2-(g.height/2),colorStops:e.colorStops});return f}};function a(f,e){for(var g in e){if(typeof e[g]==="string"&&/^\d+%$/.test(e[g])){var d=parseFloat(e[g],10);if(g==="x1"||g==="x2"){e[g]=f.width*d/100}else{if(g==="y1"||g==="y2"){e[g]=f.height*d/100}}}if(g==="x1"||g==="x2"){e[g]-=f.width/2}else{if(g==="y1"||g==="y2"){e[g]-=f.height/2}}}}function b(j){var f=j.getElementsByTagName("linearGradient"),d=j.getElementsByTagName("radialGradient"),g,h={};for(var e=f.length;e--;){g=f[e];h[g.id]=g}for(var e=d.length;e--;){g=d[e];h[g.id]=g}return h}fabric.getGradientDefs=b})();(function(b){var c=b.fabric||(b.fabric={});if(c.Point){c.warn("fabric.Point is already defined");return}c.Point=a;function a(d,e){if(arguments.length>0){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.x<d.x&&this.y<d.y)},lte:function(d){return(this.x<=d.x&&this.y<=d.y)},gt:function(d){return(this.x>d.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}}})(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;h<f;h++){var k=l[h],j=l[(h+1)%f],g=c.intersectLineLine(e,d,k,j);m.appendPoints(g.points)}if(m.points.length>0){m.status="Intersection"}return m};b.Intersection.intersectPolygonPolygon=function(j,h){var f=new c("No Intersection"),l=j.length;for(var k=0;k<l;k++){var g=j[k],e=j[(k+1)%l],d=c.intersectLinePolygon(g,e,h);f.appendPoints(d.points)}if(f.points.length>0){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}})(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)<Number(d))?0:255;this.setSource([f,f,f,e]);return this},overlayWith:function(k){if(!(k instanceof c)){k=new c(k)}var d=[],j=this.getAlpha(),g=0.5,h=this.getSource(),e=k.getSource();for(var f=0;f<3;f++){d.push(Math.round((h[f]*(1-g))+(e[f]*g)))}d[4]=j;this.setSource(d);return this}};b.Color.reRGBa=/^rgba?\((\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})(?:\s*,\s*(\d+(?:\.\d+)?))?\)$/;b.Color.reHex=/^#?([0-9a-f]{6}|[0-9a-f]{3})$/i;b.Color.fromRgb=function(d){return c.fromSource(c.sourceFromRgb(d))};b.Color.sourceFromRgb=function(d){var e=d.match(c.reRGBa);if(e){return[parseInt(e[1],10),parseInt(e[2],10),parseInt(e[3],10),e[4]?parseFloat(e[4]):1]}};b.Color.fromRgba=c.fromRgb;b.Color.fromHex=function(d){return c.fromSource(c.sourceFromHex(d))};b.Color.sourceFromHex=function(f){if(f.match(c.reHex)){var j=f.slice(f.indexOf("#")+1),e=(j.length===3),i=e?(j.charAt(0)+j.charAt(0)):j.substring(0,2),h=e?(j.charAt(1)+j.charAt(1)):j.substring(2,4),d=e?(j.charAt(2)+j.charAt(2)):j.substring(4,6);return[parseInt(i,16),parseInt(h,16),parseInt(d,16),1]}};b.Color.fromSource=function(d){var e=new c();e.setSource(d);return e}})(this);(function(r){if(fabric.Canvas){fabric.warn("fabric.Canvas is already defined.");return}var g=r.window,n=g.document,t=fabric.util.object.extend,i=fabric.util.string.capitalize,u=fabric.util.string.camelize,f=fabric.util.getPointer,q=fabric.util.getElementOffset,k=fabric.util.removeFromArray,j=fabric.util.addListener,e=fabric.util.removeListener,m=fabric.util.array.min,o=fabric.util.array.max,w=Math.sqrt,c=Math.pow,b=Math.atan2,l=Math.abs,p=Math.min,s=Math.max,h=new Error("Could not initialize `canvas` element"),a=500,d=0.5,v="decel",x={tr:"ne-resize",br:"se-resize",bl:"sw-resize",tl:"nw-resize",ml:"w-resize",mt:"n-resize",mr:"e-resize",mb:"s-resize"};fabric.Canvas=function(z,y){y||(y={});this._groupSelector=null;this._objects=[];this._context=null;this._currentTransform=null;this._activeGroup=null;this._freeDrawingXPoints=[];this._freeDrawingYPoints=[];this._createUpperCanvas(z);this._initOptions(y);this._initWrapperElement();this._createLowerCanvas();this._initEvents();if(y.overlayImage){this.setOverlayImage(y.overlayImage)}this.calcOffset();fabric.Canvas.activeInstance=this};t(fabric.Canvas.prototype,fabric.Observable);t(fabric.Canvas.prototype,{backgroundColor:"rgba(0, 0, 0, 0)",selection:true,selectionColor:"rgba(100, 100, 255, 0.3)",selectionBorderColor:"rgba(255, 255, 255, 0.3)",selectionLineWidth:1,freeDrawingColor:"rgb(0, 0, 0)",freeDrawingLineWidth:1,includeDefaultValues:true,shouldCacheImages:false,stateful:true,renderOnAddition:true,CANVAS_WIDTH:600,CANVAS_HEIGHT:600,CONTAINER_CLASS:"canvas-container",HOVER_CURSOR:"move",onBeforeScaleRotate:function(y){},onFpsUpdate:null,calcOffset:function(){this._offset=q(this.upperCanvasEl);return this},setOverlayImage:function(z,B){if(z){var A=this,y=new Image();y.onload=function(){A.overlayImage=y;if(B){B()}y=y.onload=null};y.src=z}return this},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.upperCanvasEl,"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(z){var A=this.getWidth()||z.width,y=this.getHeight()||z.height;fabric.util.setStyle(z,{position:"absolute",width:A+"px",height:y+"px",left:0,top:0});z.width=A;z.height=y;fabric.util.makeElementUnselectable(z)},_createCanvasElement:function(){var y=n.createElement("canvas");if(!y){throw h}this._initCanvasElement(y);return y},_initCanvasElement:function(y){if(typeof y.getContext==="undefined"&&typeof G_vmlCanvasManager!=="undefined"&&G_vmlCanvasManager.initElement){G_vmlCanvasManager.initElement(y)}if(typeof y.getContext==="undefined"){throw h}},_initOptions:function(y){for(var z in y){this[z]=y[z]}this.width=parseInt(this.upperCanvasEl.width,10)||0;this.height=parseInt(this.upperCanvasEl.height,10)||0;this.upperCanvasEl.style.width=this.width+"px";this.upperCanvasEl.style.height=this.height+"px"},_initEvents:function(){var y=this;this._onMouseDown=function(z){y.__onMouseDown(z);j(n,"mouseup",y._onMouseUp)};this._onMouseUp=function(z){y.__onMouseUp(z);e(n,"mouseup",y._onMouseUp)};this._onMouseMove=function(z){y.__onMouseMove(z)};this._onResize=function(z){y.calcOffset()};j(this.upperCanvasEl,"mousedown",this._onMouseDown);j(n,"mousemove",this._onMouseMove);j(g,"resize",this._onResize)},_createUpperCanvas:function(y){this.upperCanvasEl=fabric.util.getById(y)||this._createCanvasElement();this._initCanvasElement(this.upperCanvasEl);fabric.util.addClass(this.upperCanvasEl,"upper-canvas");this._applyCanvasStyle(this.upperCanvasEl);this.contextTop=this.upperCanvasEl.getContext("2d")},_createLowerCanvas:function(){this.lowerCanvasEl=this._createCanvasElement();this.lowerCanvasEl.className="lower-canvas";this.wrapperEl.insertBefore(this.lowerCanvasEl,this.upperCanvasEl);this._applyCanvasStyle(this.lowerCanvasEl);this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(y){return this._setDimension("width",y)},setHeight:function(y){return this._setDimension("height",y)},setDimensions:function(y){for(var z in y){this._setDimension(z,y[z])}return this},_setDimension:function(z,y){this.lowerCanvasEl[z]=y;this.lowerCanvasEl.style[z]=y+"px";this.upperCanvasEl[z]=y;this.upperCanvasEl.style[z]=y+"px";this.wrapperEl.style[z]=y+"px";this[z]=y;this.calcOffset();this.renderAll();return this},__onMouseUp:function(C){if(this.isDrawingMode&&this._isCurrentlyDrawing){this._finalizeDrawingPath();return}if(this._currentTransform){var y=this._currentTransform,B=y.target;if(B._scaling){B._scaling=false}var z=this._objects.length;while(z--){this._objects[z].setCoords()}if(this.stateful&&B.hasStateChanged()){B.isMoving=false;this.fire("object:modified",{target:B})}}this._currentTransform=null;if(this._groupSelector){this._findSelectedObjects(C)}var A=this.getActiveGroup();if(A){A.setObjectsCoords();A.set("isMoving",false);this._setCursor("default")}this._groupSelector=null;this.renderAll();this._setCursorFromEvent(C,B);this._setCursor("");var D=this;setTimeout(function(){D._setCursorFromEvent(C,B)},50);this.fire("mouse:up",{target:B})},_shouldClearSelection:function(A){var z=this.findTarget(A),y=this.getActiveGroup();return(!z||(z&&y&&!y.contains(z)&&y!==z&&!A.shiftKey))},__onMouseDown:function(C){if(C.which!==1){return}if(this.isDrawingMode){this._prepareForDrawing(C);this._captureDrawingPath(C);return}if(this._currentTransform){return}var B=this.findTarget(C),D=this.getPointer(C),z=this.getActiveGroup(),A;if(this._shouldClearSelection(C)){this._groupSelector={ex:D.x,ey:D.y,top:0,left:0};this.deactivateAllWithDispatch()}else{this.stateful&&B.saveState();if(A=B._findTargetCorner(C,this._offset)){this.onBeforeScaleRotate(B)}this._setupCurrentTransform(C,B);var y=C.shiftKey&&(z||this.getActiveObject());if(y){this._handleGroupLogic(C,B)}else{if(B!==this.getActiveGroup()){this.deactivateAll()}this.setActiveObject(B)}}this.renderAll();this.fire("mouse:down",{target:B})},getElement:function(){return this.upperCanvasEl},deactivateAllWithDispatch:function(){var y=this.getActiveGroup()||this.getActiveObject();if(y){this.fire("before:selection:cleared",{target:y})}this.deactivateAll();if(y){this.fire("selection:cleared")}return this},_setupCurrentTransform:function(B,A){var z="drag",y,C=f(B);if(y=A._findTargetCorner(B,this._offset)){z=(y==="ml"||y==="mr")?"scaleX":(y==="mt"||y==="mb")?"scaleY":"rotate"}this._currentTransform={target:A,action:z,scaleX:A.scaleX,scaleY:A.scaleY,offsetX:C.x-A.left,offsetY:C.y-A.top,ex:C.x,ey:C.y,left:A.left,top:A.top,theta:A.theta,width:A.width*A.scaleX};this._currentTransform.original={left:A.left,top:A.top}},_handleGroupLogic:function(B,A){if(A.isType("group")){A=this.findTarget(B,true);if(!A||A.isType("group")){return}}var y=this.getActiveGroup();if(y){if(y.contains(A)){y.remove(A);A.setActive(false);if(y.size()===1){this.removeActiveGroup()}}else{y.add(A)}this.fire("selection:created",{target:y});y.setActive(true)}else{if(this._activeObject){if(A!==this._activeObject){var z=new fabric.Group([this._activeObject,A]);this.setActiveGroup(z);y=this.getActiveGroup()}}A.setActive(true)}if(y){y.saveCoords()}},_prepareForDrawing:function(y){this._isCurrentlyDrawing=true;this.removeActiveObject().renderAll();var z=this.getPointer(y);this._freeDrawingXPoints.length=this._freeDrawingYPoints.length=0;this._freeDrawingXPoints.push(z.x);this._freeDrawingYPoints.push(z.y);this.contextTop.beginPath();this.contextTop.moveTo(z.x,z.y);this.contextTop.strokeStyle=this.freeDrawingColor;this.contextTop.lineWidth=this.freeDrawingLineWidth;this.contextTop.lineCap=this.contextTop.lineJoin="round"},_captureDrawingPath:function(y){var z=this.getPointer(y);this._freeDrawingXPoints.push(z.x);this._freeDrawingYPoints.push(z.y);this.contextTop.lineTo(z.x,z.y);this.contextTop.stroke()},_finalizeDrawingPath:function(){this.contextTop.closePath();this._isCurrentlyDrawing=false;var D=m(this._freeDrawingXPoints),C=m(this._freeDrawingYPoints),A=o(this._freeDrawingXPoints),y=o(this._freeDrawingYPoints),I=this.contextTop,J=[],E,G,z=this._freeDrawingXPoints,H=this._freeDrawingYPoints;J.push("M ",z[0]-D," ",H[0]-C," ");for(var F=1;E=z[F],G=H[F];F++){J.push("L ",E-D," ",G-C," ")}J=J.join("");if(J==="M 0 0 L 0 0 "){return}var B=new fabric.Path(J);B.fill=null;B.stroke=this.freeDrawingColor;B.strokeWidth=this.freeDrawingLineWidth;this.add(B);B.set("left",D+(A-D)/2).set("top",C+(y-C)/2).setCoords();this.renderAll();this.fire("path:created",{path:B})},__onMouseMove:function(E){if(this.isDrawingMode){if(this._isCurrentlyDrawing){this._captureDrawingPath(E)}return}var A=this._groupSelector;if(A!==null){var F=f(E);A.left=F.x-this._offset.left-A.ex;A.top=F.y-this._offset.top-A.ey;this.renderTop()}else{if(!this._currentTransform){var C=this.upperCanvasEl.style;var D=this.findTarget(E);if(!D){for(var B=this._objects.length;B--;){if(!this._objects[B].active){this._objects[B].setActive(false)}}C.cursor="default"}else{this._setCursorFromEvent(E,D);if(D.isActive()){D.setCornersVisibility&&D.setCornersVisibility(true)}}}else{var F=f(E),z=F.x,G=F.y;this._currentTransform.target.isMoving=true;if(this._currentTransform.action==="rotate"){if(!E.shiftKey){this._rotateObject(z,G)}this._scaleObject(z,G)}else{if(this._currentTransform.action==="scaleX"){this._scaleObject(z,G,"x")}else{if(this._currentTransform.action==="scaleY"){this._scaleObject(z,G,"y")}else{this._translateObject(z,G);this.fire("object:moving",{target:this._currentTransform.target})}}}this.renderAll()}}},_translateObject:function(z,B){var A=this._currentTransform.target;A.lockMovementX||A.set("left",z-this._currentTransform.offsetX);A.lockMovementY||A.set("top",B-this._currentTransform.offsetY)},_scaleObject:function(z,G,E){var A=this._currentTransform,F=this._offset,D=A.target;if(D.lockScalingX&&D.lockScalingY){return}var C=w(c(A.ey-A.top-F.top,2)+c(A.ex-A.left-F.left,2)),B=w(c(G-A.top-F.top,2)+c(z-A.left-F.left,2));D._scaling=true;if(!E){D.lockScalingX||D.set("scaleX",A.scaleX*B/C);D.lockScalingY||D.set("scaleY",A.scaleY*B/C)}else{if(E==="x"&&!D.lockUniScaling){D.lockScalingX||D.set("scaleX",A.scaleX*B/C)}else{if(E==="y"&&!D.lockUniScaling){D.lockScalingY||D.set("scaleY",A.scaleY*B/C)}}}},_rotateObject:function(z,E){var A=this._currentTransform,C=this._offset;if(A.target.lockRotation){return}var B=b(A.ey-A.top-C.top,A.ex-A.left-C.left),D=b(E-A.top-C.top,z-A.left-C.left);A.target.set("theta",(D-B)+A.theta)},_setCursor:function(y){this.upperCanvasEl.style.cursor=y},_setCursorFromEvent:function(C,B){var z=this.upperCanvasEl.style;if(!B){z.cursor="default";return false}else{var y=this.getActiveGroup();var A=!!B._findTargetCorner&&(!y||!y.contains(B))&&B._findTargetCorner(C,this._offset);if(!A){z.cursor=this.HOVER_CURSOR}else{if(A in x){z.cursor=x[A]}else{z.cursor="default";return false}}}return true},_draw:function(y,z){z&&z.render(y)},_drawSelection:function(){var y=this._groupSelector,C=y.left,B=y.top,A=l(C),z=l(B);this.contextTop.fillStyle=this.selectionColor;this.contextTop.fillRect(y.ex-((C>0)?0:-C),y.ey-((B>0)?0:-B),A,z);this.contextTop.lineWidth=this.selectionLineWidth;this.contextTop.strokeStyle=this.selectionBorderColor;this.contextTop.strokeRect(y.ex+d-((C>0)?0:A),y.ey+d-((B>0)?0:z),A,z)},_findSelectedObjects:function(E){var F,A,K=[],z=this._groupSelector.ex,J=this._groupSelector.ey,y=z+this._groupSelector.left,H=J+this._groupSelector.top,G,D=new fabric.Point(p(z,y),p(J,H)),I=new fabric.Point(s(z,y),s(J,H));for(var B=0,C=this._objects.length;B<C;++B){G=this._objects[B];if(G.intersectsWithRect(D,I)||G.isContainedWithinRect(D,I)){if(this.selection&&G.selectable){G.setActive(true);K.push(G)}}}if(K.length===1){this.setActiveObject(K[0]);this.fire("object:selected",{target:K[0]})}else{if(K.length>1){var K=new fabric.Group(K);this.setActiveGroup(K);K.saveCoords();this.fire("selection:created",{target:K})}}this.renderAll()},add:function(){this._objects.push.apply(this._objects,arguments);for(var y=arguments.length;y--;){this.stateful&&arguments[y].setupState();arguments[y].setCoords()}this.renderOnAddition&&this.renderAll();return this},insertAt:function(z,y){this._objects.splice(y,0,z);this.stateful&&z.setupState();z.setCoords();this.renderAll();return this},getObjects:function(){return this._objects},getContext:function(){return this.contextTop},clearContext:function(y){y.clearRect(0,0,this.width,this.height);return this},clear:function(){this._objects.length=0;this.clearContext(this.contextTop);this.clearContext(this.contextContainer);this.renderAll();return this},renderAll:function(z){var E=this[z?"contextTop":"contextContainer"];this.clearContext(this.contextTop);if(!z){this.clearContext(E)}var D=this._objects.length,C=this.getActiveGroup(),B=new Date();if(this.clipTo){E.save();E.beginPath();this.clipTo(E);E.clip()}E.fillStyle=this.backgroundColor;E.fillRect(0,0,this.width,this.height);if(D){for(var A=0;A<D;++A){if(!C||(C&&!C.contains(this._objects[A]))){this._draw(E,this._objects[A])}}}if(this.clipTo){E.restore()}if(C){this._draw(this.contextTop,C)}if(this.overlayImage){this.contextTop.drawImage(this.overlayImage,0,0)}if(this.onFpsUpdate){var y=new Date()-B;this.onFpsUpdate(~~(1000/y))}this.fire("after:render");return this},renderTop:function(){this.clearContext(this.contextTop);if(this.overlayImage){this.contextTop.drawImage(this.overlayImage,0,0)}if(this.selection&&this._groupSelector){this._drawSelection()}var y=this.getActiveGroup();if(y){y.render(this.contextTop)}this.fire("after:render");return this},containsPoint:function(E,D){var F=this.getPointer(E),C=this._normalizePointer(D,F),z=C.x,G=C.y;var A=D._getImageLines(D.oCoords),B=D._findCrossPoints(z,G,A);if((B&&B%2===1)||D._findTargetCorner(E,this._offset)){return true}return false},_normalizePointer:function(A,D){var C=this.getActiveGroup(),z=D.x,E=D.y;var B=(C&&A.type!=="group"&&C.contains(A));if(B){z-=C.left;E-=C.top}return{x:z,y:E}},findTarget:function(C,z){var B,D=this.getPointer(C);var A=this.getActiveGroup();if(A&&!z&&this.containsPoint(C,A)){B=A;return B}for(var y=this._objects.length;y--;){if(this.containsPoint(C,this._objects[y])){B=this._objects[y];this.relatedTarget=B;break}}if(this.selection&&B&&B.selectable){return B}},toDataURL:function(z){var y;if(!z){z="png"}if(z==="jpeg"||z==="png"){this.renderAll(true);y=this.upperCanvasEl.toDataURL("image/"+z);this.renderAll()}return y},toDataURLWithMultiplier:function(B,F){var E=this.getWidth(),D=this.getHeight(),z=E*F,A=D*F,y=this.getActiveObject();this.setWidth(z).setHeight(A);this.contextTop.scale(F,F);if(y){this.deactivateAll().renderAll()}var C=this.toDataURL(B);this.contextTop.scale(1/F,1/F);this.setWidth(E).setHeight(D);if(y){this.setActiveObject(y)}this.renderAll();return C},getPointer:function(y){var z=f(y);return{x:z.x-this._offset.left,y:z.y-this._offset.top}},getCenter:function(){return{top:this.getHeight()/2,left:this.getWidth()/2}},centerObjectH:function(y){y.set("left",this.getCenter().left);this.renderAll();return this},fxCenterObjectH:function(z,A){A=A||{};var B=function(){},C=A.onComplete||B,y=A.onChange||B,D=this;fabric.util.animate({startValue:z.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(E){z.set("left",E);D.renderAll();y()},onComplete:function(){z.setCoords();C()}});return this},centerObjectV:function(y){y.set("top",this.getCenter().top);this.renderAll();return this},fxCenterObjectV:function(z,A){A=A||{};var B=function(){},C=A.onComplete||B,y=A.onChange||B,D=this;fabric.util.animate({startValue:z.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(E){z.set("top",E);D.renderAll();y()},onComplete:function(){z.setCoords();C()}});return this},straightenObject:function(y){y.straighten();this.renderAll();return this},fxStraightenObject:function(y){y.fxStraighten({onChange:this.renderAll.bind(this)});return this},toDatalessJSON:function(){return this.toDatalessObject()},toObject:function(){return this._toObjectMethod("toObject")},toDatalessObject:function(){return this._toObjectMethod("toDatalessObject")},_toObjectMethod:function(y){return{objects:this._objects.map(function(z){if(!this.includeDefaultValues){var A=z.includeDefaultValues;z.includeDefaultValues=false}var B=z[y]();if(!this.includeDefaultValues){z.includeDefaultValues=A}return B},this),background:this.backgroundColor}},isEmpty:function(){return this._objects.length===0},loadFromJSON:function(y,B){if(!y){return}var z=JSON.parse(y);if(!z||(z&&!z.objects)){return}this.clear();var A=this;this._enlivenObjects(z.objects,function(){A.backgroundColor=z.background;if(B){B()}});return this},_enlivenObjects:function(z,C){var A=0,y=z.filter(function(D){return D.type==="image"}).length;var B=this;z.forEach(function(F,E){if(!F.type){return}switch(F.type){case"image":case"font":fabric[i(F.type)].fromObject(F,function(G){B.insertAt(G,E);if(++A===y){if(C){C()}}});break;default:var D=fabric[u(i(F.type))];if(D&&D.fromObject){B.insertAt(D.fromObject(F),E)}break}});if(y===0&&C){C()}},loadFromDatalessJSON:function(y,A){if(!y){return}var z=(typeof y==="string")?JSON.parse(y):y;if(!z||(z&&!z.objects)){return}this.clear();this.backgroundColor=z.background;this._enlivenDatalessObjects(z.objects,A)},_enlivenDatalessObjects:function(z,E){function D(G,F){C.insertAt(G,F);G.setCoords();if(++B===y){E&&E()}}var C=this,B=0,y=z.length;if(y===0&&E){E()}try{z.forEach(function(L,J){var G=L.paths?"paths":"path";var K=L[G];delete L[G];if(typeof K!=="string"){switch(L.type){case"image":case"text":fabric[i(L.type)].fromObject(L,function(M){D(M,J)});break;default:var F=fabric[u(i(L.type))];if(F&&F.fromObject){if(K){L[G]=K}D(F.fromObject(L),J)}break}}else{if(L.type==="image"){C.loadImageFromURL(K,function(M){M.setSourcePath(K);t(M,L);M.setAngle(L.angle);D(M,J)})}else{if(L.type==="text"){L.path=K;var I=fabric.Text.fromObject(L);var H=function(){if(Object.prototype.toString.call(g.opera)==="[object Opera]"){setTimeout(function(){D(I,J)},500)}else{D(I,J)}};fabric.util.getScript(K,H)}else{C.loadSVGFromURL(K,function(O,N){if(O.length>1){var M=new fabric.PathGroup(O,L)}else{var M=O[0]}M.setSourcePath(K);if(!(M instanceof fabric.PathGroup)){t(M,L);if(typeof L.angle!=="undefined"){M.setAngle(L.angle)}}D(M,J)})}}}},this)}catch(A){fabric.log(A.message)}},loadImageFromURL:(function(){var y={};return function(z,D){var C=this;function A(){var E=n.getElementById(y[z]);if(E.width&&E.height){D(new fabric.Image(E))}else{setTimeout(A,50)}}if(y[z]){A()}else{var B=new Image();B.onload=function(){B.onload=null;if(B.width&&B.height){D(new fabric.Image(B))}};B.className="canvas-img-clone";B.style.cssText="position:absolute;left:-9999px;top:-9999px;";B.src=z;if(this.shouldCacheImages){y[z]=Element.identify(B)}n.body.appendChild(B)}}})(),loadSVGFromURL:function(y,B){var A=this;y=y.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();this.cache.has(y,function(C){if(C){A.cache.get(y,function(E){var D=A._enlivenCachedObject(E);B(D.objects,D.options)})}else{new fabric.util.request(y,{method:"get",onComplete:z})}});function z(D){var C=D.responseXML;if(!C){return}var E=C.documentElement;if(!E){return}fabric.parseSVGDocument(E,function(G,F){A.cache.set(y,{objects:fabric.util.array.invoke(G,"toObject"),options:F});B(G,F)})}},_enlivenCachedObject:function(A){var z=A.objects,y=A.options;z=z.map(function(B){return fabric[i(B.type)].fromObject(B)});return({objects:z,options:y})},remove:function(y){k(this._objects,y);if(this.getActiveObject()===y){this.removeActiveObject()}this.renderAll();return y},fxRemove:function(y,A){var z=this;y.fxRemove({onChange:this.renderAll.bind(this),onComplete:function(){z.remove(y);if(typeof A==="function"){A()}}});return this},sendToBack:function(y){k(this._objects,y);this._objects.unshift(y);return this.renderAll()},bringToFront:function(y){k(this._objects,y);this._objects.push(y);return this.renderAll()},sendBackwards:function(A){var z=this._objects.indexOf(A),y=z;if(z!==0){for(var B=z-1;B>=0;--B){if(A.intersectsWithObject(this._objects[B])){y=B;break}}k(this._objects,A);this._objects.splice(y,0,A)}return this.renderAll()},bringForward:function(B){var D=this.getObjects(),z=D.indexOf(B),y=z;if(z!==D.length-1){for(var C=z+1,A=this._objects.length;C<A;++C){if(B.intersectsWithObject(D[C])){y=C;break}}k(D,B);D.splice(y,0,B)}this.renderAll()},setActiveObject:function(y){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=y;y.setActive(true);this.renderAll();this.fire("object:selected",{target:y});return this},getActiveObject:function(){return this._activeObject},removeActiveObject:function(){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=null;return this},setActiveGroup:function(y){this._activeGroup=y;return this},getActiveGroup:function(){return this._activeGroup},removeActiveGroup:function(){var y=this.getActiveGroup();if(y){y.destroy()}return this.setActiveGroup(null)},item:function(y){return this.getObjects()[y]},deactivateAll:function(){var z=this.getObjects(),A=0,y=z.length;for(;A<y;A++){z[A].setActive(false)}this.removeActiveGroup();this.removeActiveObject();return this},complexity:function(){return this.getObjects().reduce(function(y,z){y+=z.complexity?z.complexity():0;return y},0)},forEachObject:function(B,z){var A=this.getObjects(),y=A.length;while(y--){B.call(z,A[y],y,A)}return this},dispose:function(){this.clear();e(this.upperCanvasEl,"mousedown",this._onMouseDown);e(n,"mousemove",this._onMouseMove);e(g,"resize",this._onResize);return this},clone:function(A){var y=n.createElement("canvas");y.width=this.getWidth();y.height=this.getHeight();var z=this.__clone||(this.__clone=new fabric.Canvas(y));z.clipTo=this.clipTo;return z.loadFromJSON(JSON.stringify(this.toJSON()),function(){if(A){A(z)}})},_toDataURL:function(y,z){this.clone(function(A){z(A.toDataURL(y))})},_toDataURLWithMultiplier:function(y,A,z){this.clone(function(B){z(B.toDataURLWithMultiplier(y,A))})},_resizeImageToFit:function(A){var z=A.width||A.offsetWidth,y=this.getWidth()/z;if(z){A.width=z*y}},cache:{has:function(y,z){z(false)},get:function(y,z){},set:function(z,y){}}});fabric.Canvas.prototype.toString=function(){return"#<fabric.Canvas ("+this.complexity()+"): { objects: "+this.getObjects().length+" }>"};t(fabric.Canvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(B){var A=B.getContext("2d"),y=A.getImageData(0,0,B.width,B.height),F=y.data,C=y.width,H=y.height,G,z,E,D;for(E=0;E<C;E++){for(D=0;D<H;D++){G=(E*4)*H+(D*4);z=(F[G]+F[G+1]+F[G+2])/3;F[G]=z;F[G+1]=z;F[G+2]=z}}A.putImageData(y,0,0)},supports:function(z){var A=n.createElement("canvas");if(typeof G_vmlCanvasManager!=="undefined"){G_vmlCanvasManager.initElement(A)}if(!A||!A.getContext){return null}var y=A.getContext("2d");if(!y){return null}switch(z){case"getImageData":return typeof y.getImageData!=="undefined";case"toDataURL":return typeof A.toDataURL!=="undefined";default:return null}}});fabric.Canvas.prototype.toJSON=fabric.Canvas.prototype.toObject;fabric.Element=fabric.Canvas})(this);(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,FX_TRANSITION:"decel",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,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){(s==="angle")?this.setAngle(q[s]):(this[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"#<fabric."+k(this.type)+">"},set:function(q,i){var s=(q==="scaleX"||q==="scaleY")&&i<this.MIN_SCALE_LIMIT;if(s){i=this.MIN_SCALE_LIMIT}if(typeof q=="object"){for(var r in q){this.set(r,q[r])}}else{if(q==="angle"){this.setAngle(i)}else{this[q]=i}}return this},toggle:function(q){var i=this.get(q);if(typeof i==="boolean"){this.set(q,!i)}return this},setSourcePath:function(i){this.sourcePath=i;return this},get:function(i){return(i==="angle")?this.getAngle():this[i]},render:function(q,r){if(this.width===0||this.height===0){return}q.save();var i=this.transformMatrix;if(i){q.setTransform(i[0],i[1],i[2],i[3],i[4],i[5])}if(!r){this.transform(q)}if(this.stroke){q.lineWidth=this.strokeWidth;q.strokeStyle=this.stroke}if(this.overlayFill){q.fillStyle=this.overlayFill}else{if(this.fill){q.fillStyle=this.fill}}this._render(q,r);if(this.active&&!r){this.drawBorders(q);this.hideCorners||this.drawCorners(q)}q.restore()},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},scale:function(i){this.scaleX=i;this.scaleY=i;return this},scaleToWidth:function(i){return this.scale(i/this.width)},scaleToHeight:function(i){return this.scale(i/this.height)},setOpacity:function(i){this.set("opacity",i);return this},getAngle:function(){return this.theta*180/Math.PI},setAngle:function(i){this.theta=i/180*Math.PI;this.angle=i;return this},setCoords:function(){this.currentWidth=this.width*this.scaleX;this.currentHeight=this.height*this.scaleY;this._hypotenuse=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2));this._angle=Math.atan(this.currentHeight/this.currentWidth);var v=Math.cos(this._angle+this.theta)*this._hypotenuse,u=Math.sin(this._angle+this.theta)*this._hypotenuse,r=this.theta,y=Math.sin(r),w=Math.cos(r);var B={x:this.left-v,y:this.top-u};var x={x:B.x+(this.currentWidth*w),y:B.y+(this.currentWidth*y)};var A={x:x.x-(this.currentHeight*y),y:x.y+(this.currentHeight*w)};var s={x:B.x-(this.currentHeight*y),y:B.y+(this.currentHeight*w)};var t={x:B.x-(this.currentHeight/2*y),y:B.y+(this.currentHeight/2*w)};var i={x:B.x+(this.currentWidth/2*w),y:B.y+(this.currentWidth/2*y)};var q={x:x.x-(this.currentHeight/2*y),y:x.y+(this.currentHeight/2*w)};var z={x:s.x+(this.currentWidth/2*w),y:s.y+(this.currentWidth/2*y)};this.oCoords={tl:B,tr:x,br:A,bl:s,ml:t,mt:i,mr:q,mb:z};this._setCornerCoords();return this},drawBorders:function(q){var v=this.padding,s=v*2;q.save();q.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1;q.strokeStyle=this.borderColor;var t=1/(this.scaleX<this.MIN_SCALE_LIMIT?this.MIN_SCALE_LIMIT:this.scaleX),r=1/(this.scaleY<this.MIN_SCALE_LIMIT?this.MIN_SCALE_LIMIT:this.scaleY);q.lineWidth=1/this.borderScaleFactor;q.scale(t,r);var i=this.getWidth(),u=this.getHeight();q.strokeRect(~~(-(i/2)-v)+0.5,~~(-(u/2)-v)+0.5,~~(i+s),~~(u+s));q.restore();return this},drawCorners:function(B){var D=this.cornersize,y=D/2,x=this.padding,r=-(this.width/2),w=-(this.height/2),C,A,q=D/this.scaleX,i=D/this.scaleY,s=(x+y)/this.scaleY,t=(x+y)/this.scaleX,v=(x+y-D)/this.scaleX,u=(x+y-D)/this.scaleY,z=this.height;B.save();B.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1;B.fillStyle=this.cornerColor;C=r-t;A=w-s;B.fillRect(C,A,q,i);C=r+this.width-t;A=w-s;B.fillRect(C,A,q,i);C=r-t;A=w+z+u;B.fillRect(C,A,q,i);C=r+this.width+v;A=w+z+u;B.fillRect(C,A,q,i);C=r+this.width/2-t;A=w-s;B.fillRect(C,A,q,i);C=r+this.width/2-t;A=w+z+u;B.fillRect(C,A,q,i);C=r+this.width+v;A=w+z/2-s;B.fillRect(C,A,q,i);C=r-t;A=w+z/2-s;B.fillRect(C,A,q,i);B.restore();return this},clone:function(i){if(this.constructor.fromObject){return this.constructor.fromObject(this.toObject(),i)}return new d.Object(this.toObject())},cloneAsImage:function(s){if(d.Image){var q=new Image();q.onload=function(){if(s){s(new d.Image(q),r)}q=q.onload=null};var r={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",false).set("flipY",false);q.src=this.toDataURL()}return this},toDataURL:function(){var q=document.createElement("canvas");q.width=this.getWidth();q.height=this.getHeight();d.util.wrapElement(q,"div");var i=new d.Canvas(q);i.backgroundColor="transparent";i.renderAll();var s=this.clone();s.left=q.width/2;s.top=q.height/2;s.setActive(false);i.add(s);var r=i.toDataURL("png");i.dispose();i=s=null;return r},hasStateChanged:function(){return this.stateProperties.some(function(i){return this[i]!==this.originalState[i]},this)},saveState:function(){this.stateProperties.forEach(function(i){this.originalState[i]=this.get(i)},this);return this},setupState:function(){this.originalState={};this.saveState()},intersectsWithRect:function(r,t){var w=this.oCoords,i=new d.Point(w.tl.x,w.tl.y),s=new d.Point(w.tr.x,w.tr.y),v=new d.Point(w.bl.x,w.bl.y),q=new d.Point(w.br.x,w.br.y);var u=d.Intersection.intersectPolygonRectangle([i,s,q,v],r,t);return(u.status==="Intersection")},intersectsWithObject:function(i){function q(u){return{tl:new d.Point(u.tl.x,u.tl.y),tr:new d.Point(u.tr.x,u.tr.y),bl:new d.Point(u.bl.x,u.bl.y),br:new d.Point(u.br.x,u.br.y)}}var r=q(this.oCoords),t=q(i.oCoords);var s=d.Intersection.intersectPolygonPolygon([r.tl,r.tr,r.br,r.bl],[t.tl,t.tr,t.br,t.bl]);return(s.status==="Intersection")},isContainedWithinRect:function(r,t){var v=this.oCoords,i=new d.Point(v.tl.x,v.tl.y),s=new d.Point(v.tr.x,v.tr.y),u=new d.Point(v.bl.x,v.bl.y),q=new d.Point(v.br.x,v.br.y);return i.x>r.x&&s.x<t.x&&i.y>r.y&&u.y<t.y},isType:function(i){return this.type===i},_findTargetCorner:function(v,x){var w=p(v),u=w.x-x.left,r=w.y-x.top,t,q;for(var s in this.oCoords){q=this._getImageLines(this.oCoords[s].corner,s);t=this._findCrossPoints(u,r,q);if(t%2==1&&t!=0){this.__corner=s;return s}}return false},_findCrossPoints:function(w,v,i){var z,y,r,q,x,u,t=0,s;for(var A in i){s=i[A];if((s.o.y<v)&&(s.d.y<v)){continue}if((s.o.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)}}})(this);(function(a){var b=a.fabric||(a.fabric={}),c=b.util.object.extend;if(b.Line){b.warn("fabric.Line is already defined");return}b.Line=b.util.createClass(b.Object,{type:"line",initialize:function(e,d){if(!e){e=[0,0,0,0]}this.callSuper("initialize",d);this.set("x1",e[0]);this.set("y1",e[1]);this.set("x2",e[2]);this.set("y2",e[3]);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)},_render:function(d){d.beginPath();d.moveTo(-this.width/2,-this.height/2);d.lineTo(this.width/2,this.height/2);d.lineWidth=this.strokeWidth;var e=d.strokeStyle;d.strokeStyle=d.fillStyle;d.stroke();d.strokeStyle=e},complexity:function(){return 1},toObject:function(){return c(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})}});b.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");b.Line.fromElement=function(e,d){var g=b.parseAttributes(e,b.Line.ATTRIBUTE_NAMES);var f=[g.x1||0,g.y1||0,g.x2||0,g.y2||0];return new b.Line(f,c(g,d))};b.Line.fromObject=function(d){var e=[d.x1,d.y1,d.x2,d.y2];return new b.Line(e,d)}})(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)}})(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)}})(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)}})(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;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)}if(d.top){this.set("top",d.top+this.getHeight()/2)}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)}})(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;f<c;f++){d=this.points[f];e.lineTo(d.x,d.y)}if(this.fill){e.fill()}if(this.stroke){e.stroke()}},complexity:function(){return this.get("points").length}});b.Polyline.ATTRIBUTE_NAMES="fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Polyline.fromElement=function(f,d){if(!f){return null}d||(d={});var g=b.parsePointsAttribute(f.getAttribute("points")),h=b.parseAttributes(f,b.Polyline.ATTRIBUTE_NAMES);for(var e=0,c=g.length;e<c;e++){g[e].x-=(d.width/2)||0;g[e].y-=(d.height/2)||0}return new b.Polyline(g,b.util.object.extend(h,d))};b.Polyline.fromObject=function(c){var d=c.points;return new b.Polyline(d,c)}})(this);(function(e){var f=e.fabric||(e.fabric={}),g=f.util.object.extend,d=f.util.array.min,a=f.util.array.max;if(f.Polygon){f.warn("fabric.Polygon is already defined");return}function c(h){return h.x}function b(h){return h.y}f.Polygon=f.util.createClass(f.Object,{type:"polygon",initialize:function(i,h){h=h||{};this.points=i;this.callSuper("initialize",h);this._calcDimensions()},_calcDimensions:function(){var i=this.points,h=d(i,"x"),l=d(i,"y"),k=a(i,"x"),j=a(i,"y");this.width=k-h;this.height=j-l;this.minX=h;this.minY=l},toObject:function(){return g(this.callSuper("toObject"),{points:this.points.concat()})},_render:function(k){var j;k.beginPath();for(var l=0,h=this.points.length;l<h;l++){j=this.points[l];k.lineTo(j.x,j.y)}if(this.fill){k.fill()}if(this.stroke){k.closePath();k.stroke()}},complexity:function(){return this.points.length}});f.Polygon.ATTRIBUTE_NAMES="fill fill-opacity opacity stroke stroke-width transform".split(" ");f.Polygon.fromElement=function(l,j){if(!l){return null}j||(j={});var m=f.parsePointsAttribute(l.getAttribute("points")),n=f.parseAttributes(l,f.Polygon.ATTRIBUTE_NAMES);for(var k=0,h=m.length;k<h;k++){m[k].x-=(j.width/2)||0;m[k].y-=(j.height/2)||0}return new f.Polygon(m,g(n,j))};f.Polygon.fromObject=function(h){return new f.Polygon(h.points,h)}})(this);(function(a){function k(E,A,w,z){var r=z[0];var p=z[1];var s=z[2];var C=z[3];var D=z[4];var v=z[5];var u=z[6];var q=i(v,u,r,p,C,D,s,A,w);for(var t=0;t<q.length;t++){var B=f.apply(this,q[t]);E.bezierCurveTo.apply(E,B)}}var b={},o={},n=Array.prototype.join,j;function i(S,R,N,M,I,O,F,L,K){j=n.call(arguments);if(b[j]){return b[j]}var q=F*(Math.PI/180);var V=Math.sin(q);var Z=Math.cos(q);N=Math.abs(N);M=Math.abs(M);var z=Z*(L-S)*0.5+V*(K-R)*0.5;var w=Z*(K-R)*0.5-V*(L-S)*0.5;var D=(z*z)/(N*N)+(w*w)/(M*M);if(D>1){D=Math.sqrt(D);N*=D;M*=D}var Q=Z/N;var P=V/N;var C=(-V)/M;var B=(Z)/M;var G=Q*L+P*K;var p=C*L+B*K;var E=Q*S+P*R;var aa=C*S+B*R;var Y=(E-G)*(E-G)+(aa-p)*(aa-p);var T=1/Y-0.25;if(T<0){T=0}var v=Math.sqrt(T);if(O==I){v=-v}var U=0.5*(G+E)-v*(aa-p);var J=0.5*(p+aa)+v*(E-G);var u=Math.atan2(p-J,G-U);var t=Math.atan2(aa-J,E-U);var X=t-u;if(X<0&&O==1){X+=2*Math.PI}else{if(X>0&&O==0){X-=2*Math.PI}}var A=Math.ceil(Math.abs(X/(Math.PI*0.5+0.001)));var H=[];for(var W=0;W<A;W++){var s=u+W*X/A;var r=u+(W+1)*X/A;H[W]=[U,J,s,r,N,M,V,Z]}return(b[j]=H)}function f(v,r,D,B,x,w,s,C){j=n.call(arguments);if(o[j]){return o[j]}var J=C*x;var I=-s*w;var z=s*x;var y=C*w;var E=0.5*(B-D);var A=(8/3)*Math.sin(E*0.5)*Math.sin(E*0.5)/Math.sin(E);var H=v+Math.cos(D)-A*Math.sin(D);var u=r+Math.sin(D)+A*Math.cos(D);var F=v+Math.cos(B);var p=r+Math.sin(B);var G=F+A*Math.sin(B);var q=p-A*Math.cos(B);return(o[j]=[J*H+I*u,z*H+y*u,J*G+I*q,z*G+y*q,J*F+I*p,z*F+y*p])}"use strict";var d=a.fabric||(a.fabric={}),e=d.util.array.min,h=d.util.array.max,g=d.util.object.extend,c=Object.prototype.toString;if(d.Path){d.warn("fabric.Path is already defined");return}if(!d.Object){d.warn("fabric.Path requires fabric.Object");return}function m(p){if(p[0]==="H"){return p[1]}return p[p.length-2]}function l(p){if(p[0]==="V"){return p[1]}return p[p.length-1]}d.Path=d.util.createClass(d.Object,{type:"path",initialize:function(r,q){q=q||{};this.setOptions(q);if(!r){throw Error("`path` argument is required")}var p=c.call(r)==="[object Array]";this.path=p?r:r.match&&r.match(/[a-zA-Z][^a-zA-Z]*/g);if(!this.path){return}if(!p){this._initializeFromArray(q)}if(q.sourcePath){this.setSourcePath(q.sourcePath)}},_initializeFromArray:function(q){var p="width" in q,r="height" in q;this.path=this._parsePath();if(!p||!r){g(this,this._parseDimensions());if(p){this.width=q.width}if(r){this.height=q.height}}},_render:function(C){var w,A=0,z=0,p=0,D=0,u,s,q=-(this.width/2),B=-(this.height/2);for(var r=0,v=this.path.length;r<v;++r){w=this.path[r];switch(w[0]){case"l":A+=w[1];z+=w[2];C.lineTo(A+q,z+B);break;case"L":A=w[1];z=w[2];C.lineTo(A+q,z+B);break;case"h":A+=w[1];C.lineTo(A+q,z+B);break;case"H":A=w[1];C.lineTo(A+q,z+B);break;case"v":z+=w[1];C.lineTo(A+q,z+B);break;case"V":z=w[1];C.lineTo(A+q,z+B);break;case"m":A+=w[1];z+=w[2];C.moveTo(A+q,z+B);break;case"M":A=w[1];z=w[2];C.moveTo(A+q,z+B);break;case"c":u=A+w[5];s=z+w[6];p=A+w[3];D=z+w[4];C.bezierCurveTo(A+w[1]+q,z+w[2]+B,p+q,D+B,u+q,s+B);A=u;z=s;break;case"C":A=w[5];z=w[6];p=w[3];D=w[4];C.bezierCurveTo(w[1]+q,w[2]+B,p+q,D+B,A+q,z+B);break;case"s":u=A+w[3];s=z+w[4];p=2*A-p;D=2*z-D;C.bezierCurveTo(p+q,D+B,A+w[1]+q,z+w[2]+B,u+q,s+B);A=u;z=s;break;case"S":u=w[3];s=w[4];p=2*A-p;D=2*z-D;C.bezierCurveTo(p+q,D+B,w[1]+q,w[2]+B,u+q,s+B);A=u;z=s;break;case"q":A+=w[3];z+=w[4];C.quadraticCurveTo(w[1]+q,w[2]+B,A+q,z+B);break;case"Q":A=w[3];z=w[4];p=w[1];D=w[2];C.quadraticCurveTo(p+q,D+B,A+q,z+B);break;case"T":u=A;s=z;A=w[1];z=w[2];p=-p+2*u;D=-D+2*s;C.quadraticCurveTo(p+q,D+B,A+q,z+B);break;case"a":k(C,A+q,z+B,[w[1],w[2],w[3],w[4],w[5],w[6]+A+q,w[7]+z+B]);A+=w[6];z+=w[7];break;case"A":k(C,A+q,z+B,[w[1],w[2],w[3],w[4],w[5],w[6]+q,w[7]+B]);A=w[6];z=w[7];break;case"z":case"Z":C.closePath();break}}},render:function(q,r){q.save();var p=this.transformMatrix;if(p){q.transform(p[0],p[1],p[2],p[3],p[4],p[5])}if(!r){this.transform(q)}if(this.overlayFill){q.fillStyle=this.overlayFill}else{if(this.fill){q.fillStyle=this.fill}}if(this.stroke){q.strokeStyle=this.stroke}q.beginPath();this._render(q);if(this.fill){q.fill()}if(this.stroke){q.strokeStyle=this.stroke;q.lineWidth=this.strokeWidth;q.lineCap=q.lineJoin="round";q.stroke()}if(!r&&this.active){this.drawBorders(q);this.hideCorners||this.drawCorners(q)}q.restore()},toString:function(){return"#<fabric.Path ("+this.complexity()+"): "+JSON.stringify({top:this.top,left:this.left})+">"},toObject:function(){var p=g(this.callSuper("toObject"),{path:this.path});if(this.sourcePath){p.sourcePath=this.sourcePath}if(this.transformMatrix){p.transformMatrix=this.transformMatrix}return p},toDatalessObject:function(){var p=this.toObject();if(this.sourcePath){p.path=this.sourcePath}delete p.sourcePath;return p},complexity:function(){return this.path.length},_parsePath:function(){var x=[],v,s,u;for(var r=0,q,p,t=this.path.length;r<t;r++){v=this.path[r];s=v.slice(1).trim().replace(/(\d)-/g,"$1###-").split(/\s|,|###/);p=[v.charAt(0)];for(var q=0,w=s.length;q<w;q++){u=parseFloat(s[q]);if(!isNaN(u)){p.push(u)}}x.push(p)}return x},_parseDimensions:function(){var w=[],u=[],z,v,A=false,C,B;this.path.forEach(function(y,x){if(y[0]!=="H"){z=(x===0)?m(y):m(this.path[x-1])}if(y[0]!=="V"){v=(x===0)?l(y):l(this.path[x-1])}if(y[0]===y[0].toLowerCase()){A=true}C=A?z+m(y):y[0]==="V"?z:m(y);B=A?v+l(y):y[0]==="H"?v:l(y);var D=parseInt(C,10);if(!isNaN(D)){w.push(D)}D=parseInt(B,10);if(!isNaN(D)){u.push(D)}},this);var r=e(w),q=e(u),t=0,s=0;var p={top:q-s,left:r-t,bottom:h(u)-s,right:h(w)-t};p.width=p.right-p.left;p.height=p.bottom-p.top;return p}});d.Path.fromObject=function(p){return new d.Path(p.path,p)};d.Path.ATTRIBUTE_NAMES="d fill fill-opacity opacity fill-rule stroke stroke-width transform".split(" ");d.Path.fromElement=function(q,p){var r=d.parseAttributes(q,d.Path.ATTRIBUTE_NAMES);return new d.Path(r.d,g(r,p))}})(this);(function(a){var d=a.fabric||(a.fabric={}),h=d.util.object.extend,f=d.util.array.invoke,i=d.Object.prototype.set,e=d.Object.prototype.toObject,b=d.util.string.camelize,g=d.util.string.capitalize;if(d.PathGroup){d.warn("fabric.PathGroup is already defined");return}d.PathGroup=d.util.createClass(d.Path,{type:"path-group",forceFillOverwrite:false,initialize:function(k,j){j=j||{};this.paths=k;this.setOptions(j);this.setCoords();if(j.sourcePath){this.setSourcePath(j.sourcePath)}},render:function(n){if(this.stub){n.save();this.transform(n);this.stub.render(n,false);if(this.active){this.drawBorders(n);this.drawCorners(n)}n.restore()}else{n.save();var j=this.transformMatrix;if(j){n.transform(j[0],j[1],j[2],j[3],j[4],j[5])}this.transform(n);for(var o=0,k=this.paths.length;o<k;++o){this.paths[o].render(n,true)}if(this.active){this.drawBorders(n);this.hideCorners||this.drawCorners(n)}n.restore()}},set:function(l,k){if((l==="fill"||l==="overlayFill")&&this.isSameColor()){this[l]=k;var j=this.paths.length;while(j--){this.paths[j].set(l,k)}}else{i.call(this,l,k)}return this},toObject:function(){return h(e.call(this),{paths:f(this.getObjects(),"clone"),sourcePath:this.sourcePath})},toDatalessObject:function(){var j=this.toObject();if(this.sourcePath){j.paths=this.sourcePath}return j},toString:function(){return"#<fabric.PathGroup ("+this.complexity()+"): { top: "+this.top+", left: "+this.left+" }>"},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<j;l++){if(!(m[l] instanceof d.Object)){var k=b(g(m[l].type));m[l]=d[k].fromObject(m[l])}}return m}d.PathGroup.fromObject=function(j){var k=c(j.paths);return new d.PathGroup(k,j)}})(this);(function(d){var e=d.fabric||(d.fabric={}),g=e.util.object.extend,c=e.util.array.min,a=e.util.array.max,b=e.util.array.invoke,f=e.util.removeFromArray;if(e.Group){return}e.Group=e.util.createClass(e.Object,{type:"group",initialize:function(i,h){this.objects=i||[];this.originalState={};this.callSuper("initialize");this._calcBounds();this._updateObjectsCoords();if(h){g(this,h)}this._setOpacityIfSame();this.setCoords(true);this.saveCoords();this.activateAllObjects()},_updateObjectsCoords:function(){var i=this.left,h=this.top;this.forEachObject(function(j){var k=j.get("left"),l=j.get("top");j.set("originalLeft",k);j.set("originalTop",l);j.set("left",k-i);j.set("top",l-h);j.setCoords();j.hideCorners=true},this)},toString:function(){return"#<fabric.Group: ("+this.complexity()+")>"},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.Canvas.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(;r<t;++r){m=this.objects[r];m.setCoords();for(var j in m.oCoords){s.push(m.oCoords[j].x);q.push(m.oCoords[j].y)}}p=c(s);k=a(s);n=c(q);h=a(q);l=k-p;u=h-n;this.width=l;this.height=u;this.left=p+l/2;this.top=n+u/2},containsPoint:function(i){var l=this.get("width")/2,h=this.get("height")/2,k=this.get("left"),j=this.get("top");return k-l<i.x&&k+l>i.x&&j-h<i.y&&j+h>i.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)}})(this);(function(a){var b=a.fabric||(a.fabric={}),d=b.util.object.extend,c=b.util.object.clone;if(b.Text){b.warn("fabric.Text is already defined");return}if(!b.Object){b.warn("fabric.Text requires fabric.Object");return}b.Text=b.util.createClass(b.Object,{fontsize:20,fontweight:100,fontfamily:"Modernist_One_400",textDecoration:"",textShadow:null,fontStyle:"",lineHeight:1.6,strokeStyle:"",strokeWidth:1,backgroundColor:"",path:null,type:"text",initialize:function(f,e){this._initStateProperties();this.text=f;this.setOptions(e);this.theta=this.angle*Math.PI/180;this.width=this.getWidth();this.setCoords()},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat();this.stateProperties.push("fontfamily","fontweight","path","text","textDecoration","textShadow","fontStyle","lineHeight","strokeStyle","strokeWidth","backgroundColor");b.util.removeFromArray(this.stateProperties,"width")},toString:function(){return"#<fabric.Text ("+this.complexity()+"): "+JSON.stringify({text:this.text,fontfamily:this.fontfamily})+">"},_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,enableTextDecoration:true,textDecoration:this.textDecoration,textShadow:this.textShadow,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=document.createElement("div"),e=document.createElement("div");e.appendChild(f);f.innerHTML=this.text;f.style.fontSize="40px";f.style.fontWeight="400";f.style.letterSpacing="normal";f.style.color="#000000";f.style.fontWeight="600";f.style.fontFamily="Verdana";return f},render:function(e){e.save();this._render(e);if(this.active){this.drawBorders(e);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,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){this[e]=f;if(e==="fontfamily"){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){}})(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",__isGrayscaled:false,initialize:function(d,c){this.callSuper("initialize",c);this._initElement(d);this._initConfig(c||{})},getElement:function(){return this._element},setElement:function(c){this._element=c;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<d.width)){normalizedHeight=~~((d.height*c)/d.width);normalizedWidth=c}else{normalizedWidth=d.width;normalizedHeight=d.height}}}return{width:normalizedWidth,height:normalizedHeight}},getOriginalSize:function(){var c=this.getElement();return{width:c.width,height:c.height}},setBorderVisibility:function(c){this._resetWidthHeight();this._adjustWidthHeightToBorders(showBorder);this.setCoords()},setCornersVisibility:function(c){this.cornervisibility=!!c},render:function(c,d){c.save();if(!d){this.transform(c)}this._render(c);if(this.active&&!d){this.drawBorders(c);this.hideCorners||this.drawCorners(c)}c.restore()},toObject:function(){return b(this.callSuper("toObject"),{src:this.getSrc()})},getSrc:function(){return this.getElement().src},toString:function(){return'#<fabric.Image: { src: "'+this.getSrc()+'" }>'},clone:function(c){this.constructor.fromObject(this.toObject(),c)},toGrayscale:function(g){if(this.__isGrayscaled){return}var e=this.getElement(),c=document.createElement("canvas"),d=document.createElement("img"),f=this;c.width=e.width;c.height=e.height;c.getContext("2d").drawImage(e,0,0);fabric.Canvas.toGrayscale(c);d.onload=function(){f.setElement(d);g&&g();d.onload=c=e=imageData=null};d.width=e.width;d.height=e.height;d.src=c.toDataURL("image/png");this.__isGrayscaled=true;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(c)},_setBorder:function(){if(this.bordervisibility){this.currentBorder=this.borderwidth}else{this.currentBorder=0}},_setWidthHeight:function(c){var d=2*this.currentBorder;this.width=(this.getElement().width||0)+d;this.height=(this.getElement().height||0)+d},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.fromObject=function(d,f){var c=document.createElement("img"),e=d.src;if(d.width){c.width=d.width}if(d.height){c.height=d.height}c.onload=function(){if(f){f(new fabric.Image(c,d))}c=c.onload=null};c.src=e};fabric.Image.fromURL=function(d,f,e){var c=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.fromElement.async=true})(this); |