From 5cbc1445c8122690dee3ee31f1e6aa1da446f657 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sun, 3 Jul 2016 19:54:16 +0200 Subject: [PATCH 1/3] ignore svg namespace --- src/elements_parser.js | 2 +- src/parser.js | 4 ++-- test/unit/parser.js | 19 ++++++++++++++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/elements_parser.js b/src/elements_parser.js index dd33f5b54c7..ad3336a292c 100644 --- a/src/elements_parser.js +++ b/src/elements_parser.js @@ -25,7 +25,7 @@ fabric.ElementsParser.prototype.createObjects = function() { }; fabric.ElementsParser.prototype.createObject = function(el, index) { - var klass = fabric[fabric.util.string.capitalize(el.tagName)]; + var klass = fabric[fabric.util.string.capitalize(el.tagName.replace('svg:', ''))]; if (klass && klass.fromElement) { try { this._createObject(klass, el, index); diff --git a/src/parser.js b/src/parser.js index 730be5ad81e..bd0bc0ab674 100644 --- a/src/parser.js +++ b/src/parser.js @@ -569,7 +569,7 @@ function hasAncestorWithNodeName(element, nodeName) { while (element && (element = element.parentNode)) { - if (nodeName.test(element.nodeName) && !element.getAttribute('instantiated_by_use')) { + if (nodeName.test(element.tagName.replace('svg:', '')) && !element.getAttribute('instantiated_by_use')) { return true; } } @@ -603,7 +603,7 @@ var elements = descendants.filter(function(el) { applyViewboxTransform(el); - return reAllowedSVGTagNames.test(el.tagName) && + return reAllowedSVGTagNames.test(el.tagName.replace('svg:', '')) && !hasAncestorWithNodeName(el, reNotAllowedAncestors); // http://www.w3.org/TR/SVG/struct.html#DefsElement }); diff --git a/test/unit/parser.js b/test/unit/parser.js index de469650759..d83ac902b03 100644 --- a/test/unit/parser.js +++ b/test/unit/parser.js @@ -343,12 +343,25 @@ fabric.loadSVGFromString(string, function(objects) { rect = objects[0]; + ok(rect instanceof fabric.Rect); + start(); }); - - setTimeout(function() { + }); + + asyncTest('parseSVGFromString with svg:namespace', function() { + var string = '' + + '' + + '' + + '', + rect; + + ok(fabric.loadSVGFromString); + + fabric.loadSVGFromString(string, function(objects) { + rect = objects[0]; ok(rect instanceof fabric.Rect); start(); - }, 1000); + }); }); // asyncTest('parseSVGDocument', function() { From 17e2e170df4f80808a430c05e108844d8e5bb10c Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sun, 3 Jul 2016 23:34:17 +0200 Subject: [PATCH 2/3] fix svg:use --- dist/fabric.js | 46 +++++++++++++++++++------------- dist/fabric.min.js | 20 ++++++-------- dist/fabric.min.js.gz | Bin 66246 -> 66307 bytes dist/fabric.require.js | 59 +++++++++++++++++++++-------------------- src/parser.js | 44 ++++++++++++++++++------------ test/unit/parser.js | 2 +- 6 files changed, 94 insertions(+), 77 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 6c210d46612..82c345061e8 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -3086,6 +3086,19 @@ if (typeof console !== 'undefined') { return attributes; } + /** + * @private + */ + function _getMultipleNodes(doc, nodeNames) { + var nodeName, nodeArray = [ ], nodeList; + for (var i = 0; i < nodeNames.length; i++) { + nodeName = nodeNames[i]; + nodeList = doc.getElementsByTagName(nodeName); + nodeArray = nodeArray.concat(Array.prototype.slice.call(nodeList)); + } + return nodeArray; + } + /** * Parses "transform" attribute, returning an array of values * @static @@ -3365,7 +3378,8 @@ if (typeof console !== 'undefined') { * @private */ function parseUseDirectives(doc) { - var nodelist = doc.getElementsByTagName('use'), i = 0; + var nodelist = _getMultipleNodes(doc, ['use', 'svg:use']), i = 0; + while (nodelist.length && i < nodelist.length) { var el = nodelist[i], xlink = el.getAttribute('xlink:href').substr(1), @@ -3441,7 +3455,7 @@ if (typeof console !== 'undefined') { x = element.getAttribute('x') || 0, y = element.getAttribute('y') || 0, preserveAspectRatio = element.getAttribute('preserveAspectRatio') || '', - missingViewBox = (!viewBoxAttr || !reViewBoxTagNames.test(element.tagName) + missingViewBox = (!viewBoxAttr || !reViewBoxTagNames.test(element.nodeName) || !(viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue))), missingDimAttr = (!widthAttr || !heightAttr || widthAttr === '100%' || heightAttr === '100%'), toBeParsed = missingViewBox && missingDimAttr, @@ -3499,7 +3513,7 @@ if (typeof console !== 'undefined') { (minX * scaleX) + ' ' + (minY * scaleY) + ') '; - if (element.tagName === 'svg') { + if (element.nodeName === 'svg') { el = element.ownerDocument.createElement('g'); while (element.firstChild != null) { el.appendChild(element.firstChild); @@ -3528,7 +3542,7 @@ if (typeof console !== 'undefined') { function hasAncestorWithNodeName(element, nodeName) { while (element && (element = element.parentNode)) { - if (nodeName.test(element.nodeName) && !element.getAttribute('instantiated_by_use')) { + if (element.nodeName && nodeName.test(element.nodeName.replace('svg:', '')) && !element.getAttribute('instantiated_by_use')) { return true; } } @@ -3562,7 +3576,7 @@ if (typeof console !== 'undefined') { var elements = descendants.filter(function(el) { applyViewboxTransform(el); - return reAllowedSVGTagNames.test(el.tagName) && + return reAllowedSVGTagNames.test(el.nodeName.replace('svg:', '')) && !hasAncestorWithNodeName(el, reNotAllowedAncestors); // http://www.w3.org/TR/SVG/struct.html#DefsElement }); @@ -3695,20 +3709,16 @@ if (typeof console !== 'undefined') { * @return {Object} Gradient definitions; key corresponds to element id, value -- to gradient definition element */ getGradientDefs: function(doc) { - var linearGradientEls = doc.getElementsByTagName('linearGradient'), - radialGradientEls = doc.getElementsByTagName('radialGradient'), - el, i, j = 0, id, xlink, elList = [ ], + var tagArray = [ + 'linearGradient', + 'radialGradient', + 'svg:linearGradient', + 'svg:radialGradient'], + elList = _getMultipleNodes(doc, tagArray), + el, j = 0, id, xlink, gradientDefs = { }, idsToXlinkMap = { }; - elList.length = linearGradientEls.length + radialGradientEls.length; - i = linearGradientEls.length; - while (i--) { - elList[j++] = linearGradientEls[i]; - } - i = radialGradientEls.length; - while (i--) { - elList[j++] = radialGradientEls[i]; - } + j = elList.length; while (j--) { el = elList[j]; @@ -4087,7 +4097,7 @@ fabric.ElementsParser.prototype.createObjects = function() { }; fabric.ElementsParser.prototype.createObject = function(el, index) { - var klass = fabric[fabric.util.string.capitalize(el.tagName)]; + var klass = fabric[fabric.util.string.capitalize(el.tagName.replace('svg:', ''))]; if (klass && klass.fromElement) { try { this._createObject(klass, el, index); diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 75ec5ebc4a4..343c9190cc0 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,12 +1,8 @@ -var fabric=fabric||{version:"1.6.3"};"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(""),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"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;n>r;r++)i[r]&&i[r].call(this,e||{});return this.__eventListeners[t]=i.filter(function(t){return t!==!1}),this}}}fabric.Observable={observe:e,stopObserving:i,fire:r,on:e,off:i,trigger:r}}(),fabric.Collection={add:function(){this._objects.push.apply(this._objects,arguments);for(var t=0,e=arguments.length;e>t;t++)this._onObjectAdded(arguments[t]);return this.renderOnAddRemove&&this.renderAll(),this},insertAt:function(t,e,i){var r=this.getObjects();return i?r[e]=t:r.splice(e,0,t),this._onObjectAdded(t),this.renderOnAddRemove&&this.renderAll(),this},remove:function(){for(var t,e=this.getObjects(),i=0,r=arguments.length;r>i;i++)t=e.indexOf(arguments[i]),-1!==t&&(e.splice(t,1),this._onObjectRemoved(arguments[i]));return this.renderOnAddRemove&&this.renderAll(),this},forEachObject:function(t,e){for(var i=this.getObjects(),r=i.length;r--;)t.call(e,i[r],r,i);return this},getObjects:function(t){return"undefined"==typeof t?this._objects:this._objects.filter(function(e){return e.type===t})},item:function(t){return this.getObjects()[t]},isEmpty:function(){return 0===this.getObjects().length},size:function(){return this.getObjects().length},contains:function(t){return this.getObjects().indexOf(t)>-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return-1!==i&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;for(var i=e.split("."),r=i.length,n=t||fabric.window,s=0;r>s;++s)n=n[i[s]];return n},loadImage:function(t,e,i,r){if(!t)return void(e&&e.call(i,t));var n=fabric.util.createImage();n.onload=function(){e&&e.call(i,n),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),e&&e.call(i,null,!0),n=n.onload=n.onerror=null},0!==t.indexOf("data")&&r&&(n.crossOrigin=r),n.src=t},enlivenObjects:function(t,e,i,r){function n(){++o===a&&e&&e(s)}t=t||[];var s=[],o=0,a=t.length;return a?void t.forEach(function(t,e){if(!t||!t.type)return void n();var o=fabric.util.getKlass(t.type,i);o.async?o.fromObject(t,function(i,o){o||(s[e]=i,r&&r(t,s[e])),n()}):(s[e]=o.fromObject(t),r&&r(t,s[e]),n())}):void(e&&e(s))},groupSVGElements:function(t,e,i){var r;return r=new fabric.PathGroup(t,e),"undefined"!=typeof i&&r.setSourcePath(i),r},populateWithProperties:function(t,e,i){if(i&&"[object Array]"===Object.prototype.toString.call(i))for(var r=0,n=i.length;n>r;r++)i[r]in t&&(e[i[r]]=t[i[r]])},drawDashedLine:function(t,r,n,s,o,a){var h=s-r,c=o-n,l=e(h*h+c*c),u=i(c,h),f=a.length,d=0,g=!0;for(t.save(),t.translate(r,n),t.moveTo(0,0),t.rotate(u),r=0;l>r;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){for(var e=t.prototype,i=e.stateProperties.length;i--;){var r=e.stateProperties[i],n=r.charAt(0).toUpperCase()+r.slice(1),s="set"+n,o="get"+n;e[o]||(e[o]=function(t){return new Function('return this.get("'+t+'")')}(r)),e[s]||(e[s]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(r))}},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);for(var n=!0,s=t.getImageData(e,i,2*r||1,2*r||1),o=3,a=s.data.length;a>o;o+=4){var h=s.data[o];if(n=0>=h,n===!1)break}return s=null,n},parsePreserveAspectRatioAttribute:function(t){var e,i="meet",r="Mid",n="Mid",s=t.split(" ");return s&&s.length&&(i=s.pop(),"meet"!==i&&"slice"!==i?(e=i,i="meet"):s.length&&(e=s.pop())),r="none"!==e?e.slice(1,4):"none",n="none"!==e?e.slice(5,8):"none",{meetOrSlice:i,alignX:r,alignY:n}},clearFabricFontCache:function(t){fabric.charWidthsCache[t]&&(fabric.charWidthsCache[t]={})}}}("undefined"!=typeof exports?exports:this),function(){function t(t,r,s,o,h,c,l){var u=a.call(arguments);if(n[u])return n[u];var f=Math.PI,d=l*f/180,g=Math.sin(d),p=Math.cos(d),v=0,m=0;s=Math.abs(s),o=Math.abs(o);var b=-p*t*.5-g*r*.5,y=-p*r*.5+g*t*.5,_=s*s,x=o*o,S=y*y,C=b*b,w=_*x-_*S-x*C,O=0;if(0>w){var T=Math.sqrt(1-w/(_*x));s*=T,o*=T}else O=(h===c?-1:1)*Math.sqrt(w/(_*S+x*C));var k=O*s*y/o,j=-O*o*b/s,A=p*k-g*j+.5*t,M=g*k+p*j+.5*r,P=i(1,0,(b-k)/s,(y-j)/o),L=i((b-k)/s,(y-j)/o,(-b-k)/s,(-y-j)/o);0===c&&L>0?L-=2*f:1===c&&0>L&&(L+=2*f);for(var D=Math.ceil(Math.abs(L/f*2)),E=[],I=L/D,R=8/3*Math.sin(I/4)*Math.sin(I/4)/Math.sin(I/2),F=P+I,B=0;D>B;B++)E[B]=e(P,F,p,g,s,o,A,M,R,v,m),v=E[B][4],m=E[B][5],P=F,F+=I;return n[u]=E,E}function e(t,e,i,r,n,o,h,c,l,u,f){var d=a.call(arguments);if(s[d])return s[d];var g=Math.cos(t),p=Math.sin(t),v=Math.cos(e),m=Math.sin(e),b=i*n*v-r*o*m+h,y=r*n*v+i*o*m+c,_=u+l*(-i*n*p-r*o*g),x=f+l*(-r*n*p+i*o*g),S=b+l*(i*n*m+r*o*v),C=y+l*(r*n*m-i*o*v);return s[d]=[_,x,S,C,b,y],s[d]}function i(t,e,i,r){var n=Math.atan2(e,t),s=Math.atan2(r,i);return s>=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,m,b,y=Math.sqrt,_=Math.min,x=Math.max,S=Math.abs,C=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;2>O;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),S(u)<1e-12){if(S(f)<1e-12)continue;g=-d/f,g>0&&1>g&&C.push(g)}else m=f*f-4*d*u,0>m||(b=y(m),p=(-f+b)/(2*u),p>0&&1>p&&C.push(p),v=(-f-b)/(2*u),v>0&&1>v&&C.push(v));for(var T,k,j,A=C.length,M=A;A--;)g=C[A],j=1-g,T=j*j*j*t+3*j*j*g*i+3*j*g*g*n+g*g*g*h,w[0][A]=T,k=j*j*j*e+3*j*j*g*r+3*j*g*g*s+g*g*g*c,w[1][A]=k;w[0][M]=t,w[1][M]=e,w[0][M+1]=h,w[1][M+1]=c;var P=[{x:_.apply(null,w[0]),y:_.apply(null,w[1])},{x:x.apply(null,w[0]),y:x.apply(null,w[1])}];return o[l]=P,P}var n={},s={},o={},a=Array.prototype.join;fabric.util.drawArc=function(e,i,r,n){for(var s=n[0],o=n[1],a=n[2],h=n[3],c=n[4],l=n[5],u=n[6],f=[[],[],[],[]],d=t(l-i,u-r,s,o,h,c,a),g=0,p=d.length;p>g;g++)f[g][0]=d[g][0]+i,f[g][1]=d[g][1]+r,f[g][2]=d[g][2]+i,f[g][3]=d[g][3]+r,f[g][4]=d[g][4]+i,f[g][5]=d[g][5]+r,e.bezierCurveTo.apply(e,f[g])},fabric.util.getBoundsOfArc=function(e,i,n,s,o,a,h,c,l){for(var u=0,f=0,d=[],g=[],p=t(c-e,l-i,n,s,a,h,o),v=[[],[]],m=0,b=p.length;b>m;m++)d=r(u,f,p[m][0],p[m][1],p[m][2],p[m][3],p[m][4],p[m][5]),v[0].x=d[0].x+e,v[0].y=d[0].y+i,v[1].x=d[1].x+e,v[1].y=d[1].y+i,g.push(v[0]),g.push(v[1]),u=p[m][4],f=p[m][5];return g},fabric.util.getBoundsOfCurve=r}(),function(){function t(t,e){for(var i=s.call(arguments,2),r=[],n=0,o=t.length;o>n;n++)r[n]=i.length?t[n][e].apply(t[n],i):t[n][e].call(t[n]);return r}function e(t,e){return n(t,e,function(t,e){return t>=e})}function i(t,e){return n(t,e,function(t,e){return e>t})}function r(t,e){for(var i=t.length;i--;)t[i]=e;return t}function n(t,e,i){if(t&&0!==t.length){var r=t.length-1,n=e?t[r][e]:t[r];if(e)for(;r--;)i(t[r][e],n)&&(n=t[r][e]);else for(;r--;)i(t[r],n)&&(n=t[r]);return n}}var s=Array.prototype.slice;Array.prototype.indexOf||(Array.prototype.indexOf=function(t){if(void 0===this||null===this)throw new TypeError;var e=Object(this),i=e.length>>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);i>n;n++)if(n in e&&e[n]===t)return n;return-1}),Array.prototype.forEach||(Array.prototype.forEach=function(t,e){for(var i=0,r=this.length>>>0;r>i;i++)i in this&&t.call(e,this[i],i,this)}),Array.prototype.map||(Array.prototype.map=function(t,e){for(var i=[],r=0,n=this.length>>>0;n>r;r++)r in this&&(i[r]=t.call(e,this[r],r,this));return i}),Array.prototype.every||(Array.prototype.every=function(t,e){for(var i=0,r=this.length>>>0;r>i;i++)if(i in this&&!t.call(e,this[i],i,this))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t,e){for(var i=0,r=this.length>>>0;r>i;i++)if(i in this&&t.call(e,this[i],i,this))return!0;return!1}),Array.prototype.filter||(Array.prototype.filter=function(t,e){for(var i,r=[],n=0,s=this.length>>>0;s>n;n++)n in this&&(i=this[n],t.call(e,i,n,this)&&r.push(i));return r}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var e,i=this.length>>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;i>r;r++)r in this&&(e=t.call(null,e,this[r],r,this));return e}),fabric.util.array={fill:r,invoke:t,min:i,max:e}}(),function(){function t(t,e){for(var i in e)t[i]=e[i];return t}function e(e){return t({},e)}fabric.util.object={extend:t,clone:e}}(),function(){function t(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})}function e(t,e){return t.charAt(0).toUpperCase()+(e?t.slice(1):t.slice(1).toLowerCase())}function i(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){var e=this.constructor.superclass.prototype[t];return arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;c>h;h++)o(i,a[h],s);return i.prototype.initialize||(i.prototype.initialize=n),i.prototype.constructor=i,i.prototype.callSuper=e,i}var r=Array.prototype.slice,n=function(){},s=function(){for(var t in{toString:1})if("toString"===t)return!1;return!0}(),o=function(t,e,i){for(var r in e)t.prototype[r]=r in t.prototype&&"function"==typeof t.prototype[r]&&(e[r]+"").indexOf("callSuper")>-1?function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);return this.constructor.superclass=r,"initialize"!==t?n:void 0}}(r):e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;n>i;i++)if(e=typeof t[r[i]],!/^(?:function|object|unknown)$/.test(e))return!1;return!0}function e(t,e){return{handler:e,wrappedHandler:i(t,e)}}function i(t,e){return function(i){e.call(o(t),i||fabric.window.event)}}function r(t,e){return function(i){if(p[t]&&p[t][e])for(var r=p[t][e],n=0,s=r.length;s>n;n++)r[n].call(this,i||fabric.window.event)}}function n(t){t||(t=fabric.window.event);var e=t.target||(typeof t.srcElement!==h?t.srcElement:null),i=fabric.util.getScrollLeftTop(e);return{x:v(t)+i.left,y:m(t)+i.top}}function s(t,e,i){var r="touchend"===t.type?"changedTouches":"touches";return t[r]&&t[r][0]?t[r][0][e]-(t[r][0][e]-t[r][0][i])||t[i]:t[i]}var o,a,h="unknown",c=function(){var t=0;return function(e){return e.__uniqueID||(e.__uniqueID="uniqueID__"+t++)}}();!function(){var t={};o=function(e){return t[e]},a=function(e,i){t[e]=i}}();var l,u,f=t(fabric.document.documentElement,"addEventListener","removeEventListener")&&t(fabric.window,"addEventListener","removeEventListener"),d=t(fabric.document.documentElement,"attachEvent","detachEvent")&&t(fabric.window,"attachEvent","detachEvent"),g={},p={};f?(l=function(t,e,i){t.addEventListener(e,i,!1)},u=function(t,e,i){t.removeEventListener(e,i,!1)}):d?(l=function(t,i,r){var n=c(t);a(n,t),g[n]||(g[n]={}),g[n][i]||(g[n][i]=[]);var s=e(n,r);g[n][i].push(s),t.attachEvent("on"+i,s.wrappedHandler)},u=function(t,e,i){var r,n=c(t);if(g[n]&&g[n][e])for(var s=0,o=g[n][e].length;o>s;s++)r=g[n][e][s],r&&r.handler===i&&(t.detachEvent("on"+e,r.wrappedHandler),g[n][e][s]=null)}):(l=function(t,e,i){var n=c(t);if(p[n]||(p[n]={}),!p[n][e]){p[n][e]=[];var s=t["on"+e];s&&p[n][e].push(s),t["on"+e]=r(n,e)}p[n][e].push(i)},u=function(t,e,i){var r=c(t);if(p[r]&&p[r][e])for(var n=p[r][e],s=0,o=n.length;o>s;s++)n[s]===i&&n.splice(s,1)}),fabric.util.addListener=l,fabric.util.removeListener=u;var v=function(t){return typeof t.clientX!==h?t.clientX:0},m=function(t){return typeof t.clientY!==h?t.clientY:0};fabric.isTouchSupported&&(v=function(t){return s(t,"pageX","clientX")},m=function(t){return s(t,"pageY","clientY")}),fabric.util.getPointer=n,fabric.util.object.extend(fabric.util,fabric.Observable)}(),function(){function t(t,e){var i=t.style;if(!i)return t;if("string"==typeof e)return t.style.cssText+=";"+e,e.indexOf("opacity")>-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&-1===(" "+t.className+" ").indexOf(" "+e+" ")&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(l(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(c){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var l;l=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=l}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s,o=n.method?n.method.toUpperCase():"GET",a=n.onComplete||function(){},h=r();return h.onreadystatechange=function(){4===h.readyState&&(a(h),h.onreadystatechange=e)},"GET"===o&&(s=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),h.open(o,i,!0),("POST"===o||"PUT"===o)&&h.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),h.send(s),h}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(r){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function d(i){r=i||+new Date;var u=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(u,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(d))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i,r){return tt?i/2*t*t*t+e:i/2*((t-=2)*t*t+2)+e}function n(t,e,i,r){return i*(t/=r)*t*t*t+e}function s(t,e,i,r){return-i*((t=t/r-1)*t*t*t-1)+e}function o(t,e,i,r){return t/=r/2,1>t?i/2*t*t*t*t+e:-i/2*((t-=2)*t*t*t-2)+e}function a(t,e,i,r){return i*(t/=r)*t*t*t*t+e}function h(t,e,i,r){return i*((t=t/r-1)*t*t*t*t+1)+e}function c(t,e,i,r){return t/=r/2,1>t?i/2*t*t*t*t*t+e:i/2*((t-=2)*t*t*t*t+2)+e}function l(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e}function u(t,e,i,r){return i*Math.sin(t/r*(Math.PI/2))+e}function f(t,e,i,r){return-i/2*(Math.cos(Math.PI*t/r)-1)+e}function d(t,e,i,r){return 0===t?e:i*Math.pow(2,10*(t/r-1))+e}function g(t,e,i,r){return t===r?e+i:i*(-Math.pow(2,-10*t/r)+1)+e}function p(t,e,i,r){return 0===t?e:t===r?e+i:(t/=r/2,1>t?i/2*Math.pow(2,10*(t-1))+e:i/2*(-Math.pow(2,-10*--t)+2)+e)}function v(t,e,i,r){return-i*(Math.sqrt(1-(t/=r)*t)-1)+e}function m(t,e,i,r){return i*Math.sqrt(1-(t=t/r-1)*t)+e}function b(t,e,i,r){return t/=r/2,1>t?-i/2*(Math.sqrt(1-t*t)-1)+e:i/2*(Math.sqrt(1-(t-=2)*t)+1)+e}function y(i,r,n,s){var o=1.70158,a=0,h=n;if(0===i)return r;if(i/=s,1===i)return r+n;a||(a=.3*s);var c=t(h,n,a,o);return-e(c,i,s)+r}function _(e,i,r,n){var s=1.70158,o=0,a=r;if(0===e)return i;if(e/=n,1===e)return i+r;o||(o=.3*n);var h=t(a,r,o,s);return h.a*Math.pow(2,-10*e)*Math.sin(2*(e*n-h.s)*Math.PI/h.p)+h.c+i}function x(i,r,n,s){var o=1.70158,a=0,h=n;if(0===i)return r;if(i/=s/2,2===i)return r+n;a||(a=.3*s*1.5);var c=t(h,n,a,o);return 1>i?-.5*e(c,i,s)+r:c.a*Math.pow(2,-10*(i-=1))*Math.sin(2*(i*s-c.s)*Math.PI/c.p)*.5+c.c+r}function S(t,e,i,r,n){return void 0===n&&(n=1.70158),i*(t/=r)*t*((n+1)*t-n)+e}function C(t,e,i,r,n){return void 0===n&&(n=1.70158),i*((t=t/r-1)*t*((n+1)*t+n)+1)+e}function w(t,e,i,r,n){return void 0===n&&(n=1.70158),t/=r/2,1>t?i/2*t*t*(((n*=1.525)+1)*t-n)+e:i/2*((t-=2)*t*(((n*=1.525)+1)*t+n)+2)+e}function O(t,e,i,r){return i-T(r-t,0,i,r)+e}function T(t,e,i,r){return(t/=r)<1/2.75?7.5625*i*t*t+e:2/2.75>t?i*(7.5625*(t-=1.5/2.75)*t+.75)+e:2.5/2.75>t?i*(7.5625*(t-=2.25/2.75)*t+.9375)+e:i*(7.5625*(t-=2.625/2.75)*t+.984375)+e}function k(t,e,i,r){return r/2>t?.5*O(2*t,0,i,r)+e:.5*T(2*t-r,0,i,r)+.5*i+e}fabric.util.ease={easeInQuad:function(t,e,i,r){return i*(t/=r)*t+e},easeOutQuad:function(t,e,i,r){return-i*(t/=r)*(t-2)+e},easeInOutQuad:function(t,e,i,r){return t/=r/2,1>t?i/2*t*t+e:-i/2*(--t*(t-2)-1)+e},easeInCubic:function(t,e,i,r){return i*(t/=r)*t*t+e},easeOutCubic:i,easeInOutCubic:r,easeInQuart:n,easeOutQuart:s,easeInOutQuart:o,easeInQuint:a,easeOutQuint:h,easeInOutQuint:c,easeInSine:l,easeOutSine:u,easeInOutSine:f,easeInExpo:d,easeOutExpo:g,easeInOutExpo:p,easeInCirc:v,easeOutCirc:m,easeInOutCirc:b,easeInElastic:y,easeOutElastic:_,easeInOutElastic:x,easeInBack:S,easeOutBack:C,easeInOutBack:w,easeInBounce:O,easeOutBounce:T,easeInOutBounce:k}}(),function(t){"use strict";function e(t){return t in T?T[t]:t}function i(t,e,i,r){var n,s="[object Array]"===Object.prototype.toString.call(e);return"fill"!==t&&"stroke"!==t||"none"!==e?"strokeDashArray"===t?e=e.replace(/,/g," ").split(/\s+/).map(function(t){return parseFloat(t)}):"transformMatrix"===t?e=i&&i.transformMatrix?x(i.transformMatrix,p.parseTransformAttribute(e)):p.parseTransformAttribute(e):"visible"===t?(e="none"===e||"hidden"===e?!1:!0,i&&i.visible===!1&&(e=!1)):"originX"===t?e="start"===e?"left":"end"===e?"right":"center":n=s?e.map(_):_(e,r):e="",!s&&isNaN(n)?e:n}function r(t){for(var e in k)if("undefined"!=typeof t[k[e]]&&""!==t[e]){if("undefined"==typeof t[e]){if(!p.Object.prototype[e])continue;t[e]=p.Object.prototype[e]}if(0!==t[e].indexOf("url(")){var i=new p.Color(t[e]);t[e]=i.setAlpha(y(i.getAlpha()*t[k[e]],2)).toRgba()}}return t}function n(t,r){var n,s;t.replace(/;\s*$/,"").split(";").forEach(function(t){var o=t.split(":");n=e(o[0].trim().toLowerCase()),s=i(n,o[1].trim()),r[n]=s})}function s(t,r){var n,s;for(var o in t)"undefined"!=typeof t[o]&&(n=e(o.toLowerCase()),s=i(n,t[o]),r[n]=s)}function o(t,e){var i={};for(var r in p.cssRules[e])if(a(t,r.split(" ")))for(var n in p.cssRules[e][r])i[n]=p.cssRules[e][r][n];return i}function a(t,e){var i,r=!0;return i=c(t,e.pop()),i&&e.length&&(r=h(t,e)),i&&r&&0===e.length}function h(t,e){for(var i,r=!0;t.parentNode&&1===t.parentNode.nodeType&&e.length;)r&&(i=e.pop()),t=t.parentNode,r=c(t,i);return 0===e.length}function c(t,e){var i,r=t.nodeName,n=t.getAttribute("class"),s=t.getAttribute("id");if(i=new RegExp("^"+r,"i"),e=e.replace(i,""),s&&e.length&&(i=new RegExp("#"+s+"(?![a-zA-Z\\-]+)","i"),e=e.replace(i,"")),n&&e.length){n=n.split(" ");for(var o=n.length;o--;)i=new RegExp("\\."+n[o]+"(?![a-zA-Z\\-]+)","i"),e=e.replace(i,"")}return 0===e.length}function l(t,e){var i;if(t.getElementById&&(i=t.getElementById(e)),i)return i;var r,n,s=t.getElementsByTagName("*");for(n=0;ns;s++)n=o.item(s),m.setAttribute(n.nodeName,n.nodeValue);for(;null!=g.firstChild;)m.appendChild(g.firstChild);g=m}for(s=0,o=h.attributes,a=o.length;a>s;s++)n=o.item(s),"x"!==n.nodeName&&"y"!==n.nodeName&&"xlink:href"!==n.nodeName&&("transform"===n.nodeName?p=n.nodeValue+" "+p:g.setAttribute(n.nodeName,n.nodeValue));g.setAttribute("transform",p),g.setAttribute("instantiated_by_use","1"),g.removeAttribute("id"),r=h.parentNode,r.replaceChild(g,h),e.length===v&&i++}}function f(t){var e,i,r,n,s=t.getAttribute("viewBox"),o=1,a=1,h=0,c=0,l=t.getAttribute("width"),u=t.getAttribute("height"),f=t.getAttribute("x")||0,d=t.getAttribute("y")||0,g=t.getAttribute("preserveAspectRatio")||"",v=!s||!C.test(t.tagName)||!(s=s.match(j)),m=!l||!u||"100%"===l||"100%"===u,b=v&&m,y={},x="";if(y.width=0,y.height=0,y.toBeParsed=b,b)return y;if(v)return y.width=_(l),y.height=_(u),y;if(h=-parseFloat(s[1]),c=-parseFloat(s[2]),e=parseFloat(s[3]),i=parseFloat(s[4]),m?(y.width=e,y.height=i):(y.width=_(l),y.height=_(u),o=y.width/e,a=y.height/i),g=p.util.parsePreserveAspectRatioAttribute(g),"none"!==g.alignX&&(a=o=o>a?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return y;if((f||d)&&(x=" translate("+_(f)+" "+_(d)+") "),r=x+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.tagName){for(n=t.ownerDocument.createElement("g");null!=t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),y}function d(t){var e=t.objects,i=t.options;return e=e.map(function(t){return p[m(t.type)].fromObject(t)}),{objects:e,options:i}}function g(t,e,i){e[i]&&e[i].toSVG&&t.push(' \n',' \n \n')}var p=t.fabric||(t.fabric={}),v=p.util.object.extend,m=p.util.string.capitalize,b=p.util.object.clone,y=p.util.toFixed,_=p.util.parseUnit,x=p.util.multiplyTransformMatrices,S=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,C=/^(symbol|image|marker|pattern|view|svg)$/i,w=/^(?:pattern|defs|symbol|metadata)$/i,O=/^(symbol|g|a|svg)$/i,T={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"},k={stroke:"strokeOpacity",fill:"fillOpacity"};p.cssRules={},p.gradientDefs={},p.parseTransformAttribute=function(){function t(t,e){var i=e[0],r=3===e.length?e[1]:0,n=3===e.length?e[2]:0;t[0]=Math.cos(i),t[1]=Math.sin(i),t[2]=-Math.sin(i),t[3]=Math.cos(i),t[4]=r-(t[0]*r+t[2]*n),t[5]=n-(t[1]*r+t[3]*n)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e){t[2]=Math.tan(p.util.degreesToRadians(e[0]))}function r(t,e){t[1]=Math.tan(p.util.degreesToRadians(e[0]))}function n(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var s=[1,0,0,1,0,0],o=p.reNum,a="(?:\\s+,?\\s*|,\\s*)",h="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",c="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+")"+a+"("+o+"))?\\s*\\))",u="(?:(scale)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",f="(?:(translate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")\\s*\\))",g="(?:"+d+"|"+f+"|"+u+"|"+l+"|"+h+"|"+c+")",v="(?:"+g+"(?:"+a+"*"+g+")*)",m="^\\s*(?:"+v+"?)\\s*$",b=new RegExp(m),y=new RegExp(g,"g"); - -return function(o){var a=s.concat(),h=[];if(!o||o&&!b.test(o))return a;o.replace(y,function(o){var c=new RegExp(g).exec(o).filter(function(t){return""!==t&&null!=t}),l=c[1],u=c.slice(2).map(parseFloat);switch(l){case"translate":n(a,u);break;case"rotate":u[0]=p.util.degreesToRadians(u[0]),t(a,u);break;case"scale":e(a,u);break;case"skewX":i(a,u);break;case"skewY":r(a,u);break;case"matrix":a=u}h.push(a.concat()),a=s.concat()});for(var c=h[0];h.length>1;)h.shift(),c=p.util.multiplyTransformMatrices(c,h[0]);return c}}();var j=new RegExp("^\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*$");p.parseSVGDocument=function(){function t(t,e){for(;t&&(t=t.parentNode);)if(e.test(t.nodeName)&&!t.getAttribute("instantiated_by_use"))return!0;return!1}return function(e,i,r){if(e){u(e);var n=new Date,s=p.Object.__uid++,o=f(e),a=p.util.toArray(e.getElementsByTagName("*"));if(o.svgUid=s,0===a.length&&p.isLikelyNode){a=e.selectNodes('//*[name(.)!="svg"]');for(var h=[],c=0,l=a.length;l>c;c++)h[c]=a[c];a=h}var d=a.filter(function(e){return f(e),S.test(e.tagName)&&!t(e,w)});if(!d||d&&!d.length)return void(i&&i([],{}));p.gradientDefs[s]=p.getGradientDefs(e),p.cssRules[s]=p.getCSSRules(e),p.parseElements(d,function(t){p.documentParsingTime=new Date-n,i&&i(t,o)},b(o),r)}}}();var A={has:function(t,e){e(!1)},get:function(){},set:function(){}},M=new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+p.reNum+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+p.reNum+"))?\\s+(.*)");v(p,{parseFontDeclaration:function(t,e){var i=t.match(M);if(i){var r=i[1],n=i[3],s=i[4],o=i[5],a=i[6];r&&(e.fontStyle=r),n&&(e.fontWeight=isNaN(parseFloat(n))?n:parseFloat(n)),s&&(e.fontSize=_(s)),a&&(e.fontFamily=a),o&&(e.lineHeight="normal"===o?1:o)}},getGradientDefs:function(t){var e,i,r,n,s=t.getElementsByTagName("linearGradient"),o=t.getElementsByTagName("radialGradient"),a=0,h=[],c={},l={};for(h.length=s.length+o.length,i=s.length;i--;)h[a++]=s[i];for(i=o.length;i--;)h[a++]=o[i];for(;a--;)e=h[a],n=e.getAttribute("xlink:href"),r=e.getAttribute("id"),n&&(l[r]=n.substr(1)),c[r]=e;for(r in l){var u=c[l[r]].cloneNode(!0);for(e=c[r];u.firstChild;)e.appendChild(u.firstChild)}return c},parseAttributes:function(t,n,s){if(t){var a,h,c={};"undefined"==typeof s&&(s=t.getAttribute("svgUid")),t.parentNode&&O.test(t.parentNode.nodeName)&&(c=p.parseAttributes(t.parentNode,n,s)),h=c&&c.fontSize||t.getAttribute("font-size")||p.Text.DEFAULT_SVG_FONT_SIZE;var l=n.reduce(function(r,n){return a=t.getAttribute(n),a&&(n=e(n),a=i(n,a,c,h),r[n]=a),r},{});return l=v(l,v(o(t,s),p.parseStyleAttribute(t))),l.font&&p.parseFontDeclaration(l.font,l),r(v(c,l))}},parseElements:function(t,e,i,r){new p.ElementsParser(t,e,i,r).parse()},parseStyleAttribute:function(t){var e={},i=t.getAttribute("style");return i?("string"==typeof i?n(i,e):s(i,e),e):e},parsePointsAttribute:function(t){if(!t)return null;t=t.replace(/,/g," ").trim(),t=t.split(/\s+/);var e,i,r=[];for(e=0,i=t.length;i>e;e+=2)r.push({x:parseFloat(t[e]),y:parseFloat(t[e+1])});return r},getCSSRules:function(t){for(var r,n=t.getElementsByTagName("style"),s={},o=0,a=n.length;a>o;o++){var h=n[o].textContent||n[o].text;h=h.replace(/\/\*[\s\S]*?\*\//g,""),""!==h.trim()&&(r=h.match(/[^{]*\{[\s\S]*?\}/g),r=r.map(function(t){return t.trim()}),r.forEach(function(t){for(var r=t.match(/([\s\S]*?)\s*\{([^}]*)\}/),n={},o=r[2].trim(),a=o.replace(/;$/,"").split(/\s*;\s*/),h=0,c=a.length;c>h;h++){var l=a[h].split(/\s*:\s*/),u=e(l[0]),f=i(u,l[1],l[0]);n[u]=f}t=r[1],t.split(",").forEach(function(t){t=t.replace(/^svg/i,"").trim(),""!==t&&(s[t]=p.util.object.clone(n))})}))}return s},loadSVGFromURL:function(t,e,i){function r(r){var n=r.responseXML;n&&!n.documentElement&&p.window.ActiveXObject&&r.responseText&&(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(r.responseText.replace(//i,""))),n&&n.documentElement||e&&e(null),p.parseSVGDocument(n.documentElement,function(i,r){A.set(t,{objects:p.util.array.invoke(i,"toObject"),options:r}),e&&e(i,r)},i)}t=t.replace(/^\n\s*/,"").trim(),A.has(t,function(i){i?A.get(t,function(t){var i=d(t);e(i.objects,i.options)}):new p.util.request(t,{method:"get",onComplete:r})})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));p.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)},createSVGFontFacesMarkup:function(t){for(var e,i,r,n,s,o,a,h="",c={},l=p.fontPaths,u=0,f=t.length;f>u;u++)if(e=t[u],i=e.fontFamily,-1!==e.type.indexOf("text")&&!c[i]&&l[i]&&(c[i]=!0,e.styles)){r=e.styles;for(s in r){n=r[s];for(a in n)o=n[a],i=o.fontFamily,!c[i]&&l[i]&&(c[i]=!0)}}for(var d in c)h+=[" @font-face {\n"," font-family: '",d,"';\n"," src: url('",l[d],"');\n"," }\n"].join("");return h&&(h=[' \n"].join("")),h},createSVGRefElementsMarkup:function(t){var e=[];return g(e,t,"backgroundColor"),g(e,t,"overlayColor"),e.join("")}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;e>t;t++)this.elements[t].setAttribute("svgUid",this.svgUid),function(t,e){setTimeout(function(){t.createObject(t.elements[e],e)},0)}(this,t)},fabric.ElementsParser.prototype.createObject=function(t,e){var i=fabric[fabric.util.string.capitalize(t.tagName)];if(i&&i.fromElement)try{this._createObject(i,t,e)}catch(r){fabric.log(r)}else this.checkIfDone()},fabric.ElementsParser.prototype._createObject=function(t,e,i){if(t.async)t.fromElement(e,this.createCallback(i,e),this.options);else{var r=t.fromElement(e,this.options);this.resolveGradient(r,"fill"),this.resolveGradient(r,"stroke"),this.reviver&&this.reviver(e,r),this.instances[i]=r,this.checkIfDone()}},fabric.ElementsParser.prototype.createCallback=function(t,e){var i=this;return function(r){i.resolveGradient(r,"fill"),i.resolveGradient(r,"stroke"),i.reviver&&i.reviver(e,r),i.instances[t]=r,i.checkIfDone()}},fabric.ElementsParser.prototype.resolveGradient=function(t,e){var i=t.get(e);if(/^url\(/.test(i)){var r=i.slice(5,i.length-1);fabric.gradientDefs[this.svgUid][r]&&t.set(e,fabric.Gradient.fromElement(fabric.gradientDefs[this.svgUid][r],t))}},fabric.ElementsParser.prototype.checkIfDone=function(){0===--this.numElements&&(this.instances=this.instances.filter(function(t){return null!=t}),this.callback(this.instances))},function(t){"use strict";function e(t,e){this.x=t,this.y=e}var i=t.fabric||(t.fabric={});return i.Point?void i.warn("fabric.Point is already defined"):(i.Point=e,void(e.prototype={constructor:e,add:function(t){return new e(this.x+t.x,this.y+t.y)},addEquals:function(t){return this.x+=t.x,this.y+=t.y,this},scalarAdd:function(t){return new e(this.x+t,this.y+t)},scalarAddEquals:function(t){return this.x+=t,this.y+=t,this},subtract:function(t){return new e(this.x-t.x,this.y-t.y)},subtractEquals:function(t){return this.x-=t.x,this.y-=t.y,this},scalarSubtract:function(t){return new e(this.x-t,this.y-t)},scalarSubtractEquals:function(t){return this.x-=t,this.y-=t,this},multiply:function(t){return new e(this.x*t,this.y*t)},multiplyEquals:function(t){return this.x*=t,this.y*=t,this},divide:function(t){return new e(this.x/t,this.y/t)},divideEquals:function(t){return this.x/=t,this.y/=t,this},eq:function(t){return this.x===t.x&&this.y===t.y},lt:function(t){return this.xt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return new e(this.x+(t.x-this.x)/2,this.y+(t.y-this.y)/2)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){this.x=t,this.y=e},setFromPoint:function(t){this.x=t.x,this.y=t.y},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={appendPoint:function(t){this.points.push(t)},appendPoints:function(t){this.points=this.points.concat(t)}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;l>=0&&1>=l&&u>=0&&1>=u?(o=new e("Intersection"),o.points.push(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n=new e,s=r.length,o=0;s>o;o++){var a=r[o],h=r[(o+1)%s],c=e.intersectLineLine(t,i,a,h);n.appendPoints(c.points)}return n.points.length>0&&(n.status="Intersection"),n},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;n>s;s++){var o=t[s],a=t[(s+1)%n],h=e.intersectLinePolygon(o,a,i);r.appendPoints(h.points)}return r.points.length>0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return 0>i&&(i+=1),i>1&&(i-=1),1/6>i?t+6*(e-t)*i:.5>i?e:2/3>i?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(i>e?6:0);break;case e:n=(i-t)/c+2;break;case i:n=(t-e)/c+4}n/=6}return[Math.round(360*n),Math.round(100*s),Math.round(100*o)]},getSource:function(){return this._source},setSource:function(t){this._source=t},toRgb:function(){var t=this.getSource();return"rgb("+t[0]+","+t[1]+","+t[2]+")"},toRgba:function(){var t=this.getSource();return"rgba("+t[0]+","+t[1]+","+t[2]+","+t[3]+")"},toHsl:function(){var t=this.getSource(),e=this._rgbToHsl(t[0],t[1],t[2]);return"hsl("+e[0]+","+e[1]+"%,"+e[2]+"%)"},toHsla:function(){var t=this.getSource(),e=this._rgbToHsl(t[0],t[1],t[2]);return"hsla("+e[0]+","+e[1]+"%,"+e[2]+"%,"+t[3]+")"},toHex:function(){var t,e,i,r=this.getSource();return t=r[0].toString(16),t=1===t.length?"0"+t:t,e=r[1].toString(16),e=1===e.length?"0"+e:e,i=r[2].toString(16),i=1===i.length?"0"+i:i,t.toUpperCase()+e.toUpperCase()+i.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(t){var e=this.getSource();return e[3]=t,this.setSource(e),this},toGrayscale:function(){var t=this.getSource(),e=parseInt((.3*t[0]+.59*t[1]+.11*t[2]).toFixed(0),10),i=t[3];return this.setSource([e,e,e,i]),this},toBlackWhite:function(t){var e=this.getSource(),i=(.3*e[0]+.59*e[1]+.11*e[2]).toFixed(0),r=e[3];return t=t||127,i=Number(i)a;a++)i.push(Math.round(s[a]*(1-n)+o[a]*n));return i[3]=r,this.setSource(i),this}},r.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*)?\)$/,r.Color.reHSLa=/^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/,r.Color.reHex=/^#?([0-9a-f]{6}|[0-9a-f]{3})$/i,r.Color.colorNameMap={aqua:"#00FFFF",black:"#000000",blue:"#0000FF",fuchsia:"#FF00FF",gray:"#808080",grey:"#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"},r.Color.fromRgb=function(t){return e.fromSource(e.sourceFromRgb(t))},r.Color.sourceFromRgb=function(t){var i=t.match(e.reRGBa);if(i){var r=parseInt(i[1],10)/(/%$/.test(i[1])?100:1)*(/%$/.test(i[1])?255:1),n=parseInt(i[2],10)/(/%$/.test(i[2])?100:1)*(/%$/.test(i[2])?255:1),s=parseInt(i[3],10)/(/%$/.test(i[3])?100:1)*(/%$/.test(i[3])?255:1);return[parseInt(r,10),parseInt(n,10),parseInt(s,10),i[4]?parseFloat(i[4]):1]}},r.Color.fromRgba=e.fromRgb,r.Color.fromHsl=function(t){return e.fromSource(e.sourceFromHsl(t))},r.Color.sourceFromHsl=function(t){var r=t.match(e.reHSLa);if(r){var n,s,o,a=(parseFloat(r[1])%360+360)%360/360,h=parseFloat(r[2])/(/%$/.test(r[2])?100:1),c=parseFloat(r[3])/(/%$/.test(r[3])?100:1);if(0===h)n=s=o=c;else{var l=.5>=c?c*(h+1):c+h-c*h,u=2*c-l;n=i(u,l,a+1/3),s=i(u,l,a),o=i(u,l,a-1/3)}return[Math.round(255*n),Math.round(255*s),Math.round(255*o),r[4]?parseFloat(r[4]):1]}},r.Color.fromHsla=e.fromHsl,r.Color.fromHex=function(t){return e.fromSource(e.sourceFromHex(t))},r.Color.sourceFromHex=function(t){if(t.match(e.reHex)){var i=t.slice(t.indexOf("#")+1),r=3===i.length,n=r?i.charAt(0)+i.charAt(0):i.substring(0,2),s=r?i.charAt(1)+i.charAt(1):i.substring(2,4),o=r?i.charAt(2)+i.charAt(2):i.substring(4,6);return[parseInt(n,16),parseInt(s,16),parseInt(o,16),1]}},void(r.Color.fromSource=function(t){var i=new e;return i.setSource(t),i}))}("undefined"!=typeof exports?exports:this),function(){function t(t){var e,i,r,n=t.getAttribute("style"),s=t.getAttribute("offset")||0;if(s=parseFloat(s)/(/%$/.test(s)?100:1),s=0>s?0:s>1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):("y1"===a||"y2"===a)&&(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(){return{type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform}},toSVG:function(t){var e,i,r=fabric.util.object.clone(this.coords);if(this.colorStops.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var n in r)"x1"===n||"x2"===n||"r2"===n?r[n]+=this.offsetX-t.width/2:("y1"===n||"y2"===n)&&(r[n]+=this.offsetY-t.height/2);i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']);for(var s=0;s\n');return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:("y1"===r||"y2"===r)&&(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;o>s;s++){var a=this.colorStops[s].color,h=this.colorStops[s].opacity,c=this.colorStops[s].offset;"undefined"!=typeof h&&(a=new fabric.Color(a).setAlpha(h).toRgba()),i.addColorStop(parseFloat(c),a)}return i}}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(n,s){var o,a=n.getElementsByTagName("stop"),h="linearGradient"===n.nodeName?"linear":"radial",c=n.getAttribute("gradientUnits")||"objectBoundingBox",l=n.getAttribute("gradientTransform"),u=[],f={};"linear"===h?f=e(n):"radial"===h&&(f=i(n));for(var d=a.length;d--;)u.push(t(a[d]));o=r(s,f,c);var g=new fabric.Gradient({type:h,coords:f,colorStops:u,offsetX:-s.left,offsetY:-s.top});return(l||""!==o)&&(g.gradientTransform=fabric.parseTransformAttribute((l||"")+o)),g},forObject:function(t,e){return e||(e={}),r(t,e.coords,"userSpaceOnUse"),new fabric.Gradient(e)}})}(),fabric.Pattern=fabric.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,initialize:function(t){if(t||(t={}),this.id=fabric.Object.__uid++,t.source)if("string"==typeof t.source)if("undefined"!=typeof fabric.util.getFunctionBody(t.source))this.source=new Function(fabric.util.getFunctionBody(t.source));else{var e=this;this.source=fabric.util.createImage(),fabric.util.loadImage(t.source,function(t){e.source=t})}else this.source=t.source;t.repeat&&(this.repeat=t.repeat),t.offsetX&&(this.offsetX=t.offsetX),t.offsetY&&(this.offsetY=t.offsetY)},toObject:function(){var t;return"function"==typeof this.source?t=String(this.source):"string"==typeof this.source.src?t=this.source.src:"object"==typeof this.source&&this.source.toDataURL&&(t=this.source.toDataURL()),{source:t,repeat:this.repeat,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(t){var e="function"==typeof this.source?this.source():this.source,i=e.width/t.getWidth(),r=e.height/t.getHeight(),n=this.offsetX/t.getWidth(),s=this.offsetY/t.getHeight(),o="";return("repeat-x"===this.repeat||"no-repeat"===this.repeat)&&(r=1),("repeat-y"===this.repeat||"no-repeat"===this.repeat)&&(i=1),e.src?o=e.src:e.toDataURL&&(o=e.toDataURL()),'\n\n\n'},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n \n \n \n \n \n \n \n \n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(t,e){e||(e={}),this._initStatic(t,e)},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],backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,_initStatic:function(t,e){this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,this.renderAll.bind(this)),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,this.renderAll.bind(this)),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,this.renderAll.bind(this)),e.overlayColor&&this.setOverlayColor(e.overlayColor,this.renderAll.bind(this)),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},_initRetinaScaling:function(){this._isRetinaScaling()&&(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(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){if(e&&e.source){var r=this;fabric.util.loadImage(e.source,function(n){r[t]=new fabric.Pattern({source:n,repeat:e.repeat,offsetX:e.offsetX,offsetY:e.offsetY}),i&&i()})}else this[t]=e,i&&i();return this},_createCanvasElement:function(){var t=fabric.document.createElement("canvas");if(t.style||(t.style={}),!t)throw n;return this._initCanvasElement(t),t},_initCanvasElement:function(t){if(fabric.util.createCanvasElement(t),"undefined"==typeof t.getContext)throw n},_initOptions:function(t){for(var e in t)this[e]=t[e];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(t){this.lowerCanvasEl=fabric.util.getById(t)||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(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return Math.sqrt(this.viewportTransform[0]*this.viewportTransform[3])},setViewportTransform:function(t){var e=this.getActiveGroup();this.viewportTransform=t,this.renderAll();for(var i=0,r=this._objects.length;r>i;i++)this._objects[i].setCoords();return e&&e.setCoords(),this},zoomToPoint:function(t,e){var i=t;t=fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform)),this.viewportTransform[0]=e,this.viewportTransform[3]=e;var r=fabric.util.transformPoint(t,this.viewportTransform);this.viewportTransform[4]+=i.x-r.x,this.viewportTransform[5]+=i.y-r.y,this.renderAll();for(var n=0,s=this._objects.length;s>n;n++)this._objects[n].setCoords();return this},setZoom:function(t){return this.zoomToPoint(new fabric.Point(0,0),t),this},absolutePan:function(t){this.viewportTransform[4]=-t.x,this.viewportTransform[5]=-t.y,this.renderAll();for(var e=0,i=this._objects.length;i>e;e++)this._objects[e].setCoords();return this},relativePan:function(t){return this.absolutePan(new fabric.Point(-t.x-this.viewportTransform[4],-t.y-this.viewportTransform[5]))},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_onObjectAdded:function(t){this.stateful&&t.setupState(),t._set("canvas",this),t.setCoords(),this.fire("object:added",{target:t}),t.fire("added")},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:t}),t.fire("removed")},clearContext:function(t){return t.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},_chooseObjectsToRender:function(){var t,e=this.getActiveGroup(),i=this.getActiveObject(),r=[],n=[];if(!e&&!i||this.preserveObjectStacking)r=this._objects;else{for(var s=0,o=this._objects.length;o>s;s++)t=this._objects[s],e&&e.contains(t)||t===i?n.push(t):r.push(t);e&&e._set("_objects",n)}return r},renderAll:function(){var t,e=this.contextContainer;return this.contextTop&&this.selection&&!this._groupSelector&&!this.isDrawingMode&&this.clearContext(this.contextTop),this.clearContext(e),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,e),this._renderBackground(e),e.save(),t=this._chooseObjectsToRender(),e.transform.apply(e,this.viewportTransform),this._renderObjects(e,t),this.preserveObjectStacking||(t=[this.getActiveGroup(),this.getActiveObject()],this._renderObjects(e,t)),e.restore(),!this.controlsAboveOverlay&&this.interactive&&this.drawControls(e),this.clipTo&&e.restore(),this._renderOverlay(e),this.controlsAboveOverlay&&this.interactive&&this.drawControls(e),this.fire("after:render"),this},_renderObjects:function(t,e){for(var i=0,r=e.length;r>i;++i)e[i]&&e[i].render(t)},_renderBackgroundOrOverlay:function(t,e){var i=this[e+"Color"];i&&(t.fillStyle=i.toLive?i.toLive(t):i,t.fillRect(i.offsetX||0,i.offsetY||0,this.width,this.height)),i=this[e+"Image"],i&&(this[e+"Vpt"]&&(t.save(),t.transform.apply(t,this.viewportTransform)),i.render(t),this[e+"Vpt"]&&t.restore())},_renderBackground:function(t){this._renderBackgroundOrOverlay(t,"background")},_renderOverlay:function(t){this._renderBackgroundOrOverlay(t,"overlay")},renderTop:function(){var t=this.contextTop||this.contextContainer;return this.clearContext(t),this.selection&&this._groupSelector&&this._drawSelection(),this.fire("after:render"),this},getCenter:function(){return{top:this.getHeight()/2,left:this.getWidth()/2}},centerObjectH:function(t){return this._centerObject(t,new fabric.Point(this.getCenter().left,t.getCenterPoint().y))},centerObjectV:function(t){return this._centerObject(t,new fabric.Point(t.getCenterPoint().x,this.getCenter().top))},centerObject:function(t){var e=this.getCenter();return this._centerObject(t,new fabric.Point(e.left,e.top))},viewportCenterObject:function(t){var e=this.getVpCenter();return this._centerObject(t,e)},viewportCenterObjectH:function(t){var e=this.getVpCenter();return this._centerObject(t,new fabric.Point(e.x,t.getCenterPoint().y)),this},viewportCenterObjectV:function(t){var e=this.getVpCenter();return this._centerObject(t,new fabric.Point(t.getCenterPoint().x,e.y)); - -},getVpCenter:function(){var t=this.getCenter(),e=fabric.util.invertTransform(this.viewportTransform);return fabric.util.transformPoint({x:t.left,y:t.top},e)},_centerObject:function(t,e){return t.setPositionByOrigin(e,"center","center"),this.renderAll(),this},toDatalessJSON:function(t){return this.toDatalessObject(t)},toObject:function(t){return this._toObjectMethod("toObject",t)},toDatalessObject:function(t){return this._toObjectMethod("toDatalessObject",t)},_toObjectMethod:function(e,i){var r={objects:this._toObjects(e,i)};return t(r,this.__serializeBgOverlay()),fabric.util.populateWithProperties(this,r,i),r},_toObjects:function(t,e){return this.getObjects().filter(function(t){return!t.excludeFromExport}).map(function(i){return this._toObject(i,t,e)},this)},_toObject:function(t,e,i){var r;this.includeDefaultValues||(r=t.includeDefaultValues,t.includeDefaultValues=!1);var n=this._realizeGroupTransformOnObject(t),s=t[e](i);return this.includeDefaultValues||(t.includeDefaultValues=r),this._unwindGroupTransformOnObject(t,n),s},_realizeGroupTransformOnObject:function(t){var e=["angle","flipX","flipY","height","left","scaleX","scaleY","top","width"];if(t.group&&t.group===this.getActiveGroup()){var i={};return e.forEach(function(e){i[e]=t[e]}),this.getActiveGroup().realizeTransform(t),i}return null},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},__serializeBgOverlay:function(){var t={background:this.backgroundColor&&this.backgroundColor.toObject?this.backgroundColor.toObject():this.backgroundColor};return this.overlayColor&&(t.overlay=this.overlayColor.toObject?this.overlayColor.toObject():this.overlayColor),this.backgroundImage&&(t.backgroundImage=this.backgroundImage.toObject()),this.overlayImage&&(t.overlayImage=this.overlayImage.toObject()),t},svgViewportTransformation:!0,toSVG:function(t,e){t||(t={});var i=[];return this._setSVGPreamble(i,t),this._setSVGHeader(i,t),this._setSVGBgOverlayColor(i,"backgroundColor"),this._setSVGBgOverlayImage(i,"backgroundImage",e),this._setSVGObjects(i,e),this._setSVGBgOverlayColor(i,"overlayColor"),this._setSVGBgOverlayImage(i,"overlayImage",e),i.push(""),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"\n")},_setSVGObjects:function(t,e){for(var i,r,n=0,s=this.getObjects(),o=s.length;o>n;n++)i=s[n],i.excludeFromExport||(r=this._realizeGroupTransformOnObject(i),t.push(i.toSVG(e)),this._unwindGroupTransformOnObject(i,r))},_setSVGBgOverlayImage:function(t,e,i){this[e]&&this[e].toSVG&&t.push(this[e].toSVG(i))},_setSVGBgOverlayColor:function(t,e){this[e]&&this[e].source?t.push('\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this.getActiveGroup?this.getActiveGroup():null;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this.getActiveGroup?this.getActiveGroup():null;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this.getActiveGroup?this.getActiveGroup():null;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(r){}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(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop;t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur,t.shadowOffsetX=this.shadow.offsetX,t.shadowOffsetY=this.shadow.offsetY}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;s>n;n++){var o=i.midPointFrom(r);t.quadraticCurveTo(i.x,i.y,o.x,o.y),i=this._points[n],r=this._points[n+1]}t.lineTo(i.x,i.y),t.stroke(),t.restore()},convertPointsToSVGPath:function(t){var e=[],i=new fabric.Point(t[0].x,t[0].y),r=new fabric.Point(t[1].x,t[1].y);e.push("M ",t[0].x," ",t[0].y," ");for(var n=1,s=t.length;s>n;n++){var o=i.midPointFrom(r);e.push("Q ",i.x," ",i.y," ",o.x," ",o.y," "),i=new fabric.Point(t[n].x,t[n].y),n+1i;i++){var n=this.points[i],s=new fabric.Circle({radius:n.radius,left:n.x,top:n.y,originX:"center",originY:"center",fill:n.fill});this.shadow&&s.setShadow(this.shadow),e.push(s)}var o=new fabric.Group(e,{originX:"center",originY:"center"});o.canvas=this.canvas,this.canvas.add(o),this.canvas.fire("path:created",{path:o}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=t,this.canvas.renderAll()},addPoint:function(t){var e=new fabric.Point(t.x,t.y),i=fabric.util.getRandomInt(Math.max(0,this.width-20),this.width+20)/2,r=new fabric.Color(this.color).setAlpha(fabric.util.getRandomInt(0,100)/100).toRgba();return e.radius=i,e.fill=r,this.points.push(e),e}}),fabric.SprayBrush=fabric.util.createClass(fabric.BaseBrush,{width:10,density:20,dotWidth:1,dotWidthVariance:1,randomOpacity:!1,optimizeOverlapping:!0,initialize:function(t){this.canvas=t,this.sprayChunks=[]},onMouseDown:function(t){this.sprayChunks.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(t),this.render()},onMouseMove:function(t){this.addSprayChunk(t),this.render()},onMouseUp:function(){var t=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;for(var e=[],i=0,r=this.sprayChunks.length;r>i;i++)for(var n=this.sprayChunks[i],s=0,o=n.length;o>s;s++){var a=new fabric.Rect({width:n[s].width,height:n[s].width,left:n[s].x+1,top:n[s].y+1,originX:"center",originY:"center",fill:this.color});this.shadow&&a.setShadow(this.shadow),e.push(a)}this.optimizeOverlapping&&(e=this._getOptimizedRects(e));var h=new fabric.Group(e,{originX:"center",originY:"center"});h.canvas=this.canvas,this.canvas.add(h),this.canvas.fire("path:created",{path:h}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=t,this.canvas.renderAll()},_getOptimizedRects:function(t){for(var e,i={},r=0,n=t.length;n>r;r++)e=t[r].left+""+t[r].top,i[e]||(i[e]=t[r]);var s=[];for(e in i)s.push(i[e]);return s},render:function(){var t=this.canvas.contextTop;t.fillStyle=this.color;var e=this.canvas.viewportTransform;t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]);for(var i=0,r=this.sprayChunkPoints.length;r>i;i++){var n=this.sprayChunkPoints[i];"undefined"!=typeof n.opacity&&(t.globalAlpha=n.opacity),t.fillRect(n.x,n.y,n.width,n.width)}t.restore()},addSprayChunk:function(t){this.sprayChunkPoints=[];for(var e,i,r,n=this.width/2,s=0;s0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],2>=l?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&0>=c&&c=l&&li.padding?t.x<0?t.x+=i.padding:t.x-=i.padding:t.x=0,n(t.y)>i.padding?t.y<0?t.y+=i.padding:t.y-=i.padding:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta);return 0>a&&(a=360+a),n.target.angle=a%360,!0},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.setAngle(0)},_drawSelection:function(){var t=this.contextTop,e=this._groupSelector,i=e.left,r=e.top,o=n(i),a=n(r);if(t.fillStyle=this.selectionColor,t.fillRect(e.ex-(i>0?0:-i),e.ey-(r>0?0:-r),o,a),t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1){var h=e.ex+s-(i>0?0:o),c=e.ey+s-(r>0?0:a);t.beginPath(),fabric.util.drawDashedLine(t,h,c,h+o,c,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c+a-1,h+o,c+a-1,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c,h,c+a,this.selectionDashArray),fabric.util.drawDashedLine(t,h+o-1,c,h+o-1,c+a,this.selectionDashArray),t.closePath(),t.stroke()}else t.strokeRect(e.ex+s-(i>0?0:o),e.ey+s-(r>0?0:a),o,a)},_isLastRenderedObject:function(t,e){var i=this.lastRenderedWithControls;return(this.preserveObjectStacking||e[this.lastRenderedKey])&&i&&i.visible&&(this.containsPoint(null,i,t)||i._findTargetCorner(t))},findTarget:function(t,e){if(!this.skipTargetFind){var i=this.getPointer(t,!0),r=this.getActiveGroup();if(r&&!e&&this._checkTarget(i,r))return r;var n=this._objects;this.targets=[],this._isLastRenderedObject(i,t)&&(n=[this.lastRenderedWithControls]);var s=this._searchPossibleTargets(n,i);return this._fireOverOutEvents(s,t),s}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout")),this.fire("mouse:over",{target:t,e:e}),t.fire("mouseover"),this._hoveredTarget=t):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=fabric.util.transformPoint(s,fabric.util.invertTransform(this.viewportTransform))),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){return this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:t}),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){return this._discardActiveGroup(),this.fire("selection:cleared",{e:t}),this},deactivateAll:function(){for(var t=this.getObjects(),e=0,i=t.length;i>e;e++)t[e].set("active",!1);return this._discardActiveGroup(),this._discardActiveObject(),this},deactivateAllWithDispatch:function(t){var e=this.getActiveGroup()||this.getActiveObject();return e&&this.fire("before:selection:cleared",{target:e,e:t}),this.deactivateAll(),e&&this.fire("selection:cleared",{e:t}),this},dispose:function(){this.callSuper("dispose");var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),delete this.upperCanvasEl,t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,this},drawControls:function(t){var e=this.getActiveGroup();e?e._renderControls(t):this._drawObjectsControls(t)},_drawObjectsControls:function(t){for(var e=0,i=this._objects.length;i>e;++e)this._objects[e]&&this._objects[e].active&&(this._objects[e]._renderControls(t),this.lastRenderedWithControls=this._objects[e])},_onObjectRemoved:function(t){t===this.lastRenderedWithControls&&delete this.lastRenderedWithControls,this.callSuper("_onObjectRemoved",t)},clear:function(){return delete this.lastRenderedWithControls,this.callSuper("clear")}});for(var o in fabric.StaticCanvas)"prototype"!==o&&(fabric.Canvas[o]=fabric.StaticCanvas[o]);fabric.isTouchSupported&&(fabric.Canvas.prototype._setCursorFromEvent=function(){}),fabric.Element=fabric.Canvas}(),function(){var t={mt:0,tr:1,mr:2,br:3,mb:4,bl:5,ml:6,tl:7},e=fabric.util.addListener,i=fabric.util.removeListener;fabric.util.object.extend(fabric.Canvas.prototype,{cursorMap:["n-resize","ne-resize","e-resize","se-resize","s-resize","sw-resize","w-resize","nw-resize"],_initEventListeners:function(){this._bindEvents(),e(fabric.window,"resize",this._onResize),e(this.upperCanvasEl,"mousedown",this._onMouseDown),e(this.upperCanvasEl,"mousemove",this._onMouseMove),e(this.upperCanvasEl,"mousewheel",this._onMouseWheel),e(this.upperCanvasEl,"mouseout",this._onMouseOut),e(this.upperCanvasEl,"touchstart",this._onMouseDown),e(this.upperCanvasEl,"touchmove",this._onMouseMove),"undefined"!=typeof eventjs&&"add"in eventjs&&(eventjs.add(this.upperCanvasEl,"gesture",this._onGesture),eventjs.add(this.upperCanvasEl,"drag",this._onDrag),eventjs.add(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.add(this.upperCanvasEl,"shake",this._onShake),eventjs.add(this.upperCanvasEl,"longpress",this._onLongPress))},_bindEvents:function(){this._onMouseDown=this._onMouseDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this)},removeListeners:function(){i(fabric.window,"resize",this._onResize),i(this.upperCanvasEl,"mousedown",this._onMouseDown),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"mousewheel",this._onMouseWheel),i(this.upperCanvasEl,"mouseout",this._onMouseOut),i(this.upperCanvasEl,"touchstart",this._onMouseDown),i(this.upperCanvasEl,"touchmove",this._onMouseMove),"undefined"!=typeof eventjs&&"remove"in eventjs&&(eventjs.remove(this.upperCanvasEl,"gesture",this._onGesture),eventjs.remove(this.upperCanvasEl,"drag",this._onDrag),eventjs.remove(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.remove(this.upperCanvasEl,"shake",this._onShake),eventjs.remove(this.upperCanvasEl,"longpress",this._onLongPress))},_onGesture:function(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t,e){this.__onMouseWheel&&this.__onMouseWheel(t,e)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t})},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e); - -},_onMouseDown:function(t){this.__onMouseDown(t),e(fabric.document,"touchend",this._onMouseUp),e(fabric.document,"touchmove",this._onMouseMove),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"touchmove",this._onMouseMove),"touchstart"===t.type?i(this.upperCanvasEl,"mousedown",this._onMouseDown):(e(fabric.document,"mouseup",this._onMouseUp),e(fabric.document,"mousemove",this._onMouseMove))},_onMouseUp:function(t){if(this.__onMouseUp(t),i(fabric.document,"mouseup",this._onMouseUp),i(fabric.document,"touchend",this._onMouseUp),i(fabric.document,"mousemove",this._onMouseMove),i(fabric.document,"touchmove",this._onMouseMove),e(this.upperCanvasEl,"mousemove",this._onMouseMove),e(this.upperCanvasEl,"touchmove",this._onMouseMove),"touchend"===t.type){var r=this;setTimeout(function(){e(r.upperCanvasEl,"mousedown",r._onMouseDown)},400)}},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t,e){var i=this.getActiveGroup()||this.getActiveObject();return!!(t&&(t.isMoving||t!==i)||!t&&i||!t&&!i&&!this._groupSelector||e&&this._previousPointer&&this.selection&&(e.x!==this._previousPointer.x||e.y!==this._previousPointer.y))},__onMouseUp:function(t){var e,i=!0,r=this._currentTransform,n=this._groupSelector,s=!n||0===n.left&&0===n.top;if(this.isDrawingMode&&this._isCurrentlyDrawing)return void this._onMouseUpInDrawingMode(t);r&&(this._finalizeCurrentTransform(),i=!r.actionPerformed),e=i?this.findTarget(t,!0):r.target;var o=this._shouldRender(e,this.getPointer(t));e||!s?this._maybeGroupObjects(t):(this._groupSelector=null,this._currentTransform=null),e&&(e.isMoving=!1),this._handleCursorAndEvent(t,e,"up"),o&&this.renderAll()},_handleCursorAndEvent:function(t,e,i){this._setCursorFromEvent(t,e),this._handleEvent(t,i,e?e:null)},_handleEvent:function(t,e,i){var r=void 0===typeof i?this.findTarget(t):i,n=this.targets||[],s={e:t,target:r,subTargets:n};this.fire("mouse:"+e,s),r&&r.fire("mouse"+e,s);for(var o=0;o1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor;if(e.selectable){var r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this._setCornerCursor(n,e,t):this.setCursor(i)}else this.setCursor(i);return!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return 0>n&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left,top:t.top,width:t.width,height:t.height};return this._isRetinaScaling()&&(r*=fabric.devicePixelRatio),1!==r?this.__toDataURLWithMultiplier(e,i,n,r):this.__toDataURL(e,i,n)},__toDataURL:function(t,e,i){this.renderAll();var r=this.contextContainer.canvas,n=this.__getCroppedCanvas(r,i);"jpg"===t&&(t="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(n||r).toDataURL("image/"+t,e):(n||r).toDataURL("image/"+t);return n&&(n=null),s},__getCroppedCanvas:function(t,e){var i,r,n="left"in e||"top"in e||"width"in e||"height"in e;return n&&(i=fabric.util.createCanvasElement(),r=i.getContext("2d"),i.width=e.width||this.width,i.height=e.height||this.height,r.drawImage(t,-e.left||0,-e.top||0)),i},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=n*r,a=s*r,h=this.getActiveObject(),c=this.getActiveGroup(),l=this.getZoom(),u=l*r/fabric.devicePixelRatio;r>1&&this.setDimensions({width:o,height:a}),this.setZoom(u),i.left&&(i.left*=r),i.top&&(i.top*=r),i.width?i.width*=r:1>r&&(i.width=o),i.height?i.height*=r:1>r&&(i.height=a),c?this._tempRemoveBordersControlsFromGroup(c):h&&this.deactivateAll&&this.deactivateAll();var f=this.__toDataURL(t,e,i);return c?this._restoreBordersControlsOnGroup(c):h&&this.setActiveObject&&this.setActiveObject(h),this.setZoom(l),this.setDimensions({width:n,height:s}),f},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})},_tempRemoveBordersControlsFromGroup:function(t){t.origHasControls=t.hasControls,t.origBorderColor=t.borderColor,t.hasControls=!0,t.borderColor="rgba(0,0,0,0)",t.forEachObject(function(t){t.origBorderColor=t.borderColor,t.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(t){t.hideControls=t.origHideControls,t.borderColor=t.origBorderColor,t.forEachObject(function(t){t.borderColor=t.origBorderColor,delete t.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay;for(var t in r)n[t]=r[t];e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n),n()},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.Image.fromObject(e,function(e){n[t]=e,i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):void(i[t]=!0)},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e,!0)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.toFixed,n=e.util.string.capitalize,s=e.util.degreesToRadians,o=e.StaticCanvas.supports("setLineDash");e.Object||(e.Object=e.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,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",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,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!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 backgroundColor alignX alignY meetOrSlice skewX skewY".split(" "),initialize:function(t){t&&this.setOptions(t)},_initGradient:function(t){!t.fill||!t.fill.colorStops||t.fill instanceof e.Gradient||this.set("fill",new e.Gradient(t.fill)),!t.stroke||!t.stroke.colorStops||t.stroke instanceof e.Gradient||this.set("stroke",new e.Gradient(t.stroke))},_initPattern:function(t){!t.fill||!t.fill.source||t.fill instanceof e.Pattern||this.set("fill",new e.Pattern(t.fill)),!t.stroke||!t.stroke.source||t.stroke instanceof e.Pattern||this.set("stroke",new e.Pattern(t.stroke))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var i=e.util.getFunctionBody(t.clipTo);"undefined"!=typeof i&&(this.clipTo=new Function("ctx",i))}},setOptions:function(t){for(var e in t)this.set(e,t[e]);this._initGradient(t),this._initPattern(t),this._initClipping(t)},transform:function(t,e){this.group&&this.canvas.preserveObjectStacking&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),t.rotate(s(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),t.transform(1,0,Math.tan(s(this.skewX)),1,0,0),t.transform(1,Math.tan(s(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,n={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,i),top:r(this.top,i),width:r(this.width,i),height:r(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,i),scaleX:r(this.scaleX,i),scaleY:r(this.scaleY,i),angle:r(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,i),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,transformMatrix:this.transformMatrix?this.transformMatrix.concat():this.transformMatrix,skewX:r(this.skewX,i),skewY:r(this.skewY,i)};return this.includeDefaultValues||(n=this._removeDefaultValues(n)),e.util.populateWithProperties(this,n,t),n},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},get:function(t){return this[t]},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&0>i?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&0>i?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow||(i=new e.Shadow(i)),this[t]=i,("width"===t||"height"===t)&&(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(t,i){0===this.width&&0===this.height||!this.visible||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setStrokeStyles(t),this._setFillStyles(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this._setOpacity(t),this._setShadow(t),this.clipTo&&e.util.clipContext(this,t),this._render(t,i),this.clipTo&&t.restore(),t.restore())},_setOpacity:function(t){this.group&&this.group._setOpacity(t),t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),o?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),o=this.calcTransformMatrix();o=e.util.multiplyTransformMatrices(n,o),r=e.util.qrDecompose(o),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1/this.borderScaleFactor,t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(s(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(s(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1;this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(this.scaleX+this.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*this.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*this.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_renderFill:function(t){if(this.fill){if(t.save(),this.fill.gradientTransform){var e=this.fill.gradientTransform;t.transform.apply(t,e)}this.fill.toLive&&t.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore()}},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this.stroke.gradientTransform){var e=this.stroke.gradientTransform;t.transform.apply(t,e)}this.stroke.toLive&&t.translate(-this.width/2+this.stroke.offsetX||0,-this.height/2+this.stroke.offsetY||0),t.stroke(),t.restore()}},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t){var i=this.toDataURL();return e.util.loadImage(i,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i);"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 0},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),i.gradientTransform&&(r.gradientTransform=i.gradientTransform);for(var n in i.colorStops){var s=new e.Color(i.colorStops[n]);r.colorStops.push({offset:n,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,e.util.degreesToRadians(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h=t.x,c=t.y,l=e[s]-e[r],u=i[o]-i[n];return(l||u)&&(a=this._getTransformedDimensions(),h=t.x+l*a.x,c=t.y+u*a.y),new fabric.Point(h,c)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n=i&&r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r=t(this.angle),n=this.getWidth(),s=Math.cos(r)*n,o=Math.sin(r)*n;this.left+=s*(e[i]-e[this.originX]),this.top+=o*(e[i]-e[this.originX]),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,i){var r=t(this.oCoords),n=fabric.Intersection.intersectPolygonRectangle(r,e,i);return"Intersection"===n.status},intersectsWithObject:function(e){var i=fabric.Intersection.intersectPolygonPolygon(t(this.oCoords),t(e.oCoords));return"Intersection"===i.status},isContainedWithinObject:function(t){var e=t.getBoundingRect(),i=new fabric.Point(e.left,e.top),r=new fabric.Point(e.left+e.width,e.top+e.height);return this.isContainedWithinRect(i,r)},isContainedWithinRect:function(t,e){var i=this.getBoundingRect();return i.left>=t.x&&i.left+i.width<=e.x&&i.top>=t.y&&i.top+i.height<=e.y},containsPoint:function(t){this.oCoords||this.setCoords();var e=this._getImageLines(this.oCoords),i=this._findCrossPoints(t,e);return 0!==i&&i%2===1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h,c=0;for(var l in e)if(h=e[l],!(h.o.y=t.y&&h.d.y>=t.y||(h.o.x===h.d.x&&h.o.x>=t.x?(o=h.o.x,a=t.y):(i=0,r=(h.d.y-h.o.y)/(h.d.x-h.o.x),n=t.y-i*t.x,s=h.o.y-r*h.o.x,o=-(n-s)/(i-r),a=n+i*o),o>=t.x&&(c+=1),2!==c)))break;return c},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){return this.oCoords||this.setCoords(),fabric.util.makeBoundingBoxFromPoints([this.oCoords.tl,this.oCoords.tr,this.oCoords.br,this.oCoords.bl])},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)t?-this.minScaleLimit:this.minScaleLimit:t},scale:function(t){return t=this._constrainScale(t),0>t&&(this.flipX=!this.flipX,this.flipY=!this.flipY,t*=-1),this.scaleX=t,this.scaleY=t,this.setCoords(),this},scaleToWidth:function(t){var e=this.getBoundingRect().width/this.getWidth();return this.scale(t/this.width/e)},scaleToHeight:function(t){var e=this.getBoundingRect().height/this.getHeight();return this.scale(t/this.height/e)},setCoords:function(){var t=e(this.angle),i=this.getViewportTransform(),r=this._calculateCurrentDimensions(),n=r.x,s=r.y;0>n&&(n=Math.abs(n));var o=Math.sin(t),a=Math.cos(t),h=n>0?Math.atan(s/n):0,c=n/Math.cos(h)/2,l=Math.cos(h+t)*c,u=Math.sin(h+t)*c,f=fabric.util.transformPoint(this.getCenterPoint(),i),d=new fabric.Point(f.x-l,f.y-u),g=new fabric.Point(d.x+n*a,d.y+n*o),p=new fabric.Point(d.x-s*o,d.y+s*a),v=new fabric.Point(f.x+l,f.y+u),m=new fabric.Point((d.x+p.x)/2,(d.y+p.y)/2),b=new fabric.Point((g.x+d.x)/2,(g.y+d.y)/2),y=new fabric.Point((v.x+g.x)/2,(v.y+g.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point(b.x+o*this.rotatingPointOffset,b.y-a*this.rotatingPointOffset);return this.oCoords={tl:d,tr:g,br:v,bl:p,ml:m,mt:b,mr:y,mb:_,mtr:x},this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return[1,0,0,1,0,0]},calcTransformMatrix:function(){var t=this.getCenterPoint(),e=[1,0,0,1,t.x,t.y],r=this._calcRotateMatrix(),n=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),s=this.group?this.group.calcTransformMatrix():[1,0,0,1,0,0];return s=i(s,e),s=i(s,r),s=i(s,n)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas.moveTo(this,t),this}}), -function(){function t(t,e){if(e){if(e.toLive)return t+": url(#SVGID_"+e.id+"); ";var i=new fabric.Color(e),r=t+": "+i.toRgb()+"; ",n=i.getAlpha();return 1!==n&&(r+=t+"-opacity: "+n.toString()+"; "),r}return t+": none; "}fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(e){var i=this.fillRule,r=this.strokeWidth?this.strokeWidth:"0",n=this.strokeDashArray?this.strokeDashArray.join(" "):"none",s=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",a=this.strokeMiterLimit?this.strokeMiterLimit:"4",h="undefined"!=typeof this.opacity?this.opacity:"1",c=this.visible?"":" visibility: hidden;",l=e?"":this.getSvgFilter(),u=t("fill",this.fill),f=t("stroke",this.stroke);return[f,"stroke-width: ",r,"; ","stroke-dasharray: ",n,"; ","stroke-linecap: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",a,"; ",u,"fill-rule: ",i,"; ","opacity: ",h,";",l,c].join("")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgId:function(){return this.id?'id="'+this.id+'" ':""},getSvgTransform:function(){if(this.group&&"path-group"===this.group.type)return"";var t=fabric.util.toFixed,e=this.getAngle(),i=this.getSkewX()%360,r=this.getSkewY()%360,n=this.getCenterPoint(),s=fabric.Object.NUM_FRACTION_DIGITS,o="path-group"===this.type?"":"translate("+t(n.x,s)+" "+t(n.y,s)+")",a=0!==e?" rotate("+t(e,s)+")":"",h=1===this.scaleX&&1===this.scaleY?"":" scale("+t(this.scaleX,s)+" "+t(this.scaleY,s)+")",c=0!==i?" skewX("+t(i,s)+")":"",l=0!==r?" skewY("+t(r,s)+")":"",u="path-group"===this.type?this.width:0,f=this.flipX?" matrix(-1 0 0 1 "+u+" 0) ":"",d="path-group"===this.type?this.height:0,g=this.flipY?" matrix(1 0 0 -1 0 "+d+")":"";return[o,a,h,f,g,c,l].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.join(" ")+") ":""},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(t){return this.get(t)!==this.originalState[t]},this)},saveState:function(t){return this.stateProperties.forEach(function(t){this.originalState[t]=this.get(t)},this),t&&t.stateProperties&&t.stateProperties.forEach(function(t){this.originalState[t]=this.get(t)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var t=fabric.util.degreesToRadians,e=function(){return"undefined"!=typeof G_vmlCanvasManager};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t){if(!this.hasControls||!this.active)return!1;var e,i,r=t.x,n=t.y;this.__corner=0;for(var s in this.oCoords)if(this.isControlVisible(s)&&("mtr"!==s||this.hasRotatingPoint)&&(!this.get("lockUniScaling")||"mt"!==s&&"mr"!==s&&"mb"!==s&&"ml"!==s)&&(i=this._getImageLines(this.oCoords[s].corner),e=this._findCrossPoints({x:r,y:n},i),0!==e&&e%2===1))return this.__corner=s,s;return!1},_setCornerCoords:function(){var e,i,r=this.oCoords,n=t(45-this.angle),s=.707106*this.cornerSize,o=s*Math.cos(n),a=s*Math.sin(n);for(var h in r)e=r[h].x,i=r[h].y,r[h].corner={tl:{x:e-a,y:i-o},tr:{x:e+o,y:i-a},bl:{x:e-o,y:i+a},br:{x:e+a,y:i+o}}},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width,i=this.height,r=!0,n=!0;return"line"===this.type&&"butt"===this.strokeLineCap&&(n=e,r=i),n&&(i+=0>i?-t:t),r&&(e+=0>e?-t:t),{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;ir;r++)t=i[r],e=r!==n-1,this._animate(t,arguments[0][t],arguments[1],e)}else this._animate.apply(this,arguments);return this},_animate:function(t,e,i,r){var n,s=this;e=e.toString(),i=i?fabric.util.object.clone(i):{},~t.indexOf(".")&&(n=t.split("."));var o=n?this.get(n[0])[n[1]]:this.get(t);"from"in i||(i.from=o),e=~e.indexOf("=")?o+parseFloat(e.replace("=","")):parseFloat(e),fabric.util.animate({startValue:i.from,endValue:e,byValue:i.by,easing:i.easing,duration:i.duration,abort:i.abort&&function(){return i.abort.call(s)},onChange:function(e){n?s[n[0]][n[1]]=e:s.set(t,e),r||i.onChange&&i.onChange()},onComplete:function(){r||(s.setCoords(),i.onComplete&&i.onComplete())}})}}),function(t){"use strict";function e(t,e){var i=t.origin,r=t.axis1,n=t.axis2,s=t.dimension,o=e.nearest,a=e.center,h=e.farthest;return function(){switch(this.get(i)){case o:return Math.min(this.get(r),this.get(n));case a:return Math.min(this.get(r),this.get(n))+.5*this.get(s);case h:return Math.max(this.get(r),this.get(n))}}}var i=t.fabric||(t.fabric={}),r=i.util.object.extend,n={x1:1,x2:1,y1:1,y2:1},s=i.StaticCanvas.supports("setLineDash");return i.Line?void i.warn("fabric.Line is already defined"):(i.Line=i.util.createClass(i.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,initialize:function(t,e){e=e||{},t||(t=[0,0,0,0]),this.callSuper("initialize",e),this.set("x1",t[0]),this.set("y1",t[1]),this.set("x2",t[2]),this.set("y2",t[3]),this._setWidthHeight(e)},_setWidthHeight:function(t){t||(t={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in t?t.left:this._getLeftToOriginX(),this.top="top"in t?t.top:this._getTopToOriginY()},_set:function(t,e){return this.callSuper("_set",t,e),"undefined"!=typeof n[t]&&this._setWidthHeight(),this},_getLeftToOriginX:e({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:e({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(t,e){if(t.beginPath(),e){var i=this.getCenterPoint();t.translate(i.x-this.strokeWidth/2,i.y-this.strokeWidth/2)}if(!this.strokeDashArray||this.strokeDashArray&&s){var r=this.calcLinePoints();t.moveTo(r.x1,r.y1),t.lineTo(r.x2,r.y2)}t.lineWidth=this.strokeWidth;var n=t.strokeStyle;t.strokeStyle=this.stroke||t.fillStyle,this.stroke&&this._renderStroke(t),t.strokeStyle=n},_renderDashedStroke:function(t){var e=this.calcLinePoints();t.beginPath(),i.util.drawDashedLine(t,e.x1,e.y1,e.x2,e.y2,this.strokeDashArray),t.closePath()},toObject:function(t){return r(this.callSuper("toObject",t),this.calcLinePoints())},calcLinePoints:function(){var t=this.x1<=this.x2?-1:1,e=this.y1<=this.y2?-1:1,i=t*this.width*.5,r=e*this.height*.5,n=t*this.width*-.5,s=e*this.height*-.5;return{x1:i,x2:n,y1:r,y2:s}},toSVG:function(t){var e=this._createBaseSVGMarkup(),i={x1:this.x1,x2:this.x2,y1:this.y1,y2:this.y2};return this.group&&"path-group"===this.group.type||(i=this.calcLinePoints()),e.push("\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return new i.Line(s,r(n,e))},void(i.Line.fromObject=function(t){var e=[t.x1,t.y1,t.x2,t.y2];return new i.Line(e,t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;return i.Circle?void i.warn("fabric.Circle is already defined."):(i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("radius",t.radius||0),this.startAngle=t.startAngle||this.startAngle,this.endAngle=t.endAngle||this.endAngle},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return n(this.callSuper("toObject",t),{radius:this.get("radius"),startAngle:this.startAngle,endAngle:this.endAngle})},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)},complexity:function(){return 1}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},void(i.Circle.fromObject=function(t){return new i.Circle(t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("width",t.width||100).set("height",t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),void(e.Triangle.fromObject=function(t){return new e.Triangle(t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;return e.Ellipse?void e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("rx",t.rx||0),this.set("ry",t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return r(this.callSuper("toObject",t),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)},complexity:function(){return 1}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},void(e.Ellipse.fromObject=function(t){return new e.Ellipse(t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(t){t=t||{},this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){var e=i(this.callSuper("toObject",t),{rx:this.get("rx")||0,ry:this.get("ry")||0});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.width>0&&s.height>0,s},e.Rect.fromObject=function(t){return new e.Rect(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Polyline?void e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,initialize:function(t,i){return e.Polygon.prototype.initialize.call(this,t,i)},_calcDimensions:function(){return e.Polygon.prototype._calcDimensions.call(this)},toObject:function(t){return e.Polygon.prototype.toObject.call(this,t)},toSVG:function(t){return e.Polygon.prototype.toSVG.call(this,t)},_render:function(t,i){e.Polygon.prototype.commonRender.call(this,t,i)&&(this._renderFill(t),this._renderStroke(t))},_renderDashedStroke:function(t){var i,r;t.beginPath();for(var n=0,s=this.points.length;s>n;n++)i=this.points[n],r=this.points[n+1]||i,e.util.drawDashedLine(t,i.x,i.y,r.x,r.y,this.strokeDashArray)},complexity:function(){return this.get("points").length}}),e.Polyline.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat(),e.Polyline.fromElement=function(t,i){if(!t)return null;i||(i={});var r=e.parsePointsAttribute(t.getAttribute("points")),n=e.parseAttributes(t,e.Polyline.ATTRIBUTE_NAMES);return new e.Polyline(r,e.util.object.extend(n,i))},void(e.Polyline.fromObject=function(t){var i=t.points;return new e.Polyline(i,t,!0)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed;return e.Polygon?void e.warn("fabric.Polygon is already defined"):(e.Polygon=e.util.createClass(e.Object,{type:"polygon",points:null,minX:0,minY:0,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){for(var e,i=[],r=this._createBaseSVGMarkup(),n=0,o=this.points.length;o>n;n++)i.push(s(this.points[n].x,2),",",s(this.points[n].y,2)," ");return this.group&&"path-group"===this.group.type||(e=" translate("+-this.pathOffset.x+", "+-this.pathOffset.y+") "),r.push("<",this.type," ",this.getSvgId(),'points="',i.join(""),'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform(),e," ",this.getSvgTransformMatrix(),'"/>\n'),t?t(r.join("")):r.join("")},_render:function(t,e){this.commonRender(t,e)&&(this._renderFill(t),(this.stroke||this.strokeDashArray)&&(t.closePath(),this._renderStroke(t)))},commonRender:function(t,e){var i,r=this.points.length;if(!r||isNaN(this.points[r-1].y))return!1;e||t.translate(-this.pathOffset.x,-this.pathOffset.y),t.beginPath(),t.moveTo(this.points[0].x,this.points[0].y);for(var n=0;r>n;n++)i=this.points[n],t.lineTo(i.x,i.y);return!0},_renderDashedStroke:function(t){e.Polyline.prototype._renderDashedStroke.call(this,t),t.closePath()},complexity:function(){return this.points.length}}),e.Polygon.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat(),e.Polygon.fromElement=function(t,r){if(!t)return null;r||(r={});var n=e.parsePointsAttribute(t.getAttribute("points")),s=e.parseAttributes(t,e.Polygon.ATTRIBUTE_NAMES);return new e.Polygon(n,i(s,r))},void(e.Polygon.fromObject=function(t){return new e.Polygon(t.points,t,!0)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.array.min,r=e.util.array.max,n=e.util.object.extend,s=Object.prototype.toString,o=e.util.drawArc,a={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},h={m:"l",M:"L"};return e.Path?void e.warn("fabric.Path is already defined"):(e.Path=e.util.createClass(e.Object,{type:"path",path:null,minX:0,minY:0,initialize:function(t,e){e=e||{},this.setOptions(e),t||(t=[]);var i="[object Array]"===s.call(t);this.path=i?t:t.match&&t.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi),this.path&&(i||(this.path=this._parsePath()),this._setPositionDimensions(e),e.sourcePath&&this.setSourcePath(e.sourcePath))},_setPositionDimensions:function(t){var e=this._parseDimensions();this.minX=e.left,this.minY=e.top,this.width=e.width,this.height=e.height,"undefined"==typeof t.left&&(this.left=e.left+("center"===this.originX?this.width/2:"right"===this.originX?this.width:0)),"undefined"==typeof t.top&&(this.top=e.top+("center"===this.originY?this.height/2:"bottom"===this.originY?this.height:0)),this.pathOffset=this.pathOffset||{x:this.minX+this.width/2,y:this.minY+this.height/2}},_render:function(t){var e,i,r,n=null,s=0,a=0,h=0,c=0,l=0,u=0,f=-this.pathOffset.x,d=-this.pathOffset.y;this.group&&"path-group"===this.group.type&&(f=0,d=0),t.beginPath();for(var g=0,p=this.path.length;p>g;++g){switch(e=this.path[g],e[0]){case"l":h+=e[1],c+=e[2],t.lineTo(h+f,c+d);break;case"L":h=e[1],c=e[2],t.lineTo(h+f,c+d);break;case"h":h+=e[1],t.lineTo(h+f,c+d);break;case"H":h=e[1],t.lineTo(h+f,c+d);break;case"v":c+=e[1],t.lineTo(h+f,c+d);break;case"V":c=e[1],t.lineTo(h+f,c+d);break;case"m":h+=e[1],c+=e[2],s=h,a=c,t.moveTo(h+f,c+d);break;case"M":h=e[1],c=e[2],s=h,a=c,t.moveTo(h+f,c+d);break;case"c":i=h+e[5],r=c+e[6],l=h+e[3],u=c+e[4],t.bezierCurveTo(h+e[1]+f,c+e[2]+d,l+f,u+d,i+f,r+d),h=i,c=r;break;case"C":h=e[5],c=e[6],l=e[3],u=e[4],t.bezierCurveTo(e[1]+f,e[2]+d,l+f,u+d,h+f,c+d);break;case"s":i=h+e[3],r=c+e[4],null===n[0].match(/[CcSs]/)?(l=h,u=c):(l=2*h-l,u=2*c-u),t.bezierCurveTo(l+f,u+d,h+e[1]+f,c+e[2]+d,i+f,r+d),l=h+e[1],u=c+e[2],h=i,c=r;break;case"S":i=e[3],r=e[4],null===n[0].match(/[CcSs]/)?(l=h,u=c):(l=2*h-l,u=2*c-u),t.bezierCurveTo(l+f,u+d,e[1]+f,e[2]+d,i+f,r+d),h=i,c=r,l=e[1],u=e[2];break;case"q":i=h+e[3],r=c+e[4],l=h+e[1],u=c+e[2],t.quadraticCurveTo(l+f,u+d,i+f,r+d),h=i,c=r;break;case"Q":i=e[3],r=e[4],t.quadraticCurveTo(e[1]+f,e[2]+d,i+f,r+d),h=i,c=r,l=e[1],u=e[2];break;case"t":i=h+e[1],r=c+e[2],null===n[0].match(/[QqTt]/)?(l=h,u=c):(l=2*h-l,u=2*c-u),t.quadraticCurveTo(l+f,u+d,i+f,r+d),h=i,c=r;break;case"T":i=e[1],r=e[2],null===n[0].match(/[QqTt]/)?(l=h,u=c):(l=2*h-l,u=2*c-u),t.quadraticCurveTo(l+f,u+d,i+f,r+d),h=i,c=r;break;case"a":o(t,h+f,c+d,[e[1],e[2],e[3],e[4],e[5],e[6]+h+f,e[7]+c+d]),h+=e[6],c+=e[7];break;case"A":o(t,h+f,c+d,[e[1],e[2],e[3],e[4],e[5],e[6]+f,e[7]+d]),h=e[6],c=e[7];break;case"z":case"Z":h=s,c=a,t.closePath()}n=e}this._renderFill(t),this._renderStroke(t)},toString:function(){return"#"},toObject:function(t){var e=n(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(e.sourcePath=this.sourcePath),this.transformMatrix&&(e.transformMatrix=this.transformMatrix),e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;s>n;n++)e.push(this.path[n].join(" "));var o=e.join(" ");return this.group&&"path-group"===this.group.type||(r=" translate("+-this.pathOffset.x+", "+-this.pathOffset.y+") "),i.push("\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;u>l;l++){for(t=this.path[l],r=t.slice(1).trim(),o.length=0;i=c.exec(r);)o.push(i[0]);n=[t.charAt(0)];for(var f=0,d=o.length;d>f;f++)e=parseFloat(o[f]),isNaN(e)||n.push(e);var g=n[0],p=a[g.toLowerCase()],v=h[g]||g;if(n.length-1>p)for(var m=1,b=n.length;b>m;m+=p)s.push([g].concat(n.slice(m,m+p))),g=v;else s.push(n)}return s},_parseDimensions:function(){for(var t,n,s,o,a=[],h=[],c=null,l=0,u=0,f=0,d=0,g=0,p=0,v=0,m=this.path.length;m>v;++v){switch(t=this.path[v],t[0]){case"l":f+=t[1],d+=t[2],o=[];break;case"L":f=t[1],d=t[2],o=[];break;case"h":f+=t[1],o=[];break;case"H":f=t[1],o=[];break;case"v":d+=t[1],o=[];break;case"V":d=t[1],o=[];break;case"m":f+=t[1],d+=t[2],l=f,u=d,o=[];break;case"M":f=t[1],d=t[2],l=f,u=d,o=[];break;case"c":n=f+t[5],s=d+t[6],g=f+t[3],p=d+t[4],o=e.util.getBoundsOfCurve(f,d,f+t[1],d+t[2],g,p,n,s),f=n,d=s;break;case"C":f=t[5],d=t[6],g=t[3],p=t[4],o=e.util.getBoundsOfCurve(f,d,t[1],t[2],g,p,f,d);break;case"s":n=f+t[3],s=d+t[4],null===c[0].match(/[CcSs]/)?(g=f,p=d):(g=2*f-g,p=2*d-p),o=e.util.getBoundsOfCurve(f,d,g,p,f+t[1],d+t[2],n,s),g=f+t[1],p=d+t[2],f=n,d=s;break;case"S":n=t[3],s=t[4],null===c[0].match(/[CcSs]/)?(g=f,p=d):(g=2*f-g,p=2*d-p),o=e.util.getBoundsOfCurve(f,d,g,p,t[1],t[2],n,s),f=n,d=s,g=t[1],p=t[2];break;case"q":n=f+t[3],s=d+t[4],g=f+t[1],p=d+t[2],o=e.util.getBoundsOfCurve(f,d,g,p,g,p,n,s),f=n,d=s;break;case"Q":g=t[1],p=t[2],o=e.util.getBoundsOfCurve(f,d,g,p,g,p,t[3],t[4]),f=t[3],d=t[4];break;case"t":n=f+t[1],s=d+t[2],null===c[0].match(/[QqTt]/)?(g=f,p=d):(g=2*f-g,p=2*d-p),o=e.util.getBoundsOfCurve(f,d,g,p,g,p,n,s),f=n,d=s;break;case"T":n=t[1],s=t[2],null===c[0].match(/[QqTt]/)?(g=f,p=d):(g=2*f-g,p=2*d-p),o=e.util.getBoundsOfCurve(f,d,g,p,g,p,n,s),f=n,d=s;break;case"a":o=e.util.getBoundsOfArc(f,d,t[1],t[2],t[3],t[4],t[5],t[6]+f,t[7]+d),f+=t[6],d+=t[7];break;case"A":o=e.util.getBoundsOfArc(f,d,t[1],t[2],t[3],t[4],t[5],t[6],t[7]),f=t[6],d=t[7];break;case"z":case"Z":f=l,d=u}c=t,o.forEach(function(t){a.push(t.x),h.push(t.y)}),a.push(f),h.push(d)}var b=i(a)||0,y=i(h)||0,_=r(a)||0,x=r(h)||0,S=_-b,C=x-y,w={left:b,top:y,width:S,height:C};return w}}),e.Path.fromObject=function(t,i){"string"==typeof t.path?e.loadSVGFromURL(t.path,function(r){var n=r[0],s=t.path;delete t.path,e.util.object.extend(n,t),n.setSourcePath(s),i(n)}):i(new e.Path(t.path,t))},e.Path.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat(["d"]),e.Path.fromElement=function(t,i,r){var s=e.parseAttributes(t,e.Path.ATTRIBUTE_NAMES);i&&i(new e.Path(s.d,n(s,r)))},void(e.Path.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.invoke,n=e.Object.prototype.toObject;return e.PathGroup?void e.warn("fabric.PathGroup is already defined"):(e.PathGroup=e.util.createClass(e.Path,{type:"path-group",fill:"",initialize:function(t,e){e=e||{},this.paths=t||[];for(var i=this.paths.length;i--;)this.paths[i].group=this;e.toBeParsed&&(this.parseDimensionsFromPaths(e),delete e.toBeParsed),this.setOptions(e),this.setCoords(),e.sourcePath&&this.setSourcePath(e.sourcePath)},parseDimensionsFromPaths:function(t){for(var i,r,n,s,o,a,h=[],c=[],l=this.paths.length;l--;){n=this.paths[l],s=n.height+n.strokeWidth,o=n.width+n.strokeWidth,i=[{x:n.left,y:n.top},{x:n.left+o,y:n.top},{x:n.left,y:n.top+s},{x:n.left+o,y:n.top+s}],a=this.paths[l].transformMatrix;for(var u=0;ui;++i)this.paths[i].render(t,!0);this.clipTo&&t.restore(),t.restore()}},_set:function(t,e){if("fill"===t&&e&&this.isSameColor())for(var i=this.paths.length;i--;)this.paths[i]._set(t,e);return this.callSuper("_set",t,e)},toObject:function(t){var e=i(n.call(this,t),{paths:r(this.getObjects(),"toObject",t)});return this.sourcePath&&(e.sourcePath=this.sourcePath),e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.paths=this.sourcePath),e},toSVG:function(t){var e=this.getObjects(),i=this.getPointByOrigin("left","top"),r="translate("+i.x+" "+i.y+")",n=this._createBaseSVGMarkup();n.push("\n");for(var s=0,o=e.length;o>s;s++)n.push(" ",e[s].toSVG(t));return n.push("\n"),t?t(n.join("")):n.join("")},toString:function(){ -return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"!=typeof t?!1:(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){"string"==typeof t.paths?e.loadSVGFromURL(t.paths,function(r){var n=t.paths;delete t.paths;var s=e.util.groupSVGElements(r,t,n);i(s)}):e.util.enlivenObjects(t.paths,function(r){delete t.paths,i(new e.PathGroup(r,t))})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.array.invoke;if(!e.Group){var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this._objects.length;e--;)this._updateObjectCoords(this._objects[e],t)},_updateObjectCoords:function(t,e){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!e){var i=t.getLeft(),r=t.getTop(),n=this.getCenterPoint();t.set({originalLeft:i,originalTop:r,left:i-n.x,top:r-n.y}),t.setCoords()}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(t){t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){return i(this.callSuper("toObject",t),{objects:s(this._objects,"toObject",t)})},render:function(t){if(this.visible){t.save(),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.transform(t),this._setShadow(t),this.clipTo&&e.util.clipContext(this,t);for(var i=0,r=this._objects.length;r>i;i++)this._renderObject(this._objects[i],t);this.clipTo&&t.restore(),t.restore()}},_renderControls:function(t,e){this.callSuper("_renderControls",t,e);for(var i=0,r=this._objects.length;r>i;i++)this._objects[i]._renderControls(t)},_renderObject:function(t,e){if(t.visible){var i=t.hasRotatingPoint;t.hasRotatingPoint=!1,t.render(e),t.hasRotatingPoint=i}},_restoreObjectsState:function(){return this._objects.forEach(this._restoreObjectState,this),this},realizeTransform:function(t){var i=t.calcTransformMatrix(),r=e.util.qrDecompose(i),n=new e.Point(r.translateX,r.translateY);return t.scaleX=r.scaleX,t.scaleY=r.scaleY,t.skewX=r.skewX,t.skewY=r.skewY,t.angle=r.angle,t.flipX=!1,t.flipY=!1,t.setPositionByOrigin(n,"center","center"),t},_restoreObjectState:function(t){return this.realizeTransform(t),t.setCoords(),t.hasControls=t.__origHasControls,delete t.__origHasControls,t.set("active",!1),delete t.group,this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(t){t.setCoords()}),this},_calcBounds:function(t){for(var e,i,r,n=[],s=[],o=["tr","br","bl","tl"],a=0,h=this._objects.length,c=o.length;h>a;++a)for(e=this._objects[a],e.setCoords(),r=0;c>r;r++)i=o[r],n.push(e.oCoords[i].x),s.push(e.oCoords[i].y);this.set(this._getBounds(n,s,t))},_getBounds:function(t,i,s){var o=e.util.invertTransform(this.getViewportTransform()),a=e.util.transformPoint(new e.Point(r(t),r(i)),o),h=e.util.transformPoint(new e.Point(n(t),n(i)),o),c={width:h.x-a.x||0,height:h.y-a.y||0};return s||(c.left=a.x||0,c.top=a.y||0,"center"===this.originX&&(c.left+=c.width/2),"right"===this.originX&&(c.left+=c.width),"center"===this.originY&&(c.top+=c.height/2),"bottom"===this.originY&&(c.top+=c.height)),c},toSVG:function(t){var e=this._createBaseSVGMarkup();e.push("\n');for(var i=0,r=this._objects.length;r>i;i++)e.push(" ",this._objects[i].toSVG(t));return e.push("\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in o){if(this[t])return this[t];for(var e=0,i=this._objects.length;i>e;e++)if(this._objects[e][t])return!0;return!1}return t in this.delegatedProperties?this._objects[0]&&this._objects[0].get(t):this[t]}}),e.Group.fromObject=function(t,i){e.util.enlivenObjects(t.objects,function(r){delete t.objects,i&&i(new e.Group(r,t,!0))})},e.Group.async=!0}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=fabric.util.object.extend;return t.fabric||(t.fabric={}),t.fabric.Image?void fabric.warn("fabric.Image is already defined."):(fabric.Image=fabric.util.createClass(fabric.Object,{type:"image",crossOrigin:"",alignX:"none",alignY:"none",meetOrSlice:"meet",strokeWidth:0,_lastScaleX:1,_lastScaleY:1,initialize:function(t,e){e||(e={}),this.filters=[],this.resizeFilters=[],this.callSuper("initialize",e),this._initElement(t,e)},getElement:function(){return this._element},setElement:function(t,e,i){return this._element=t,this._originalElement=t,this._initConfig(i),0!==this.filters.length?this.applyFilters(e):e&&e(),this},setCrossOrigin:function(t){return this.crossOrigin=t,this._element.crossOrigin=t,this},getOriginalSize:function(){var t=this.getElement();return{width:t.width,height:t.height}},_stroke:function(t){if(this.stroke&&0!==this.strokeWidth){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,-i),t.lineTo(e,-i),t.lineTo(e,i),t.lineTo(-e,i),t.lineTo(-e,-i),t.closePath()}},_renderDashedStroke:function(t){var e=-this.width/2,i=-this.height/2,r=this.width,n=this.height;t.save(),this._setStrokeStyles(t),t.beginPath(),fabric.util.drawDashedLine(t,e,i,e+r,i,this.strokeDashArray),fabric.util.drawDashedLine(t,e+r,i,e+r,i+n,this.strokeDashArray),fabric.util.drawDashedLine(t,e+r,i+n,e,i+n,this.strokeDashArray),fabric.util.drawDashedLine(t,e,i+n,e,i,this.strokeDashArray),t.closePath(),t.restore()},toObject:function(t){var i=[],r=[],n=this._originalElement,s=1,o=1;this.filters.forEach(function(t){t&&("Resize"===t.type&&(s*=t.scaleX,o*=t.scaleY),i.push(t.toObject()))}),this.resizeFilters.forEach(function(t){t&&r.push(t.toObject())});var a=e(this.callSuper("toObject",t),{src:n?n.src||n._src:"",filters:i,resizeFilters:r,crossOrigin:this.crossOrigin,alignX:this.alignX,alignY:this.alignY,meetOrSlice:this.meetOrSlice});return a.width/=s,a.height/=o,this.includeDefaultValues||this._removeDefaultValues(a),a},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=-this.width/2,r=-this.height/2,n="none";if(this.group&&"path-group"===this.group.type&&(i=this.left,r=this.top),"none"!==this.alignX&&"none"!==this.alignY&&(n="x"+this.alignX+"Y"+this.alignY+" "+this.meetOrSlice),e.push('\n',"\n"),this.stroke||this.strokeDashArray){var s=this.fill;this.fill=null,e.push("\n'),this.fill=s}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(){return this.getElement()?this.getElement().src||this.getElement()._src:void 0},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},clone:function(t,e){this.constructor.fromObject(this.toObject(e),t)},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n=i,s=fabric.util.createCanvasElement(),o=fabric.util.createImage(),a=this;return s.width=n.width,s.height=n.height,s.getContext("2d").drawImage(n,0,0,n.width,n.height),0===e.length?(this._element=i,t&&t(),s):(e.forEach(function(t){t&&t.applyTo(s,t.scaleX||a.scaleX,t.scaleY||a.scaleY),!r&&t&&"Resize"===t.type&&(a.width*=t.scaleX,a.height*=t.scaleY)}),o.width=s.width,o.height=s.height,fabric.isLikelyNode?(o.src=s.toBuffer(void 0,fabric.Image.pngCompression),a._element=o,!r&&(a._filteredEl=o),t&&t()):(o.onload=function(){a._element=o,!r&&(a._filteredEl=o),t&&t(),o.onload=s=n=null},o.src=s.toDataURL("image/png")),s)}},_render:function(t,e){var i,r,n,s=this._findMargins();i=e?this.left:-this.width/2,r=e?this.top:-this.height/2,"slice"===this.meetOrSlice&&(t.beginPath(),t.rect(i,r,this.width,this.height),t.clip()),this.isMoving===!1&&this.resizeFilters.length&&this._needsResize()?(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,n=this.applyFilters(null,this.resizeFilters,this._filteredEl||this._originalElement,!0)):n=this._element,n&&t.drawImage(n,i+s.marginX,r+s.marginY,s.width,s.height),this._stroke(t),this._renderStroke(t)},_needsResize:function(){return this.scaleX!==this._lastScaleX||this.scaleY!==this._lastScaleY},_findMargins:function(){var t,e,i=this.width,r=this.height,n=0,s=0;return("none"!==this.alignX||"none"!==this.alignY)&&(t=[this.width/this._element.width,this.height/this._element.height],e="meet"===this.meetOrSlice?Math.min.apply(null,t):Math.max.apply(null,t),i=this._element.width*e,r=this._element.height*e,"Mid"===this.alignX&&(n=(this.width-i)/2),"Max"===this.alignX&&(n=this.width-i),"Mid"===this.alignY&&(s=(this.height-r)/2),"Max"===this.alignY&&(s=this.height-r)),{width:i,height:r,marginX:n,marginY:s}},_resetWidthHeight:function(){var t=this.getElement();this.set("width",t.width),this.set("height",t.height)},_initElement:function(t,e){this.setElement(fabric.util.getById(t),null,e),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(t,e){t&&t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){this.width="width"in t?t.width:this.getElement()?this.getElement().width||0:0,this.height="height"in t?t.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(t,e){fabric.util.loadImage(t.src,function(i){fabric.Image.prototype._initFilters.call(t,t.filters,function(r){t.filters=r||[],fabric.Image.prototype._initFilters.call(t,t.resizeFilters,function(r){t.resizeFilters=r||[];var n=new fabric.Image(i,t);e&&e(n)})})},null,t.crossOrigin)},fabric.Image.fromURL=function(t,e,i){fabric.util.loadImage(t,function(t){e&&e(new fabric.Image(t,i))},null,i&&i.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href".split(" ")),fabric.Image.fromElement=function(t,i,r){var n,s=fabric.parseAttributes(t,fabric.Image.ATTRIBUTE_NAMES);s.preserveAspectRatio&&(n=fabric.util.parsePreserveAspectRatioAttribute(s.preserveAspectRatio),e(s,n)),fabric.Image.fromURL(s["xlink:href"],i,e(r?fabric.util.object.clone(r):{},s))},fabric.Image.async=!0,void(fabric.Image.pngCompression=1))}("undefined"!=typeof exports?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.getAngle()%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.Brightness=e.util.createClass(e.Image.filters.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;o>s;s+=4)r[s]+=n,r[s+1]+=n,r[s+2]+=n;e.putImageData(i,0,0)},toObject:function(){return i(this.callSuper("toObject"),{brightness:this.brightness})}}),e.Image.filters.Brightness.fromObject=function(t){return new e.Image.filters.Brightness(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.Convolute=e.util.createClass(e.Image.filters.BaseFilter,{type:"Convolute",initialize:function(t){t=t||{},this.opaque=t.opaque,this.matrix=t.matrix||[0,0,0,0,1,0,0,0,0]},applyTo:function(t){for(var e,i,r,n,s,o,a,h,c,l=this.matrix,u=t.getContext("2d"),f=u.getImageData(0,0,t.width,t.height),d=Math.round(Math.sqrt(l.length)),g=Math.floor(d/2),p=f.data,v=f.width,m=f.height,b=u.createImageData(v,m),y=b.data,_=this.opaque?1:0,x=0;m>x;x++)for(var S=0;v>S;S++){s=4*(x*v+S),e=0,i=0,r=0,n=0;for(var C=0;d>C;C++)for(var w=0;d>w;w++)a=x+C-g,o=S+w-g,0>a||a>m||0>o||o>v||(h=4*(a*v+o),c=l[C*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(b,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=function(t){return new e.Image.filters.Convolute(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.GradientTransparency=e.util.createClass(e.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;a>o;o+=4)r[o+3]=n+255*(s-o)/s;e.putImageData(i,0,0)},toObject:function(){return i(this.callSuper("toObject"),{threshold:this.threshold})}}),e.Image.filters.GradientTransparency.fromObject=function(t){return new e.Image.filters.GradientTransparency(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Image.filters.Grayscale=e.util.createClass(e.Image.filters.BaseFilter,{type:"Grayscale",applyTo:function(t){for(var e,i=t.getContext("2d"),r=i.getImageData(0,0,t.width,t.height),n=r.data,s=r.width*r.height*4,o=0;s>o;)e=(n[o]+n[o+1]+n[o+2])/3,n[o]=e,n[o+1]=e,n[o+2]=e,o+=4;i.putImageData(r,0,0)}}),e.Image.filters.Grayscale.fromObject=function(){return new e.Image.filters.Grayscale}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Image.filters.Invert=e.util.createClass(e.Image.filters.BaseFilter,{type:"Invert",applyTo:function(t){var e,i=t.getContext("2d"),r=i.getImageData(0,0,t.width,t.height),n=r.data,s=n.length;for(e=0;s>e;e+=4)n[e]=255-n[e],n[e+1]=255-n[e+1],n[e+2]=255-n[e+2];i.putImageData(r,0,0)}}),e.Image.filters.Invert.fromObject=function(){return new e.Image.filters.Invert}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.Mask=e.util.createClass(e.Image.filters.BaseFilter,{type:"Mask",initialize:function(t){t=t||{},this.mask=t.mask,this.channel=[0,1,2,3].indexOf(t.channel)>-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;c>i;i+=4)s[i+3]=u[i+h];r.putImageData(n,0,0)}},toObject:function(){return i(this.callSuper("toObject"),{mask:this.mask.toObject(),channel:this.channel})}}),e.Image.filters.Mask.fromObject=function(t,i){e.util.loadImage(t.mask.src,function(r){t.mask=new e.Image(r,t.mask),i&&i(new e.Image.filters.Mask(t))})},e.Image.filters.Mask.async=!0}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.Noise=e.util.createClass(e.Image.filters.BaseFilter,{type:"Noise",initialize:function(t){t=t||{},this.noise=t.noise||0},applyTo:function(t){for(var e,i=t.getContext("2d"),r=i.getImageData(0,0,t.width,t.height),n=r.data,s=this.noise,o=0,a=n.length;a>o;o+=4)e=(.5-Math.random())*s,n[o]+=e,n[o+1]+=e,n[o+2]+=e;i.putImageData(r,0,0)},toObject:function(){return i(this.callSuper("toObject"),{noise:this.noise})}}),e.Image.filters.Noise.fromObject=function(t){return new e.Image.filters.Noise(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.Pixelate=e.util.createClass(e.Image.filters.BaseFilter,{type:"Pixelate",initialize:function(t){t=t||{},this.blocksize=t.blocksize||4},applyTo:function(t){var e,i,r,n,s,o,a,h=t.getContext("2d"),c=h.getImageData(0,0,t.width,t.height),l=c.data,u=c.height,f=c.width;for(i=0;u>i;i+=this.blocksize)for(r=0;f>r;r+=this.blocksize){e=4*i*f+4*r,n=l[e],s=l[e+1],o=l[e+2],a=l[e+3];for(var d=i,g=i+this.blocksize;g>d;d++)for(var p=r,v=r+this.blocksize;v>p;p++)e=4*d*f+4*p,l[e]=n,l[e+1]=s,l[e+2]=o,l[e+3]=a}h.putImageData(c,0,0)},toObject:function(){return i(this.callSuper("toObject"),{blocksize:this.blocksize})}}),e.Image.filters.Pixelate.fromObject=function(t){return new e.Image.filters.Pixelate(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.RemoveWhite=e.util.createClass(e.Image.filters.BaseFilter,{type:"RemoveWhite",initialize:function(t){t=t||{},this.threshold=t.threshold||30,this.distance=t.distance||20},applyTo:function(t){for(var e,i,r,n=t.getContext("2d"),s=n.getImageData(0,0,t.width,t.height),o=s.data,a=this.threshold,h=this.distance,c=255-a,l=Math.abs,u=0,f=o.length;f>u;u+=4)e=o[u],i=o[u+1],r=o[u+2],e>c&&i>c&&r>c&&l(e-i)e;e+=4)i=.3*s[e]+.59*s[e+1]+.11*s[e+2],s[e]=i+100,s[e+1]=i+50,s[e+2]=i+255;r.putImageData(n,0,0)}}),e.Image.filters.Sepia.fromObject=function(){return new e.Image.filters.Sepia}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Image.filters.Sepia2=e.util.createClass(e.Image.filters.BaseFilter,{type:"Sepia2",applyTo:function(t){var e,i,r,n,s=t.getContext("2d"),o=s.getImageData(0,0,t.width,t.height),a=o.data,h=a.length;for(e=0;h>e;e+=4)i=a[e],r=a[e+1],n=a[e+2],a[e]=(.393*i+.769*r+.189*n)/1.351,a[e+1]=(.349*i+.686*r+.168*n)/1.203,a[e+2]=(.272*i+.534*r+.131*n)/2.14;s.putImageData(o,0,0)}}),e.Image.filters.Sepia2.fromObject=function(){return new e.Image.filters.Sepia2}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.Tint=e.util.createClass(e.Image.filters.BaseFilter,{type:"Tint",initialize:function(t){t=t||{},this.color=t.color||"#000000",this.opacity="undefined"!=typeof t.opacity?t.opacity:new e.Color(this.color).getAlpha()},applyTo:function(t){var i,r,n,s,o,a,h,c,l,u=t.getContext("2d"),f=u.getImageData(0,0,t.width,t.height),d=f.data,g=d.length;for(l=new e.Color(this.color).getSource(),r=l[0]*this.opacity,n=l[1]*this.opacity,s=l[2]*this.opacity,c=1-this.opacity,i=0;g>i;i+=4)o=d[i],a=d[i+1],h=d[i+2],d[i]=r+o*c,d[i+1]=n+a*c,d[i+2]=s+h*c;u.putImageData(f,0,0)},toObject:function(){return i(this.callSuper("toObject"),{color:this.color,opacity:this.opacity})}}),e.Image.filters.Tint.fromObject=function(t){return new e.Image.filters.Tint(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.Multiply=e.util.createClass(e.Image.filters.BaseFilter,{type:"Multiply",initialize:function(t){t=t||{},this.color=t.color||"#000000"},applyTo:function(t){var i,r,n=t.getContext("2d"),s=n.getImageData(0,0,t.width,t.height),o=s.data,a=o.length;for(r=new e.Color(this.color).getSource(),i=0;a>i;i+=4)o[i]*=r[0]/255,o[i+1]*=r[1]/255,o[i+2]*=r[2]/255;n.putImageData(s,0,0)},toObject:function(){return i(this.callSuper("toObject"),{color:this.color})}}),e.Image.filters.Multiply.fromObject=function(t){return new e.Image.filters.Multiply(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric;e.Image.filters.Blend=e.util.createClass(e.Image.filters.BaseFilter,{type:"Blend",initialize:function(t){t=t||{},this.color=t.color||"#000",this.image=t.image||!1,this.mode=t.mode||"multiply",this.alpha=t.alpha||1},applyTo:function(t){var i,r,n,s,o,a,h,c,l,u,f=t.getContext("2d"),d=f.getImageData(0,0,t.width,t.height),g=d.data,p=!1;if(this.image){p=!0;var v=e.util.createCanvasElement();v.width=this.image.width,v.height=this.image.height;var m=new e.StaticCanvas(v);m.add(this.image);var b=m.getContext("2d");u=b.getImageData(0,0,m.width,m.height).data}else u=new e.Color(this.color).getSource(),i=u[0]*this.alpha,r=u[1]*this.alpha,n=u[2]*this.alpha;for(var y=0,_=g.length;_>y;y+=4)switch(s=g[y],o=g[y+1],a=g[y+2],p&&(i=u[y]*this.alpha,r=u[y+1]*this.alpha,n=u[y+2]*this.alpha),this.mode){case"multiply":g[y]=s*i/255,g[y+1]=o*r/255,g[y+2]=a*n/255;break;case"screen":g[y]=1-(1-s)*(1-i),g[y+1]=1-(1-o)*(1-r),g[y+2]=1-(1-a)*(1-n);break;case"add":g[y]=Math.min(255,s+i),g[y+1]=Math.min(255,o+r),g[y+2]=Math.min(255,a+n);break;case"diff":case"difference":g[y]=Math.abs(s-i),g[y+1]=Math.abs(o-r),g[y+2]=Math.abs(a-n);break;case"subtract":h=s-i,c=o-r,l=a-n,g[y]=0>h?0:h,g[y+1]=0>c?0:c,g[y+2]=0>l?0:l;break;case"darken":g[y]=Math.min(s,i),g[y+1]=Math.min(o,r),g[y+2]=Math.min(a,n);break;case"lighten":g[y]=Math.max(s,i),g[y+1]=Math.max(o,r),g[y+2]=Math.max(a,n)}f.putImageData(d,0,0)},toObject:function(){return{color:this.color,image:this.image,mode:this.mode,alpha:this.alpha}}}),e.Image.filters.Blend.fromObject=function(t){return new e.Image.filters.Blend(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=Math.pow,r=Math.floor,n=Math.sqrt,s=Math.abs,o=Math.max,a=Math.round,h=Math.sin,c=Math.ceil;e.Image.filters.Resize=e.util.createClass(e.Image.filters.BaseFilter,{type:"Resize",resizeType:"hermite",scaleX:0,scaleY:0,lanczosLobes:3,applyTo:function(t,e,i){this.rcpScaleX=1/e,this.rcpScaleY=1/i;var r,n=t.width,s=t.height,o=a(n*e),h=a(s*i);"sliceHack"===this.resizeType&&(r=this.sliceByTwo(t,n,s,o,h)),"hermite"===this.resizeType&&(r=this.hermiteFastResize(t,n,s,o,h)),"bilinear"===this.resizeType&&(r=this.bilinearFiltering(t,n,s,o,h)),"lanczos"===this.resizeType&&(r=this.lanczosResize(t,n,s,o,h)),t.width=o,t.height=h,t.getContext("2d").putImageData(r,0,0)},sliceByTwo:function(t,i,n,s,a){var h,c=t.getContext("2d"),l=.5,u=.5,f=1,d=1,g=!1,p=!1,v=i,m=n,b=e.util.createCanvasElement(),y=b.getContext("2d");for(s=r(s),a=r(a),b.width=o(s,i),b.height=o(a,n),s>i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=m,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,j,A,M,P,L,D;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;l>h;h++){for(T.y=(h+.5)*_,k.y=r(T.y),g=0,j=0,A=0,M=0,P=0,c=k.x-C;c<=k.x+C;c++)if(!(0>c||c>=e)){L=r(1e3*s(c-T.x)),O[L]||(O[L]={});for(var E=k.y-w;E<=k.y+w;E++)0>E||E>=o||(D=r(1e3*s(E-T.y)),O[L][D]||(O[L][D]=b(n(i(L*x,2)+i(D*S,2))/1e3)),u=O[L][D],u>0&&(d=4*(E*e+c),g+=u,j+=u*v[d],A+=u*v[d+1],M+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),m[d]=j/g,m[d+1]=A/g,m[d+2]=M/g,m[d+3]=P/g}return++tf;f++)for(d=0;n>d;d++)for(l=r(_*d),u=r(x*f),g=_*d-l,p=x*f-u,b=4*(u*e+l),v=0;4>v;v++)o=O[b+v],a=O[b+4+v],h=O[b+C+v],c=O[b+C+4+v],m=o*(1-g)*(1-p)+a*g*(1-p)+h*p*(1-g)+c*g*p,k[y++]=m;return T},hermiteFastResize:function(t,e,i,o,a){for(var h=this.rcpScaleX,l=this.rcpScaleY,u=c(h/2),f=c(l/2),d=t.getContext("2d"),g=d.getImageData(0,0,e,i),p=g.data,v=d.getImageData(0,0,o,a),m=v.data,b=0;a>b;b++)for(var y=0;o>y;y++){for(var _=4*(y+b*o),x=0,S=0,C=0,w=0,O=0,T=0,k=0,j=(b+.5)*l,A=r(b*l);(b+1)*l>A;A++)for(var M=s(j-(A+.5))/f,P=(y+.5)*h,L=M*M,D=r(y*h);(y+1)*h>D;D++){var E=s(P-(D+.5))/u,I=n(L+E*E);I>1&&-1>I||(x=2*I*I*I-3*I*I+1,x>0&&(E=4*(D+A*e),k+=x*p[E+3],C+=x,p[E+3]<255&&(x=x*p[E+3]/250),w+=x*p[E],O+=x*p[E+1],T+=x*p[E+2],S+=x))}m[_]=w/S,m[_+1]=O/S,m[_+2]=T/S,m[_+3]=k/C}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=function(t){return new e.Image.filters.Resize(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.StaticCanvas.supports("setLineDash"),o=e.Object.NUM_FRACTION_DIGITS;if(e.Text)return void e.warn("fabric.Text is already defined");var a=e.Object.prototype.stateProperties.concat();a.push("fontFamily","fontWeight","fontSize","text","textDecoration","textAlign","fontStyle","lineHeight","textBackgroundColor"),e.Text=e.util.createClass(e.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:a,stroke:null,shadow:null,_fontSizeFraction:.25,_fontSizeMult:1.13,initialize:function(t,e){e=e||{},this.text=t,this.__skipDimension=!0,this.setOptions(e),this.__skipDimension=!1,this._initDimensions()},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t)),this._textLines=this._splitTextIntoLines(),this._clearCache(),this.width=this._getTextWidth(t),this.height=this._getTextHeight(t))},toString:function(){return"#'},_render:function(t){this.clipTo&&e.util.clipContext(this,t),this._setOpacity(t),this._setShadow(t),this._setupCompositeOperation(t),this._renderTextBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._renderText(t),this._renderTextDecoration(t),this.clipTo&&t.restore()},_renderText:function(t){this._translateForTextAlign(t),this._renderTextFill(t),this._renderTextStroke(t),this._translateForTextAlign(t,!0)},_translateForTextAlign:function(t,e){if("left"!==this.textAlign&&"justify"!==this.textAlign){var i=e?-1:1;t.translate("center"===this.textAlign?i*this.width/2:i*this.width,0)}},_setTextStyles:function(t){t.textBaseline="alphabetic",this.skipTextAlign||(t.textAlign=this.textAlign),t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;r>i;i++){var n=this._getLineWidth(t,i);n>e&&(e=n)}return e},_getNonTransformedDimensions:function(){return{x:this.width,y:this.height}},_renderChars:function(t,e,i,r,n){var s=t.slice(0,-4);if(this[s].toLive){var o=-this.width/2+this[s].offsetX||0,a=-this.height/2+this[s].offsetY||0;e.save(),e.translate(o,a),r-=o,n-=a}e[t](i,r,n),this[s].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;v>p;p++){for(;" "===i[c]&&ci;i++){var n=this._getHeightOfLine(t,i),s=n/this.lineHeight;this._renderTextLine("fillText",t,this._textLines[i],this._getLeftOffset(),this._getTopOffset()+e+s,i),e+=n}},_renderTextStroke:function(t){if(this.stroke&&0!==this.strokeWidth||!this.isEmptyStyles()){var e=0;this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this.strokeDashArray&&(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray), -s&&t.setLineDash(this.strokeDashArray)),t.beginPath();for(var i=0,r=this._textLines.length;r>i;i++){var n=this._getHeightOfLine(t,i),o=n/this.lineHeight;this._renderTextLine("strokeText",t,this._textLines[i],this._getLeftOffset(),this._getTopOffset()+e+o,i),e+=n}t.closePath(),t.restore()}},_getHeightOfLine:function(){return this._getHeightOfSingleLine()*this.lineHeight},_getHeightOfSingleLine:function(){return this.fontSize*this._fontSizeMult},_renderTextBackground:function(t){this._renderTextBoxBackground(t),this._renderTextLinesBackground(t)},_renderTextBoxBackground:function(t){this.backgroundColor&&(t.fillStyle=this.backgroundColor,t.fillRect(this._getLeftOffset(),this._getTopOffset(),this.width,this.height),this._removeShadow(t))},_renderTextLinesBackground:function(t){if(this.textBackgroundColor){var e,i,r,n=0;t.fillStyle=this.textBackgroundColor;for(var s=0,o=this._textLines.length;o>s;s++)e=this._getHeightOfLine(t,s),i=this._getLineWidth(t,s),i>0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearCache:function(){var t=!1;if(this._forceClearCache)return this._forceClearCache=!1,!0;for(var e in this._dimensionAffectingProps)this["__"+e]!==this[e]&&(this["__"+e]=this[e],t=!0);return t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return-1===this.__lineWidths[e]?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_measureLine:function(t,e){return t.measureText(this._textLines[e]).width},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;s>n;n++){for(h=r._getLineWidth(t,n),c=r._getLineLeftOffset(h),l=r._getHeightOfLine(t,n),o=0,a=e.length;a>o;o++)t.fillRect(r._getLeftOffset()+c,u+(r._fontSizeMult-1+e[o])*r.fontSize-i,h,r.fontSize/15);u+=l}}if(this.textDecoration){var i=this.height/2,r=this,n=[];this.textDecoration.indexOf("underline")>-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(t.save(),this._setTextStyles(t),this._shouldClearCache()&&this._initDimensions(t),this.drawSelectionBackground(t),e||this.transform(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._render(t),t.restore())},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=i(this.callSuper("toObject",t),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,textBackgroundColor:this.textBackgroundColor});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this._getSVGLeftTopOffsets(this.ctx),r=this._getSVGTextAndBg(i.textTop,i.textLeft);return this._wrapSVGTextAndBg(e,r),t?t(e.join("")):e.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push(" \n",e.textBgRects.join("")," \n',e.textSpans.join("")," \n"," \n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;o>s;s++)this.textBackgroundColor&&this._setSVGTextLineBg(r,s,e,t,n),this._setSVGTextLineText(s,i,n,e,t,r),n+=this._getHeightOfLine(this.ctx,s);return{textSpans:i,textBgRects:r}},_setSVGTextLineText:function(t,i,r,s,a){var h=this.fontSize*(this._fontSizeMult-this._fontSizeFraction)-a+r-this.height/2;return"justify"===this.textAlign?void this._setSVGTextLineJustifed(t,i,h,s):void i.push(' ",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,i,r,s){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,l),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(s+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;c>t;t++)h=u[t],i.push(' ",e.util.string.escapeXml(h),"\n"),s+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,i,r,s){t.push(" \n')},_setSVGBg:function(t){this.backgroundColor&&t.push(" \n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),t in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t){return new e.Text(t.text,r(t))},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=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,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this.selectionStart!==t&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=t),this._updateTextarea()},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this.selectionEnd!==t&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=t),this._updateTextarea()},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;e>r;r++)i.push(this.getSelectionStyles(r));return i}var n=this.get2DCursorLocation(t),s=this._getStyleDeclaration(n.lineIndex,n.charIndex);return s||{}},setSelectionStyles:function(t){if(this.selectionStart===this.selectionEnd)this._extendStyles(this.selectionStart,t);else for(var e=this.selectionStart;ei;i++){if(t<=this._textLines[i].length)return{lineIndex:i,charIndex:t};t-=this._textLines[i].length+1}return{lineIndex:i-1,charIndex:this._textLines[i-1].length=a;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=this._textLines[a];if(a===s)for(var f=0,d=u.length;d>f;f++)f>=r.charIndex&&(a!==o||fs&&o>a)l+=this._getLineWidth(i,a)||5;else if(a===o)for(var g=0,p=n.charIndex;p>g;g++)l+=this._getWidthOfChar(i,u[g],a,g);i.fillRect(e.left+h,e.top+e.topOffset,l,c),e.topOffset+=c}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0,this.skipTextAlign=!0,r-="center"===this.textAlign?this.width/2:"right"===this.textAlign?this.width:0;var a,h,c=this._getHeightOfLine(e,s),l=this._getLineLeftOffset(this._getLineWidth(e,s)),u="";r+=l||0,e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var f=o,d=i.length+o;d>=f;f++)a=a||this.getCurrentCharStyle(s,f),h=this.getCurrentCharStyle(s,f+1),(this._hasStyleChanged(a,h)||f===d)&&(this._renderChar(t,e,s,f-1,u,r,n,c),u="",a=h),u+=i[f-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){this.skipTextAlign=!1,"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g=this._getStyleDeclaration(i,r);g?(c=this._getHeightOfChar(e,n,i,r),u=g.stroke,l=g.fill,d=g.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,g&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,g||{}),d=d||this.textDecoration,g&&g.textBackgroundColor&&this._removeShadow(e),l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o),(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),g&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){return this.isEmptyStyles()?this.callSuper("_renderTextDecoration",t):void 0},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);for(var e,i,r,n,s,o,a=0,h=this._getLeftOffset(),c=this._getTopOffset(),l=0,u=this._textLines.length;u>l;l++)if(e=this._getHeightOfLine(t,l),n=this._textLines[l],""!==n&&this.styles&&this._getLineStyle(l)){i=this._getLineWidth(t,l),r=this._getLineLeftOffset(i);for(var f=0,d=n.length;d>f;f++)o=this._getStyleDeclaration(l,f),o&&o.textBackgroundColor&&(s=n[f],t.fillStyle=o.textBackgroundColor,t.fillRect(h+r+this._getWidthOfCharsAt(t,l,f),c+a,this._getWidthOfChar(t,s,l,f)+1,e/this.lineHeight));a+=e}else a+=e},_getCacheProp:function(t,e){return t+e.fontSize+e.fontWeight+e.fontStyle},_getFontCache:function(t){return fabric.charWidthsCache[t]||(fabric.charWidthsCache[t]={}),fabric.charWidthsCache[t]},_applyCharStylesGetWidth:function(e,i,r,n,s){var o,a,h,c=this._getStyleDeclaration(r,n),l=s&&t(s)||t(c);if(this._applyFontStyles(l),h=this._getFontCache(l.fontFamily),a=this._getCacheProp(i,l),!c&&h[a]&&this.caching)return h[a];"string"==typeof l.shadow&&(l.shadow=new fabric.Shadow(l.shadow));var u=l.fill||this.fill;return e.fillStyle=u.toLive?u.toLive(e,this):u,l.stroke&&(e.strokeStyle=l.stroke&&l.stroke.toLive?l.stroke.toLive(e,this):l.stroke),e.lineWidth=l.strokeWidth||this.strokeWidth,e.font=this._getFontDeclaration.call(l),l.shadow&&(l.scaleX=this.scaleX,l.scaleY=this.scaleY,l.canvas=this.canvas,this._setShadow.call(l,e)),this.caching&&h[a]?h[a]:(o=e.measureText(i).width,this.caching&&(h[a]=o),o)},_applyFontStyles:function(t){t.fontFamily||(t.fontFamily=this.fontFamily),t.fontSize||(t.fontSize=this.fontSize),t.fontWeight||(t.fontWeight=this.fontWeight),t.fontStyle||(t.fontStyle=this.fontStyle)},_getStyleDeclaration:function(e,i,r){return r?this.styles[e]&&this.styles[e][i]?t(this.styles[e][i]):{}:this.styles[e]&&this.styles[e][i]?this.styles[e][i]:null},_setStyleDeclaration:function(t,e,i){this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){delete this.styles[t][e]},_getLineStyle:function(t){return this.styles[t]},_setLineStyle:function(t,e){this.styles[t]=e},_deleteLineStyle:function(t){delete this.styles[t]},_getWidthOfChar:function(t,e,i,r){if(!this._isMeasuring&&"justify"===this.textAlign&&this._reSpacesAndTabs.test(e))return this._getWidthOfSpace(t,i);var n,s,o=this._getStyleDeclaration(i,r,!0);if(this._applyFontStyles(o),n=this._getFontCache(o.fontFamily),s=this._getCacheProp(e,o),n[s]&&this.caching)return n[s];if(t){t.save();var a=this._applyCharStylesGetWidth(t,e,i,r);return t.restore(),a}},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;i>r;r++)n=this._textLines[e][r],s+=this._getWidthOfChar(t,n,e,r);return s},_measureLine:function(t,e){this._isMeasuring=!0;var i=this._getWidthOfCharsAt(t,e,this._textLines[e].length);return this._isMeasuring=!1,i},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sn;n++){var o=this._getHeightOfChar(t,e,n);o>r&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e=this._getHeightOfLine(t,0)/this.lineHeight,i=1,r=this._textLines.length;r>i;i++)e+=this._getHeightOfLine(t,i);return e},toObject:function(e){var i,r,n,s={};for(i in this.styles){n=this.styles[i],s[i]={};for(r in n)s[i][r]=t(n[r])}return fabric.util.object.extend(this.callSuper("toObject",e),{styles:s})}}),fabric.IText.fromObject=function(e){return new fabric.IText(e.text,t(e))}}(),function(){var t=fabric.util.object.clone;fabric.util.object.extend(fabric.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation()},initSelectedHandler:function(){this.on("selected",function(){var t=this;setTimeout(function(){t.selected=!0},100)})},initAddedHandler:function(){var t=this;this.on("added",function(){this.canvas&&!this.canvas._hasITextHandlers&&(this.canvas._hasITextHandlers=!0,this._initCanvasHandlers()),t.canvas&&(t.canvas._iTextInstances=t.canvas._iTextInstances||[],t.canvas._iTextInstances.push(t))})},initRemovedHandler:function(){var t=this;this.on("removed",function(){t.canvas&&(t.canvas._iTextInstances=t.canvas._iTextInstances||[],fabric.util.removeFromArray(t.canvas._iTextInstances,t))})},_initCanvasHandlers:function(){var t=this;this.canvas.on("selection:cleared",function(){fabric.IText.prototype.exitEditingOnOthers(t.canvas)}),this.canvas.on("mouse:up",function(){t.canvas._iTextInstances&&t.canvas._iTextInstances.forEach(function(t){t.__isMousedown=!1})}),this.canvas.on("object:selected",function(){fabric.IText.prototype.exitEditingOnOthers(t.canvas)})},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(t,e,i,r){var n;return n={isAborted:!1,abort:function(){this.isAborted=!0}},t.animate("_currentCursorOpacity",e,{duration:i,onComplete:function(){n.isAborted||t[r]()},onChange:function(){t.canvas&&t.selectionStart===t.selectionEnd&&t.renderCursorOrSelection()},abort:function(){return n.isAborted}}),n},_onTickComplete:function(){var t=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){t._currentTickCompleteState=t._animateCursor(t,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(t){var e=this,i=t?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout(function(){e._tick()},i)},abortCursorAnimation:function(){this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,this.canvas&&this.canvas.clearContext(this.canvas.contextTop||this.ctx)},selectAll:function(){this.setSelectionStart(0),this.setSelectionEnd(this.text.length)},getSelectedText:function(){return this.text.slice(this.selectionStart,this.selectionEnd)},findWordBoundaryLeft:function(t){var e=0,i=t-1;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i--;for(;/\S/.test(this.text.charAt(i))&&i>-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&ii;i++)"\n"===t[i]&&e++;return e},searchWordBoundary:function(t,e){for(var i=this._reSpace.test(this.text.charAt(t))?t-1:t,r=this.text.charAt(i),n=/[ \n\.,;!\?\-]/;!n.test(r)&&i>0&&ithis.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(e)):(this.setSelectionStart(e),this.setSelectionEnd(this.__selectionStartOnMouseDown)),this.renderCursorOrSelection())}},_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(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(this.ctx,r)):e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),{left:h.x+"px",top:h.y+"px",fontSize:s}},_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(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!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"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.setSelectionStart(t)},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&(this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart)),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;n>r;r++)e&&(i=fabric.copiedTextStyle[r]),this.insertChar(t[r],n-1>r,i)},insertChar:function(t,e,i){var r="\n"===this.text[this.selectionStart];this.text=this.text.slice(0,this.selectionStart)+t+this.text.slice(this.selectionEnd),this._textLines=this._splitTextIntoLines(),this.insertStyleObjects(t,r,i),this.selectionStart+=t.length,this.selectionEnd=this.selectionStart,e||(this._updateTextarea(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this}))},insertNewlineStyleObject:function(e,i,r){this.shiftLineStyles(e,1),this.styles[e+1]||(this.styles[e+1]={});var n={},s={};if(this.styles[e]&&this.styles[e][i-1]&&(n=this.styles[e][i-1]),r)s[0]=t(n),this.styles[e+1]=s;else{for(var o in this.styles[e])parseInt(o,10)>=i&&(s[parseInt(o,10)-i]=this.styles[e][o],delete this.styles[e][o]);this.styles[e+1]=s}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}this.styles[e][i]=r||t(n[i-1]),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},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(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y; - -},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.initDelayedCursor(!0)),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t);t.shiftKey?eh;h++){i=this._textLines[h],o+=this._getHeightOfLine(this.ctx,h)*this.scaleY;var l=this._getLineWidth(this.ctx,h),u=this._getLineLeftOffset(l);s=u*this.scaleX;for(var f=0,d=i.length;d>f;f++){if(n=s,s+=this._getWidthOfChar(this.ctx,i[f],h,this.flipX?d-f:f)*this.scaleX,!(o<=r.y||s<=r.x))return this._getNewSelectionStartFromOffset(r,n,s,a+h,d);a++}if(r.ys?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",this.canvas?this.canvas.lowerCanvasEl.parentNode.appendChild(this.hiddenTextarea):fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.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"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},getDownCursorOffset:function(t,e){var i,r,n=e?this.selectionEnd:this.selectionStart,s=this.get2DCursorLocation(n),o=s.lineIndex,a=this._textLines[o].slice(0,s.charIndex),h=this._textLines[o].slice(s.charIndex),c=this._textLines[o+1]||"";if(o===this._textLines.length-1||t.metaKey||34===t.keyCode)return this.text.length-n;var l=this._getLineWidth(this.ctx,o);r=this._getLineLeftOffset(l);for(var u=r,f=0,d=a.length;d>f;f++)i=a[f],u+=this._getWidthOfChar(this.ctx,i,o,f);var g=this._getIndexOnNextLine(s,c,u);return h.length+1+g},_getIndexOnNextLine:function(t,e,i){for(var r,n=t.lineIndex+1,s=this._getLineWidth(this.ctx,n),o=this._getLineLeftOffset(s),a=o,h=0,c=0,l=e.length;l>c;c++){var u=e[c],f=this._getWidthOfChar(this.ctx,u,n,c);if(a+=f,a>i){r=!0;var d=a-f,g=a,p=Math.abs(d-i),v=Math.abs(g-i);h=p>v?c+1:c;break}}return r||(h=e.length),h},moveCursorDown:function(t){this.abortCursorAnimation(),this._currentCursorOpacity=1;var e=this.getDownCursorOffset(t,"right"===this._selectionDirection);t.shiftKey?this.moveCursorDownWithShift(e):this.moveCursorDownWithoutShift(e),this.initDelayedCursor()},moveCursorDownWithoutShift:function(t){this._selectionDirection="right",this.setSelectionStart(this.selectionStart+t),this.setSelectionEnd(this.selectionStart)},swapSelectionPoints:function(){var t=this.selectionEnd;this.setSelectionEnd(this.selectionStart),this.setSelectionStart(t)},moveCursorDownWithShift:function(t){this.selectionEnd===this.selectionStart&&(this._selectionDirection="right"),"right"===this._selectionDirection?this.setSelectionEnd(this.selectionEnd+t):this.setSelectionStart(this.selectionStart+t),this.selectionEndthis.text.length&&this.setSelectionEnd(this.text.length)},getUpCursorOffset:function(t,e){var i=e?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||t.metaKey||33===t.keyCode)return i;for(var s,o=this._textLines[n].slice(0,r.charIndex),a=this._textLines[n-1]||"",h=this._getLineWidth(this.ctx,r.lineIndex),c=this._getLineLeftOffset(h),l=c,u=0,f=o.length;f>u;u++)s=o[u],l+=this._getWidthOfChar(this.ctx,s,n,u);var d=this._getIndexOnPrevLine(r,a,l);return a.length-d+o.length},_getIndexOnPrevLine:function(t,e,i){for(var r,n=t.lineIndex-1,s=this._getLineWidth(this.ctx,n),o=this._getLineLeftOffset(s),a=o,h=0,c=0,l=e.length;l>c;c++){var u=e[c],f=this._getWidthOfChar(this.ctx,u,n,c);if(a+=f,a>i){r=!0;var d=a-f,g=a,p=Math.abs(d-i),v=Math.abs(g-i);h=p>v?c:c-1;break}}return r||(h=e.length-1),h},moveCursorUp:function(t){this.abortCursorAnimation(),this._currentCursorOpacity=1;var e=this.getUpCursorOffset(t,"right"===this._selectionDirection);t.shiftKey?this.moveCursorUpWithShift(e):this.moveCursorUpWithoutShift(e),this.initDelayedCursor()},moveCursorUpWithShift:function(t){this.selectionEnd===this.selectionStart&&(this._selectionDirection="left"),"right"===this._selectionDirection?this.setSelectionEnd(this.selectionEnd-t):this.setSelectionStart(this.selectionStart-t),this.selectionEnd=this.text.length&&this.selectionEnd>=this.text.length||(this.abortCursorAnimation(),this._currentCursorOpacity=1,t.shiftKey?this.moveCursorRightWithShift(t):this.moveCursorRightWithoutShift(t),this.initDelayedCursor())},moveCursorRightWithShift:function(t){"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):(this._selectionDirection="right",this._moveRight(t,"selectionEnd"))},moveCursorRightWithoutShift:function(t){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(t,"selectionStart"),this.setSelectionEnd(this.selectionStart)):(this.setSelectionEnd(this.selectionEnd+this.getNumNewLinesInSelectedText()),this.setSelectionStart(this.selectionEnd))},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):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(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;u>l;l++){var f=this._getStyleDeclaration(t,l)||{};e.push(this._createTextCharSpan(s[l],f,a,h.lineTop+h.offset,o));var d=this._getWidthOfChar(this.ctx,s[l],t,l);f.textBackgroundColor&&n.push(this._createTextCharBg(f,a,h.lineTop,c,d,o)),o+=d}},_getSVGLineTopOffset:function(t){for(var e=0,i=0,r=0;t>r;r++)e+=this._getHeightOfLine(this.ctx,r);return i=this._getHeightOfLine(this.ctx,r),{lineTop:e,offset:(this._fontSizeMult-this._fontSizeFraction)*i/(this.lineHeight*this._fontSizeMult)}},_createTextCharBg:function(i,r,n,s,o,a){return[' \n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return[' ',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.clone;e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:0,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,initialize:function(t,i){this.ctx=e.util.createCanvasElement().getContext("2d"),this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this._dimensionAffectingProps.width=!0},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t)),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;ns;s++)n+=this._getWidthOfChar(t,e[s],i,s+r);return n},_wrapLine:function(t,e,i){for(var r=0,n=[],s="",o=e.split(" "),a="",h=0,c=" ",l=0,u=0,f=0,d=!0,g=0;g=this.width&&!d&&(n.push(s),s="",r=l,d=!0),d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return g&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f),n},_splitTextIntoLines:function(){var t=this.textAlign;this.ctx.save(),this._setTextStyles(this.ctx),this.textAlign="left";var e=this._wrapText(this.ctx,this.text);return this.textAlign=t,this.ctx.restore(),this._textLines=e,this._styleMap=this._generateStyleMap(),e},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;e>r;r++){var n=this._textLines[r],s=n.length;if(i+s>=t)return{lineIndex:r,charIndex:t-i};i+=s,("\n"===this.text[i]||" "===this.text[i])&&i++}return{lineIndex:e-1,charIndex:this._textLines[e-1].length}},_getCursorBoundariesOffsets:function(t,e){for(var i=0,r=0,n=this.get2DCursorLocation(),s=this._textLines[n.lineIndex].split(""),o=this._getLineLeftOffset(this._getLineWidth(this.ctx,n.lineIndex)),a=0;a=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())};var e=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,i){var r=e(this.styles),n=this._styleMap[t];t=n.line;for(var s in this.styles){var o=parseInt(s,10);o>t&&(this.styles[o+i]=r[o],r[o-i]||delete this.styles[o])}},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)("\n"===this.text[o+a]||" "===this.text[o+a])&&a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){fabric.log(t.errno===process.ECONNREFUSED?"ECONNREFUSED: connection refused to "+r.hostname+":"+r.port:t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(t,e){fabric.util.loadImage(t.src,function(i){var r=new fabric.Image(i);r._initConfig(t),r._initFilters(t.filters,function(i){r.filters=i||[],r._initFilters(t.resizeFilters,function(t){r.resizeFilters=t||[],e&&e(r)})})})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,a=new o(n,i);return a.contextContainer=s.getContext("2d"),a.nodeCanvas=s,a.Font=Canvas.Font,a},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(t,e){return origSetWidth.call(this,t,e),this.nodeCanvas.width=t,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(t,e){return origSetHeight.call(this,t,e),this.nodeCanvas.height=t,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}}(); \ No newline at end of file +var fabric=fabric||{version:"1.6.3"};"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(""),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=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"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;for(var i=e.split("."),r=i.length,n=t||fabric.window,s=0;sr;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){for(var e=t.prototype,i=e.stateProperties.length;i--;){var r=e.stateProperties[i],n=r.charAt(0).toUpperCase()+r.slice(1),s="set"+n,o="get"+n;e[o]||(e[o]=function(t){return new Function('return this.get("'+t+'")')}(r)),e[s]||(e[s]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(r))}},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);for(var n=!0,s=t.getImageData(e,i,2*r||1,2*r||1),o=3,a=s.data.length;o0?L-=2*f:1===c&&L<0&&(L+=2*f);for(var D=Math.ceil(Math.abs(L/f*2)),E=[],I=L/D,R=8/3*Math.sin(I/4)*Math.sin(I/4)/Math.sin(I/2),F=P+I,B=0;B=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,S=Math.abs,C=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),S(u)<1e-12){if(S(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){var e=this.constructor.superclass.prototype[t];return arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(l(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(c){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var l;l=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=l}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s,o=n.method?n.method.toUpperCase():"GET",a=n.onComplete||function(){},h=r();return h.onreadystatechange=function(){4===h.readyState&&(a(h),h.onreadystatechange=e)},"GET"===o&&(s=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),h.open(o,i,!0),"POST"!==o&&"PUT"!==o||h.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),h.send(s),h}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(r){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function d(i){r=i||+new Date;var u=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(u,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(d))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return y;if((f||d)&&(_=" translate("+x(f)+" "+x(d)+") "),r=_+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");null!=t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),y}function g(t){var e=t.objects,i=t.options;return e=e.map(function(t){return v[m(t.type)].fromObject(t)}),{objects:e,options:i}}function p(t,e,i){e[i]&&e[i].toSVG&&t.push('\t\n','\t\t\n\t\n')}var v=t.fabric||(t.fabric={}),b=v.util.object.extend,m=v.util.string.capitalize,y=v.util.object.clone,_=v.util.toFixed,x=v.util.parseUnit,S=v.util.multiplyTransformMatrices,C=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,w=/^(symbol|image|marker|pattern|view|svg)$/i,O=/^(?:pattern|defs|symbol|metadata)$/i,T=/^(symbol|g|a|svg)$/i,k={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"},j={stroke:"strokeOpacity",fill:"fillOpacity"};v.cssRules={},v.gradientDefs={},v.parseTransformAttribute=function(){function t(t,e){var i=e[0],r=3===e.length?e[1]:0,n=3===e.length?e[2]:0;t[0]=Math.cos(i),t[1]=Math.sin(i),t[2]=-Math.sin(i),t[3]=Math.cos(i),t[4]=r-(t[0]*r+t[2]*n),t[5]=n-(t[1]*r+t[3]*n)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e){t[2]=Math.tan(v.util.degreesToRadians(e[0]))}function r(t,e){t[1]=Math.tan(v.util.degreesToRadians(e[0]))}function n(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var s=[1,0,0,1,0,0],o=v.reNum,a="(?:\\s+,?\\s*|,\\s*)",h="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",c="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+")"+a+"("+o+"))?\\s*\\))",u="(?:(scale)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",f="(?:(translate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")\\s*\\))",g="(?:"+d+"|"+f+"|"+u+"|"+l+"|"+h+"|"+c+")",p="(?:"+g+"(?:"+a+"*"+g+")*)",b="^\\s*(?:"+p+"?)\\s*$",m=new RegExp(b),y=new RegExp(g,"g"); +return function(o){var a=s.concat(),h=[];if(!o||o&&!m.test(o))return a;o.replace(y,function(o){var c=new RegExp(g).exec(o).filter(function(t){return""!==t&&null!=t}),l=c[1],u=c.slice(2).map(parseFloat);switch(l){case"translate":n(a,u);break;case"rotate":u[0]=v.util.degreesToRadians(u[0]),t(a,u);break;case"scale":e(a,u);break;case"skewX":i(a,u);break;case"skewY":r(a,u);break;case"matrix":a=u}h.push(a.concat()),a=s.concat()});for(var c=h[0];h.length>1;)h.shift(),c=v.util.multiplyTransformMatrices(c,h[0]);return c}}();var A=new RegExp("^\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*$");v.parseSVGDocument=function(){function t(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}return function(e,i,r){if(e){f(e);var n=new Date,s=v.Object.__uid++,o=d(e),a=v.util.toArray(e.getElementsByTagName("*"));if(o.svgUid=s,0===a.length&&v.isLikelyNode){a=e.selectNodes('//*[name(.)!="svg"]');for(var h=[],c=0,l=a.length;c/i,""))),n&&n.documentElement||e&&e(null),v.parseSVGDocument(n.documentElement,function(i,r){M.set(t,{objects:v.util.array.invoke(i,"toObject"),options:r}),e&&e(i,r)},i)}t=t.replace(/^\n\s*/,"").trim(),M.has(t,function(i){i?M.get(t,function(t){var i=g(t);e(i.objects,i.options)}):new v.util.request(t,{method:"get",onComplete:r})})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else v.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));v.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)},createSVGFontFacesMarkup:function(t){for(var e,i,r,n,s,o,a,h="",c={},l=v.fontPaths,u=0,f=t.length;u',"","\n"].join("")),h},createSVGRefElementsMarkup:function(t){var e=[];return p(e,t,"backgroundColor"),p(e,t,"overlayColor"),e.join("")}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return new e(this.x+(t.x-this.x)/2,this.y+(t.y-this.y)/2)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){this.x=t,this.y=e},setFromPoint:function(t){this.x=t.x,this.y=t.y},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={appendPoint:function(t){this.points.push(t)},appendPoints:function(t){this.points=this.points.concat(t)}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.points.push(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n=new e,s=r.length,o=0;o0&&(n.status="Intersection"),n},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(){return{type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform}},toSVG:function(t){var e,i,r=fabric.util.object.clone(this.coords);if(this.colorStops.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var n in r)"x1"===n||"x2"===n||"r2"===n?r[n]+=this.offsetX-t.width/2:"y1"!==n&&"y2"!==n||(r[n]+=this.offsetY-t.height/2);i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']);for(var s=0;s\n');return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:"y1"!==r&&"y2"!==r||(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;s\n\n\n'},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\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,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(t,e){e||(e={}),this._initStatic(t,e)},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],backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,_initStatic:function(t,e){this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,this.renderAll.bind(this)),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,this.renderAll.bind(this)),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,this.renderAll.bind(this)),e.overlayColor&&this.setOverlayColor(e.overlayColor,this.renderAll.bind(this)),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},_initRetinaScaling:function(){this._isRetinaScaling()&&(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(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){if(e&&e.source){var r=this;fabric.util.loadImage(e.source,function(n){r[t]=new fabric.Pattern({source:n,repeat:e.repeat,offsetX:e.offsetX,offsetY:e.offsetY}),i&&i()})}else this[t]=e,i&&i();return this},_createCanvasElement:function(){var t=fabric.document.createElement("canvas");if(t.style||(t.style={}),!t)throw n;return this._initCanvasElement(t),t},_initCanvasElement:function(t){if(fabric.util.createCanvasElement(t),"undefined"==typeof t.getContext)throw n},_initOptions:function(t){for(var e in t)this[e]=t[e];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(t){this.lowerCanvasEl=fabric.util.getById(t)||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(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return Math.sqrt(this.viewportTransform[0]*this.viewportTransform[3])},setViewportTransform:function(t){var e=this.getActiveGroup();this.viewportTransform=t,this.renderAll();for(var i=0,r=this._objects.length;i"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"\n")},_setSVGObjects:function(t,e){for(var i,r,n=0,s=this.getObjects(),o=s.length;n\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this.getActiveGroup?this.getActiveGroup():null;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this.getActiveGroup?this.getActiveGroup():null;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this.getActiveGroup?this.getActiveGroup():null;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(r){}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(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop;t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur,t.shadowOffsetX=this.shadow.offsetX,t.shadowOffsetY=this.shadow.offsetY}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&ci.padding?t.x<0?t.x+=i.padding:t.x-=i.padding:t.x=0,n(t.y)>i.padding?t.y<0?t.y+=i.padding:t.y-=i.padding:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta);return a<0&&(a=360+a),n.target.angle=a%360,!0},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.setAngle(0)},_drawSelection:function(){var t=this.contextTop,e=this._groupSelector,i=e.left,r=e.top,o=n(i),a=n(r);if(t.fillStyle=this.selectionColor,t.fillRect(e.ex-(i>0?0:-i),e.ey-(r>0?0:-r),o,a),t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1){var h=e.ex+s-(i>0?0:o),c=e.ey+s-(r>0?0:a);t.beginPath(),fabric.util.drawDashedLine(t,h,c,h+o,c,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c+a-1,h+o,c+a-1,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c,h,c+a,this.selectionDashArray),fabric.util.drawDashedLine(t,h+o-1,c,h+o-1,c+a,this.selectionDashArray),t.closePath(),t.stroke()}else t.strokeRect(e.ex+s-(i>0?0:o),e.ey+s-(r>0?0:a),o,a)},_isLastRenderedObject:function(t,e){var i=this.lastRenderedWithControls;return(this.preserveObjectStacking||e[this.lastRenderedKey])&&i&&i.visible&&(this.containsPoint(null,i,t)||i._findTargetCorner(t))},findTarget:function(t,e){if(!this.skipTargetFind){var i=this.getPointer(t,!0),r=this.getActiveGroup();if(r&&!e&&this._checkTarget(i,r))return r;var n=this._objects;this.targets=[],this._isLastRenderedObject(i,t)&&(n=[this.lastRenderedWithControls]);var s=this._searchPossibleTargets(n,i);return this._fireOverOutEvents(s,t),s}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout")),this.fire("mouse:over",{target:t,e:e}),t.fire("mouseover"),this._hoveredTarget=t):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=fabric.util.transformPoint(s,fabric.util.invertTransform(this.viewportTransform))),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){return this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:t}),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){return this._discardActiveGroup(),this.fire("selection:cleared",{e:t}),this},deactivateAll:function(){for(var t=this.getObjects(),e=0,i=t.length;e1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor;if(e.selectable){var r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this._setCornerCursor(n,e,t):this.setCursor(i)}else this.setCursor(i);return!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left,top:t.top,width:t.width,height:t.height};return this._isRetinaScaling()&&(r*=fabric.devicePixelRatio),1!==r?this.__toDataURLWithMultiplier(e,i,n,r):this.__toDataURL(e,i,n)},__toDataURL:function(t,e,i){this.renderAll();var r=this.contextContainer.canvas,n=this.__getCroppedCanvas(r,i);"jpg"===t&&(t="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(n||r).toDataURL("image/"+t,e):(n||r).toDataURL("image/"+t);return n&&(n=null),s},__getCroppedCanvas:function(t,e){var i,r,n="left"in e||"top"in e||"width"in e||"height"in e;return n&&(i=fabric.util.createCanvasElement(),r=i.getContext("2d"),i.width=e.width||this.width,i.height=e.height||this.height,r.drawImage(t,-e.left||0,-e.top||0)),i},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=n*r,a=s*r,h=this.getActiveObject(),c=this.getActiveGroup(),l=this.getZoom(),u=l*r/fabric.devicePixelRatio;r>1&&this.setDimensions({width:o,height:a}),this.setZoom(u),i.left&&(i.left*=r),i.top&&(i.top*=r),i.width?i.width*=r:r<1&&(i.width=o),i.height?i.height*=r:r<1&&(i.height=a),c?this._tempRemoveBordersControlsFromGroup(c):h&&this.deactivateAll&&this.deactivateAll();var f=this.__toDataURL(t,e,i);return c?this._restoreBordersControlsOnGroup(c):h&&this.setActiveObject&&this.setActiveObject(h),this.setZoom(l),this.setDimensions({width:n,height:s}),f},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})},_tempRemoveBordersControlsFromGroup:function(t){t.origHasControls=t.hasControls,t.origBorderColor=t.borderColor,t.hasControls=!0,t.borderColor="rgba(0,0,0,0)",t.forEachObject(function(t){t.origBorderColor=t.borderColor,t.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(t){t.hideControls=t.origHideControls,t.borderColor=t.origBorderColor,t.forEachObject(function(t){t.borderColor=t.origBorderColor,delete t.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay;for(var t in r)n[t]=r[t];e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n),n()},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.Image.fromObject(e,function(e){n[t]=e,i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):void(i[t]=!0)},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e,!0)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.toFixed,n=e.util.string.capitalize,s=e.util.degreesToRadians,o=e.StaticCanvas.supports("setLineDash");e.Object||(e.Object=e.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,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",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,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!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 backgroundColor alignX alignY meetOrSlice skewX skewY".split(" "),initialize:function(t){t&&this.setOptions(t)},_initGradient:function(t){!t.fill||!t.fill.colorStops||t.fill instanceof e.Gradient||this.set("fill",new e.Gradient(t.fill)),!t.stroke||!t.stroke.colorStops||t.stroke instanceof e.Gradient||this.set("stroke",new e.Gradient(t.stroke))},_initPattern:function(t){!t.fill||!t.fill.source||t.fill instanceof e.Pattern||this.set("fill",new e.Pattern(t.fill)),!t.stroke||!t.stroke.source||t.stroke instanceof e.Pattern||this.set("stroke",new e.Pattern(t.stroke))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var i=e.util.getFunctionBody(t.clipTo);"undefined"!=typeof i&&(this.clipTo=new Function("ctx",i))}},setOptions:function(t){for(var e in t)this.set(e,t[e]);this._initGradient(t),this._initPattern(t),this._initClipping(t)},transform:function(t,e){this.group&&this.canvas.preserveObjectStacking&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),t.rotate(s(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),t.transform(1,0,Math.tan(s(this.skewX)),1,0,0),t.transform(1,Math.tan(s(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,n={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,i),top:r(this.top,i),width:r(this.width,i),height:r(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,i),scaleX:r(this.scaleX,i),scaleY:r(this.scaleY,i),angle:r(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,i),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,transformMatrix:this.transformMatrix?this.transformMatrix.concat():this.transformMatrix,skewX:r(this.skewX,i),skewY:r(this.skewY,i)};return this.includeDefaultValues||(n=this._removeDefaultValues(n)),e.util.populateWithProperties(this,n,t),n},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},get:function(t){return this[t]},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow||(i=new e.Shadow(i)),this[t]=i,"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(t,i){0===this.width&&0===this.height||!this.visible||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setStrokeStyles(t),this._setFillStyles(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this._setOpacity(t),this._setShadow(t),this.clipTo&&e.util.clipContext(this,t),this._render(t,i),this.clipTo&&t.restore(),t.restore())},_setOpacity:function(t){this.group&&this.group._setOpacity(t),t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),o?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),o=this.calcTransformMatrix();o=e.util.multiplyTransformMatrices(n,o),r=e.util.qrDecompose(o),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1/this.borderScaleFactor,t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(s(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(s(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1;this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(this.scaleX+this.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*this.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*this.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_renderFill:function(t){if(this.fill){if(t.save(),this.fill.gradientTransform){var e=this.fill.gradientTransform;t.transform.apply(t,e)}this.fill.toLive&&t.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore()}},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this.stroke.gradientTransform){var e=this.stroke.gradientTransform;t.transform.apply(t,e)}this.stroke.toLive&&t.translate(-this.width/2+this.stroke.offsetX||0,-this.height/2+this.stroke.offsetY||0),t.stroke(),t.restore()}},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t){var i=this.toDataURL();return e.util.loadImage(i,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i);"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 0},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),i.gradientTransform&&(r.gradientTransform=i.gradientTransform);for(var n in i.colorStops){var s=new e.Color(i.colorStops[n]);r.colorStops.push({offset:n,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,e.util.degreesToRadians(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h=t.x,c=t.y,l=e[s]-e[r],u=i[o]-i[n];return(l||u)&&(a=this._getTransformedDimensions(),h=t.x+l*a.x,c=t.y+u*a.y),new fabric.Point(h,c)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n=i&&r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r=t(this.angle),n=this.getWidth(),s=Math.cos(r)*n,o=Math.sin(r)*n;this.left+=s*(e[i]-e[this.originX]),this.top+=o*(e[i]-e[this.originX]),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,i){var r=t(this.oCoords),n=fabric.Intersection.intersectPolygonRectangle(r,e,i);return"Intersection"===n.status},intersectsWithObject:function(e){var i=fabric.Intersection.intersectPolygonPolygon(t(this.oCoords),t(e.oCoords));return"Intersection"===i.status},isContainedWithinObject:function(t){var e=t.getBoundingRect(),i=new fabric.Point(e.left,e.top),r=new fabric.Point(e.left+e.width,e.top+e.height);return this.isContainedWithinRect(i,r)},isContainedWithinRect:function(t,e){var i=this.getBoundingRect();return i.left>=t.x&&i.left+i.width<=e.x&&i.top>=t.y&&i.top+i.height<=e.y},containsPoint:function(t){this.oCoords||this.setCoords();var e=this._getImageLines(this.oCoords),i=this._findCrossPoints(t,e);return 0!==i&&i%2===1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h,c=0;for(var l in e)if(h=e[l],!(h.o.y=t.y&&h.d.y>=t.y||(h.o.x===h.d.x&&h.o.x>=t.x?(o=h.o.x,a=t.y):(i=0,r=(h.d.y-h.o.y)/(h.d.x-h.o.x),n=t.y-i*t.x,s=h.o.y-r*h.o.x,o=-(n-s)/(i-r),a=n+i*o),o>=t.x&&(c+=1),2!==c)))break;return c},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){return this.oCoords||this.setCoords(),fabric.util.makeBoundingBoxFromPoints([this.oCoords.tl,this.oCoords.tr,this.oCoords.br,this.oCoords.bl])},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(s/n):0,c=n/Math.cos(h)/2,l=Math.cos(h+t)*c,u=Math.sin(h+t)*c,f=fabric.util.transformPoint(this.getCenterPoint(),i),d=new fabric.Point(f.x-l,f.y-u),g=new fabric.Point(d.x+n*a,d.y+n*o),p=new fabric.Point(d.x-s*o,d.y+s*a),v=new fabric.Point(f.x+l,f.y+u),b=new fabric.Point((d.x+p.x)/2,(d.y+p.y)/2),m=new fabric.Point((g.x+d.x)/2,(g.y+d.y)/2),y=new fabric.Point((v.x+g.x)/2,(v.y+g.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point(m.x+o*this.rotatingPointOffset,m.y-a*this.rotatingPointOffset);return this.oCoords={tl:d,tr:g,br:v,bl:p,ml:b,mt:m,mr:y,mb:_,mtr:x},this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return[1,0,0,1,0,0]},calcTransformMatrix:function(){var t=this.getCenterPoint(),e=[1,0,0,1,t.x,t.y],r=this._calcRotateMatrix(),n=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),s=this.group?this.group.calcTransformMatrix():[1,0,0,1,0,0];return s=i(s,e),s=i(s,r),s=i(s,n)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas.moveTo(this,t),this}}),function(){ +function t(t,e){if(e){if(e.toLive)return t+": url(#SVGID_"+e.id+"); ";var i=new fabric.Color(e),r=t+": "+i.toRgb()+"; ",n=i.getAlpha();return 1!==n&&(r+=t+"-opacity: "+n.toString()+"; "),r}return t+": none; "}fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(e){var i=this.fillRule,r=this.strokeWidth?this.strokeWidth:"0",n=this.strokeDashArray?this.strokeDashArray.join(" "):"none",s=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",a=this.strokeMiterLimit?this.strokeMiterLimit:"4",h="undefined"!=typeof this.opacity?this.opacity:"1",c=this.visible?"":" visibility: hidden;",l=e?"":this.getSvgFilter(),u=t("fill",this.fill),f=t("stroke",this.stroke);return[f,"stroke-width: ",r,"; ","stroke-dasharray: ",n,"; ","stroke-linecap: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",a,"; ",u,"fill-rule: ",i,"; ","opacity: ",h,";",l,c].join("")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgId:function(){return this.id?'id="'+this.id+'" ':""},getSvgTransform:function(){if(this.group&&"path-group"===this.group.type)return"";var t=fabric.util.toFixed,e=this.getAngle(),i=this.getSkewX()%360,r=this.getSkewY()%360,n=this.getCenterPoint(),s=fabric.Object.NUM_FRACTION_DIGITS,o="path-group"===this.type?"":"translate("+t(n.x,s)+" "+t(n.y,s)+")",a=0!==e?" rotate("+t(e,s)+")":"",h=1===this.scaleX&&1===this.scaleY?"":" scale("+t(this.scaleX,s)+" "+t(this.scaleY,s)+")",c=0!==i?" skewX("+t(i,s)+")":"",l=0!==r?" skewY("+t(r,s)+")":"",u="path-group"===this.type?this.width:0,f=this.flipX?" matrix(-1 0 0 1 "+u+" 0) ":"",d="path-group"===this.type?this.height:0,g=this.flipY?" matrix(1 0 0 -1 0 "+d+")":"";return[o,a,h,f,g,c,l].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.join(" ")+") ":""},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(t){return this.get(t)!==this.originalState[t]},this)},saveState:function(t){return this.stateProperties.forEach(function(t){this.originalState[t]=this.get(t)},this),t&&t.stateProperties&&t.stateProperties.forEach(function(t){this.originalState[t]=this.get(t)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var t=fabric.util.degreesToRadians,e=function(){return"undefined"!=typeof G_vmlCanvasManager};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t){if(!this.hasControls||!this.active)return!1;var e,i,r=t.x,n=t.y;this.__corner=0;for(var s in this.oCoords)if(this.isControlVisible(s)&&("mtr"!==s||this.hasRotatingPoint)&&(!this.get("lockUniScaling")||"mt"!==s&&"mr"!==s&&"mb"!==s&&"ml"!==s)&&(i=this._getImageLines(this.oCoords[s].corner),e=this._findCrossPoints({x:r,y:n},i),0!==e&&e%2===1))return this.__corner=s,s;return!1},_setCornerCoords:function(){var e,i,r=this.oCoords,n=t(45-this.angle),s=.707106*this.cornerSize,o=s*Math.cos(n),a=s*Math.sin(n);for(var h in r)e=r[h].x,i=r[h].y,r[h].corner={tl:{x:e-a,y:i-o},tr:{x:e+o,y:i-a},bl:{x:e-o,y:i+a},br:{x:e+a,y:i+o}}},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width,i=this.height,r=!0,n=!0;return"line"===this.type&&"butt"===this.strokeLineCap&&(n=e,r=i),n&&(i+=i<0?-t:t),r&&(e+=e<0?-t:t),{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return new i.Line(s,r(n,e))},void(i.Line.fromObject=function(t){var e=[t.x1,t.y1,t.x2,t.y2];return new i.Line(e,t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;return i.Circle?void i.warn("fabric.Circle is already defined."):(i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("radius",t.radius||0),this.startAngle=t.startAngle||this.startAngle,this.endAngle=t.endAngle||this.endAngle},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return n(this.callSuper("toObject",t),{radius:this.get("radius"),startAngle:this.startAngle,endAngle:this.endAngle})},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)},complexity:function(){return 1}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},void(i.Circle.fromObject=function(t){return new i.Circle(t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("width",t.width||100).set("height",t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),void(e.Triangle.fromObject=function(t){return new e.Triangle(t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;return e.Ellipse?void e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("rx",t.rx||0),this.set("ry",t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return r(this.callSuper("toObject",t),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)},complexity:function(){return 1}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},void(e.Ellipse.fromObject=function(t){return new e.Ellipse(t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(t){t=t||{},this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){var e=i(this.callSuper("toObject",t),{rx:this.get("rx")||0,ry:this.get("ry")||0});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.width>0&&s.height>0,s},e.Rect.fromObject=function(t){return new e.Rect(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Polyline?void e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,initialize:function(t,i){return e.Polygon.prototype.initialize.call(this,t,i)},_calcDimensions:function(){return e.Polygon.prototype._calcDimensions.call(this)},toObject:function(t){return e.Polygon.prototype.toObject.call(this,t)},toSVG:function(t){return e.Polygon.prototype.toSVG.call(this,t)},_render:function(t,i){e.Polygon.prototype.commonRender.call(this,t,i)&&(this._renderFill(t),this._renderStroke(t))},_renderDashedStroke:function(t){var i,r;t.beginPath();for(var n=0,s=this.points.length;n\n'),t?t(r.join("")):r.join("")},_render:function(t,e){this.commonRender(t,e)&&(this._renderFill(t),(this.stroke||this.strokeDashArray)&&(t.closePath(),this._renderStroke(t)))},commonRender:function(t,e){var i,r=this.points.length;if(!r||isNaN(this.points[r-1].y))return!1;e||t.translate(-this.pathOffset.x,-this.pathOffset.y),t.beginPath(),t.moveTo(this.points[0].x,this.points[0].y);for(var n=0;n"},toObject:function(t){var e=n(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(e.sourcePath=this.sourcePath),this.transformMatrix&&(e.transformMatrix=this.transformMatrix),e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"; +},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){"string"==typeof t.paths?e.loadSVGFromURL(t.paths,function(r){var n=t.paths;delete t.paths;var s=e.util.groupSVGElements(r,t,n);i(s)}):e.util.enlivenObjects(t.paths,function(r){delete t.paths,i(new e.PathGroup(r,t))})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.array.invoke;if(!e.Group){var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this._objects.length;e--;)this._updateObjectCoords(this._objects[e],t)},_updateObjectCoords:function(t,e){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!e){var i=t.getLeft(),r=t.getTop(),n=this.getCenterPoint();t.set({originalLeft:i,originalTop:r,left:i-n.x,top:r-n.y}),t.setCoords()}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(t){t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){return i(this.callSuper("toObject",t),{objects:s(this._objects,"toObject",t)})},render:function(t){if(this.visible){t.save(),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.transform(t),this._setShadow(t),this.clipTo&&e.util.clipContext(this,t);for(var i=0,r=this._objects.length;i\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in o){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var s=this.fill;this.fill=null,e.push("\n'),this.fill=s}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},clone:function(t,e){this.constructor.fromObject(this.toObject(e),t)},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n=i,s=fabric.util.createCanvasElement(),o=fabric.util.createImage(),a=this;return s.width=n.width,s.height=n.height,s.getContext("2d").drawImage(n,0,0,n.width,n.height),0===e.length?(this._element=i,t&&t(),s):(e.forEach(function(t){t&&t.applyTo(s,t.scaleX||a.scaleX,t.scaleY||a.scaleY),!r&&t&&"Resize"===t.type&&(a.width*=t.scaleX,a.height*=t.scaleY)}),o.width=s.width,o.height=s.height,fabric.isLikelyNode?(o.src=s.toBuffer(void 0,fabric.Image.pngCompression),a._element=o,!r&&(a._filteredEl=o),t&&t()):(o.onload=function(){a._element=o,!r&&(a._filteredEl=o),t&&t(),o.onload=s=n=null},o.src=s.toDataURL("image/png")),s)}},_render:function(t,e){var i,r,n,s=this._findMargins();i=e?this.left:-this.width/2,r=e?this.top:-this.height/2,"slice"===this.meetOrSlice&&(t.beginPath(),t.rect(i,r,this.width,this.height),t.clip()),this.isMoving===!1&&this.resizeFilters.length&&this._needsResize()?(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,n=this.applyFilters(null,this.resizeFilters,this._filteredEl||this._originalElement,!0)):n=this._element,n&&t.drawImage(n,i+s.marginX,r+s.marginY,s.width,s.height),this._stroke(t),this._renderStroke(t)},_needsResize:function(){return this.scaleX!==this._lastScaleX||this.scaleY!==this._lastScaleY},_findMargins:function(){var t,e,i=this.width,r=this.height,n=0,s=0;return"none"===this.alignX&&"none"===this.alignY||(t=[this.width/this._element.width,this.height/this._element.height],e="meet"===this.meetOrSlice?Math.min.apply(null,t):Math.max.apply(null,t),i=this._element.width*e,r=this._element.height*e,"Mid"===this.alignX&&(n=(this.width-i)/2),"Max"===this.alignX&&(n=this.width-i),"Mid"===this.alignY&&(s=(this.height-r)/2),"Max"===this.alignY&&(s=this.height-r)),{width:i,height:r,marginX:n,marginY:s}},_resetWidthHeight:function(){var t=this.getElement();this.set("width",t.width),this.set("height",t.height)},_initElement:function(t,e){this.setElement(fabric.util.getById(t),null,e),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(t,e){t&&t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){this.width="width"in t?t.width:this.getElement()?this.getElement().width||0:0,this.height="height"in t?t.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(t,e){fabric.util.loadImage(t.src,function(i){fabric.Image.prototype._initFilters.call(t,t.filters,function(r){t.filters=r||[],fabric.Image.prototype._initFilters.call(t,t.resizeFilters,function(r){t.resizeFilters=r||[];var n=new fabric.Image(i,t);e&&e(n)})})},null,t.crossOrigin)},fabric.Image.fromURL=function(t,e,i){fabric.util.loadImage(t,function(t){e&&e(new fabric.Image(t,i))},null,i&&i.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href".split(" ")),fabric.Image.fromElement=function(t,i,r){var n,s=fabric.parseAttributes(t,fabric.Image.ATTRIBUTE_NAMES);s.preserveAspectRatio&&(n=fabric.util.parsePreserveAspectRatioAttribute(s.preserveAspectRatio),e(s,n)),fabric.Image.fromURL(s["xlink:href"],i,e(r?fabric.util.object.clone(r):{},s))},fabric.Image.async=!0,void(fabric.Image.pngCompression=1))}("undefined"!=typeof exports?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.getAngle()%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.Brightness=e.util.createClass(e.Image.filters.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[C*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=function(t){return new e.Image.filters.Convolute(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.GradientTransparency=e.util.createClass(e.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,j,A,M,P,L,D;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;h=e)){L=r(1e3*s(c-T.x)),O[L]||(O[L]={});for(var E=k.y-w;E<=k.y+w;E++)E<0||E>=o||(D=r(1e3*s(E-T.y)),O[L][D]||(O[L][D]=m(n(i(L*x,2)+i(D*S,2))/1e3)),u=O[L][D],u>0&&(d=4*(E*e+c),g+=u,j+=u*v[d],A+=u*v[d+1],M+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=j/g,b[d+1]=A/g,b[d+2]=M/g,b[d+3]=P/g}return++t1&&I<-1||(x=2*I*I*I-3*I*I+1,x>0&&(E=4*(D+A*e),k+=x*p[E+3],C+=x,p[E+3]<255&&(x=x*p[E+3]/250),w+=x*p[E],O+=x*p[E+1],T+=x*p[E+2],S+=x))}b[_]=w/S,b[_+1]=O/S,b[_+2]=T/S,b[_+3]=k/C}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=function(t){return new e.Image.filters.Resize(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.StaticCanvas.supports("setLineDash"),o=e.Object.NUM_FRACTION_DIGITS;if(e.Text)return void e.warn("fabric.Text is already defined");var a=e.Object.prototype.stateProperties.concat();a.push("fontFamily","fontWeight","fontSize","text","textDecoration","textAlign","fontStyle","lineHeight","textBackgroundColor"),e.Text=e.util.createClass(e.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:a,stroke:null,shadow:null,_fontSizeFraction:.25,_fontSizeMult:1.13,initialize:function(t,e){e=e||{},this.text=t,this.__skipDimension=!0,this.setOptions(e),this.__skipDimension=!1,this._initDimensions()},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t)),this._textLines=this._splitTextIntoLines(),this._clearCache(),this.width=this._getTextWidth(t),this.height=this._getTextHeight(t))},toString:function(){return"#'},_render:function(t){this.clipTo&&e.util.clipContext(this,t),this._setOpacity(t),this._setShadow(t),this._setupCompositeOperation(t),this._renderTextBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._renderText(t),this._renderTextDecoration(t),this.clipTo&&t.restore()},_renderText:function(t){this._translateForTextAlign(t),this._renderTextFill(t),this._renderTextStroke(t),this._translateForTextAlign(t,!0)},_translateForTextAlign:function(t,e){if("left"!==this.textAlign&&"justify"!==this.textAlign){var i=e?-1:1;t.translate("center"===this.textAlign?i*this.width/2:i*this.width,0)}},_setTextStyles:function(t){t.textBaseline="alphabetic",this.skipTextAlign||(t.textAlign=this.textAlign),t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_getNonTransformedDimensions:function(){return{x:this.width,y:this.height}},_renderChars:function(t,e,i,r,n){var s=t.slice(0,-4);if(this[s].toLive){var o=-this.width/2+this[s].offsetX||0,a=-this.height/2+this[s].offsetY||0;e.save(),e.translate(o,a),r-=o,n-=a}e[t](i,r,n),this[s].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearCache:function(){var t=!1;if(this._forceClearCache)return this._forceClearCache=!1,!0;for(var e in this._dimensionAffectingProps)this["__"+e]!==this[e]&&(this["__"+e]=this[e],t=!0);return t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_measureLine:function(t,e){return t.measureText(this._textLines[e]).width},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(t.save(),this._setTextStyles(t),this._shouldClearCache()&&this._initDimensions(t),this.drawSelectionBackground(t),e||this.transform(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._render(t),t.restore())},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=i(this.callSuper("toObject",t),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,textBackgroundColor:this.textBackgroundColor});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this._getSVGLeftTopOffsets(this.ctx),r=this._getSVGTextAndBg(i.textTop,i.textLeft);return this._wrapSVGTextAndBg(e,r),t?t(e.join("")):e.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,i,r,s){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,l),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(s+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),s+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,i,r,s){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),t in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t){return new e.Text(t.text,r(t))},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=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,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this.selectionStart!==t&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=t),this._updateTextarea()},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this.selectionEnd!==t&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=t),this._updateTextarea()},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r=r.charIndex&&(a!==o||fs&&a0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g=this._getStyleDeclaration(i,r);g?(c=this._getHeightOfChar(e,n,i,r),u=g.stroke,l=g.fill,d=g.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,g&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,g||{}),d=d||this.textDecoration,g&&g.textBackgroundColor&&this._removeShadow(e),l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o),(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),g&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);for(var e,i,r,n,s,o,a=0,h=this._getLeftOffset(),c=this._getTopOffset(),l=0,u=this._textLines.length;lr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e=this._getHeightOfLine(t,0)/this.lineHeight,i=1,r=this._textLines.length;i-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(e)):(this.setSelectionStart(e),this.setSelectionEnd(this.__selectionStartOnMouseDown)),this.renderCursorOrSelection())}},_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(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(this.ctx,r)):e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),{left:h.x+"px",top:h.y+"px",fontSize:s}},_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(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!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"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.setSelectionStart(t)},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&(this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart)),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(s[parseInt(o,10)-i]=this.styles[e][o],delete this.styles[e][o]);this.styles[e+1]=s}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}this.styles[e][i]=r||t(n[i-1]),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},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(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y; +},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.initDelayedCursor(!0)),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t);t.shiftKey?es?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",this.canvas?this.canvas.lowerCanvasEl.parentNode.appendChild(this.hiddenTextarea):fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.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"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},getDownCursorOffset:function(t,e){var i,r,n=e?this.selectionEnd:this.selectionStart,s=this.get2DCursorLocation(n),o=s.lineIndex,a=this._textLines[o].slice(0,s.charIndex),h=this._textLines[o].slice(s.charIndex),c=this._textLines[o+1]||"";if(o===this._textLines.length-1||t.metaKey||34===t.keyCode)return this.text.length-n;var l=this._getLineWidth(this.ctx,o);r=this._getLineLeftOffset(l);for(var u=r,f=0,d=a.length;fi){r=!0;var d=a-f,g=a,p=Math.abs(d-i),v=Math.abs(g-i);h=vthis.text.length&&this.setSelectionEnd(this.text.length)},getUpCursorOffset:function(t,e){var i=e?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||t.metaKey||33===t.keyCode)return i;for(var s,o=this._textLines[n].slice(0,r.charIndex),a=this._textLines[n-1]||"",h=this._getLineWidth(this.ctx,r.lineIndex),c=this._getLineLeftOffset(h),l=c,u=0,f=o.length;ui){r=!0;var d=a-f,g=a,p=Math.abs(d-i),v=Math.abs(g-i);h=v=this.text.length&&this.selectionEnd>=this.text.length||(this.abortCursorAnimation(),this._currentCursorOpacity=1,t.shiftKey?this.moveCursorRightWithShift(t):this.moveCursorRightWithoutShift(t),this.initDelayedCursor())},moveCursorRightWithShift:function(t){"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):(this._selectionDirection="right",this._moveRight(t,"selectionEnd"))},moveCursorRightWithoutShift:function(t){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(t,"selectionStart"),this.setSelectionEnd(this.selectionStart)):(this.setSelectionEnd(this.selectionEnd+this.getNumNewLinesInSelectedText()),this.setSelectionStart(this.selectionEnd))},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):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(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.clone;e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:0,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,initialize:function(t,i){this.ctx=e.util.createCanvasElement().getContext("2d"),this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this._dimensionAffectingProps.width=!0},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t)),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n=this.width&&!d&&(n.push(s),s="",r=l,d=!0),d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return g&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f),n},_splitTextIntoLines:function(){var t=this.textAlign;this.ctx.save(),this._setTextStyles(this.ctx),this.textAlign="left";var e=this._wrapText(this.ctx,this.text);return this.textAlign=t,this.ctx.restore(),this._textLines=e,this._styleMap=this._generateStyleMap(),e},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())};var e=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,i){var r=e(this.styles),n=this._styleMap[t];t=n.line;for(var s in this.styles){var o=parseInt(s,10);o>t&&(this.styles[o+i]=r[o],r[o-i]||delete this.styles[o])}},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(t,e){fabric.util.loadImage(t.src,function(i){var r=new fabric.Image(i);r._initConfig(t),r._initFilters(t.filters,function(i){r.filters=i||[],r._initFilters(t.resizeFilters,function(t){r.resizeFilters=t||[],e&&e(r)})})})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,a=new o(n,i);return a.contextContainer=s.getContext("2d"),a.nodeCanvas=s,a.Font=Canvas.Font,a},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(t,e){return origSetWidth.call(this,t,e),this.nodeCanvas.width=t,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(t,e){return origSetHeight.call(this,t,e),this.nodeCanvas.height=t,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 0a357fae42a58ad892f7f5cbc56389f7c024414b..bc67253129ea68a1da7cc621010e7ca1e13ad8b0 100644 GIT binary patch literal 66307 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 mScF zIA<<+RzSc_yK)12IkBso%mj@YM`wc%dG-;>Db3h-C6?OW#*<;THXW8>id&R8&WPi( zC>rbWBMU>0ID8!h4*j&twD1M&zeV;#TII+ck2`|GQRthm5uG~den$hkH@gk9^f}QM z2xLp4&zfkP;7aY>-WO`k^_J~@F=?2)g?@JYB<|<%2aR*-YH(46)d{1W4Nn6vxe&H9 zeEh71hc6w$WkT5!_wk9x2+e2e`jH%VeU`_0tk3ee*-V;#d*$9}<5%yGcmr<5TM=;(NddJ4TQQps$7sc_#0gqVP3$4{OCnDrwMGSMQGzt4 zH77SHDW-yf45eb==eWXZ-GWJDm6-&a$;|Zx#BVkQCPbH_cU|^38EspaWwLkyWCIuc z$pJ$Gcxh)yrNp-^B7Rurn5>XgrDi25#arl?YI#1xS|3YsxARlWJo{X;&K(W&;rEv;AC?kEM%Gq#|o&?a}Bn70_c~_9M?JS*5yI8#5 zDNC#XHoYG90oO?B%QA4$nb-_k7B)brQ|D^h?kQz3^trm(aC-n=htYONZF0sIlQGt+ zD>>*ZIy7*Ex;Tl)?Y*H24|14jmB(eQ7IvI(Y%1w~1h9ye!rl}Kr#S0m*NAZspoYZZ z;gIw~?*V?)R*A;Vz-(LPpq3Op_YUcT&=E=A!xi7CDd8C_)bVeAl^8 zQMq-fOw|~zkE` z_2dd>xNYE9IEJfelABGMiA}o1#|muFjBU^rTH>*UUNYZp42rtW=Edb2Sy|6@))2bi zVFsm>64ykzAK(VUq>0r}+6@fMTXa9;g0Wx)l6H2>21L6}Zb7*Z;;P9t7YZ+X$qJ{U zAB9CfnY(De&6Lz^<`OouGN$a6u$>dJpVK6jR9Jw(?$)s36gq6l?~S5ZPGOnWlq{ml zFGw2zP6j}45oy__Su|QNXaODxYg+lam@*)QC4BXg{Oqz{&L$yKTfOK(bK=mlk78p} zm=NPo)9{)t=&}~57ve$7mSb*YmN52X&29P^J$pJ-G%k!rI3K{g@0Qv8&uIUCt$DW` z8s>e`IR4r~qC&-Jay9J+b}g+=7NdPng==!9i1`(K(yM0yAC5x)cy23HLA~zUqVOXj zujlZC7Q6g8g+;7oim#AYA-BG|7l>h@cVYd#lAp;T$5+UrM1`G2_|XJyUTsrov#gdf zIJ-CoHLR{cQSq7vrl+HlyU=F`EwgFQD}^HWWIj$koe%eTFvk-aEG4e+B_bJ&8*bU3 zTPEz}P$71YVw=$l&IyK^saLIDJdtP~!y#xOSY2&L=iC_j-b=QqnF$A-)f7Jan*ygVQia zsu-%x(6f_;g$!EGD1#BGd=Kr!$K?jj-WjuTamErGOB4}~O}wx)t&>WHGI;l7+InRv zj8>SjPadz%mNT-Z-*_gJEj|!Jm-^jZSLuJYDPw9#4TevnsEre>`evAuNaWo%SNo6~ z;r_S-t!95q(j7Bk)v#H^=HuudC^$|ibE8;>)A`dsNd2l+U!ANcE8(rQT|Ivl1&sGr zvzRbmq3=HgpF*aV++!61u*0^hD~n^{S*cEJ!n|+^^K#2ow?Z?95j4!D61`E#eiqJOl8HD1^d;CRD3C%euohI_ zGw8a^V1x|40qOPJWm&xKxF?rSpuh9Q{$(k&}W z#MmmqP1dbZ)YY9w#_*Qf!>;2eMFXI_Vs}oYSOXTc5y?gIqxs?C640S0*hsxX zVF%2ac#4QC?E<2!K1oeU!buVrDk~D2OsJ6TFqjqZknk9-WhKumWh9`#6KWWaBH~e z%ylFtdm!NsUoWwSQ~WdTq60^6vYSU-0I6$qu{1oJ;pSKS*z7CEPZg(My8NfP+tgNT z7;V)xKkQ3T6;otSm;W?He^b52jQ_1v(0UP6JoLFumRyW}^fFeRLZ zX~XpGPfT=3*N&J=OB`Vkb7`HHI)s?X-*<6Vw;*NAp?>jXisz$rtGfLOsX(d~L)bej zbsW9~7DL=$)fSjwA=Nn09>(N-TD8ifd=ewvEya@@PE5GwoOFjm?iS9fS;&k-k|$`G zWnfTm^?=~*I~C6<54JAoqs;TqlW8fmt&?LlJR)xl&VFq5Uct5eeE$_rt~F#nEKZeL z#x7{Cl%WP*!3~2dSOUdp>*rc$Ie6Sit62)_P4Jd(aSV5wbvvP|vuNLejysE_jLRLq z%ml_z)U*_|P3jZv*P&Kyc(^0+6qPV2j3{;du0H0EHGkWb=nbw{McR*GvCTtLz}JX$ zwi0$WVltVJsqO1!F|-=BS|heZ##x5rcF(JdT;9Ep^Ag2CY>mFw0i;GQYqV@BUU zxaO|^$*?y_&wAQpEA8bVGHaEYGHjKFyaOotpA2SuyAh$}wJnQOo4qZ#sw_I=!au4w zDZ~~LCIMbbnr;FAX&CQNNDKNS0OILZYDCu}+8|dT4=TQAmf|}v-WANNm~O_+ruzWB z^}yh*0cjWC@h#VL_7s~j^VwpNE&iSsixpXr>vRzeJCq~jb6Q3yOVqr`^KyN$%D!9W z^FQC@@7F8s4;3>-P2IFND)^H6R;W4a0SC)W&@wZBpOx#T%c~Dmy#zI%N5f&Xk)85s z`hJ$EP2G8lWv!ms`#?G2lX70F$-*O3s+N!zOV{kS z%}LxjFAJ>v9oZQ+8CiH+wF6WKQ5@<%DU#c~eul;+*#hlJ$j-#ac&Z2@2)Ka;vJbTE z2W^<1$}lF6QO!XNkhffzX7BDAxNH#9K~a*HjDzQ;323!iN)Eywc&nPRH#-Fd zGZeh0kYcg{yX}aai$#%$b#!7fP&81CznHLLuMM)LL z8&Zk$H!S){Zu-poqkQWLmWt^d8RXB9-zXd`PxdT40UEs*=lwnr%#-7HZ;smwA0FnX zFce)yL7<=c)A_}FX0ZAElV{WG?Kzthcg0NuMgSt_M*b$+mdbW%jm!1u_+9ZAAjy04 zA?b9tM`wFZ6n6Vh>-RrpAL%vss%YE#Y5VWa>?Y;@MVr@P%4&yFXL3ei?YD>Mv4F7G8- zxJgZdm{xGQk4Vk53-v})dwWFwKLtj>`L-E^_z(d=V641+Oa4gO2Kk6DYe9UuMxYKW z#TrcL7@*Z(9?t$n2AX-uU`UHjSwK4yb?qkIvcyt0(vEDMT`WP0)|66@R@JV4o*`NB z_Z(h=g|@}i0d}lppwQ=Q6R^j%-&FFX^g|}QAnzO88D%h?1jZR`eX3@*oysP1LV6@4 z(^F|8J|-Z#wyIO>G8Kd++?rkc(ZFn2-PVE@tOz4|h5QIFH=9!siGpze{Enb2@D$qb z4P@T>K#N&BgD-klzjxh{2JF0@*Bd@arLUX!PUXQxE=dRUVc_Nl)j_N`TiEO`b1lT3vYI6t?Ej@Jcs@tnHAfVevfO}j1UbXUceV=Rp6?sxQeb``MO zv))50=np?g-s&zA+>Ha{ec7Cp71la%`UT2eG#tR1-2WwK0`qUFC%ehXtj7EEk!Yyo1<2 zpi5B~^EhQ(Tm3dNxUCx5zPohtzILAxf5XCKBVEl^4?oN4b>&6m_K)0L;Z&z#u5p8< z&=U_?N^B`(WbQ`LhUTAv5e5B0$jeBFKN`h1{T0P@cKW~lt#Va z$f70-Skw^UJO`u81VAHA1WJIAXC%;r8)t4E*Y))^oIdI9FJ2{cDOjs9G_JG-@7Fp2 zxW#(c#><3yyGu0r*inLa9k8cf4nCb=00sCz8PdNfU>a7VAI<$t*TEG$u%1dq;J{r3SDrQ)1?4r5Y!ct=&aajfa@C*DA zGn_njk#ua~;BhOaAl>%=WHV6zD0d|sHtJA9S!(iiT1 z61XdPd3!|ySIO2If86hmb9naU|qPi88kGEdx7yJ5O^Md{4j{ zi06bha>4BP z$amJH*&VL<*=#)J`}OXwP1#DVFB%vD5&vr$;B5$MeiErwBXbc7)`az*Nl!7|292Y# ze!uNyEfvPYwF9qv#gb9y<*ezCW*G8%3c%`*CX(i+_OJ;d;wF_N<4=hbCoK&0FbxX^)|&fw?D6CxurUL70~lA}KtM z3Ui;zk?Q>%iM6;7)5|FXZ7@K1dbeUQ%ly)4m7=dICAm||vc1tv&6*{lD!%madAkw% zI3}iHs~#?35#f~6PlqQ*RG$q=DaRi{Qj>YHM!cnicu|py9IwKL=$7$l7@a0L8eE*& zsr`KBc3#fn0EVUv#i``u*ogJ_J$Uhhv<>XcX`1c}pHwjI35J2p@9rw}r<$;nPt(=@ z%IzslQZd!yETsXWH5L5nkIdBrS+i*40)3XC1s&8A;NLYbex|l5qlVv;g=LptbKCZi z+p;3;tgIl%VG18j*@^e}JK0HQg4s9-E)A6+PPcsstR>TPOTG)QCmP0#qzdKbrhU1}iTC2W?w=jwD7DY94 zF$mn0Zs9X~6?>(PJgV7QF;h`kZ8XZk4KxoKS=}+YKzTr zq)P#tmDyNx+E}Yow1z{xf!u=hY=v`NqNSW}b%mSAxfcTZewwQ4b|{R(CL#sI2dNbX zmHa}%5YxJ$Qm7n|^iUu2Ib5qT%l=_^5y}2el!sT%rAKahN2O_=vCW@n8G(qU=g?oE z_X*?38?P=F8(z|SzgGFRgaqvGDfc1TP}Ur?jBCMjc$Zzj_<*q|uo;EEY6j76rkxy! zh87pA9j&wjG_(+LaCHIz2`z$^_)5Q|?T0llqXfmA;K~;0DVNQ;9obj|>W4;t^5t-- zG+g*l2cJl_>QgZ9hVpK#JUts699!7WI=Eo*A3oQ7kOio=h9hjd1}vMQ1s(BbD7J%@ zLLrH~Aot!5`FRo)g=;Gm+hqxRc%Wr%o=+w#`eAw6V-Rjr3YzkgH?3!h4O@r1rETLhXrH#3q>{lSI4g$yLefSp8Nb~Vjh&zC7JpB&!Kc_w z{R2{ORH~(ZI^35JCi}-AXV+QvVuj8^;hNdS{!;ity*0GV<3`|0oP_78b*EUdouTKc z6m}mCBf2bOn7E*Bkbl*xz!8A6YieVFO+F+(DN>lhn=)=D|BG!3eGuBWgr#z9?l@at zIJWkP5)9gtBe1eywhWEy3g`2(DzZwI;tCvmRf6!e*A^oRZ-h&4YjN8^y!|x6o)+ZV zzh^g7*NZb14+y^7_&PoZNXfJ1&Fu@p?=1tz(;sh}Q&<%Y32O}xd9FC%=&ct3*AhUFAT&eKz9bd;ZNCtWvi#I6Bpif|I0^72wfjd`#R!o03ACFv-I zjPXHwQI{*|aB_e`-h+Ag((eYGk-8eut?Qti5?$1apF%Eis@%bl-(x>)>>*Rc3m6)GHe{>*Ny zrygK-_n~+12Jx;m&Aq*Tcw>2Sy>4`4ukhEy8=IHcH)@sO^Di`{$29*d#w*YaZ2zjx@-aN)q9z&(eip;D`EnOF5sVlZ@Odc|E|bZZ$6{CVDMMBJPzAO|x*Q zV++hNg*AY0b6*Voe!qY& zfTsAER*UDvMeCr#R#UD1UBKWiK;bLsQXIywp(8v^b{S$Q-F^i#(1s`-GX1hC*Wk?* zRt=EK#Mp>LaBZ%|l-?*N4Pf2A14M0t{>gk92niM`GMIKF9cTQEO+l}BUyn6p09wBfNE#^WTVoS6=CYk7MBf<9eI>4=Q6v)+k z3zzpf9AXNo+qKi+p(Ntx?f}i(>o&m1hmjAGx9&Q`{|tZ#-Y4Bg+qY4xYN&j33Gy)X zVn%PWwUYs;50gue?o;Z0Aw^T|FYvUScB@1O!V{qL-p+Ao!oW3W{rbgts6 zC&P?DgYGT|zy>F^x-GMhD|AMbW2_|# z=gWY=!--ZRz-S8q4i9}`B?;=BRCwJ)!gYW11@zLaCwp})=ZFLwZ9O-|}5RzxqkjMGyXcBR~%0f76L@l}$>*TR)odQo>5eV{x(nBQ0M zd$LSEoLo=mz0r6+xd0O8&y8|*gc?TXT0@>&Y(Ij0Oz;3d2ow7UO+LxA7~=y(k2oJ;F?}YfY2st*u?e6 z^ja4qW`2uX8#^lH-aWLAJP4c?$m}NJwA`p2hS44yW4gz@AO&FTOJep}5z|CSMs#?% z^A(~MzWillCcf<;@Wv5fptr-o^IGxtde=3%_Z7KC(=T^a{Sb$d4VZmBJq=w?xxPz` zw@-5q7UpKH_>Jk`!9`!(nDKHeKCieY*}N6AFVX)q+&F;MFOyPX_4Uc+WDQuoPRg_O zEN+WsqdThsqpu^0zul`172N1*tKu|X>8nlMqy0s%v?Mo9wS8~6{{Oc(+<4v}ZN1^p zLxOe3Ieehcbi>(a>@VMMZ?CuAZX)--cN=T-vm=QAnBNV+8>Qa8V=5a8xPEwNw5($Re9GdQK*8DxkT>1dH}6W z`!m2sY}u1$Ai_sY>@MfM2=SH;XvbIH1I6sgVVQ0jJ#H|iQnU+DTjy_0%l9x980x9V zt#oIEG^(NN?)po#ZJGJov!xZr1NBZJ*mcOeq5jbS*DGNtLyFFk^A#w_mN~P(&HxxTdFj-{W$PSt~!Got5-zDR=Du z1!L5hcjTHm|Bo?cv@N6!q+H3y&^u0ImL&XE!q(kh%K|M-+7=`W8nm|Sf^Jl3R7D9` zHd`UTkM|o-ey{Q5ay-1XkWKkLnhX)5BjF8wn*;Nve3^gB7O|FV2o>YOPj7!bfBDO^ z?|yyt`ls{fufBiv>zfDoH>c1p|M>n_$rrF)7W%>BYy-q5nkxLq8<7$XS-IBQZFb*o zEy|@}LD;4pZZpt+Q2SD|Mm%;$Gm~n(Z7=t2Pkz9s!q7xUqUAgj7#EFR2XO65J)m?jq&}46wIEhZ5)| zsEj-=OPC>pZD5a+%W$x^qJ0qGUUjYB<9WQmj!_qSA!E0=z}w=llOoYis*^^T^Y0N> zUU7)>-9_VDImmGq3lJ$XVy_U7`LQUyHN*rtS#v>TCTvBH6(c`8de^*bPLQHFz;I(p z=P1sDk?@W>2cIyv=~lfI1f&r%q!xiow)WNuEb?34t+c7y8V#X`Nb+5KN`je1{seB1K)~B zXDYH41;s_wGM18c(aXzxMf(31_B3dS7uujhtqF%dz`vaH=cvasjpVz7g72eF)WZhGoleZc5s4ORbdjd(Q+PqAEJ9QjCVc@@8h<*) zMYJ+m{-fFeJ)X&GAW%(&&FK;T?k{wLsA(6{wU5+j042aiI9MC&5*8huh!#5~CYK|wOQm@djsDpzdh z?^bDDcQbKi#u;p!I;%dQxew4_dXqu5PW(PELA6ya+P0WQm%DN`Aw(dtO43`Ml01=g<5_@e&?hc@XixPWa{WF zrhN?1nsZuJ_|p0Zp1OPmZ_2KQ&_J4-!>269N@*3@MGk|gVZhHWFOk@hzLUi5DO@ko zb5a!xyc5pPF+{g6feVTM9x`Vn9<=rdDO!khXQ7m$*gf2+I4ztS5<&4&kRIqzN+(#w zC>1MT5~}Sbiz{dcA=0WMMFwX~P-3WZ9CS22WIm;DH)zo`DNdYu>ex%n&9q`iU{t^^ zHPP$E4HOu64%`ChCslaGj^gU9m?dwXfJ( zg2fI2r&56&M5)T7N=wzIw;MW|lST^W0C1HgmwMU8c8_cV1qa3?;~guqb=Qd7h8G-% zib(EWq9uks~N5kSh1VS~65T-lgHMWkJH6+HqJD6kJ*g{@y^w`kO z)_W0Ybt#NoPX0vI8&N9mqj2|3L`8#xhaTLuGj|IAS70!Pd8+DRCo;NMg`v3e$T&nd zq5gsoGvy}-=wftJGc=-MvRX7T)e}XIS3I=|4qNT-GFv2t`&#q>%Qnunz_ZpxaaJDcUWXPG|@+~@y>?xelQ<(e8Vpk|e6g6?#@m@Sh@}72)to0qnRjlp~O9f*_#mDZ;+Ad=^k) zlssn46Lh;W$2OJ_Yb-)cH=Lv=1#=jc!pc-T^QCxEhd@p0+tViK!oV|?(!g)Q7>S;jO`5YGA;-#hLhWU zZ1+O91A_PbhvXMK0 zcd;B3-Gv+?Rdxw??b3gm^EI~}9OzYZpx^`{Iv3kqKLVS6e-i0el*|M|xgD&YYt}Fi z!LGG~k+6|O%EJS>s(!er;~_4K%|p_cD1^NhyH5=Dn%Lp^@KSL8SM&_H4<5qDAd7|8FCX$47Kd@ zc+hkP!8|<9w8}F%HkCVNUmu$&fpmGl&VA$VwH@ADCJ(C?xQ!^BHj`YM4C9*Cco3Q_ zTljCV*Giugw$yC0N06PKCO{;SpCOMxhui>(j;VKdsRZ`C&k3gS>DJ@bX7((CxCU8=&H{aWzn%F%DoX#t~lw{fFQ1U;I96mgQpH`ToVPolWer zfvTj_nPeh{Z1bX+mkac^g_^L4Y5st;Ossd`P z6>`anH4}IS5F)C06~g4!O2-89wkOUTwkd{2ml-FIMOSxsV*ly^{s960lSo@Uiu9n` zdT)eB-Nrt{aDw>;s-WD|AQd$!Oy}*PzNp?V>Eg{lzDJCUOXz|Q<4tLS>3_Z}-qnwf z(OQ_<4^Ib=|5c!Bf;U1#%yYxJzJ4gLlYK7yg3V` z)g`~WYJW!pBlCtMwfiUsntU#g6rgH#x}>noIkdPG^d-V8^G%Ebj(L?|vx^T7Q;h3& zkQ}=dhG@Y5s%TOOvXz8`Qa~%&=YqqZ{ql#lQXh!t0~i(TS;p7NY{9 zRetqGatM>{{noPBWWQq08Il9z{n-k4lEcjgEp|jBgZ@}6Z=7sx>3^?bMjQ-+vADaY lD7PCBs=Y0c5Jh%@LP_NB4~zRvDMI3W^4|_W1aJ$)0|0#C5N-ef literal 66246 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

DawhCK!*v^b7znox3JnFq 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ξ5MvHSQ@n?s`kK-BexKK0 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index bc92a061fa5..6d750eb4d33 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1687,6 +1687,15 @@ if (typeof console !== "undefined") { } return attributes; } + function _getMultipleNodes(doc, nodeNames) { + var nodeName, nodeArray = [], nodeList; + for (var i = 0; i < nodeNames.length; i++) { + nodeName = nodeNames[i]; + nodeList = doc.getElementsByTagName(nodeName); + nodeArray = nodeArray.concat(Array.prototype.slice.call(nodeList)); + } + return nodeArray; + } fabric.parseTransformAttribute = function() { function rotateMatrix(matrix, args) { var angle = args[0], x = args.length === 3 ? args[1] : 0, y = args.length === 3 ? args[2] : 0; @@ -1843,7 +1852,7 @@ if (typeof console !== "undefined") { } } function parseUseDirectives(doc) { - var nodelist = doc.getElementsByTagName("use"), i = 0; + var nodelist = _getMultipleNodes(doc, [ "use", "svg:use" ]), i = 0; while (nodelist.length && i < nodelist.length) { var el = nodelist[i], xlink = el.getAttribute("xlink:href").substr(1), x = el.getAttribute("x") || 0, y = el.getAttribute("y") || 0, el2 = elementById(doc, xlink).cloneNode(true), currentTrans = (el2.getAttribute("transform") || "") + " translate(" + x + ", " + y + ")", parentNode, oldLength = nodelist.length, attr, j, attrs, l; applyViewboxTransform(el2); @@ -1881,7 +1890,7 @@ if (typeof console !== "undefined") { } var reViewBoxAttrValue = new RegExp("^" + "\\s*(" + fabric.reNum + "+)\\s*,?" + "\\s*(" + fabric.reNum + "+)\\s*,?" + "\\s*(" + fabric.reNum + "+)\\s*,?" + "\\s*(" + fabric.reNum + "+)\\s*" + "$"); function applyViewboxTransform(element) { - var viewBoxAttr = element.getAttribute("viewBox"), scaleX = 1, scaleY = 1, minX = 0, minY = 0, viewBoxWidth, viewBoxHeight, matrix, el, widthAttr = element.getAttribute("width"), heightAttr = element.getAttribute("height"), x = element.getAttribute("x") || 0, y = element.getAttribute("y") || 0, preserveAspectRatio = element.getAttribute("preserveAspectRatio") || "", missingViewBox = !viewBoxAttr || !reViewBoxTagNames.test(element.tagName) || !(viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue)), missingDimAttr = !widthAttr || !heightAttr || widthAttr === "100%" || heightAttr === "100%", toBeParsed = missingViewBox && missingDimAttr, parsedDim = {}, translateMatrix = ""; + var viewBoxAttr = element.getAttribute("viewBox"), scaleX = 1, scaleY = 1, minX = 0, minY = 0, viewBoxWidth, viewBoxHeight, matrix, el, widthAttr = element.getAttribute("width"), heightAttr = element.getAttribute("height"), x = element.getAttribute("x") || 0, y = element.getAttribute("y") || 0, preserveAspectRatio = element.getAttribute("preserveAspectRatio") || "", missingViewBox = !viewBoxAttr || !reViewBoxTagNames.test(element.nodeName) || !(viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue)), missingDimAttr = !widthAttr || !heightAttr || widthAttr === "100%" || heightAttr === "100%", toBeParsed = missingViewBox && missingDimAttr, parsedDim = {}, translateMatrix = ""; parsedDim.width = 0; parsedDim.height = 0; parsedDim.toBeParsed = toBeParsed; @@ -1915,7 +1924,7 @@ if (typeof console !== "undefined") { translateMatrix = " translate(" + parseUnit(x) + " " + parseUnit(y) + ") "; } matrix = translateMatrix + " matrix(" + scaleX + " 0" + " 0 " + scaleY + " " + minX * scaleX + " " + minY * scaleY + ") "; - if (element.tagName === "svg") { + if (element.nodeName === "svg") { el = element.ownerDocument.createElement("g"); while (element.firstChild != null) { el.appendChild(element.firstChild); @@ -1931,7 +1940,7 @@ if (typeof console !== "undefined") { fabric.parseSVGDocument = function() { function hasAncestorWithNodeName(element, nodeName) { while (element && (element = element.parentNode)) { - if (nodeName.test(element.nodeName) && !element.getAttribute("instantiated_by_use")) { + if (element.nodeName && nodeName.test(element.nodeName.replace("svg:", "")) && !element.getAttribute("instantiated_by_use")) { return true; } } @@ -1954,7 +1963,7 @@ if (typeof console !== "undefined") { } var elements = descendants.filter(function(el) { applyViewboxTransform(el); - return reAllowedSVGTagNames.test(el.tagName) && !hasAncestorWithNodeName(el, reNotAllowedAncestors); + return reAllowedSVGTagNames.test(el.nodeName.replace("svg:", "")) && !hasAncestorWithNodeName(el, reNotAllowedAncestors); }); if (!elements || elements && !elements.length) { callback && callback([], {}); @@ -1989,7 +1998,7 @@ if (typeof console !== "undefined") { } function _createSVGPattern(markup, canvas, property) { if (canvas[property] && canvas[property].toSVG) { - markup.push(' \n', ' \n \n'); + markup.push('\t\n', '\t\t\n\t\n'); } } var reFontDeclaration = new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*" + "(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*(" + fabric.reNum + "(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|" + fabric.reNum + "))?\\s+(.*)"); @@ -2017,16 +2026,8 @@ if (typeof console !== "undefined") { } }, getGradientDefs: function(doc) { - var linearGradientEls = doc.getElementsByTagName("linearGradient"), radialGradientEls = doc.getElementsByTagName("radialGradient"), el, i, j = 0, id, xlink, elList = [], gradientDefs = {}, idsToXlinkMap = {}; - elList.length = linearGradientEls.length + radialGradientEls.length; - i = linearGradientEls.length; - while (i--) { - elList[j++] = linearGradientEls[i]; - } - i = radialGradientEls.length; - while (i--) { - elList[j++] = radialGradientEls[i]; - } + var tagArray = [ "linearGradient", "radialGradient", "svg:linearGradient", "svg:radialGradient" ], elList = _getMultipleNodes(doc, tagArray), el, j = 0, id, xlink, gradientDefs = {}, idsToXlinkMap = {}; + j = elList.length; while (j--) { el = elList[j]; xlink = el.getAttribute("xlink:href"); @@ -2210,10 +2211,10 @@ if (typeof console !== "undefined") { } } for (var j in fontList) { - markup += [ " @font-face {\n", " font-family: '", j, "';\n", " src: url('", fontPaths[j], "');\n", " }\n" ].join(""); + markup += [ "\t\t@font-face {\n", "\t\t\tfont-family: '", j, "';\n", "\t\t\tsrc: url('", fontPaths[j], "');\n", "\t\t}\n" ].join(""); } if (markup) { - markup = [ ' \n" ].join(""); + markup = [ '\t\n" ].join(""); } return markup; }, @@ -2252,7 +2253,7 @@ fabric.ElementsParser.prototype.createObjects = function() { }; fabric.ElementsParser.prototype.createObject = function(el, index) { - var klass = fabric[fabric.util.string.capitalize(el.tagName)]; + var klass = fabric[fabric.util.string.capitalize(el.tagName.replace("svg:", ""))]; if (klass && klass.fromElement) { try { this._createObject(klass, el, index); @@ -3066,7 +3067,7 @@ fabric.Pattern = fabric.util.createClass({ if (object.flipY) { offset.y *= -1; } - return '\n" + ' \n' + ' \n' + ' \n' + ' \n' + " \n" + " \n" + ' \n' + " \n" + "\n"; + 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) { @@ -8192,7 +8193,7 @@ fabric.util.object.extend(fabric.Object.prototype, { var objects = this.getObjects(), p = this.getPointByOrigin("left", "top"), translatePart = "translate(" + p.x + " " + p.y + ")", markup = this._createBaseSVGMarkup(); markup.push("\n"); for (var i = 0, len = objects.length; i < len; i++) { - markup.push(" ", objects[i].toSVG(reviver)); + markup.push("\t", objects[i].toSVG(reviver)); } markup.push("\n"); return reviver ? reviver(markup.join("")) : markup.join(""); @@ -8483,7 +8484,7 @@ fabric.util.object.extend(fabric.Object.prototype, { var markup = this._createBaseSVGMarkup(); markup.push("\n'); for (var i = 0, len = this._objects.length; i < len; i++) { - markup.push(" ", this._objects[i].toSVG(reviver)); + markup.push("\t", this._objects[i].toSVG(reviver)); } markup.push("\n"); return reviver ? reviver(markup.join("")) : markup.join(""); @@ -9966,7 +9967,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ }, _wrapSVGTextAndBg: function(markup, textAndBg) { var noShadow = true, filter = this.getSvgFilter(), style = filter === "" ? "" : ' style="' + filter + '"'; - markup.push(" \n", textAndBg.textBgRects.join(""), " \n', textAndBg.textSpans.join(""), " \n", " \n"); + markup.push("\t\n", textAndBg.textBgRects.join(""), "\t\t\n', textAndBg.textSpans.join(""), "\t\t\n", "\t\n"); }, _getSVGTextAndBg: function(textTopOffset, textLeftOffset) { var textSpans = [], textBgRects = [], height = 0; @@ -9989,7 +9990,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ this._setSVGTextLineJustifed(i, textSpans, yPos, textLeftOffset); return; } - textSpans.push(' ", fabric.util.string.escapeXml(this._textLines[i]), "\n"); + textSpans.push('\t\t\t", fabric.util.string.escapeXml(this._textLines[i]), "\n"); }, _setSVGTextLineJustifed: function(i, textSpans, yPos, textLeftOffset) { var ctx = fabric.util.createCanvasElement().getContext("2d"); @@ -9998,16 +9999,16 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ textLeftOffset += this._getLineLeftOffset(this._getLineWidth(ctx, i)); for (i = 0, len = words.length; i < len; i++) { word = words[i]; - textSpans.push(' ", fabric.util.string.escapeXml(word), "\n"); + textSpans.push('\t\t\t", fabric.util.string.escapeXml(word), "\n"); textLeftOffset += this._getWidthOfWords(ctx, word) + spaceWidth; } }, _setSVGTextLineBg: function(textBgRects, i, textLeftOffset, textTopOffset, height) { - textBgRects.push(" \n'); + textBgRects.push("\t\t\n'); }, _setSVGBg: function(textBgRects) { if (this.backgroundColor) { - textBgRects.push(" \n'); + textBgRects.push("\t\t\n'); } }, _getFillAttributes: function(value) { @@ -11673,7 +11674,7 @@ fabric.util.object.extend(fabric.IText.prototype, { }; }, _createTextCharBg: function(styleDecl, lineLeftOffset, lineTopOffset, heightOfLine, charWidth, charOffset) { - return [ ' \n' ].join(""); + return [ '\t\t\n' ].join(""); }, _createTextCharSpan: function(_char, styleDecl, lineLeftOffset, lineTopOffset, charOffset) { var fillStyles = this.getSvgStyles.call(fabric.util.object.extend({ @@ -11683,7 +11684,7 @@ fabric.util.object.extend(fabric.IText.prototype, { type: "text", getSvgFilter: fabric.Object.prototype.getSvgFilter }, styleDecl)); - return [ ' ', fabric.util.string.escapeXml(_char), "\n" ].join(""); + return [ '\t\t\t', fabric.util.string.escapeXml(_char), "\n" ].join(""); } }); })(); diff --git a/src/parser.js b/src/parser.js index bd0bc0ab674..798b5bba645 100644 --- a/src/parser.js +++ b/src/parser.js @@ -127,6 +127,19 @@ return attributes; } + /** + * @private + */ + function _getMultipleNodes(doc, nodeNames) { + var nodeName, nodeArray = [ ], nodeList; + for (var i = 0; i < nodeNames.length; i++) { + nodeName = nodeNames[i]; + nodeList = doc.getElementsByTagName(nodeName); + nodeArray = nodeArray.concat(Array.prototype.slice.call(nodeList)); + } + return nodeArray; + } + /** * Parses "transform" attribute, returning an array of values * @static @@ -406,7 +419,8 @@ * @private */ function parseUseDirectives(doc) { - var nodelist = doc.getElementsByTagName('use'), i = 0; + var nodelist = _getMultipleNodes(doc, ['use', 'svg:use']), i = 0; + while (nodelist.length && i < nodelist.length) { var el = nodelist[i], xlink = el.getAttribute('xlink:href').substr(1), @@ -482,7 +496,7 @@ x = element.getAttribute('x') || 0, y = element.getAttribute('y') || 0, preserveAspectRatio = element.getAttribute('preserveAspectRatio') || '', - missingViewBox = (!viewBoxAttr || !reViewBoxTagNames.test(element.tagName) + missingViewBox = (!viewBoxAttr || !reViewBoxTagNames.test(element.nodeName) || !(viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue))), missingDimAttr = (!widthAttr || !heightAttr || widthAttr === '100%' || heightAttr === '100%'), toBeParsed = missingViewBox && missingDimAttr, @@ -540,7 +554,7 @@ (minX * scaleX) + ' ' + (minY * scaleY) + ') '; - if (element.tagName === 'svg') { + if (element.nodeName === 'svg') { el = element.ownerDocument.createElement('g'); while (element.firstChild != null) { el.appendChild(element.firstChild); @@ -569,7 +583,7 @@ function hasAncestorWithNodeName(element, nodeName) { while (element && (element = element.parentNode)) { - if (nodeName.test(element.tagName.replace('svg:', '')) && !element.getAttribute('instantiated_by_use')) { + if (element.nodeName && nodeName.test(element.nodeName.replace('svg:', '')) && !element.getAttribute('instantiated_by_use')) { return true; } } @@ -603,7 +617,7 @@ var elements = descendants.filter(function(el) { applyViewboxTransform(el); - return reAllowedSVGTagNames.test(el.tagName.replace('svg:', '')) && + return reAllowedSVGTagNames.test(el.nodeName.replace('svg:', '')) && !hasAncestorWithNodeName(el, reNotAllowedAncestors); // http://www.w3.org/TR/SVG/struct.html#DefsElement }); @@ -736,20 +750,16 @@ * @return {Object} Gradient definitions; key corresponds to element id, value -- to gradient definition element */ getGradientDefs: function(doc) { - var linearGradientEls = doc.getElementsByTagName('linearGradient'), - radialGradientEls = doc.getElementsByTagName('radialGradient'), - el, i, j = 0, id, xlink, elList = [ ], + var tagArray = [ + 'linearGradient', + 'radialGradient', + 'svg:linearGradient', + 'svg:radialGradient'], + elList = _getMultipleNodes(doc, tagArray), + el, j = 0, id, xlink, gradientDefs = { }, idsToXlinkMap = { }; - elList.length = linearGradientEls.length + radialGradientEls.length; - i = linearGradientEls.length; - while (i--) { - elList[j++] = linearGradientEls[i]; - } - i = radialGradientEls.length; - while (i--) { - elList[j++] = radialGradientEls[i]; - } + j = elList.length; while (j--) { el = elList[j]; diff --git a/test/unit/parser.js b/test/unit/parser.js index d83ac902b03..09957a4276c 100644 --- a/test/unit/parser.js +++ b/test/unit/parser.js @@ -349,7 +349,7 @@ }); asyncTest('parseSVGFromString with svg:namespace', function() { - var string = '' + + var string = '' + '' + '' + '', From ea4e7e47f6224f305bb4d471b55f20c47ee54807 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sun, 3 Jul 2016 23:45:23 +0200 Subject: [PATCH 3/3] fixed lint --- src/parser.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/parser.js b/src/parser.js index 798b5bba645..29f99438bd3 100644 --- a/src/parser.js +++ b/src/parser.js @@ -583,7 +583,8 @@ function hasAncestorWithNodeName(element, nodeName) { while (element && (element = element.parentNode)) { - if (element.nodeName && nodeName.test(element.nodeName.replace('svg:', '')) && !element.getAttribute('instantiated_by_use')) { + if (element.nodeName && nodeName.test(element.nodeName.replace('svg:', '')) + && !element.getAttribute('instantiated_by_use')) { return true; } }