var fabric=fabric||{version:"1.5.0"};"undefined"!==typeof exports&&(exports.fabric=fabric);"undefined"!==typeof document&&"undefined"!==typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom("
 
Please note, this is a STATIC archive of website www.tutorialspoint.com from 11 May 2019, cach3.com does not collect or store any user information, there is no "phishing" involved.
"),fabric.window=fabric.document.createWindow?fabric.document.createWindow():fabric.document.parentWindow);fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement; fabric.isLikelyNode="undefined"!==typeof Buffer&&"undefined"===typeof window;fabric.SHARED_ATTRIBUTES="display transform fill fill-opacity fill-rule opacity stroke stroke-dasharray stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width id".split(" ");fabric.DPI=96;fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)";fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1; (function(){function d(c,a){this.__eventListeners[c]&&(a?fabric.util.removeFromArray(this.__eventListeners[c],a):this.__eventListeners[c].length=0)}function b(c,a){this.__eventListeners||(this.__eventListeners={});if(1===arguments.length)for(var g in c)this.on(g,c[g]);else this.__eventListeners[c]||(this.__eventListeners[c]=[]),this.__eventListeners[c].push(a);return this}function e(c,a){if(this.__eventListeners){if(0===arguments.length)this.__eventListeners={};else if(1===arguments.length&&"object"=== typeof arguments[0])for(var g in c)d.call(this,g,c[g]);else d.call(this,c,a);return this}}function a(c,a){if(this.__eventListeners){var g=this.__eventListeners[c];if(g){for(var f=0,b=g.length;fa;)a+=l[n++%m], a>d&&(a=d),c[u?"lineTo":"moveTo"](a,0),u=!u;c.restore()},createCanvasElement:function(c){c||(c=fabric.document.createElement("canvas"));c.getContext||"undefined"===typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(c);return c},createImage:function(){return fabric.isLikelyNode?new (require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(c){c=c.prototype;for(var a=c.stateProperties.length;a--;){var g=c.stateProperties[a],f=g.charAt(0).toUpperCase()+g.slice(1), b="set"+f,f="get"+f;c[f]||(c[f]=new Function('return this.get("'+g+'")'));c[b]||(c[b]=new Function("value",'return this.set("'+g+'", value)'))}},clipContext:function(c,a){a.save();a.beginPath();c.clipTo(a);a.clip()},multiplyTransformMatrices:function(c,a){return[c[0]*a[0]+c[2]*a[1],c[1]*a[0]+c[3]*a[1],c[0]*a[2]+c[2]*a[3],c[1]*a[2]+c[3]*a[3],c[0]*a[4]+c[2]*a[5]+c[4],c[1]*a[4]+c[3]*a[5]+c[5]]},getFunctionBody:function(c){return(String(c).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(c, a,g,f){0f?a-f:0,g=g>f?g-f:0);var b=!0;c=c.getImageData(a,g,2*f||1,2*f||1);a=3;for(g=c.data.length;a=c.data[a],!1!==b);a+=4);return b}}})("undefined"!==typeof exports?exports:this); (function(){function d(a,g,h,d,u,A,D){var v=f.call(arguments);if(c[v])return c[v];var t=Math.PI,q=D*t/180,w=Math.sin(q),q=Math.cos(q),x=0,p=0;h=Math.abs(h);d=Math.abs(d);var r=-q*a*.5-w*g*.5,z=-q*g*.5+w*a*.5,y=h*h,B=d*d,E=z*z,C=r*r,F=y*B-y*E-B*C,G=0;0>F?(y=Math.sqrt(1-F/(y*B)),h*=y,d*=y):G=(u===A?-1:1)*Math.sqrt(F/(y*E+B*C));E=G*h*z/d;C=-G*d*r/h;G=q*E-w*C+.5*a;y=w*E+q*C+.5*g;B=e(1,0,(r-E)/h,(z-C)/d);z=e((r-E)/h,(z-C)/d,(-r-E)/h,(-z-C)/d);0===A&&0z&&(z+=2*t);t=Math.ceil(Math.abs(z/ t*2));r=[];z/=t;E=8/3*Math.sin(z/4)*Math.sin(z/4)/Math.sin(z/2);C=B+z;for(F=0;F=c?g-c:2*Math.PI- (c-g)}function a(c,a,b,e,h,d,D,v){var t=f.call(arguments);if(g[t])return g[t];var q=Math.sqrt,w=Math.min,x=Math.max,p=Math.abs,r=[],z=[[],[]],y,B,E,C,F;B=6*c-12*b+6*h;y=-3*c+9*b-9*h+3*D;E=3*b-3*c;for(var G=0;2>G;++G)0p(y)?1E-12>p(B)||(C=-E/B,0C&&r.push(C)):(C=B*B-4*E*y,0>C||(F=q(C),C=(-B+F)/(2*y),0C&&r.push(C),C=(-B-F)/(2*y),0C&&r.push(C)));for(p=q=r.length;q--;)C=r[q],B=1-C,y=B*B*B*c+3*B*B*C*b+3*B*C*C*h+C*C*C*D,z[0][q]=y,y= B*B*B*a+3*B*B*C*e+3*B*C*C*d+C*C*C*v,z[1][q]=y;z[0][p]=c;z[1][p]=a;z[0][p+1]=D;z[1][p+1]=v;w=[{x:w.apply(null,z[0]),y:w.apply(null,z[1])},{x:x.apply(null,z[0]),y:x.apply(null,z[1])}];return g[t]=w}var c={},h={},g={},f=Array.prototype.join;fabric.util.drawArc=function(c,a,g,f){var b=[[],[],[],[]];f=d(f[5]-a,f[6]-g,f[0],f[1],f[3],f[4],f[2]);for(var e=0,h=f.length;e>>0;if(0===c)return-1;var h=0;0=c)return-1;for(h=0<=h?h:Math.max(c-Math.abs(h),0);h>>0;c>>0;h>> 0;c>>0;c>>0;g>>0,c=0,h;if(1=a)throw new TypeError;}while(1)}for(;c=a})}}})(); (function(){function d(b,e){for(var a in e)b[a]=e[a];return b}fabric.util.object={extend:d,clone:function(b){return d({},b)}}})(); (function(){String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")});fabric.util.string={camelize:function(d){return d.replace(/-+(.)?/g,function(b,e){return e?e.toUpperCase():""})},capitalize:function(d,b){return d.charAt(0).toUpperCase()+(b?d.slice(1):d.slice(1).toLowerCase())},escapeXml:function(d){return d.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}}})(); (function(){var d=Array.prototype.slice,b=Function.prototype.apply,e=function(){};Function.prototype.bind||(Function.prototype.bind=function(a){var c=this,h=d.call(arguments,1),g;g=h.length?function(){return b.call(c,this instanceof e?this:a,h.concat(d.call(arguments)))}:function(){return b.call(c,this instanceof e?this:a,arguments)};e.prototype=this.prototype;g.prototype=new e;return g})})(); (function(){function d(){}function b(c){var a=this.constructor.superclass.prototype[c];return 1g?h:f-c;l()?b.onComplete&&b.onComplete():(k(m(a,n,u,h)),f>g?b.onComplete&&b.onComplete():d(D))})(c)})};fabric.util.requestAnimFrame=d})(); (function(){function d(c,a,g,b){cc?g/2*c*c+a:-g/2*(--c*(c-2)-1)+a},easeInCubic:function(c,a,g,b){return g*(c/=b)*c*c+a},easeOutCubic:function(c,a,g,b){return g*((c=c/b-1)*c*c+1)+a},easeInOutCubic:function(c,a,g,b){c/=b/2;return 1>c?g/2*c*c*c+a:g/2*((c-=2)*c*c+2)+a},easeInQuart:function(c,a,g,b){return g*(c/=b)*c*c*c+a},easeOutQuart:function(c,a,g,b){return-g*((c=c/b-1)*c*c*c-1)+a},easeInOutQuart:function(c,a,b,f){c/=f/2;return 1>c?b/2*c*c*c*c+a:-b/2* ((c-=2)*c*c*c-2)+a},easeInQuint:function(c,a,b,f){return b*(c/=f)*c*c*c*c+a},easeOutQuint:function(c,a,b,f){return b*((c=c/f-1)*c*c*c*c+1)+a},easeInOutQuint:function(c,a,b,f){c/=f/2;return 1>c?b/2*c*c*c*c*c+a:b/2*((c-=2)*c*c*c*c+2)+a},easeInSine:function(c,a,b,f){return-b*Math.cos(c/f*(Math.PI/2))+b+a},easeOutSine:function(c,a,b,f){return b*Math.sin(c/f*(Math.PI/2))+a},easeInOutSine:function(c,a,b,f){return-b/2*(Math.cos(Math.PI*c/f)-1)+a},easeInExpo:function(c,a,b,f){return 0===c?a:b*Math.pow(2, 10*(c/f-1))+a},easeOutExpo:function(c,a,b,f){return c===f?a+b:b*(-Math.pow(2,-10*c/f)+1)+a},easeInOutExpo:function(c,a,b,f){if(0===c)return a;if(c===f)return a+b;c/=f/2;return 1>c?b/2*Math.pow(2,10*(c-1))+a:b/2*(-Math.pow(2,-10*--c)+2)+a},easeInCirc:function(c,a,b,f){return-b*(Math.sqrt(1-(c/=f)*c)-1)+a},easeOutCirc:function(c,a,b,f){return b*Math.sqrt(1-(c=c/f-1)*c)+a},easeInOutCirc:function(c,a,b,f){c/=f/2;return 1>c?-b/2*(Math.sqrt(1-c*c)-1)+a:b/2*(Math.sqrt(1-(c-=2)*c)+1)+a},easeInElastic:function(c, a,g,f){var e=0;if(0===c)return a;c/=f;if(1===c)return a+g;e||(e=.3*f);g=d(g,g,e,1.70158);return-b(g,c,f)+a},easeOutElastic:function(c,a,b,f){var e=0;if(0===c)return a;c/=f;if(1===c)return a+b;e||(e=.3*f);b=d(b,b,e,1.70158);return b.a*Math.pow(2,-10*c)*Math.sin(2*(c*f-b.s)*Math.PI/b.p)+b.c+a},easeInOutElastic:function(c,a,g,f){var e=0;if(0===c)return a;c/=f/2;if(2===c)return a+g;e||(e=.3*f*1.5);g=d(g,g,e,1.70158);return 1>c?-.5*b(g,c,f)+a:g.a*Math.pow(2,-10*--c)*Math.sin(2*(c*f-g.s)*Math.PI/g.p)*.5+ g.c+a},easeInBack:function(c,a,b,f,e){void 0===e&&(e=1.70158);return b*(c/=f)*c*((e+1)*c-e)+a},easeOutBack:function(c,a,b,f,e){void 0===e&&(e=1.70158);return b*((c=c/f-1)*c*((e+1)*c+e)+1)+a},easeInOutBack:function(c,a,b,f,e){void 0===e&&(e=1.70158);c/=f/2;return 1>c?b/2*c*c*(((e*=1.525)+1)*c-e)+a:b/2*((c-=2)*c*(((e*=1.525)+1)*c+e)+2)+a},easeInBounce:e,easeOutBounce:a,easeInOutBounce:function(c,b,g,f){return cg?g:b;if(1===b&&1===g&&0===f&&0===e)return m;b=" matrix("+b+" 0 0 "+g+" "+f*b+" "+e*g+") ";if("svg"===c.tagName){for(g=c.ownerDocument.createElement("g");null!=c.firstChild;)g.appendChild(c.firstChild);c.appendChild(g)}else g=c,b=g.getAttribute("transform")+b;g.setAttribute("transform",b);return m}function l(c){var a=c.objects;c=c.options;a=a.map(function(c){return n[A(c.type)].fromObject(c)});return{objects:a,options:c}}function m(c, a,b){a[b]&&a[b].toSVG&&c.push('','')}var n=d.fabric||(d.fabric={}),u=n.util.object.extend,A=n.util.string.capitalize,D=n.util.object.clone,v=n.util.toFixed,t=n.util.parseUnit,q=n.util.multiplyTransformMatrices,w=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i, x=/^(symbol|image|marker|pattern|view|svg)$/i,p=/^(?:pattern|defs|symbol|metadata)$/i,r=/^(symbol|g|a|svg)$/i,z={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit", "stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},y={stroke:"strokeOpacity",fill:"fillOpacity"};n.cssRules={};n.gradientDefs={};n.parseTransformAttribute=function(){function c(a,b){var g=b[0];a[0]=Math.cos(g);a[1]=Math.sin(g);a[2]=-Math.sin(g);a[3]=Math.cos(g)}function a(c,b){var g=2===b.length?b[1]:b[0];c[0]=b[0];c[3]=g}function b(c,a){c[4]=a[0];2===a.length&&(c[5]=a[1])}var g=[1,0,0,1,0,0],f=n.reNum,e="(?:"+("(?:(matrix)\\s*\\(\\s*("+ f+")(?:\\s+,?\\s*|,\\s*)("+f+")(?:\\s+,?\\s*|,\\s*)("+f+")(?:\\s+,?\\s*|,\\s*)("+f+")(?:\\s+,?\\s*|,\\s*)("+f+")(?:\\s+,?\\s*|,\\s*)("+f+")\\s*\\))")+"|"+("(?:(translate)\\s*\\(\\s*("+f+")(?:(?:\\s+,?\\s*|,\\s*)("+f+"))?\\s*\\))")+"|"+("(?:(scale)\\s*\\(\\s*("+f+")(?:(?:\\s+,?\\s*|,\\s*)("+f+"))?\\s*\\))")+"|"+("(?:(rotate)\\s*\\(\\s*("+f+")(?:(?:\\s+,?\\s*|,\\s*)("+f+")(?:\\s+,?\\s*|,\\s*)("+f+"))?\\s*\\))")+"|"+("(?:(skewX)\\s*\\(\\s*("+f+")\\s*\\))")+"|"+("(?:(skewY)\\s*\\(\\s*("+f+")\\s*\\))")+ ")",h=new RegExp("^\\s*(?:"+("(?:"+e+"(?:(?:\\s+,?\\s*|,\\s*)"+e+")*)")+"?)\\s*$"),d=new RegExp(e,"g");return function(f){var k=g.concat(),l=[];if(!f||f&&!h.test(f))return k;f.replace(d,function(f){var h=(new RegExp(e)).exec(f).filter(function(c){return""!==c&&null!=c});f=h[1];h=h.slice(2).map(parseFloat);switch(f){case "translate":b(k,h);break;case "rotate":h[0]=n.util.degreesToRadians(h[0]);c(k,h);break;case "scale":a(k,h);break;case "skewX":k[2]=Math.tan(n.util.degreesToRadians(h[0]));break;case "skewY":k[1]= Math.tan(n.util.degreesToRadians(h[0]));break;case "matrix":k=h}l.push(k.concat());k=g.concat()});for(f=l[0];1/i,"")));e&&e.documentElement&&n.parseSVGDocument(e.documentElement,function(b,g){E.set(c,{objects:n.util.array.invoke(b,"toObject"),options:g});a(b,g)},b)}c=c.replace(/^\n\s*/,"").trim();E.has(c,function(b){b?E.get(c,function(c){c=l(c);a(c.objects,c.options)}):new n.util.request(c,{method:"get",onComplete:g})})},loadSVGFromString:function(c,a,b){c=c.trim();var g;if("undefined"!==typeof DOMParser){var f=new DOMParser;f&&f.parseFromString&& (g=f.parseFromString(c,"text/xml"))}else n.window.ActiveXObject&&(g=new ActiveXObject("Microsoft.XMLDOM"),g.async="false",g.loadXML(c.replace(//i,"")));n.parseSVGDocument(g.documentElement,function(c,b){a(c,b)},b)},createSVGFontFacesMarkup:function(c){for(var a="",b=0,g=c.length;b"].join("")); return a},createSVGRefElementsMarkup:function(c){var a=[];m(a,c,"backgroundColor");m(a,c,"overlayColor");return a.join("")}})})("undefined"!==typeof exports?exports:this);fabric.ElementsParser=function(d,b,e,a){this.elements=d;this.callback=b;this.options=e;this.reviver=a;this.svgUid=e&&e.svgUid||0};fabric.ElementsParser.prototype.parse=function(){this.instances=Array(this.elements.length);this.numElements=this.elements.length;this.createObjects()}; fabric.ElementsParser.prototype.createObjects=function(){for(var d=0,b=this.elements.length;d b.x&&this.y>b.y},gte:function(b){return this.x>=b.x&&this.y>=b.y},lerp:function(e,a){return new b(this.x+(e.x-this.x)*a,this.y+(e.y-this.y)*a)},distanceFrom:function(b){var a=this.x-b.x;b=this.y-b.y;return Math.sqrt(a*a+b*b)},midPointFrom:function(e){return new b(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new b(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new b(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y}, setXY:function(b,a){this.x=b;this.y=a},setFromPoint:function(b){this.x=b.x;this.y=b.y},swap:function(b){var a=this.x,c=this.y;this.x=b.x;this.y=b.y;b.x=a;b.y=c}})})("undefined"!==typeof exports?exports:this); (function(d){function b(a){this.status=a;this.points=[]}var e=d.fabric||(d.fabric={});e.Intersection?e.warn("fabric.Intersection is already defined"):(e.Intersection=b,e.Intersection.prototype={appendPoint:function(a){this.points.push(a)},appendPoints:function(a){this.points=this.points.concat(a)}},e.Intersection.intersectLineLine=function(a,c,h,g){var f,d=(g.x-h.x)*(a.y-h.y)-(g.y-h.y)*(a.x-h.x);f=(c.x-a.x)*(a.y-h.y)-(c.y-a.y)*(a.x-h.x);h=(g.y-h.y)*(c.x-a.x)-(g.x-h.x)*(c.y-a.y);0!==h?(d/=h,f/=h,0<= d&&1>=d&&0<=f&&1>=f?(f=new b("Intersection"),f.points.push(new e.Point(a.x+d*(c.x-a.x),a.y+d*(c.y-a.y)))):f=new b):f=0===d||0===f?new b("Coincident"):new b("Parallel");return f},e.Intersection.intersectLinePolygon=function(a,c,e){for(var g=new b,f=e.length,d=0;db&&(b+=1);1b?a:b<2/3?c+(a-c)*(2/3-b)*6:c}var a=d.fabric||(d.fabric={});a.Color?a.warn("fabric.Color is already defined."):(a.Color=b,a.Color.prototype={_tryParsingColor:function(c){var a;c in b.colorNameMap&&(c=b.colorNameMap[c]);"transparent"===c?this.setSource([255,255,255,0]):((a=b.sourceFromHex(c))||(a=b.sourceFromRgb(c)),a||(a=b.sourceFromHsl(c)),a&&this.setSource(a))}, _rgbToHsl:function(c,b,g){c/=255;b/=255;g/=255;var f,e,d,m=a.util.array.max([c,b,g]);e=a.util.array.min([c,b,g]);d=(m+e)/2;if(m===e)f=e=0;else{var n=m-e;e=.5e;e++)a.push(Math.round(.5*f[e]+.5*c[e]));a[3]=g;this.setSource(a);return this}},a.Color.reRGBa=/^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/,a.Color.reHSLa=/^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/,a.Color.reHex=/^#?([0-9a-f]{6}|[0-9a-f]{3})$/i,a.Color.colorNameMap={aqua:"#00FFFF", black:"#000000",blue:"#0000FF",fuchsia:"#FF00FF",gray:"#808080",green:"#008000",lime:"#00FF00",maroon:"#800000",navy:"#000080",olive:"#808000",orange:"#FFA500",purple:"#800080",red:"#FF0000",silver:"#C0C0C0",teal:"#008080",white:"#FFFFFF",yellow:"#FFFF00"},a.Color.fromRgb=function(c){return b.fromSource(b.sourceFromRgb(c))},a.Color.sourceFromRgb=function(c){if(c=c.match(b.reRGBa)){var a=parseInt(c[1],10)/(/%$/.test(c[1])?100:1)*(/%$/.test(c[1])?255:1),g=parseInt(c[2],10)/(/%$/.test(c[2])?100:1)*(/%$/.test(c[2])? 255:1),f=parseInt(c[3],10)/(/%$/.test(c[3])?100:1)*(/%$/.test(c[3])?255:1);return[parseInt(a,10),parseInt(g,10),parseInt(f,10),c[4]?parseFloat(c[4]):1]}},a.Color.fromRgba=b.fromRgb,a.Color.fromHsl=function(c){return b.fromSource(b.sourceFromHsl(c))},a.Color.sourceFromHsl=function(c){if(c=c.match(b.reHSLa)){var a=(parseFloat(c[1])%360+360)%360/360,g=parseFloat(c[2])/(/%$/.test(c[2])?100:1),f=parseFloat(c[3])/(/%$/.test(c[3])?100:1);if(0===g)f=g=a=f;else var d=.5>=f?f*(g+1):f+g-f*g,l=2*f-d,f=e(l,d, a+1/3),g=e(l,d,a),a=e(l,d,a-1/3);return[Math.round(255*f),Math.round(255*g),Math.round(255*a),c[4]?parseFloat(c[4]):1]}},a.Color.fromHsla=b.fromHsl,a.Color.fromHex=function(c){return b.fromSource(b.sourceFromHex(c))},a.Color.sourceFromHex=function(c){if(c.match(b.reHex)){var a=c.slice(c.indexOf("#")+1),g=3===a.length;c=g?a.charAt(0)+a.charAt(0):a.substring(0,2);var f=g?a.charAt(1)+a.charAt(1):a.substring(2,4),a=g?a.charAt(2)+a.charAt(2):a.substring(4,6);return[parseInt(c,16),parseInt(f,16),parseInt(a, 16),1]}},a.Color.fromSource=function(c){var a=new b;a.setSource(c);return a})})("undefined"!==typeof exports?exports:this); (function(){function d(b){var a=b.getAttribute("style"),c=b.getAttribute("offset"),h,g,c=parseFloat(c)/(/%$/.test(c)?100:1),c=0>c?0:1\n']:"radial"===this.type&&(c=["\n']);for(a=0;a\n');c.push("linear"===this.type?"\n":"\n");return c.join("")},toLive:function(b,a){var c,h,g=fabric.util.object.clone(this.coords);if(this.type){if(a.group&&"path-group"===a.group.type)for(h in g)if("x1"===h||"x2"===h)g[h]+=-this.offsetX+a.width/2;else if("y1"===h||"y2"===h)g[h]+=-this.offsetY+ a.height/2;"linear"===this.type?c=b.createLinearGradient(g.x1,g.y1,g.x2,g.y2):"radial"===this.type&&(c=b.createRadialGradient(g.x1,g.y1,g.r1,g.x2,g.y2,g.r2));h=0;for(g=this.colorStops.length;h\n\n\n'},toLive:function(d){var b="function"===typeof this.source?this.source():this.source;return b&&("undefined"=== typeof b.src||b.complete&&0!==b.naturalWidth&&0!==b.naturalHeight)?d.createPattern(b,this.repeat):""}}); (function(d){var b=d.fabric||(d.fabric={}),e=b.util.toFixed;b.Shadow?b.warn("fabric.Shadow is already defined."):(b.Shadow=b.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(a){"string"===typeof a&&(a=this._parseShadow(a));for(var c in a)this[c]=a[c];this.id=b.Object.__uid++},_parseShadow:function(a){a=a.trim();var c=b.Shadow.reOffsetsAndBlur.exec(a)||[];return{color:(a.replace(b.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").trim(), offsetX:parseInt(c[1],10)||0,offsetY:parseInt(c[2],10)||0,blur:parseInt(c[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(a){var c=40,b=40;a.width&&a.height&&(c=100*e((Math.abs(this.offsetX)+this.blur)/a.width,2)+20,b=100*e((Math.abs(this.offsetY)+this.blur)/a.height,2)+20);return'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var a={},c=b.Shadow.prototype; this.color!==c.color&&(a.color=this.color);this.blur!==c.blur&&(a.blur=this.blur);this.offsetX!==c.offsetX&&(a.offsetX=this.offsetX);this.offsetY!==c.offsetY&&(a.offsetY=this.offsetY);return a}}),b.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/)})("undefined"!==typeof exports?exports:this); (function(){if(fabric.StaticCanvas)fabric.warn("fabric.StaticCanvas is already defined.");else{var d=fabric.util.object.extend,b=fabric.util.getElementOffset,e=fabric.util.removeFromArray,a=Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(c,a){a||(a={});this._initStatic(c,a);fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0, clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,preserveObjectStacking:!1,viewportTransform:[1,0,0,1,0,0],onBeforeScaleRotate:function(){},enableRetinaScaling:!0,_initStatic:function(c,a){this._objects=[];this._createLowerCanvas(c);this._initOptions(a);this._setImageSmoothing();this.interactive||this._initRetinaScaling();a.overlayImage&&this.setOverlayImage(a.overlayImage,this.renderAll.bind(this));a.backgroundImage&&this.setBackgroundImage(a.backgroundImage,this.renderAll.bind(this)); a.backgroundColor&&this.setBackgroundColor(a.backgroundColor,this.renderAll.bind(this));a.overlayColor&&this.setOverlayColor(a.overlayColor,this.renderAll.bind(this));this.calcOffset()},_initRetinaScaling:function(){1!==fabric.devicePixelRatio&&this.enableRetinaScaling&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))}, calcOffset:function(){this._offset=b(this.lowerCanvasEl);return this},setOverlayImage:function(c,a,b){return this.__setBgOverlayImage("overlayImage",c,a,b)},setBackgroundImage:function(c,a,b){return this.__setBgOverlayImage("backgroundImage",c,a,b)},setOverlayColor:function(c,a){return this.__setBgOverlayColor("overlayColor",c,a)},setBackgroundColor:function(c,a){return this.__setBgOverlayColor("backgroundColor",c,a)},_setImageSmoothing:function(){var c=this.getContext();"undefined"!==typeof c.imageSmoothingEnabled? c.imageSmoothingEnabled=this.imageSmoothingEnabled:(c.webkitImageSmoothingEnabled=this.imageSmoothingEnabled,c.mozImageSmoothingEnabled=this.imageSmoothingEnabled,c.msImageSmoothingEnabled=this.imageSmoothingEnabled,c.oImageSmoothingEnabled=this.imageSmoothingEnabled)},__setBgOverlayImage:function(c,a,b,f){"string"===typeof a?fabric.util.loadImage(a,function(a){this[c]=new fabric.Image(a,f);b&&b()},this,f&&f.crossOrigin):(f&&a.setOptions(f),this[c]=a,b&&b());return this},__setBgOverlayColor:function(c, a,b){if(a&&a.source){var f=this;fabric.util.loadImage(a.source,function(e){f[c]=new fabric.Pattern({source:e,repeat:a.repeat,offsetX:a.offsetX,offsetY:a.offsetY});b&&b()})}else this[c]=a,b&&b();return this},_createCanvasElement:function(){var c=fabric.document.createElement("canvas");c.style||(c.style={});if(!c)throw a;this._initCanvasElement(c);return c},_initCanvasElement:function(c){fabric.util.createCanvasElement(c);if("undefined"===typeof c.getContext)throw a;},_initOptions:function(c){for(var a in c)this[a]= c[a];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0;this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(c){this.lowerCanvasEl=fabric.util.getById(c)||this._createCanvasElement();this._initCanvasElement(this.lowerCanvasEl); fabric.util.addClass(this.lowerCanvasEl,"lower-canvas");this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl);this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(c,a){return this.setDimensions({width:c},a)},setHeight:function(c,a){return this.setDimensions({height:c},a)},setDimensions:function(c,a){var b;a=a||{};for(var f in c)b=c[f],a.cssOnly||(this._setBackstoreDimension(f,c[f]),b+="px"), a.backstoreOnly||this._setCssDimension(f,b);this._setImageSmoothing();this.calcOffset();a.cssOnly||this.renderAll();return this},_setBackstoreDimension:function(c,a){this.lowerCanvasEl[c]=a;this.upperCanvasEl&&(this.upperCanvasEl[c]=a);this.cacheCanvasEl&&(this.cacheCanvasEl[c]=a);this[c]=a;return this},_setCssDimension:function(c,a){this.lowerCanvasEl.style[c]=a;this.upperCanvasEl&&(this.upperCanvasEl.style[c]=a);this.wrapperEl&&(this.wrapperEl.style[c]=a);return this},getZoom:function(){return Math.sqrt(this.viewportTransform[0]* this.viewportTransform[3])},setViewportTransform:function(c){var a=this.getActiveGroup();this.viewportTransform=c;this.renderAll();c=0;for(var b=this._objects.length;c");return b.join("")},_setSVGPreamble:function(c,a){a.suppressPreamble||c.push('','\n')},_setSVGHeader:function(c,a){var b,f,e;a.viewBox?(b=a.viewBox.width,f=a.viewBox.height):(b=this.width,f=this.height,this.svgViewportTransformation||(e=this.viewportTransform,b/=e[0],f/=e[3]));c.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(c,a){for(var b=0,f=this.getObjects(),e=f.length;b"):this[b]&&"overlayColor"===b&&a.push('")},sendToBack:function(a){e(this._objects,a);this._objects.unshift(a);return this.renderAll&&this.renderAll()},bringToFront:function(a){e(this._objects,a);this._objects.push(a);return this.renderAll&&this.renderAll()},sendBackwards:function(a,b){var g=this._objects.indexOf(a);0!==g&&(g=this._findNewLowerIndex(a,g,b),e(this._objects,a),this._objects.splice(g,0,a),this.renderAll&&this.renderAll());return this},_findNewLowerIndex:function(a,b, g){if(g)for(g=b,--b;0<=b;--b){if(a.intersectsWithObject(this._objects[b])||a.isContainedWithinObject(this._objects[b])||this._objects[b].isContainedWithinObject(a)){g=b;break}}else g=b-1;return g},bringForward:function(a,b){var g=this._objects.indexOf(a);g!==this._objects.length-1&&(g=this._findNewUpperIndex(a,g,b),e(this._objects,a),this._objects.splice(g,0,a),this.renderAll&&this.renderAll());return this},_findNewUpperIndex:function(a,b,g){if(g)for(g=b,b+=1;b"}});d(fabric.StaticCanvas.prototype,fabric.Observable);d(fabric.StaticCanvas.prototype, fabric.Collection);d(fabric.StaticCanvas.prototype,fabric.DataURLExporter);d(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(a){var b=fabric.util.createCanvasElement();if(!b||!b.getContext)return null;var g=b.getContext("2d");if(!g)return null;switch(a){case "getImageData":return"undefined"!==typeof g.getImageData;case "setLineDash":return"undefined"!==typeof g.setLineDash;case "toDataURL":return"undefined"!==typeof b.toDataURL;case "toDataURLWithQuality":try{return b.toDataURL("image/jpeg", 0),!0}catch(f){}return!1;default:return null}}});fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}})(); fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(d){this.shadow=new fabric.Shadow(d);return this},_setBrushStyles:function(){var d=this.canvas.contextTop;d.strokeStyle=this.color;d.lineWidth=this.width;d.lineCap=this.strokeLineCap;d.lineJoin=this.strokeLineJoin;this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&d.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var d= this.canvas.contextTop;d.shadowColor=this.shadow.color;d.shadowBlur=this.shadow.blur;d.shadowOffsetX=this.shadow.offsetX;d.shadowOffsetY=this.shadow.offsetY}},_resetShadow:function(){var d=this.canvas.contextTop;d.shadowColor="";d.shadowBlur=d.shadowOffsetX=d.shadowOffsetY=0}}); (function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(d){this.canvas=d;this._points=[]},onMouseDown:function(d){this._prepareForDrawing(d);this._captureDrawingPath(d);this._render()},onMouseMove:function(d){this._captureDrawingPath(d);this.canvas.clearContext(this.canvas.contextTop);this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(d){d=new fabric.Point(d.x,d.y);this._reset();this._addPoint(d);this.canvas.contextTop.moveTo(d.x, d.y)},_addPoint:function(d){this._points.push(d)},_reset:function(){this._points.length=0;this._setBrushStyles();this._setShadow()},_captureDrawingPath:function(d){d=new fabric.Point(d.x,d.y);this._addPoint(d)},_render:function(){var d=this.canvas.contextTop,b=this.canvas.viewportTransform,e=this._points[0],a=this._points[1];d.save();d.transform(b[0],b[1],b[2],b[3],b[4],b[5]);d.beginPath();2===this._points.length&&e.x===a.x&&e.y===a.y&&(e.x-=.5,a.x+=.5);d.moveTo(e.x,e.y);for(var b=1,c=this._points.length;b< c;b++)a=e.midPointFrom(a),d.quadraticCurveTo(e.x,e.y,a.x,a.y),e=this._points[b],a=this._points[b+1];d.lineTo(e.x,e.y);d.stroke();d.restore()},convertPointsToSVGPath:function(d){var b=[],e=new fabric.Point(d[0].x,d[0].y),a=new fabric.Point(d[1].x,d[1].y);b.push("M ",d[0].x," ",d[0].y," ");for(var c=1,h=d.length;c=c.newScaleX&&c.newScaleX=c.newScaleY&&c.newScaleYa.newScaleX&&"y"!==c&&("left"===a.originX? a.originX="right":"right"===a.originX&&(a.originX="left"));0>a.newScaleY&&"x"!==c&&("top"===a.originY?a.originY="bottom":"bottom"===a.originY&&(a.originY="top"))},_setLocalMouse:function(a,b){var e=b.target;"right"===b.originX?a.x*=-1:"center"===b.originX&&(a.x=2*a.x*b.mouseXSign,0>a.x&&(b.mouseXSign=-b.mouseXSign));"bottom"===b.originY?a.y*=-1:"center"===b.originY&&(a.y=2*a.y*b.mouseYSign,0>a.y&&(b.mouseYSign=-b.mouseYSign));c(a.x)>e.padding?a.x=0>a.x?a.x+e.padding:a.x-e.padding:a.x=0;c(a.y)>e.padding? a.y=0>a.y?a.y+e.padding:a.y-e.padding:a.y=0},_rotateObject:function(c,b){var d=this._currentTransform;if(!d.target.get("lockRotation")){var h=a(d.ey-d.top,d.ex-d.left),m=a(b-d.top,c-d.left),h=e(m-h+d.theta);0>h&&(h=360+h);d.target.angle=h%360}},setCursor:function(a){this.upperCanvasEl.style.cursor=a},_resetObjectTransform:function(a){a.scaleX=1;a.scaleY=1;a.setAngle(0)},_drawSelection:function(){var a=this.contextTop,b=this._groupSelector,e=b.left,d=b.top,h=c(e),n=c(d);a.fillStyle=this.selectionColor; a.fillRect(b.ex-(0b&&(b+=8);b+=d[a];return this.cursorMap[b%8]}})})(); (function(){var d=Math.min,b=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(b,a){var c=this.getActiveObject();return b.shiftKey&&(this.getActiveGroup()||c&&c!==a)&&this.selection},_handleGrouping:function(b,a){if(a===this.getActiveGroup()&&(a=this.findTarget(b,!0),!a||a.isType("group")))return;this.getActiveGroup()?this._updateActiveGroup(a,b):this._createActiveGroup(a,b);this._activeGroup&&this._activeGroup.saveCoords()},_updateActiveGroup:function(b,a){var c=this.getActiveGroup(); if(c.contains(b)){if(c.removeWithUpdate(b),this._resetObjectTransform(c),b.set("active",!1),1===c.size()){this.discardActiveGroup(a);this.setActiveObject(c.item(0));return}}else c.addWithUpdate(b),this._resetObjectTransform(c);this.fire("selection:created",{target:c,e:a});c.set("active",!0)},_createActiveGroup:function(b,a){if(this._activeObject&&b!==this._activeObject){var c=this._createGroup(b);c.addWithUpdate();this.setActiveGroup(c);this._activeObject=null;this.fire("selection:created",{target:c, e:a})}b.set("active",!0)},_createGroup:function(b){var a=this.getObjects();b=a.indexOf(this._activeObject)a&&(e.width=g);e.height?e.height*=a:1>a&&(e.height=f);l?this._tempRemoveBordersControlsFromGroup(l):k&&this.deactivateAll&&this.deactivateAll();this.renderAll(!0);d=this.__toDataURL(d,b,e);this.width=c;this.height=h;m.scale(1/a,1/a);this.setWidth(c).setHeight(h);l?this._restoreBordersControlsOnGroup(l):k&&this.setActiveObject&&this.setActiveObject(k); this.contextTop&&this.clearContext(this.contextTop);this.renderAll();return d},toDataURLWithMultiplier:function(d,b,e){return this.toDataURL({format:d,multiplier:b,quality:e})},_tempRemoveBordersControlsFromGroup:function(d){d.origHasControls=d.hasControls;d.origBorderColor=d.borderColor;d.hasControls=!0;d.borderColor="rgba(0,0,0,0)";d.forEachObject(function(b){b.origBorderColor=b.borderColor;b.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(d){d.hideControls=d.origHideControls; d.borderColor=d.origBorderColor;d.forEachObject(function(b){b.borderColor=b.origBorderColor;delete b.origBorderColor})}}); fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(d,b,e){return this.loadFromJSON(d,b,e)},loadFromJSON:function(d,b,e){if(d){var a="string"===typeof d?JSON.parse(d):d;this.clear();var c=this;this._enlivenObjects(a.objects,function(){c._setBgOverlay(a,b)},e);return this}},_setBgOverlay:function(d,b){var e=this,a={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(d.backgroundImage||d.overlayImage||d.background||d.overlay){var c=function(){a.backgroundImage&& a.overlayImage&&a.backgroundColor&&a.overlayColor&&(e.renderAll(),b&&b())};this.__setBgOverlay("backgroundImage",d.backgroundImage,a,c);this.__setBgOverlay("overlayImage",d.overlayImage,a,c);this.__setBgOverlay("backgroundColor",d.background,a,c);this.__setBgOverlay("overlayColor",d.overlay,a,c);c()}else b&&b()},__setBgOverlay:function(d,b,e,a){var c=this;if(b)if("backgroundImage"===d||"overlayImage"===d)fabric.Image.fromObject(b,function(b){c[d]=b;e[d]=!0;a&&a()});else this["set"+fabric.util.string.capitalize(d, !0)](b,function(){e[d]=!0;a&&a()});else e[d]=!0},_enlivenObjects:function(d,b,e){var a=this;if(d&&0!==d.length){var c=this.renderOnAddRemove;this.renderOnAddRemove=!1;fabric.util.enlivenObjects(d,function(e){e.forEach(function(c,b){a.insertAt(c,b,!0)});a.renderOnAddRemove=c;b&&b()},null,e)}else b&&b()},_toDataURL:function(d,b){this.clone(function(e){b(e.toDataURL(d))})},_toDataURLWithMultiplier:function(d,b,e){this.clone(function(a){e(a.toDataURLWithMultiplier(d,b))})},clone:function(d,b){var e=JSON.stringify(this.toJSON(b)); this.cloneWithoutData(function(a){a.loadFromJSON(e,function(){d&&d(a)})})},cloneWithoutData:function(d){var b=fabric.document.createElement("canvas");b.width=this.getWidth();b.height=this.getHeight();var e=new fabric.Canvas(b);e.clipTo=this.clipTo;this.backgroundImage?(e.setBackgroundImage(this.backgroundImage.src,function(){e.renderAll();d&&d(e)}),e.backgroundImageOpacity=this.backgroundImageOpacity,e.backgroundImageStretch=this.backgroundImageStretch):d&&d(e)}}); (function(d){var b=d.fabric||(d.fabric={});d=b.util.object.extend;var e=b.util.toFixed,a=b.util.string.capitalize,c=b.util.degreesToRadians,h=b.StaticCanvas.supports("setLineDash");b.Object||(b.Object=b.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1, centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1, lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockScalingFlip:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColorcrossOrigin alignX alignY meetOrSlice".split(" "),initialize:function(a){a&&this.setOptions(a)},_initGradient:function(a){!a.fill|| !a.fill.colorStops||a.fill instanceof b.Gradient||this.set("fill",new b.Gradient(a.fill));!a.stroke||!a.stroke.colorStops||a.stroke instanceof b.Gradient||this.set("stroke",new b.Gradient(a.stroke))},_initPattern:function(a){!a.fill||!a.fill.source||a.fill instanceof b.Pattern||this.set("fill",new b.Pattern(a.fill));!a.stroke||!a.stroke.source||a.stroke instanceof b.Pattern||this.set("stroke",new b.Pattern(a.stroke))},_initClipping:function(a){a.clipTo&&"string"===typeof a.clipTo&&(a=b.util.getFunctionBody(a.clipTo), "undefined"!==typeof a&&(this.clipTo=new Function("ctx",a)))},setOptions:function(a){for(var c in a)this.set(c,a[c]);this._initGradient(a);this._initPattern(a);this._initClipping(a)},transform:function(a,b){this.group&&this.canvas.preserveObjectStacking&&this.group===this.canvas._activeGroup&&this.group.transform(a);var e=b?this._getLeftTopCoords():this.getCenterPoint();a.translate(e.x,e.y);a.rotate(c(this.angle));a.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(a){var c= b.Object.NUM_FRACTION_DIGITS,c={type:this.type,originX:this.originX,originY:this.originY,left:e(this.left,c),top:e(this.top,c),width:e(this.width,c),height:e(this.height,c),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:e(this.strokeWidth,c),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:e(this.strokeMiterLimit,c),scaleX:e(this.scaleX, c),scaleY:e(this.scaleY,c),angle:e(this.getAngle(),c),flipX:this.flipX,flipY:this.flipY,opacity:e(this.opacity,c),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation};this.includeDefaultValues||(c=this._removeDefaultValues(c));b.util.populateWithProperties(this,c,a);return c},toDatalessObject:function(a){return this.toObject(a)}, _removeDefaultValues:function(a){var c=b.util.getKlass(a.type).prototype;c.stateProperties.forEach(function(b){a[b]===c[b]&&delete a[b]});return a},toString:function(){return"#"},get:function(a){return this[a]},_setObject:function(a){for(var c in a)this._set(c,a[c])},set:function(a,c){"object"===typeof a?this._setObject(a):"function"===typeof c&&"clipTo"!==a?this._set(a,c(this.get(a))):this._set(a,c);return this},_set:function(a,c){if("scaleX"===a||"scaleY"===a)c=this._constrainScale(c); "scaleX"===a&&0>c?(this.flipX=!this.flipX,c*=-1):"scaleY"===a&&0>c?(this.flipY=!this.flipY,c*=-1):"width"===a||"height"===a?this.minScaleLimit=e(Math.min(.1,1/Math.max(this.width,this.height)),2):"shadow"!==a||!c||c instanceof b.Shadow||(c=new b.Shadow(c));this[a]=c;return this},setOnGroup:function(){},toggle:function(a){var c=this.get(a);"boolean"===typeof c&&this.set(a,!c);return this},setSourcePath:function(a){this.sourcePath=a;return this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform? this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(a,c){0===this.width&&0===this.height||!this.visible||(a.save(),this._setupCompositeOperation(a),c||this.transform(a),this._setStrokeStyles(a),this._setFillStyles(a),this.transformMatrix&&a.transform.apply(a,this.transformMatrix),this._setOpacity(a),this._setShadow(a),this.clipTo&&b.util.clipContext(this,a),this._render(a,c),this.clipTo&&a.restore(),a.restore())},_setOpacity:function(a){this.group&&this.group._setOpacity(a);a.globalAlpha*= this.opacity},_setStrokeStyles:function(a){this.stroke&&(a.lineWidth=this.strokeWidth,a.lineCap=this.strokeLineCap,a.lineJoin=this.strokeLineJoin,a.miterLimit=this.strokeMiterLimit,a.strokeStyle=this.stroke.toLive?this.stroke.toLive(a,this):this.stroke)},_setFillStyles:function(a){this.fill&&(a.fillStyle=this.fill.toLive?this.fill.toLive(a,this):this.fill)},_renderControls:function(a,e){if(this.active&&!e){var d=this.getViewportTransform();a.save();var h;this.group&&(h=b.util.transformPoint(this.group.getCenterPoint(), d),a.translate(h.x,h.y),a.rotate(c(this.group.angle)));h=b.util.transformPoint(this.getCenterPoint(),d,null!=this.group);this.group&&(h.x*=this.group.scaleX,h.y*=this.group.scaleY);a.translate(h.x,h.y);a.rotate(c(this.angle));this.drawBorders(a);this.drawControls(a);a.restore()}},_setShadow:function(a){if(this.shadow){var c=this.canvas&&this.canvas.viewportTransform[0]||1,b=this.canvas&&this.canvas.viewportTransform[3]||1;a.shadowColor=this.shadow.color;a.shadowBlur=this.shadow.blur*(c+b)*(this.scaleX+ this.scaleY)/4;a.shadowOffsetX=this.shadow.offsetX*c*this.scaleX;a.shadowOffsetY=this.shadow.offsetY*b*this.scaleY}},_removeShadow:function(a){this.shadow&&(a.shadowColor="",a.shadowBlur=a.shadowOffsetX=a.shadowOffsetY=0)},_renderFill:function(a){this.fill&&(a.save(),this.fill.gradientTransform&&a.transform.apply(a,this.fill.gradientTransform),this.fill.toLive&&a.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),"evenodd"===this.fillRule?a.fill("evenodd"):a.fill(), a.restore())},_renderStroke:function(a){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(a),a.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),h?(a.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(a)):this._renderDashedStroke&&this._renderDashedStroke(a),a.stroke()):(this.stroke.gradientTransform&&a.transform.apply(a,this.stroke.gradientTransform),this._stroke? this._stroke(a):a.stroke()),a.restore())},clone:function(a,c){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(c),a):new b.Object(this.toObject(c))},cloneAsImage:function(a){var c=this.toDataURL();b.util.loadImage(c,function(c){a&&a(new b.Image(c))});return this},toDataURL:function(a){a||(a={});var c=b.util.createCanvasElement(),e=this.getBoundingRect();c.width=e.width;c.height=e.height;b.util.wrapElement(c,"div");e=new b.StaticCanvas(c);"jpg"===a.format&&(a.format="jpeg"); "jpeg"===a.format&&(e.backgroundColor="#fff");var d={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1);this.setPositionByOrigin(new b.Point(c.width/2,c.height/2),"center","center");c=this.canvas;e.add(this);a=e.toDataURL(a);this.set(d).setCoords();this.canvas=c;e.dispose();return a},isType:function(a){return this.type===a},complexity:function(){return 0},toJSON:function(a){return this.toObject(a)},setGradient:function(a,c){c||(c={});var e={colorStops:[]};e.type= c.type||(c.r1||c.r2?"radial":"linear");e.coords={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2};if(c.r1||c.r2)e.coords.r1=c.r1,e.coords.r2=c.r2;for(var d in c.colorStops){var h=new b.Color(c.colorStops[d]);e.colorStops.push({offset:d,color:h.toRgb(),opacity:h.getAlpha()})}return this.set(a,b.Gradient.forObject(this,e))},setPatternFill:function(a){return this.set("fill",new b.Pattern(a))},setShadow:function(a){return this.set("shadow",a?new b.Shadow(a):null)},setColor:function(a){this.set("fill",a);return this}, setAngle:function(a){var c=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;c&&this._setOriginToCenter();this.set("angle",a);c&&this._resetOrigin();return this},centerH:function(){this.canvas.centerObjectH(this);return this},centerV:function(){this.canvas.centerObjectV(this);return this},center:function(){this.canvas.centerObject(this);return this},remove:function(){this.canvas.remove(this);return this},getLocalPointer:function(a,c){c=c||this.canvas.getPointer(a);var e=new b.Point(c.x, c.y),d=this._getLeftTopCoords();this.angle&&(e=b.util.rotatePoint(e,d,b.util.degreesToRadians(-this.angle)));return{x:e.x-d.x,y:e.y-d.y}},_setupCompositeOperation:function(a){this.globalCompositeOperation&&(a.globalCompositeOperation=this.globalCompositeOperation)}}),b.util.createAccessors(b.Object),b.Object.prototype.rotate=b.Object.prototype.setAngle,d(b.Object.prototype,b.Observable),b.Object.NUM_FRACTION_DIGITS=2,b.Object.__uid=0)})("undefined"!==typeof exports?exports:this); (function(){var d=fabric.util.degreesToRadians,b={left:-.5,center:0,right:.5},e={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(a,c,d,g,f){var k=a.x,l=a.y;c=b[g]-b[c];d=e[f]-e[d];if(c||d)l=this._getTransformedDimensions(),k=a.x+c*l.x,l=a.y+d*l.y;return new fabric.Point(k,l)},translateToCenterPoint:function(a,c,b){c=this.translateToGivenOrigin(a,c,b,"center","center");return this.angle?fabric.util.rotatePoint(c,a,d(this.angle)):c},translateToOriginPoint:function(a, c,b){c=this.translateToGivenOrigin(a,"center","center",c,b);return this.angle?fabric.util.rotatePoint(c,a,d(this.angle)):c},getCenterPoint:function(){var a=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(a,this.originX,this.originY)},getPointByOrigin:function(a,c){var b=this.getCenterPoint();return this.translateToOriginPoint(b,a,c)},toLocalPoint:function(a,c,b){var e=this.getCenterPoint();c=c&&b?this.translateToGivenOrigin(e,"center","center",c,b):new fabric.Point(this.left, this.top);a=new fabric.Point(a.x,a.y);this.angle&&(a=fabric.util.rotatePoint(a,e,-d(this.angle)));return a.subtractEquals(c)},setPositionByOrigin:function(a,c,b){a=this.translateToCenterPoint(a,c,b);a=this.translateToOriginPoint(a,this.originX,this.originY);this.set("left",a.x);this.set("top",a.y)},adjustPosition:function(a){var c=d(this.angle),e=this.getWidth(),g=Math.cos(c)*e,c=Math.sin(c)*e;this.left+=g*(b[a]-b[this.originX]);this.top+=c*(b[a]-b[this.originX]);this.setCoords();this.originX=a}, _setOriginToCenter:function(){this._originalOriginX=this.originX;this._originalOriginY=this.originY;var a=this.getCenterPoint();this.originY=this.originX="center";this.left=a.x;this.top=a.y},_resetOrigin:function(){var a=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX;this.originY=this._originalOriginY;this.left=a.x;this.top=a.y;this._originalOriginY=this._originalOriginX=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(), "left","top")}})})(); (function(){var d=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(b,e){var a=this.oCoords,c=new fabric.Point(a.tl.x,a.tl.y),d=new fabric.Point(a.tr.x,a.tr.y),g=new fabric.Point(a.bl.x,a.bl.y),a=new fabric.Point(a.br.x,a.br.y);return"Intersection"===fabric.Intersection.intersectPolygonRectangle([c,d,a,g],b,e).status},intersectsWithObject:function(b){function e(a){return{tl:new fabric.Point(a.tl.x,a.tl.y),tr:new fabric.Point(a.tr.x, a.tr.y),bl:new fabric.Point(a.bl.x,a.bl.y),br:new fabric.Point(a.br.x,a.br.y)}}var a=e(this.oCoords);b=e(b.oCoords);return"Intersection"===fabric.Intersection.intersectPolygonPolygon([a.tl,a.tr,a.br,a.bl],[b.tl,b.tr,b.br,b.bl]).status},isContainedWithinObject:function(b){var e=b.getBoundingRect();b=new fabric.Point(e.left,e.top);e=new fabric.Point(e.left+e.width,e.top+e.height);return this.isContainedWithinRect(b,e)},isContainedWithinRect:function(b,e){var a=this.getBoundingRect();return a.left>= b.x&&a.left+a.width<=e.x&&a.top>=b.y&&a.top+a.height<=e.y},containsPoint:function(b){var e=this._getImageLines(this.oCoords);b=this._findCrossPoints(b,e);return 0!==b&&1===b%2},_getImageLines:function(b){return{topline:{o:b.tl,d:b.tr},rightline:{o:b.tr,d:b.br},bottomline:{o:b.br,d:b.bl},leftline:{o:b.bl,d:b.tl}}},_findCrossPoints:function(b,e){var a,c,d,g=0,f;for(f in e)if(d=e[f],!(d.o.y=b.y&&d.d.y>=b.y)&&(d.o.x===d.d.x&&d.o.x>=b.x?a=d.o.x:(a=(d.d.y-d.o.y)/(d.d.x-d.o.x),c=b.y- 0*b.x,d=d.o.y-a*d.o.x,a=-(c-d)/(0-a)),a>=b.x&&(g+=1),2===g))break;return g},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var b=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],e=fabric.util.array.min(b),b=fabric.util.array.max(b),b=Math.abs(e-b),a=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],c= fabric.util.array.min(a),a=fabric.util.array.max(a),a=Math.abs(c-a);return{left:e,top:c,width:b,height:a}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(b){return Math.abs(b)b?-this.minScaleLimit:this.minScaleLimit:b},scale:function(b){b=this._constrainScale(b);0>b&&(this.flipX=!this.flipX,this.flipY=!this.flipY,b*=-1);this.scaleY=this.scaleX=b;this.setCoords();return this},scaleToWidth:function(b){var e= this.getBoundingRectWidth()/this.getWidth();return this.scale(b/this.width/e)},scaleToHeight:function(b){var e=this.getBoundingRectHeight()/this.getHeight();return this.scale(b/this.height/e)},setCoords:function(){var b=d(this.angle),e=this.getViewportTransform(),a=function(a){return fabric.util.transformPoint(a,e)},c=this._calculateCurrentDimensions(!1),h=c.x,g=c.y;0>h&&(h=Math.abs(h));var c=Math.sqrt(Math.pow(h/2,2)+Math.pow(g/2,2)),f=Math.atan(isFinite(g/h)?g/h:0),k=Math.cos(f+b)*c,f=Math.sin(f+ b)*c,c=Math.sin(b),b=Math.cos(b),l=this.getCenterPoint(),g=new fabric.Point(h,g),l=new fabric.Point(l.x-k,l.y-f),f=new fabric.Point(l.x+g.x*b,l.y+g.x*c),h=a(new fabric.Point(l.x-g.y*c,l.y+g.y*b)),k=a(new fabric.Point(f.x-g.y*c,f.y+g.y*b)),g=a(l),a=a(f),f=new fabric.Point((g.x+h.x)/2,(g.y+h.y)/2),l=new fabric.Point((a.x+g.x)/2,(a.y+g.y)/2),m=new fabric.Point((k.x+a.x)/2,(k.y+a.y)/2),n=new fabric.Point((k.x+h.x)/2,(k.y+h.y)/2),c=new fabric.Point(l.x+c*this.rotatingPointOffset,l.y-b*this.rotatingPointOffset); this.oCoords={tl:g,tr:a,br:k,bl:h,ml:f,mt:l,mr:m,mb:n,mtr:c};this._setCornerCoords&&this._setCornerCoords();return this},_calcDimensionsTransformMatrix:function(){return[this.scaleX,0,0,this.scaleY,0,0]}})})(); fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this);return this},bringToFront:function(){this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this);return this},sendBackwards:function(d){this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,d):this.canvas.sendBackwards(this,d);return this},bringForward:function(d){this.group? fabric.StaticCanvas.prototype.bringForward.call(this.group,this,d):this.canvas.bringForward(this,d);return this},moveTo:function(d){this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,d):this.canvas.moveTo(this,d);return this}}); fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var d=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",b=this.fillRule,e=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",a=this.strokeWidth?this.strokeWidth:"0",c=this.strokeDashArray?this.strokeDashArray.join(" "):"none";return["stroke: ",e,"; stroke-width: ",a,"; stroke-dasharray: ",c,"; stroke-linecap: ",this.strokeLineCap?this.strokeLineCap:"butt","; stroke-linejoin: ", this.strokeLineJoin?this.strokeLineJoin:"miter","; stroke-miterlimit: ",this.strokeMiterLimit?this.strokeMiterLimit:"4","; fill: ",d,"; fill-rule: ",b,"; opacity: ","undefined"!==typeof this.opacity?this.opacity:"1",";",this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":"",this.visible?"":" visibility: hidden;"].join("")},getSvgTransform:function(){if(this.group&&"path-group"===this.group.type)return"";var d=fabric.util.toFixed,b=this.getAngle(),e=!this.canvas||this.canvas.svgViewportTransformation? this.getViewportTransform():[1,0,0,1,0,0],a=fabric.util.transformPoint(this.getCenterPoint(),e),c=fabric.Object.NUM_FRACTION_DIGITS,a="path-group"===this.type?"":"translate("+d(a.x,c)+" "+d(a.y,c)+")",b=0!==b?" rotate("+d(b,c)+")":"",d=1===this.scaleX&&1===this.scaleY&&1===e[0]&&1===e[3]?"":" scale("+d(this.scaleX*e[0],c)+" "+d(this.scaleY*e[3],c)+")",c="path-group"===this.type?this.width*e[0]:0,e="path-group"===this.type?this.height*e[3]:0;return[a,b,d,this.flipX?" matrix(-1 0 0 1 "+c+" 0) ":"", this.flipY?" matrix(1 0 0 -1 0 "+e+")":""].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.join(" ")+") ":""},_createBaseSVGMarkup:function(){var d=[];this.fill&&this.fill.toLive&&d.push(this.fill.toSVG(this,!1));this.stroke&&this.stroke.toLive&&d.push(this.stroke.toSVG(this,!1));this.shadow&&d.push(this.shadow.toSVG(this));return d}}); fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(d){return this.get(d)!==this.originalState[d]},this)},saveState:function(d){this.stateProperties.forEach(function(b){this.originalState[b]=this.get(b)},this);d&&d.stateProperties&&d.stateProperties.forEach(function(b){this.originalState[b]=this.get(b)},this);return this},setupState:function(){this.originalState={};this.saveState();return this}}); (function(){var d=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(b){if(!this.hasControls||!this.active)return!1;var e=b.x;b=b.y;var a,c;for(c in this.oCoords)if(this.isControlVisible(c)&&("mtr"!==c||this.hasRotatingPoint)&&(!this.get("lockUniScaling")||"mt"!==c&&"mr"!==c&&"mb"!==c&&"ml"!==c)&&(a=this._getImageLines(this.oCoords[c].corner),a=this._findCrossPoints({x:e,y:b},a),0!==a&&1===a%2))return this.__corner=c; return!1},_setCornerCoords:function(){var b=this.oCoords,e=d(45-this.angle),a=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,c=a*Math.cos(e),e=a*Math.sin(e),h,g;for(g in b)a=b[g].x,h=b[g].y,b[g].corner={tl:{x:a-e,y:h-c},tr:{x:a+c,y:h-e},bl:{x:a-c,y:h+e},br:{x:a+e,y:h+c}}},_getNonTransformedDimensions:function(){var b=this.strokeWidth,e=this.width,a=this.height,c="round"===this.strokeLineCap||"square"===this.strokeLineCap,d="line"===this.type&&0===this.width,g="line"===this.type&&0===this.height,f=d|| g;d?e=b:g&&(a=b);(c&&g||!f)&&(e+=0>e?-b:b);(c&&d||!f)&&(a+=0>a?-b:b);return{x:e,y:a}},_getTransformedDimensions:function(b){b||(b=this._getNonTransformedDimensions());var e=this._calcDimensionsTransformMatrix();return fabric.util.transformPoint(b,e,!0)},_calculateCurrentDimensions:function(b){var e=this.getViewportTransform(),a=this._getTransformedDimensions(),c=a.x,a=a.y,c=c+2*this.padding,a=a+2*this.padding;return b?fabric.util.transformPoint(new fabric.Point(c,a),e,!0):{x:c,y:a}},drawBorders:function(b){if(!this.hasBorders)return this; b.save();b.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1;b.strokeStyle=this.borderColor;b.lineWidth=1/this.borderScaleFactor;var e=this._calculateCurrentDimensions(!0),a=e.x,e=e.y;this.group&&(a*=this.group.scaleX,e*=this.group.scaleY);b.strokeRect(~~-(a/2)-.5,~~-(e/2)-.5,~~a+1,~~e+1);this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls&&(a=-e/2,b.beginPath(),b.moveTo(0,a),b.lineTo(0,a-this.rotatingPointOffset),b.closePath(),b.stroke());b.restore(); return this},drawControls:function(b){if(!this.hasControls)return this;var e=this._calculateCurrentDimensions(!0),a=e.x,e=e.y,c=-(a/2),d=-(e/2),g=this.cornerSize/2,f=this.transparentCorners?"strokeRect":"fillRect";b.save();b.lineWidth=1;b.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1;b.strokeStyle=b.fillStyle=this.cornerColor;this._drawControl("tl",b,f,c-g,d-g);this._drawControl("tr",b,f,c+a-g,d-g);this._drawControl("bl",b,f,c-g,d+e-g);this._drawControl("br",b,f,c+a-g,d+e-g);this.get("lockUniScaling")|| (this._drawControl("mt",b,f,c+a/2-g,d-g),this._drawControl("mb",b,f,c+a/2-g,d+e-g),this._drawControl("mr",b,f,c+a-g,d+e/2-g),this._drawControl("ml",b,f,c-g,d+e/2-g));this.hasRotatingPoint&&this._drawControl("mtr",b,f,c+a/2-g,d-this.rotatingPointOffset-g);b.restore();return this},_drawControl:function(b,e,a,c,d){this.isControlVisible(b)&&(b=this.cornerSize,"undefined"!==typeof G_vmlCanvasManager||this.transparentCorners||e.clearRect(c,d,b,b),e[a](c,d,b,b))},isControlVisible:function(b){return this._getControlsVisibility()[b]}, setControlVisible:function(b,e){this._getControlsVisibility()[b]=e;return this},setControlsVisibility:function(b){b||(b={});for(var e in b)this.setControlVisible(e,b[e]);return this},_getControlsVisibility:function(){this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0});return this._controlsVisibility}})})(); fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(d,b){b=b||{};var e=function(){},a=b.onComplete||e,c=b.onChange||e,h=this;fabric.util.animate({startValue:d.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(a){d.set("left",a);h.renderAll();c()},onComplete:function(){d.setCoords();a()}});return this},fxCenterObjectV:function(d,b){b=b||{};var e=function(){},a=b.onComplete||e,c=b.onChange||e,h=this;fabric.util.animate({startValue:d.get("top"), endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(a){d.set("top",a);h.renderAll();c()},onComplete:function(){d.setCoords();a()}});return this},fxRemove:function(d,b){b=b||{};var e=function(){},a=b.onComplete||e,c=b.onChange||e,h=this;fabric.util.animate({startValue:d.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){d.set("active",!1)},onChange:function(a){d.set("opacity",a);h.renderAll();c()},onComplete:function(){h.remove(d);a()}});return this}}); fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&"object"===typeof arguments[0]){var d=[],b,e;for(b in arguments[0])d.push(b);for(var a=0,c=d.length;a\n');return a?a(c.join("")):c.join("")},complexity:function(){return 1}}),e.Line.ATTRIBUTE_NAMES= e.SHARED_ATTRIBUTES.concat(["x1","y1","x2","y2"]),e.Line.fromElement=function(c,b){var d=e.parseAttributes(c,e.Line.ATTRIBUTE_NAMES);return new e.Line([d.x1||0,d.y1||0,d.x2||0,d.y2||0],a(d,b))},e.Line.fromObject=function(a){return new e.Line([a.x1,a.y1,a.x2,a.y2],a)})})("undefined"!==typeof exports?exports:this); (function(d){var b=d.fabric||(d.fabric={}),e=Math.PI,a=b.util.object.extend;b.Circle?b.warn("fabric.Circle is already defined."):(b.Circle=b.util.createClass(b.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*e,initialize:function(a){a=a||{};this.callSuper("initialize",a);this.set("radius",a.radius||0);this.startAngle=a.startAngle||this.startAngle;this.endAngle=a.endAngle||this.endAngle},_set:function(a,b){this.callSuper("_set",a,b);"radius"===a&&this.setRadius(b);return this},toObject:function(c){return a(this.callSuper("toObject", c),{radius:this.get("radius"),startAngle:this.startAngle,endAngle:this.endAngle})},toSVG:function(a){var b=this._createBaseSVGMarkup(),d=0,f=0,k=(this.endAngle-this.startAngle)%(2*e);if(0===k)this.group&&"path-group"===this.group.type&&(d=this.left+this.radius,f=this.top+this.radius),b.push("\n');else{var d=Math.cos(this.startAngle)*this.radius, f=Math.sin(this.startAngle)*this.radius,l=Math.cos(this.endAngle)*this.radius,m=Math.sin(this.endAngle)*this.radius;b.push('e?1:0)+" 1"," "+l+" "+m,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform()," ",this.getSvgTransformMatrix(),'"/>\n')}return a?a(b.join("")):b.join("")},_render:function(a,b){a.beginPath();a.arc(b?this.left+this.radius:0,b?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1);this._renderFill(a); this._renderStroke(a)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(a){this.radius=a;return this.set("width",2*a).set("height",2*a)},complexity:function(){return 1}}),b.Circle.ATTRIBUTE_NAMES=b.SHARED_ATTRIBUTES.concat(["cx","cy","r"]),b.Circle.fromElement=function(c,e){e||(e={});var d=b.parseAttributes(c,b.Circle.ATTRIBUTE_NAMES);if(!("radius"in d&&0<=d.radius))throw Error("value of `r` attribute is required and can not be negative"); d.left=d.left||0;d.top=d.top||0;d=new b.Circle(a(d,e));d.left-=d.radius;d.top-=d.radius;return d},b.Circle.fromObject=function(a){return new b.Circle(a)})})("undefined"!==typeof exports?exports:this); (function(d){var b=d.fabric||(d.fabric={});b.Triangle?b.warn("fabric.Triangle is already defined"):(b.Triangle=b.util.createClass(b.Object,{type:"triangle",initialize:function(b){b=b||{};this.callSuper("initialize",b);this.set("width",b.width||100).set("height",b.height||100)},_render:function(b){var a=this.width/2,c=this.height/2;b.beginPath();b.moveTo(-a,c);b.lineTo(0,-c);b.lineTo(a,c);b.closePath();this._renderFill(b);this._renderStroke(b)},_renderDashedStroke:function(e){var a=this.width/2,c= this.height/2;e.beginPath();b.util.drawDashedLine(e,-a,c,0,-c,this.strokeDashArray);b.util.drawDashedLine(e,0,-c,a,c,this.strokeDashArray);b.util.drawDashedLine(e,a,c,-a,c,this.strokeDashArray);e.closePath()},toSVG:function(b){var a=this._createBaseSVGMarkup(),c=this.width/2,d=this.height/2,c=[-c+" "+d,"0 "+-d,c+" "+d].join();a.push("');return b?b(a.join("")):a.join("")},complexity:function(){return 1}}), b.Triangle.fromObject=function(e){return new b.Triangle(e)})})("undefined"!==typeof exports?exports:this); (function(d){var b=d.fabric||(d.fabric={}),e=2*Math.PI,a=b.util.object.extend;b.Ellipse?b.warn("fabric.Ellipse is already defined."):(b.Ellipse=b.util.createClass(b.Object,{type:"ellipse",rx:0,ry:0,initialize:function(a){a=a||{};this.callSuper("initialize",a);this.set("rx",a.rx||0);this.set("ry",a.ry||0)},_set:function(a,b){this.callSuper("_set",a,b);switch(a){case "rx":this.rx=b;this.set("width",2*b);break;case "ry":this.ry=b,this.set("height",2*b)}return this},getRx:function(){return this.get("rx")* this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(c){return a(this.callSuper("toObject",c),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(a){var b=this._createBaseSVGMarkup(),e=0,f=0;this.group&&"path-group"===this.group.type&&(e=this.left+this.rx,f=this.top+this.ry);b.push("\n'); return a?a(b.join("")):b.join("")},_render:function(a,b){a.beginPath();a.save();a.transform(1,0,0,this.ry/this.rx,0,0);a.arc(b?this.left+this.rx:0,b?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,e,!1);a.restore();this._renderFill(a);this._renderStroke(a)},complexity:function(){return 1}}),b.Ellipse.ATTRIBUTE_NAMES=b.SHARED_ATTRIBUTES.concat(["cx","cy","rx","ry"]),b.Ellipse.fromElement=function(c,e){e||(e={});var d=b.parseAttributes(c,b.Ellipse.ATTRIBUTE_NAMES);d.left=d.left||0;d.top=d.top||0;d=new b.Ellipse(a(d, e));d.top-=d.ry;d.left-=d.rx;return d},b.Ellipse.fromObject=function(a){return new b.Ellipse(a)})})("undefined"!==typeof exports?exports:this); (function(d){var b=d.fabric||(d.fabric={}),e=b.util.object.extend;b.Rect?b.warn("fabric.Rect is already defined"):(d=b.Object.prototype.stateProperties.concat(),d.push("rx","ry","x","y"),b.Rect=b.util.createClass(b.Object,{stateProperties:d,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(a){a=a||{};this.callSuper("initialize",a);this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(a,c){if(1===this.width&&1=== this.height)a.fillRect(0,0,1,1);else{var b=this.rx?Math.min(this.rx,this.width/2):0,e=this.ry?Math.min(this.ry,this.height/2):0,f=this.width,d=this.height,l=c?this.left:-this.width/2,m=c?this.top:-this.height/2,n=0!==b||0!==e;a.beginPath();a.moveTo(l+b,m);a.lineTo(l+f-b,m);n&&a.bezierCurveTo(l+f-.4477152502*b,m,l+f,m+.4477152502*e,l+f,m+e);a.lineTo(l+f,m+d-e);n&&a.bezierCurveTo(l+f,m+d-.4477152502*e,l+f-.4477152502*b,m+d,l+f-b,m+d);a.lineTo(l+b,m+d);n&&a.bezierCurveTo(l+.4477152502*b,m+d,l,m+d-.4477152502* e,l,m+d-e);a.lineTo(l,m+e);n&&a.bezierCurveTo(l,m+.4477152502*e,l+.4477152502*b,m,l+b,m);a.closePath();this._renderFill(a);this._renderStroke(a)}},_renderDashedStroke:function(a){var c=-this.width/2,e=-this.height/2,d=this.width,f=this.height;a.beginPath();b.util.drawDashedLine(a,c,e,c+d,e,this.strokeDashArray);b.util.drawDashedLine(a,c+d,e,c+d,e+f,this.strokeDashArray);b.util.drawDashedLine(a,c+d,e+f,c,e+f,this.strokeDashArray);b.util.drawDashedLine(a,c,e+f,c,e,this.strokeDashArray);a.closePath()}, toObject:function(a){a=e(this.callSuper("toObject",a),{rx:this.get("rx")||0,ry:this.get("ry")||0});this.includeDefaultValues||this._removeDefaultValues(a);return a},toSVG:function(a){var c=this._createBaseSVGMarkup(),b=this.left,e=this.top;this.group&&"path-group"===this.group.type||(b=-this.width/2,e=-this.height/2);c.push("\n');return a?a(c.join("")):c.join("")},complexity:function(){return 1}}),b.Rect.ATTRIBUTE_NAMES=b.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),b.Rect.fromElement=function(a,c){if(!a)return null;c=c||{};var d=b.parseAttributes(a,b.Rect.ATTRIBUTE_NAMES);d.left=d.left||0;d.top=d.top||0;d=new b.Rect(e(c?b.util.object.clone(c):{},d));d.visible=0\n');return a?a(b.join("")):b.join("")},_render:function(a){this.commonRender(a)&&(this._renderFill(a),this.stroke||this.strokeDashArray)&&(a.closePath(),this._renderStroke(a))},commonRender:function(a){var c,b=this.points.length;if(!b||isNaN(this.points[b-1].y))return!1;a.beginPath();this._applyPointOffset&&(this.group&&"path-group"===this.group.type||this._applyPointOffset(),this._applyPointOffset= null);a.moveTo(this.points[0].x,this.points[0].y);for(var e=0;e"},toObject:function(a){a= c(this.callSuper("toObject",a),{path:this.path.map(function(a){return a.slice()}),pathOffset:this.pathOffset});this.sourcePath&&(a.sourcePath=this.sourcePath);this.transformMatrix&&(a.transformMatrix=this.transformMatrix);return a},toDatalessObject:function(a){a=this.toObject(a);this.sourcePath&&(a.path=this.sourcePath);delete a.sourcePath;return a},toSVG:function(a){for(var c=[],b=this._createBaseSVGMarkup(),e="",d=0,f=this.path.length;d\n");return a?a(b.join("")):b.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var a=[],c=[],b,e,d=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,g,h=0,t=this.path.length;hg)for(var w=1,x=b.length;w\n"],e=0,d=c.length;e\n");return a?a(b.join("")):b.join("")},toString:function(){return"#"},isSameColor:function(){var a=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(c){return(c.get("fill")||"").toLowerCase()===a})},complexity:function(){return this.paths.reduce(function(a,c){return a+(c&&c.complexity?c.complexity():0)},0)},getObjects:function(){return this.paths}}),b.PathGroup.fromObject=function(a,c){"string"===typeof a.paths?b.loadSVGFromURL(a.paths,function(e){var d=a.paths; delete a.paths;e=b.util.groupSVGElements(e,a,d);c(e)}):b.util.enlivenObjects(a.paths,function(e){delete a.paths;c(new b.PathGroup(e,a))})},b.PathGroup.async=!0)})("undefined"!==typeof exports?exports:this); (function(d){var b=d.fabric||(d.fabric={}),e=b.util.object.extend,a=b.util.array.min,c=b.util.array.max,h=b.util.array.invoke;if(!b.Group){var g={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};b.Group=b.util.createClass(b.Object,b.Collection,{type:"group",strokeWidth:0,initialize:function(a,c,b){c=c||{};this._objects=[];b&&this.callSuper("initialize",c);this._objects=a||[];for(a=this._objects.length;a--;)this._objects[a].group=this;this.originalState= {};c.originX&&(this.originX=c.originX);c.originY&&(this.originY=c.originY);b?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",c));this.setCoords();this.saveCoords()},_updateObjectsCoords:function(a){for(var c=this._objects.length;c--;)this._updateObjectCoords(this._objects[c],a)},_updateObjectCoords:function(a,c){a.__origHasControls=a.hasControls;a.hasControls=!1;if(!c){var b=a.getLeft(),e=a.getTop(),d=this.getCenterPoint();a.set({originalLeft:b, originalTop:e,left:b-d.x,top:e-d.y});a.setCoords()}},toString:function(){return"#"},addWithUpdate:function(a){this._restoreObjectsState();a&&(this._objects.push(a),a.group=this,a._set("canvas",this.canvas));this.forEachObject(this._setObjectActive,this);this._calcBounds();this._updateObjectsCoords();return this},_setObjectActive:function(a){a.set("active",!0);a.group=this},removeWithUpdate:function(a){this._moveFlippedObject(a);this._restoreObjectsState();this.forEachObject(this._setObjectActive, this);this.remove(a);this._calcBounds();this._updateObjectsCoords();return this},_onObjectAdded:function(a){a.group=this;a._set("canvas",this.canvas)},_onObjectRemoved:function(a){delete a.group;a.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(a,c){var b=this._objects.length;if(this.delegatedProperties[a]||"canvas"===a)for(;b--;)this._objects[b].set(a,c);else for(;b--;)this._objects[b].setOnGroup(a, c);this.callSuper("_set",a,c)},toObject:function(a){return e(this.callSuper("toObject",a),{objects:h(this._objects,"toObject",a)})},render:function(a){if(this.visible){a.save();this.transformMatrix&&a.transform.apply(a,this.transformMatrix);this.transform(a);this.clipTo&&b.util.clipContext(this,a);for(var c=0,e=this._objects.length;c\n'],b=0,e=this._objects.length;b\n");return a?a(c.join("")):c.join("")},get:function(a){if(a in g){if(this[a])return this[a];for(var c=0,b=this._objects.length;c\n','\n");if(this.stroke||this.strokeDashArray)g=this.fill,this.fill=null,a.push("\n'),this.fill=g;a.push("\n");return b?b(a.join("")):a.join("")},getSrc:function(){if(this.getElement())return this.getElement().src|| this.getElement()._src},setSrc:function(b,a,c){fabric.util.loadImage(b,function(b){return this.setElement(b,a,c)},this,c&&c.crossOrigin)},toString:function(){return'#'},clone:function(b,a){this.constructor.fromObject(this.toObject(a),b)},applyFilters:function(b,a,c,d){a=a||this.filters;if(c=c||this._originalElement){var g=c,f=fabric.util.createCanvasElement(),k=fabric.util.createImage(),l=this;f.width=g.width;f.height=g.height;f.getContext("2d").drawImage(g, 0,0,g.width,g.height);if(0===a.length)return this._element=c,b&&b(),f;a.forEach(function(a){a&&a.applyTo(f,a.scaleX||l.scaleX,a.scaleY||l.scaleY);!d&&a&&"Resize"===a.type&&(l.width*=a.scaleX,l.height*=a.scaleY)});k.width=f.width;k.height=f.height;fabric.isLikelyNode?(k.src=f.toBuffer(void 0,fabric.Image.pngCompression),l._element=k,!d&&(l._filteredEl=k),b&&b()):(k.onload=function(){l._element=k;!d&&(l._filteredEl=k);b&&b();k.onload=f=g=null},k.src=f.toDataURL("image/png"));return f}},_render:function(b, a){var c,d,g=this._findMargins(),f;c=a?this.left:-this.width/2;d=a?this.top:-this.height/2;"slice"===this.meetOrSlice&&(b.beginPath(),b.rect(c,d,this.width,this.height),b.clip());!1===this.isMoving&&this.resizeFilters.length&&this._needsResize()?(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,f=this.applyFilters(null,this.resizeFilters,this._filteredEl||this._originalElement,!0)):f=this._element;f&&b.drawImage(f,c+g.marginX,d+g.marginY,g.width,g.height);this._renderStroke(b)},_needsResize:function(){return this.scaleX!== this._lastScaleX||this.scaleY!==this._lastScaleY},_findMargins:function(){var b=this.width,a=this.height,c=0,d=0;if("none"!==this.alignX||"none"!==this.alignY)b=[this.width/this._element.width,this.height/this._element.height],a="meet"===this.meetOrSlice?Math.min.apply(null,b):Math.max.apply(null,b),b=this._element.width*a,a*=this._element.height,"Mid"===this.alignX&&(c=(this.width-b)/2),"Max"===this.alignX&&(c=this.width-b),"Mid"===this.alignY&&(d=(this.height-a)/2),"Max"===this.alignY&&(d=this.height- a);return{width:b,height:a,marginX:c,marginY:d}},_resetWidthHeight:function(){var b=this.getElement();this.set("width",b.width);this.set("height",b.height)},_initElement:function(b,a){this.setElement(fabric.util.getById(b),null,a);fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(b){b||(b={});this.setOptions(b);this._setWidthHeight(b);this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(b,a){b&&b.length?fabric.util.enlivenObjects(b, function(c){a&&a(c)},"fabric.Image.filters"):a&&a()},_setWidthHeight:function(b){this.width="width"in b?b.width:this.getElement()?this.getElement().width||0:0;this.height="height"in b?b.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(b,a){fabric.util.loadImage(b.src,function(c){fabric.Image.prototype._initFilters.call(b,b.filters, function(d){b.filters=d||[];fabric.Image.prototype._initFilters.call(b,b.resizeFilters,function(d){b.resizeFilters=d||[];d=new fabric.Image(c,b);a&&a(d)})})},null,b.crossOrigin)},fabric.Image.fromURL=function(b,a,c){fabric.util.loadImage(b,function(b){a&&a(new fabric.Image(b,c))},null,c&&c.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href".split(" ")),fabric.Image.fromElement=function(e,a,c){e=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES); var d="xMidYMid",g="meet",f;e.preserveAspectRatio&&(f=e.preserveAspectRatio.split(" "));f&&f.length&&(g=f.pop(),"meet"!==g&&"slice"!==g?(d=g,g="meet"):f.length&&(d=f.pop()));f="none"!==d?d.slice(1,4):"none";d="none"!==d?d.slice(5,8):"none";e.alignX=f;e.alignY=d;e.meetOrSlice=g;fabric.Image.fromURL(e["xlink:href"],a,b(c?fabric.util.object.clone(c):{},e))},fabric.Image.async=!0,fabric.Image.pngCompression=1)})("undefined"!==typeof exports?exports:this); fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var d=this.getAngle()%360;return 0B||B>e||0>E||E>l||(B=4*(B*l+E),E=c[z*a+y],w+=k[B]*E,x+=k[B+1]*E,p+=k[B+2]*E,r+=k[B+3]*E)}n[q]=w;n[q+1]=x;n[q+2]=p;n[q+3]=r+u*(255-r)}b.putImageData(m,0,0)},toObject:function(){return e(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}});b.Image.filters.Convolute.fromObject= function(a){return new b.Image.filters.Convolute(a)}})("undefined"!==typeof exports?exports:this); (function(d){var b=d.fabric||(d.fabric={}),e=b.util.object.extend;b.Image.filters.GradientTransparency=b.util.createClass(b.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(a){a=a||{};this.threshold=a.threshold||100},applyTo:function(a){var c=a.getContext("2d");a=c.getImageData(0,0,a.width,a.height);for(var b=a.data,e=this.threshold,d=b.length,k=0,l=b.length;kd&&m>d&&n>d&&k(l-m)k?0:k;c[A+1]=0>l?0:l;c[A+2]=0>m?0:m;break;case "darken":c[A]=Math.min(k,d);c[A+1]=Math.min(l,g);c[A+2]=Math.min(m,f);break;case "lighten":c[A]=Math.max(k,d),c[A+1]=Math.max(l,g),c[A+2]=Math.max(m,f)}a.putImageData(e,0,0)},toObject:function(){return{color:this.color,image:this.image,mode:this.mode,alpha:this.alpha}}});b.Image.filters.Blend.fromObject=function(e){return new b.Image.filters.Blend(e)}})("undefined"!== typeof exports?exports:this); (function(d){var b=d.fabric||(d.fabric={}),e=Math.pow,a=Math.floor,c=Math.sqrt,h=Math.abs,g=Math.max,f=Math.round,k=Math.sin,l=Math.ceil;b.Image.filters.Resize=b.util.createClass(b.Image.filters.BaseFilter,{type:"Resize",resizeType:"hermite",scaleX:0,scaleY:0,lanczosLobes:3,applyTo:function(a,c,b){this.rcpScaleX=1/c;this.rcpScaleY=1/b;var e=a.width,d=a.height;c=f(e*c);b=f(d*b);var g;"sliceHack"===this.resizeType&&(g=this.sliceByTwo(a,e,d,c,b));"hermite"===this.resizeType&&(g=this.hermiteFastResize(a, e,d,c,b));"bilinear"===this.resizeType&&(g=this.bilinearFiltering(a,e,d,c,b));"lanczos"===this.resizeType&&(g=this.lanczosResize(a,e,d,c,b));a.width=c;a.height=b;a.getContext("2d").putImageData(g,0,0)},sliceByTwo:function(c,e,d,f,h){var k=c.getContext("2d"),l,q=.5,w=.5,x=1,p=1,r=!1,z=!1,y=e,B=d,E=b.util.createCanvasElement(),C=E.getContext("2d");f=a(f);h=a(h);E.width=g(f,e);E.height=g(h,d);f>e&&(q=2,x=-1);h>d&&(w=2,p=-1);l=k.getImageData(0,0,e,d);c.width=g(f,e);c.height=g(h,d);for(k.putImageData(l, 0,0);!r||!z;)e=y,d=B,f*xl||l>=d)){L=a(1E3*h(l-q));H[L]||(H[L]={});for(var M=t-N;M<=t+N;M++)0>M||M>=f||(m=a(1E3*h(M-w)),H[L][m]||(H[L][m]= B(c(e(L*F,2)+e(m*G,2))/1E3)),m=H[L][m],0a)return 0;c*=Math.PI;if(1E-16>h(c))return 1;var b=c/a;return k(c)*k(b)/c/b}}(this.lanczosLobes),E=this.rcpScaleX,C=this.rcpScaleY,F=2/this.rcpScaleX,G=2/this.rcpScaleY,J=l(E*this.lanczosLobes/ 2),N=l(C*this.lanczosLobes/2),H={};t=v=w=q=void 0;return x(0)},bilinearFiltering:function(c,b,e,d,f){var g,h,k,l,x,p,r,z,y,B,E=0,C=this.rcpScaleX,F=this.rcpScaleY;r=c.getContext("2d");c=4*(b-1);e=r.getImageData(0,0,b,e).data;var G=r.getImageData(0,0,d,f),J=G.data;for(r=0;rx;x++)g=e[p+x],h=e[p+4+x],k=e[p+c+x],l=e[p+c+4+x],g=g*(1-y)*(1-B)+h*y*(1-B)+k*B*(1-y)+l*y*B,J[E++]=g;return G},hermiteFastResize:function(b,e,d,f,g){var k= this.rcpScaleX,t=this.rcpScaleY,q=l(k/2),w=l(t/2);b=b.getContext("2d");d=b.getImageData(0,0,e,d).data;b=b.getImageData(0,0,f,g);for(var x=b.data,p=0;py||(y=2*y*y*y-3*y*y+1,0d[I+3]&&(y=y*d[I+3]/250),C+=y*d[I],F+=y*d[I+1],G+=y*d[I+2],B+=y))}x[z]=C/B;x[z+ 1]=F/B;x[z+2]=G/B;x[z+3]=J/E}return b},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}});b.Image.filters.Resize.fromObject=function(a){return new b.Image.filters.Resize(a)}})("undefined"!==typeof exports?exports:this); (function(d){var b=d.fabric||(d.fabric={}),e=b.util.object.extend,a=b.util.object.clone,c=b.util.toFixed,h=b.StaticCanvas.supports("setLineDash"),g=b.Object.NUM_FRACTION_DIGITS;b.Text?b.warn("fabric.Text is already defined"):(d=b.Object.prototype.stateProperties.concat(),d.push("fontFamily","fontWeight","fontSize","text","textDecoration","textAlign","fontStyle","lineHeight","textBackgroundColor"),b.Text=b.util.createClass(b.Object,{_dimensionAffectingProps:{fontSize:!0,fontWeight:!0,fontFamily:!0, fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0,textAlign:!0},_reNewline:/\r?\n/,_reSpacesAndTabs:/[ \t\r]+/g,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textAlign:"left",fontStyle:"",lineHeight:1.16,textBackgroundColor:"",stateProperties:d,stroke:null,shadow:null,_fontSizeFraction:.25,_fontSizeMult:1.13,initialize:function(a,c){c=c||{};this.text=a;this.__skipDimension=!0;this.setOptions(c);this.__skipDimension=!1;this._initDimensions()}, _initDimensions:function(a){if(!this.__skipDimension){a||(a=b.util.createCanvasElement().getContext("2d"),this._setTextStyles(a));this._textLines=this._splitTextIntoLines();this._clearCache();var c=this.textAlign;this.textAlign="left";this.width=this._getTextWidth(a);this.textAlign=c;this.height=this._getTextHeight(a)}},toString:function(){return"#'},_render:function(a){this.clipTo&&b.util.clipContext(this, a);a.save();this._setOpacity(a);this._setShadow(a);this._setupCompositeOperation(a);this._renderTextBackground(a);this._renderText(a);this._renderTextDecoration(a);a.restore();this.clipTo&&a.restore()},_renderText:function(a){this._translateForTextAlign(a);this._renderTextFill(a);this._renderTextStroke(a)},_translateForTextAlign:function(a){"left"!==this.textAlign&&"justify"!==this.textAlign&&a.translate("center"===this.textAlign?this.width/2:this.width,0)},_setTextStyles:function(a){a.textBaseline= "alphabetic";this.skipTextAlign||(a.textAlign=this.textAlign);a.font=this._getFontDeclaration()},_getTextHeight:function(){return this._textLines.length*this._getHeightOfLine()},_getTextWidth:function(a){for(var c=this._getLineWidth(a,0),b=1,e=this._textLines.length;bc&&(c=d)}return c},_renderChars:function(a,c,b,e,d){var g=a.slice(0,-4);if(this[g].toLive){var h=-this.width/2+this[g].offsetX||0,D=-this.height/2+this[g].offsetY||0;c.save();c.translate(h,D);e-= h;d-=D}c[a](b,e,d);this[g].toLive&&c.restore()},_renderTextLine:function(a,c,b,e,d,g){d-=this.fontSize*this._fontSizeFraction;if("justify"!==this.textAlign)this._renderChars(a,c,b,e,d,g);else{var h=this._getLineWidth(c,g),D=this.width;if(D>=h){h=b.split(/\s+/);b=this._getWidthOfWords(c,b,g);for(var D=(D-b)/(h.length-1),v=b=0,t=h.length;v\n',c.textBgRects.join(""),"\t\t',c.textSpans.join(""),"\n","\t\n")},_getSVGTextAndBg:function(a,c){var b=[],e=[],d=0;this._setSVGBg(e);for(var g=0,h=this._textLines.length;g",b.util.string.escapeXml(this._textLines[a]),"")},_setSVGTextLineBg:function(a,b,e,d,h){a.push("\t\t\n')},_setSVGBg:function(a){this.backgroundColor&&a.push("\t\t\n')},_getFillAttributes:function(a){var c=a&&"string"===typeof a?new b.Color(a):"";return c&&c.getSource()&&1!==c.getAlpha()?'opacity="'+c.getAlpha()+'" fill="'+c.setAlpha(1).toRgb()+ '"':'fill="'+a+'"'},_set:function(a,c){this.callSuper("_set",a,c);a in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),b.Text.ATTRIBUTE_NAMES=b.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),b.Text.DEFAULT_SVG_FONT_SIZE=16,b.Text.fromElement=function(a,c){if(!a)return null;var e=b.parseAttributes(a,b.Text.ATTRIBUTE_NAMES);c=b.util.object.extend(c?b.util.object.clone(c): {},e);c.top=c.top||0;c.left=c.left||0;"dx"in e&&(c.left+=e.dx);"dy"in e&&(c.top+=e.dy);"fontSize"in c||(c.fontSize=b.Text.DEFAULT_SVG_FONT_SIZE);c.originX||(c.originX="left");var e=a.textContent.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," "),e=new b.Text(e,c),d=0;"left"===e.originX&&(d=e.getWidth()/2);"right"===e.originX&&(d=-e.getWidth()/2);e.set({left:e.getLeft()+d,top:e.getTop()-e.getHeight()/2+e.fontSize*(.18+e._fontSizeFraction)});return e},b.Text.fromObject=function(c){return new b.Text(c.text, a(c))},b.util.createAccessors(b.Text))})("undefined"!==typeof exports?exports:this); (function(){var d=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1E3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!1,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(b, e){this.styles=e?e.styles||{}:{};this.callSuper("initialize",b,e);this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache");this.__maxFontHeights=[];this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var b=this.styles,e;for(e in b)for(var a in b[e])for(var c in b[e][a])return!1;return!0},setSelectionStart:function(b){b=Math.max(b,0);this.selectionStart!==b&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this}), this.selectionStart=b);this._updateTextarea()},setSelectionEnd:function(b){b=Math.min(b,this.text.length);this.selectionEnd!==b&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=b);this._updateTextarea()},getSelectionStyles:function(b,e){if(2===arguments.length){for(var a=[],c=b;c=b.charIndex&&(f!==g||ud&&fc&&(c=f)}this.__maxFontHeights[e]=c;this.__lineHeights[e]=c*this.lineHeight*this._fontSizeMult;return this.__lineHeights[e]},_getTextHeight:function(b){for(var e= 0,a=0,c=this._textLines.length;a=b.__selectionStartOnMouseDown?(b.setSelectionStart(b.__selectionStartOnMouseDown),b.setSelectionEnd(e)):(b.setSelectionStart(e),b.setSelectionEnd(b.__selectionStartOnMouseDown)))})},_setEditingProps:function(){this.hoverCursor="text";this.canvas&&(this.canvas.defaultCursor= this.canvas.moveCursor="text");this.borderColor=this.editingBorderColor;this.hasControls=this.selectable=!1;this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){this.hiddenTextarea&&(this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd)},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY, hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor= this._savedProps.moveCursor))},exitEditing:function(){this.isEditing=this.selected=!1;this.selectable=!0;this.selectionEnd=this.selectionStart;this.hiddenTextarea&&this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea);this.hiddenTextarea=null;this.abortCursorAnimation();this._restoreEditingProps();this._currentCursorOpacity=0;this.fire("editing:exited");this.canvas&&this.canvas.fire("text:editing:exited",{target:this});return this},_removeExtraneousStyles:function(){for(var b in this.styles)this._textLines[b]|| delete this.styles[b]},_removeCharsFromTo:function(b,e){for(;e!==b;)this._removeSingleCharAndStyle(b+1),e--;this.setSelectionStart(b)},_removeSingleCharAndStyle:function(b){var e="\n"===this.text[b-1];this.removeStyleObject(e,e?b:b-1);this.text=this.text.slice(0,b-1)+this.text.slice(b);this._textLines=this._splitTextIntoLines()},insertChars:function(b,e){var a;1=e&&(h[parseInt(g,10)-e]=this.styles[b][g],delete this.styles[b][g]);this.styles[b+1]=h;this._forceClearCache=!0},insertCharStyleObject:function(b,e,a){var c=this.styles[b],h=d(c);0!==e||a||(e=1);for(var g in h){var f= parseInt(g,10);f>=e&&(c[f+1]=h[f],h[f-1]||delete c[f])}this.styles[b][e]=a||d(c[e-1]);this._forceClearCache=!0},insertStyleObjects:function(b,e,a){var c=this.get2DCursorLocation(),d=c.lineIndex,c=c.charIndex;this._getLineStyle(d)||this._setLineStyle(d,{});"\n"===b?this.insertNewlineStyleObject(d,c,e):this.insertCharStyleObject(d,c,a)},shiftLineStyles:function(b,e){var a=d(this.styles),c;for(c in this.styles){var h=parseInt(c,10);h>b&&(this.styles[h+e]=a[h],a[h-e]||delete this.styles[h])}},removeStyleObject:function(b, e){var a=this.get2DCursorLocation(e),c=a.lineIndex,a=a.charIndex;if(b){var h=this._textLines[c-1],h=h?h.length:0;this.styles[c-1]||(this.styles[c-1]={});for(a in this.styles[c])this.styles[c-1][parseInt(a,10)+h]=this.styles[c][a];this.shiftLineStyles(c,-1)}else{(c=this.styles[c])&&delete c[a];var g=d(c);for(h in g){var f=parseInt(h,10);f>=a&&0!==f&&(c[f-1]=g[f],delete c[f])}}},insertNewline:function(){this.insertChars("\n")}})})(); fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date;this.__lastLastClickTime=+new Date;this.__lastPointer={};this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(d){this.__newClickTime=+new Date;var b=this.canvas.getPointer(d.e);this.isTripleClick(b)?(this.fire("tripleclick",d),this._stopEvent(d.e)):this.isDoubleClick(b)&&(this.fire("dblclick",d),this._stopEvent(d.e));this.__lastLastClickTime=this.__lastClickTime; this.__lastClickTime=this.__newClickTime;this.__lastPointer=b;this.__lastIsEditing=this.isEditing;this.__lastSelected=this.selected},isDoubleClick:function(d){return 500>this.__newClickTime-this.__lastClickTime&&this.__lastPointer.x===d.x&&this.__lastPointer.y===d.y&&this.__lastIsEditing},isTripleClick:function(d){return 500>this.__newClickTime-this.__lastClickTime&&500>this.__lastClickTime-this.__lastLastClickTime&&this.__lastPointer.x===d.x&&this.__lastPointer.y===d.y},_stopEvent:function(d){d.preventDefault&& d.preventDefault();d.stopPropagation&&d.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler();this.initMousedownHandler();this.initMouseupHandler();this.initClicks()},initClicks:function(){this.on("dblclick",function(d){this.selectWord(this.getSelectionStartFromPointer(d.e))});this.on("tripleclick",function(d){this.selectLine(this.getSelectionStartFromPointer(d.e))})},initMousedownHandler:function(){this.on("mousedown",function(d){var b=this.canvas.getPointer(d.e);this.__mousedownX= b.x;this.__mousedownY=b.y;this.__isMousedown=!0;this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea);this.selected&&this.setCursorByClick(d.e);this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},_isObjectMoved:function(d){d=this.canvas.getPointer(d);return this.__mousedownX!==d.x||this.__mousedownY!==d.y},initMouseupHandler:function(){this.on("mouseup",function(d){this.__isMousedown=!1;this._isObjectMoved(d.e)||(this.__lastSelected&& (this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0)})},setCursorByClick:function(d){var b=this.getSelectionStartFromPointer(d);d.shiftKey?bd.x-b?0:1);this.flipX&& (d=c-d);d>this.text.length&&(d=this.text.length);return d}}); fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea");this.hiddenTextarea.setAttribute("autocapitalize","off");this.hiddenTextarea.style.cssText="position: fixed; bottom: 20px; left: 0px; opacity: 0; width: 0px; height: 0px; z-index: -999;";fabric.document.body.appendChild(this.hiddenTextarea);fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this));fabric.util.addListener(this.hiddenTextarea, "keypress",this.onKeyPress.bind(this));fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this));fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this));!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft", 37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(d){if(this.isEditing){if(d.keyCode in this._keysMap)this[this._keysMap[d.keyCode]](d);else if(d.keyCode in this._ctrlKeysMap&&(d.ctrlKey||d.metaKey))this[this._ctrlKeysMap[d.keyCode]](d);else return;d.stopImmediatePropagation();d.preventDefault();this.canvas&&this.canvas.renderAll()}}, forwardDelete:function(d){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(d)}this.removeChars(d)},copy:function(d){var b=this.getSelectedText();(d=this._getClipboardData(d))&&d.setData("text",b);fabric.copiedText=b;fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(d){var b=null,b=this._getClipboardData(d);d=!0;b?(b=b.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText=== b||(d=!1)):b=fabric.copiedText;b&&this.insertChars(b,d)},cut:function(d){this.selectionStart!==this.selectionEnd&&(this.copy(),this.removeChars(d))},_getClipboardData:function(d){return d&&(d.clipboardData||fabric.window.clipboardData)},onKeyPress:function(d){!this.isEditing||d.metaKey||d.ctrlKey||(0!==d.which&&this.insertChars(String.fromCharCode(d.which)),d.stopPropagation())},getDownCursorOffset:function(d,b){var e=b?this.selectionEnd:this.selectionStart,a=this.get2DCursorLocation(e),c=a.lineIndex, h=this._textLines[c].slice(0,a.charIndex),g=this._textLines[c].slice(a.charIndex),f=this._textLines[c+1]||"";if(c===this._textLines.length-1||d.metaKey||34===d.keyCode)return this.text.length-e;for(var e=this._getLineWidth(this.ctx,c),k=this._getLineLeftOffset(e),l=0,m=h.length;le){g=!0;a=c;c=Math.abs(c-k-e);h=Math.abs(a-e)this.text.length&&this.setSelectionEnd(this.text.length)},getUpCursorOffset:function(d,b){var e=b?this.selectionEnd:this.selectionStart,a=this.get2DCursorLocation(e),c=a.lineIndex;if(0===c||d.metaKey||33===d.keyCode)return e;var e=this._textLines[c].slice(0,a.charIndex),h=this._textLines[c-1]||"",g;g=this._getLineWidth(this.ctx,a.lineIndex);for(var f=this._getLineLeftOffset(g),k=0,l=e.length;k< l;k++)g=e[k],f+=this._getWidthOfChar(this.ctx,g,c,k);a=this._getIndexOnPrevLine(a,h,f);return h.length-a+e.length},_getIndexOnPrevLine:function(d,b,e){var a=d.lineIndex-1;d=this._getLineWidth(this.ctx,a);var c=this._getLineLeftOffset(d),h=0,g;d=0;for(var f=b.length;de){g=!0;a=c;c=Math.abs(c-k-e);h=Math.abs(a-e)=this.text.length&&this.selectionEnd>=this.text.length||(this.abortCursorAnimation(),this._currentCursorOpacity=1,d.shiftKey?this.moveCursorRightWithShift(d):this.moveCursorRightWithoutShift(d),this.initDelayedCursor())},moveCursorRightWithShift:function(d){"left"=== this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(d,"selectionStart"):(this._selectionDirection="right",this._moveRight(d,"selectionEnd"))},moveCursorRightWithoutShift:function(d){this._selectionDirection="right";this.selectionStart===this.selectionEnd?(this._moveRight(d,"selectionStart"),this.setSelectionEnd(this.selectionStart)):(this.setSelectionEnd(this.selectionEnd+this.getNumNewLinesInSelectedText()),this.setSelectionStart(this.selectionEnd))},removeChars:function(d){this.selectionStart=== this.selectionEnd?this._removeCharsNearCursor(d):this._removeCharsFromTo(this.selectionStart,this.selectionEnd);this.setSelectionEnd(this.selectionStart);this._removeExtraneousStyles();this.canvas&&this.canvas.renderAll();this.setCoords();this.fire("changed");this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(d){0!==this.selectionStart&&(d.metaKey?(d=this.findLineBoundaryLeft(this.selectionStart),this._removeCharsFromTo(d,this.selectionStart),this.setSelectionStart(d)): d.altKey?(d=this.findWordBoundaryLeft(this.selectionStart),this._removeCharsFromTo(d,this.selectionStart),this.setSelectionStart(d)):(this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)))}}); (function(){var d=fabric.util.toFixed,b=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(b,a,c,d,g,f){this.styles[b]?this._setSVGTextLineChars(b,a,c,d,f):this.callSuper("_setSVGTextLineText",b,a,c,d,g)},_setSVGTextLineChars:function(b,a,c,d,g){c=this._textLines[b];d=0;for(var f=this._getSVGLineLeftOffset(b)-this.width/2,k=this._getSVGLineTopOffset(b),l=this._getHeightOfLine(this.ctx,b),m=0,n=c.length;m'].join("")},_createTextCharSpan:function(b,a,c,d,g){var f=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},a));return['',fabric.util.string.escapeXml(b),""].join("")}})})(); (function(d){var b=d.fabric||(d.fabric={}),e=b.util.object.clone;b.Textbox=b.util.createClass(b.IText,b.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:0,__cachedLines:null,initialize:function(a,c){this.ctx=b.util.createCanvasElement().getContext("2d");this.callSuper("initialize",a,c);this.set({lockUniScaling:!1,lockScalingY:!0,lockScalingFlip:!0,hasBorders:!0});this.setControlsVisibility(b.Textbox.getTextboxControlVisibility());this._dimensionAffectingProps.width=!0},_initDimensions:function(a){this.__skipDimension|| (a||(a=b.util.createCanvasElement().getContext("2d"),this._setTextStyles(a)),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._styleMap=this._generateStyleMap(),this._clearCache(),this.height=this._getTextHeight(a))},_generateStyleMap:function(){for(var a=0,c=0,b=0,e={},d=0;dthis.dynamicMinWidth&&(this.dynamicMinWidth=d),[c];var k=[],l="";c=c.split(" ");for(var m=0,n="",u=0,A=0;0=e?l+=n+c.shift():(m+=l.length+1,k.push(l),l=""),0===c.length&&k.push(l),u>A&&(A=u);A>this.dynamicMinWidth&&(this.dynamicMinWidth= A);return k},_splitTextIntoLines:function(){this.ctx.save();this._setTextStyles(this.ctx);var a=this._wrapText(this.ctx,this.text);this.ctx.restore();return a},setOnGroup:function(a,c){"scaleX"===a&&(this.set("scaleX",Math.abs(1/c)),this.set("width",this.get("width")*c/("undefined"===typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=c)},get2DCursorLocation:function(a){"undefined"===typeof a&&(a=this.selectionStart);for(var c=this._textLines.length,b=0,e=0;e=k.getMinWidth()&&k.set("width",b)):d.call(fabric.Canvas.prototype,b,a,c,h,g,f)};fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!==typeof fabric.Textbox)for(var b=this._objects.length;b--;)if(this._objects[b]instanceof fabric.Textbox){this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility()); break}};var b=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var b in this._styleMap)this._textLines[b]||delete this.styles[this._styleMap[b].line]},insertCharStyleObject:function(b,a,c){var d=this._styleMap[b];b=d.line;a=d.offset+a;fabric.IText.prototype.insertCharStyleObject.apply(this,[b,a,c])},insertNewlineStyleObject:function(b,a,c){var d=this._styleMap[b];b=d.line;a=d.offset+a;fabric.IText.prototype.insertNewlineStyleObject.apply(this, [b,a,c])},shiftLineStyles:function(d,a){var c=b(this.styles);d=this._styleMap[d].line;for(var h in this.styles){var g=parseInt(h,10);g>d&&(this.styles[g+a]=c[g],c[g-a]||delete this.styles[g])}},_getTextOnPreviousLine:function(b){for(var a=this._textLines[b-1];this._styleMap[b-2]&&this._styleMap[b-2].line===this._styleMap[b-1].line;)a=this._textLines[b-2]+a,b--;return a},removeStyleObject:function(d,a){var c=this.get2DCursorLocation(a),h=this._styleMap[c.lineIndex],g=h.line,h=h.offset+c.charIndex; if(d){var f=this._getTextOnPreviousLine(c.lineIndex),f=f?f.length:0;this.styles[g-1]||(this.styles[g-1]={});for(h in this.styles[g])this.styles[g-1][parseInt(h,10)+f]=this.styles[g][h];this.shiftLineStyles(c.lineIndex,-1)}else for(f in(c=this.styles[g])&&delete c[h],g=b(c),g){var k=parseInt(f,10);k>=h&&0!==k&&(c[k-1]=g[k],delete c[k])}}})})(); (function(){var d=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(b,e,a,c,h){c=d.call(this,b,e,a,c,h);for(a=e=b=0;a=c)break;"\n"!==this.text[b+e]&&" "!==this.text[b+e]||e++}return c-a+e}})(); (function(){function d(b,d,e){var f=a.parse(b);f.port||(f.port=0===f.protocol.indexOf("https:")?443:80);b=(0===f.protocol.indexOf("https:")?h:c).request({hostname:f.hostname,port:f.port,path:f.path,method:"GET"},function(a){var b="";d&&a.setEncoding(d);a.on("end",function(){e(b)});a.on("data",function(c){200===a.statusCode&&(b+=c)})});b.on("error",function(a){a.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+f.hostname+":"+f.port):fabric.log(a.message);e(null)});b.end()} function b(a,b){require("fs").readFile(a,function(a,c){if(a)throw fabric.log(a),a;b(c)})}if("undefined"===typeof document||"undefined"===typeof window){var e=require("xmldom").DOMParser,a=require("url"),c=require("http"),h=require("https"),g=require("canvas"),f=require("canvas").Image;fabric.util.loadImage=function(a,c,e){function g(b){b?(h.src=new Buffer(b,"binary"),h._src=a,c&&c.call(e,h)):(h=null,c&&c.call(e,null,!0))}var h=new f;a&&(a instanceof Buffer||0===a.indexOf("data"))?(h.src=h._src=a, c&&c.call(e,h)):a&&0!==a.indexOf("http")?b(a,g):a?d(a,"binary",g):c&&c.call(e,a)};fabric.loadSVGFromURL=function(a,c,e){a=a.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();0!==a.indexOf("http")?b(a,function(a){fabric.loadSVGFromString(a.toString(),c,e)}):d(a,"",function(a){fabric.loadSVGFromString(a,c,e)})};fabric.loadSVGFromString=function(a,b,c){a=(new e).parseFromString(a);fabric.parseSVGDocument(a.documentElement,function(a,c){b&&b(a,c)},c)};fabric.util.getScript=function(a,b){d(a,"",function(a){eval(a); b&&b()})};fabric.Image.fromObject=function(a,b){fabric.util.loadImage(a.src,function(c){var d=new fabric.Image(c);d._initConfig(a);d._initFilters(a.filters,function(c){d.filters=c||[];d._initFilters(a.resizeFilters,function(a){d.resizeFilters=a||[];b&&b(d)})})})};fabric.createCanvasForNode=function(a,b,c,d){d=d||c;var e=fabric.document.createElement("canvas");a=new g(a||600,b||600,d);e.style={};e.width=a.width;e.height=a.height;c=new (fabric.Canvas||fabric.StaticCanvas)(e,c);c.contextContainer=a.getContext("2d"); c.nodeCanvas=a;c.Font=g.Font;return c};fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};fabric.StaticCanvas.prototype.createJPEGStream=function(a){return this.nodeCanvas.createJPEGStream(a)};var k=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(a,b){k.call(this,a,b);this.nodeCanvas.width=a;return this};fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var l=fabric.StaticCanvas.prototype.setHeight; fabric.StaticCanvas.prototype.setHeight=function(a,b){l.call(this,a,b);this.nodeCanvas.height=a;return this};fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}})();