From 7a7466eb92f095da4a388053b530d591c232f393 Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 20 Jul 2014 15:20:18 +0200 Subject: [PATCH] Build distribution --- dist/fabric.js | 154 ++++++++++++++++++++++++----------------- dist/fabric.min.js | 14 ++-- dist/fabric.min.js.gz | Bin 56257 -> 56373 bytes dist/fabric.require.js | 154 ++++++++++++++++++++++++----------------- 4 files changed, 185 insertions(+), 137 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 4ea1645d..e11fdc87 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -630,12 +630,7 @@ fabric.Collection = { groupSVGElements: function(elements, options, path) { var object; - if (elements.length > 1) { - object = new fabric.PathGroup(elements, options); - } - else { - object = elements[0]; - } + object = new fabric.PathGroup(elements, options); if (typeof path !== 'undefined') { object.setSourcePath(path); @@ -3111,6 +3106,25 @@ if (typeof console !== 'undefined') { } } + /** + * Add a element that envelop all SCG elements and makes the viewbox transformMatrix descend on all elements + */ + function addSvgTransform(doc, matrix) { + matrix[3] = matrix[0] = (matrix[0] > matrix[3] ? matrix[3] : matrix[0]); + if (!(matrix[0] !== 1 || matrix[3] !== 1 || matrix[4] !== 0 || matrix[5] !== 0)) return; + // default is to preserve aspect ratio + // preserveAspectRatio attribute to be implemented + matrix[4] *= matrix[0]; + matrix[5] *= matrix[3]; + var el = document.createElement('g'); + while (doc.firstChild != null) { + var node = doc.firstChild; + el.appendChild(node); + } + el.setAttribute('transform','matrix(' + matrix[0] + ' ' + matrix[1] + ' ' + matrix[2] + ' ' + matrix[3] + ' ' + matrix[4] + ' ' + matrix[5] + ')'); + doc.appendChild(el); + } + /** * Parses an SVG document, converts it to an array of corresponding fabric.* instances and passes them to a callback * @static @@ -3154,6 +3168,27 @@ if (typeof console !== 'undefined') { parseUseDirectives(doc); + var viewBoxAttr = doc.getAttribute('viewBox'), + widthAttr = parseFloat(doc.getAttribute('width')), + heightAttr = parseFloat(doc.getAttribute('height')), + viewBoxWidth, + viewBoxHeight; + + if (viewBoxAttr && (viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue))) { + var minX = parseFloat(viewBoxAttr[1]), + minY = parseFloat(viewBoxAttr[2]), + scaleX = 1, scaleY = 1; + viewBoxWidth = parseFloat(viewBoxAttr[3]); + viewBoxHeight = parseFloat(viewBoxAttr[4]); + if (widthAttr && widthAttr !== viewBoxWidth ) { + scaleX = widthAttr / viewBoxWidth; + } + if (heightAttr && heightAttr !== viewBoxHeight) { + scaleY = heightAttr / viewBoxHeight; + } + addSvgTransform(doc, [scaleX, 0, 0, scaleY, -minX, -minY]); + } + var descendants = fabric.util.toArray(doc.getElementsByTagName('*')); if (descendants.length === 0 && fabric.isLikelyNode) { @@ -3177,42 +3212,15 @@ if (typeof console !== 'undefined') { return; } - var viewBoxAttr = doc.getAttribute('viewBox'), - widthAttr = parseFloat(doc.getAttribute('width')), - heightAttr = parseFloat(doc.getAttribute('height')), - width = null, - height = null, - viewBoxWidth, - viewBoxHeight, - minX, - minY; - - if (viewBoxAttr && (viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue))) { - minX = parseFloat(viewBoxAttr[1]); - minY = parseFloat(viewBoxAttr[2]); - viewBoxWidth = parseFloat(viewBoxAttr[3]); - viewBoxHeight = parseFloat(viewBoxAttr[4]); - } - - if (viewBoxWidth && widthAttr && viewBoxWidth !== widthAttr) { - width = viewBoxWidth; - height = viewBoxHeight; - } - else { - // values of width/height attributes overwrite those extracted from viewbox attribute - width = widthAttr ? widthAttr : viewBoxWidth; - height = heightAttr ? heightAttr : viewBoxHeight; - } - var options = { - width: width, - height: height, + width: widthAttr ? widthAttr : viewBoxWidth, + height: heightAttr ? heightAttr : viewBoxHeight, widthAttr: widthAttr, heightAttr: heightAttr }; - fabric.gradientDefs = fabric.getGradientDefs(doc); - fabric.cssRules = fabric.getCSSRules(doc); + fabric.gradientDefs = extend(fabric.getGradientDefs(doc), fabric.gradientDefs); + fabric.cssRules = extend(fabric.getCSSRules(doc), fabric.cssRules); // Precedence of rules: style > class > attribute fabric.parseElements(elements, function(instances) { @@ -3662,7 +3670,7 @@ fabric.ElementsParser.prototype._createObject = function(klass, el, index) { else { var obj = klass.fromElement(el, this.options); this.reviver && this.reviver(el, obj); - this.instances.splice(index, 0, obj); + this.instances[index] = obj; this.checkIfDone(); } }; @@ -3671,7 +3679,7 @@ fabric.ElementsParser.prototype.createCallback = function(index, el) { var _this = this; return function(obj) { _this.reviver && _this.reviver(el, obj); - _this.instances.splice(index, 0, obj); + _this.instances[index] = obj; _this.checkIfDone(); }; }; @@ -11125,7 +11133,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {CanvasRenderingContext2D} ctx Context to render on */ _renderStroke: function(ctx) { - if (!this.stroke) return; + if (!this.stroke || this.strokeWidth === 0) return; ctx.save(); if (this.strokeDashArray) { @@ -13331,16 +13339,17 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.beginPath(); var isInPathGroup = this.group && this.group.type === 'path-group'; - if (isInPathGroup && !this.transformMatrix) { + if (isInPathGroup) { // Line coords are distances from left-top of canvas to origin of line. // // To render line in a path-group, we need to translate them to // distances from center of path-group to center of line. var cp = this.getCenterPoint(); ctx.translate( - -this.group.width/2 + cp.x, - -this.group.height / 2 + cp.y + cp.x, + cp.y ); + if (!this.transformMatrix) ctx.translate(-this.group.width / 2, -this.group.height / 2); } if (!this.strokeDashArray || this.strokeDashArray && supportsLineDash) { @@ -14488,8 +14497,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot var points = fabric.parsePointsAttribute(element.getAttribute('points')), parsedAttributes = fabric.parseAttributes(element, fabric.Polyline.ATTRIBUTE_NAMES); - fabric.util.normalizePoints(points, options); - + if (!('transformMatrix' in parsedAttributes)) { + fabric.util.normalizePoints(points, options); + } return new fabric.Polyline(points, fabric.util.object.extend(parsedAttributes, options), true); }; /* _FROM_SVG_END_ */ @@ -14698,8 +14708,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot var points = fabric.parsePointsAttribute(element.getAttribute('points')), parsedAttributes = fabric.parseAttributes(element, fabric.Polygon.ATTRIBUTE_NAMES); - fabric.util.normalizePoints(points, options); - + if (!('transformMatrix' in parsedAttributes)) { + fabric.util.normalizePoints(points, options); + } return new fabric.Polygon(points, extend(parsedAttributes, options), true); }; /* _FROM_SVG_END_ */ @@ -14876,7 +14887,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @private * @param {CanvasRenderingContext2D} ctx context to render path on */ - _render: function(ctx) { + _render: function(ctx, noTransform) { var current, // current instruction previous = null, subpathStartX = 0, @@ -14892,6 +14903,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot l = -((this.width / 2) + this.pathOffset.x), t = -((this.height / 2) + this.pathOffset.y); + if (noTransform) { + l += this.width / 2; + t += this.height / 2; + } + for (var i = 0, len = this.path.length; i < len; ++i) { current = this.path[i]; @@ -15173,6 +15189,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot if (!this.visible) return; ctx.save(); + if (noTransform) { + ctx.translate(-this.width/2, -this.height/2); + } var m = this.transformMatrix; if (m) { @@ -15187,7 +15206,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this.clipTo && fabric.util.clipContext(this, ctx); ctx.beginPath(); ctx.globalAlpha = this.group ? (ctx.globalAlpha * this.opacity) : this.opacity; - this._render(ctx); + this._render(ctx, noTransform); this._renderFill(ctx); this._renderStroke(ctx); this.clipTo && ctx.restore(); @@ -18438,14 +18457,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag */ _render: function(ctx) { - var isInPathGroup = this.group && this.group.type === 'path-group'; - if (isInPathGroup && !this.transformMatrix) { - ctx.translate(-this.group.width/2 + this.left, -this.group.height / 2 + this.top); - } - else if (isInPathGroup && this.transformMatrix) { - ctx.translate(-this.group.width/2, -this.group.height/2); - } - if (typeof Cufon === 'undefined' || this.useNative === true) { this._renderViaNative(ctx); } @@ -18461,8 +18472,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag _renderViaNative: function(ctx) { var textLines = this.text.split(this._reNewline); - this.transform(ctx, fabric.isLikelyNode); - this._setTextStyles(ctx); this.width = this._getTextWidth(ctx, textLines); @@ -18676,7 +18685,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Array} textLines Array of all text lines */ _renderTextStroke: function(ctx, textLines) { - if (!this.stroke && !this._skipFillStrokeCheck) return; + if ((!this.stroke || this.strokeWidth === 0) && !this._skipFillStrokeCheck) return; var lineHeights = 0; @@ -18852,15 +18861,24 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Renders text instance on a specified context * @param {CanvasRenderingContext2D} ctx Context to render on */ - render: function(ctx) { + render: function(ctx, noTransform) { // do not render if object is not visible if (!this.visible) return; ctx.save(); + this._transform(ctx, noTransform); + var m = this.transformMatrix; - if (m && (!this.group || this.group.type === 'path-group')) { + var isInPathGroup = this.group && this.group.type === 'path-group'; + if (isInPathGroup) { + ctx.translate(-this.group.width/2, -this.group.height/2); + } + if (m) { ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]); } + if (isInPathGroup) { + ctx.translate(this.left, this.top); + } this._render(ctx); ctx.restore(); }, @@ -19175,7 +19193,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag } if (!options.originX) { - options.originX = 'center'; + options.originX = 'left'; } var text = new fabric.Text(element.textContent, options); @@ -19185,9 +19203,15 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag x/y attributes in SVG correspond to the bottom-left corner of text bounding box top/left properties in Fabric correspond to center point of text bounding box */ - + var offX = 0; + if (text.originX === 'left') { + offX = text.getWidth() / 2; + } + if (text.originX === 'right') { + offX = -text.getWidth() / 2; + } text.set({ - left: text.getLeft() + text.getWidth() / 2, + left: text.getLeft() + offX, top: text.getTop() - text.getHeight() / 2 }); diff --git a/dist/fabric.min.js b/dist/fabric.min.js index e871bc66..ece2b45b 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.8"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],fabric.DPI=96,function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},transformPoint:function(e,t,n){return n?new fabric.Point(t[0]*e.x+t[1]*e.y,t[2]*e.x+t[3]*e.y):new fabric.Point(t[0]*e.x+t[1]*e.y+t[4],t[2]*e.x+t[3]*e.y+t[5])},invertTransform:function(e){var t=e.slice(),n=1/(e[0]*e[3]-e[1]*e[2]);t=[n*e[3],-n*e[1],-n*e[2],n*e[0],0,0];var r=fabric.util.transformPoint({x:e[4],y:e[5]},t);return t[4]=-r.x,t[5]=-r.y,t},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},parseUnit:function(e){var t=/\D{0,2}$/.exec(e),n=parseFloat(e);switch(t[0]){case"mm":return n*fabric.DPI/25.4;case"cm":return n*fabric.DPI/2.54;case"in":return n*fabric.DPI;case"pt":return n*fabric.DPI/72;case"pc":return n*fabric.DPI/72*12;default:return n}},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=Math.sin(s),h=Math.cos(s),p=Math.sin(o),d=Math.cos(o),v=l*u,m=-f*a,g=f*u,y=l*a,b=.25*(o-s),w=8/3*Math.sin(b)*Math.sin(b)/Math.sin(b*2),E=e+h-w*c,S=i+c+w*h,x=e+d,T=i+p,N=x+w*p,C=T-w*d;return t[r]=[v*E+m*S,g*E+y*S,v*N+m*C,g*N+y*C,v*x+m*T,g*x+y*T],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.parseUnit,u=t.util.multiplyTransformMatrices,a={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"},f={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(u){var l=(new RegExp(v)).exec(u).filter(function(e){return e!==""&&e!=null}),c=l[1],h=l.slice(2).map(parseFloat);switch(c){case"translate":s(a,h);break;case"rotate":h[0]=t.util.degreesToRadians(h[0]),e(a,h);break;case"scale":n(a,h);break;case"skewX":r(a,h);break;case"skewY":i(a,h);break;case"matrix":a=h}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date;g(n);var f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0&&t.isLikelyNode){f=n.selectNodes('//*[name(.)!="svg"]');var l=[];for(var c=0,h=f.length;c/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){y.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),y.has(e,function(r){r?y.get(e,function(e){var t=b(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return w(t,e,"backgroundColor"),w(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},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 e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]);if(e==="transparent"){this.setSource([255,255,255,0]);return}t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.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(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this._setImageSmoothing(),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},_setImageSmoothing:function(){var e=this.getContext();e.imageSmoothingEnabled=this.imageSmoothingEnabled,e.webkitImageSmoothingEnabled=this.imageSmoothingEnabled,e.mozImageSmoothingEnabled=this.imageSmoothingEnabled,e.msImageSmoothingEnabled=this.imageSmoothingEnabled,e.oImageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t&&t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;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(e){this.lowerCanvasEl=fabric.util.getById(e)||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(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getZoom:function(){return Math.sqrt(this.viewportTransform[0]*this.viewportTransform[3])},setViewportTransform:function(e){this.viewportTransform=e,this.renderAll();for(var t=0,n=this._objects.length;t"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.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",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop,t=this.canvas.viewportTransform,n=this._points[0],r=this._points[1];e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5]),e.beginPath(),this._points.length===2&&n.x===r.x&&n.y===r.y&&(n.x-=.5,r.x+=.5),e.moveTo(n.x,n.y);for(var i=1,s=this._points.length;in.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e,!0))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e,!0),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t,n,r){r||(r=this.upperCanvasEl);var i=e(t,r),s=r.getBoundingClientRect(),o;return i.x=i.x-this._offset.left,i.y=i.y-this._offset.top,n||(i=fabric.util.transformPoint(i,fabric.util.invertTransform(this.viewportTransform))),s.width===0||s.height===0?o={width:1,height:1}:o={width:r.width/s.width,height:r.height/s.height},{x:i.x*o.width,y:i.y*o.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),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(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&e.set("active",!0)},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center",canvas:this}),t.addWithUpdate(),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(!e||e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e -,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){this.group&&this.group.transform(e,t),e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),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,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_renderControls:function(e,n){var r=this.getViewportTransform();e.save();if(this.active&&!n){var i;this.group&&(i=t.util.transformPoint(this.group.getCenterPoint(),r),e.translate(i.x,i.y),e.rotate(s(this.group.angle))),i=t.util.transformPoint(this.getCenterPoint(),r,null!=this.group),this.group&&(i.x*=this.group.scaleX,i.y*=this.group.scaleY),e.translate(i.x,i.y),e.rotate(s(this.angle)),this.drawBorders(e),this.drawControls(e)}e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",e?new t.Shadow(e):null)},setColor:function(e){return this.set("fill",e),this},setAngle:function(e){var t=(this.originX!=="center"||this.originY!=="center")&&this.centeredRotation;return t&&this._setOriginToCenter(),this.set("angle",e),t&&this._resetOrigin(),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=e(this.angle),r=this.getViewportTransform(),i=function(e){return fabric.util.transformPoint(e,r)},s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=t:f&&(o=t),l&&(s+=t),c&&(o+=t),this.currentWidth=s*this.scaleX,this.currentHeight=o*this.scaleY,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var h=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),p=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),d=Math.cos(p+n)*h,v=Math.sin(p+n)*h,m=Math.sin(n),g=Math.cos(n),y=this.getCenterPoint(),b=new fabric.Point(this.currentWidth,this.currentHeight),w=new fabric.Point(y.x-d,y.y-v),E=new fabric.Point(w.x+b.x*g,w.y+b.x*m),S=new fabric.Point(w.x-b.y*m,w.y+b.y*g),x=new fabric.Point(w.x+b.x/2*g,w.y+b.x/2*m),T=i(w),N=i(E),C=i(new fabric.Point(E.x-b.y*m,E.y+b.y*g)),k=i(S),L=i(new fabric.Point(w.x-b.y/2*m,w.y+b.y/2*g)),A=i(x),O=i(new fabric.Point(E.x-b.y/2*m,E.y+b.y/2*g)),M=i(new fabric.Point(S.x+b.x/2*g,S.y+b.x/2*m)),_=i(new fabric.Point(x.x,x.y)),D=Math.cos(p+n)*this.padding*Math.sqrt(2),P=Math.sin(p+n)*this.padding*Math.sqrt(2);return T=T.add(new fabric.Point(-D,-P)),N=N.add(new fabric.Point(P,-D)),C=C.add(new fabric.Point(D,P)),k=k.add(new fabric.Point(-P,D)),L=L.add(new fabric.Point((-D-P)/2,(-P+D)/2)),A=A.add(new fabric.Point((P-D)/2,-(P+D)/2)),O=O.add(new fabric.Point((P+D)/2,(P-D)/2)),M=M.add(new fabric.Point((D-P)/2,(D+P)/2)),_=_.add(new fabric.Point((P-D)/2,-(P+D)/2)),this.oCoords={tl:T,tr:N,br:C,bl:k,ml:L,mt:A,mr:O,mb:M,mtr:_},this._setCornerCoords&&this._setCornerCoords(),this}})}(),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(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getViewportTransform(),r=fabric.util.transformPoint(this.getCenterPoint(),n),i=fabric.Object.NUM_FRACTION_DIGITS,s="translate("+e(r.x,i)+" "+e(r.y,i)+")",o=t!==0?" rotate("+e(t,i)+")":"",u=this.scaleX===1&&this.scaleY===1&&n[0]===1&&n[3]===1?"":" scale("+e(this.scaleX*n[0],i)+" "+e(this.scaleY*n[3],i)+")",a=this.flipX?"matrix(-1 0 0 1 0 0) ":"",f=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[s,o,u,a,f].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=function(){return typeof G_vmlCanvasManager!="undefined"};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.getViewportTransform();e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor;var o=this.getWidth(),u=this.getHeight(),a=this.strokeWidth>1?this.strokeWidth:0,f=this.strokeLineCap==="round"||this.strokeLineCap==="square",l=this.type==="line"&&this.width===1,c=this.type==="line"&&this.height===1,h=f&&c||this.type!=="line",p=f&&l||this.type!=="line";l?o=a/i:c&&(u=a/s),h&&(o+=a/i),p&&(u+=a/s);var d=fabric.util.transformPoint(new fabric.Point(o,u),r,!0),v=d.x,m=d.y;this.group&&(v*=this.group.scaleX,m*=this.group.scaleY),e.strokeRect(~~(-(v/2)-t)-.5,~~(-(m/2)-t)-.5,~~(v+n)+1,~~(m+n)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var g=(this.flipY?m+t*2:-m-t*2)/2;e.beginPath(),e.moveTo(0,g),e.lineTo(0,g+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.getViewportTransform(),i=this.strokeWidth>1?this.strokeWidth:0,s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=i:f&&(o=i),l&&(s+=i),c&&(o+=i),s*=this.scaleX,o*=this.scaleY;var h=fabric.util.transformPoint(new fabric.Point(s,o),r,!0),p=h.x,d=h.y,v=-(p/2),m=-(d/2),g=this.padding,y=n,b=n-t,w=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1,e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,w,v-y-g,m-y-g),this._drawControl("tr",e,w,v+p-y+g,m-y-g),this._drawControl("bl",e,w,v-y-g,m+d+b+g),this._drawControl("br",e,w,v+p+b+g,m+d+b+g),this.get("lockUniScaling")||(this._drawControl("mt",e,w,v+p/2-y,m-y-g),this._drawControl("mb",e,w,v+p/2-y,m+d+b+g),this._drawControl("mr",e,w,v+p+b+g,m+d/2-y),this._drawControl("ml",e,w,v-y-g,m+d/2-y)),this.hasRotatingPoint&&this._drawControl("mtr",e,w,v+p/2-y,this.flipY?m+d+this.rotatingPointOffset-this.cornerSize/2+g:m-this.rotatingPointOffset-this.cornerSize/2-g),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize;this.isControlVisible(e)&&(t()||this.transparentCorners||n.clearRect(i,s,o,o),n[r](i,s,o,o))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s||(s.left=0),"top"in s||(s.top=0),"transformMatrix"in s||(s.left-=n.width?n.width/2:0,s.top-=n.height?n.height/2:0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t. -util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.save(),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top*this.rx/this.ry:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES);"left"in i||(i.left=0),"top"in i||(i.top=0),"transformMatrix"in i||(i.left-=n.width?n.width/2:0,i.top-=n.height?n.height/2:0);var s=new t.Ellipse(r(i,n));return s.cx=parseFloat(e.getAttribute("cx"))||0,s.cy=parseFloat(e.getAttribute("cy"))||0,s},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx?Math.min(this.rx,this.width/2):0,n=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0,f=.4477152502;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.bezierCurveTo(s+r-f*t,o,s+r,o+f*n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.bezierCurveTo(s+r,o+i-f*n,s+r-f*t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.bezierCurveTo(s+f*t,o+i,s,o+i-f*n,s,o+i-n),e.lineTo(s,o+n),a&&e.bezierCurveTo(s,o+f*n,s+f*t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var f=0,l,c=this.path.length;fv)for(var g=1,y=l.length;g"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),e&&(this._objects.push(e),e.group=this),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e){if(!this.visible)return;e.save(),this.clipTo&&t.util.clipContext(this,e);for(var n=0,r=this._objects.length;n'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.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(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||0},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e){if(!this.visible)return;e.save();var t=this.transformMatrix;t&&(!this.group||this.group.type==="path-group")&&e.transform(t[0],t[1],t[2],t[3],t[4],t[5]),this._render(e),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE),n.originX||(n.originX="center");var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},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(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.__lastSelected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(e){var t=this.getSelectedText(),n=this._getClipboardData(e);n&&n.setData("text",t),this.copiedText=t,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(e){var t=null,n=this._getClipboardData(e);n?t=n.getData("text"):t=this.copiedText,t&&this.insertChars(t)},cut:function(e){if(this.selectionStart===this.selectionEnd)return;this.copy(),this.removeChars(e)},_getClipboardData:function(e){return e&&(e.clipboardData||fabric.window.clipboardData)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;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(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.8"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],fabric.DPI=96,function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},transformPoint:function(e,t,n){return n?new fabric.Point(t[0]*e.x+t[1]*e.y,t[2]*e.x+t[3]*e.y):new fabric.Point(t[0]*e.x+t[1]*e.y+t[4],t[2]*e.x+t[3]*e.y+t[5])},invertTransform:function(e){var t=e.slice(),n=1/(e[0]*e[3]-e[1]*e[2]);t=[n*e[3],-n*e[1],-n*e[2],n*e[0],0,0];var r=fabric.util.transformPoint({x:e[4],y:e[5]},t);return t[4]=-r.x,t[5]=-r.y,t},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},parseUnit:function(e){var t=/\D{0,2}$/.exec(e),n=parseFloat(e);switch(t[0]){case"mm":return n*fabric.DPI/25.4;case"cm":return n*fabric.DPI/2.54;case"in":return n*fabric.DPI;case"pt":return n*fabric.DPI/72;case"pc":return n*fabric.DPI/72*12;default:return n}},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;sr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=Math.sin(s),h=Math.cos(s),p=Math.sin(o),d=Math.cos(o),v=l*u,m=-f*a,g=f*u,y=l*a,b=.25*(o-s),w=8/3*Math.sin(b)*Math.sin(b)/Math.sin(b*2),E=e+h-w*c,S=i+c+w*h,x=e+d,T=i+p,N=x+w*p,C=T-w*d;return t[r]=[v*E+m*S,g*E+y*S,v*N+m*C,g*N+y*C,v*x+m*T,g*x+y*T],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return et[3]?t[3]:t[0];if(t[0]===1&&t[3]===1&&t[4]===0&&t[5]===0)return;t[4]*=t[0],t[5]*=t[3];var n=document.createElement("g");while(e.firstChild!=null){var r=e.firstChild;n.appendChild(r)}n.setAttribute("transform","matrix("+t[0]+" "+t[1]+" "+t[2]+" "+t[3]+" "+t[4]+" "+t[5]+")"),e.appendChild(n)}function w(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function E(e,t,n){t[n]&&t[n].toSVG&&e.push('','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.parseUnit,u=t.util.multiplyTransformMatrices,a={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"},f={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(u){var l=(new RegExp(v)).exec(u).filter(function(e){return e!==""&&e!=null}),c=l[1],h=l.slice(2).map(parseFloat);switch(c){case"translate":s(a,h);break;case"rotate":h[0]=t.util.degreesToRadians(h[0]),e(a,h);break;case"scale":n(a,h);break;case"skewX":r(a,h);break;case"skewY":i(a,h);break;case"matrix":a=h}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function o(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,r="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",s=new RegExp("^\\s*("+r+"+)\\s*,?"+"\\s*("+r+"+)\\s*,?"+"\\s*("+r+"+)\\s*,?"+"\\s*("+r+"+)\\s*"+"$");return function(r,u,a){if(!r)return;var f=new Date;g(r);var l=r.getAttribute("viewBox"),c=parseFloat(r.getAttribute("width")),h=parseFloat(r.getAttribute("height")),p,d;if(l&&(l=l.match(s))){var v=parseFloat(l[1]),m=parseFloat(l[2]),b=1,w=1;p=parseFloat(l[3]),d=parseFloat(l[4]),c&&c!==p&&(b=c/p),h&&h!==d&&(w=h/d),y(r,[b,0,0,w,-v,-m])}var E=t.util.toArray(r.getElementsByTagName("*"));if(E.length===0&&t.isLikelyNode){E=r.selectNodes('//*[name(.)!="svg"]');var S=[];for(var x=0,T=E.length;x/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){b.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),b.has(e,function(r){r?b.get(e,function(e){var t=w(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s. +parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return E(t,e,"backgroundColor"),E(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},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 e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]);if(e==="transparent"){this.setSource([255,255,255,0]);return}t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.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(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this._setImageSmoothing(),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},_setImageSmoothing:function(){var e=this.getContext();e.imageSmoothingEnabled=this.imageSmoothingEnabled,e.webkitImageSmoothingEnabled=this.imageSmoothingEnabled,e.mozImageSmoothingEnabled=this.imageSmoothingEnabled,e.msImageSmoothingEnabled=this.imageSmoothingEnabled,e.oImageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t&&t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;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(e){this.lowerCanvasEl=fabric.util.getById(e)||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(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getZoom:function(){return Math.sqrt(this.viewportTransform[0]*this.viewportTransform[3])},setViewportTransform:function(e){this.viewportTransform=e,this.renderAll();for(var t=0,n=this._objects.length;t"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.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",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop,t=this.canvas.viewportTransform,n=this._points[0],r=this._points[1];e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5]),e.beginPath(),this._points.length===2&&n.x===r.x&&n.y===r.y&&(n.x-=.5,r.x+=.5),e.moveTo(n.x,n.y);for(var i=1,s=this._points.length;in.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e,!0))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e,!0),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t,n,r){r||(r=this.upperCanvasEl);var i=e(t,r),s=r.getBoundingClientRect(),o;return i.x=i.x-this._offset.left,i.y=i.y-this._offset.top,n||(i=fabric.util.transformPoint(i,fabric.util.invertTransform(this.viewportTransform))),s.width===0||s.height===0?o={width:1,height:1}:o={width:r.width/s.width,height:r.height/s.height},{x:i.x*o.width,y:i.y*o.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),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(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&e.set("active",!0)},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center",canvas:this}),t.addWithUpdate(),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return} +e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(!e||e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){this.group&&this.group.transform(e,t),e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),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,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_renderControls:function(e,n){var r=this.getViewportTransform();e.save();if(this.active&&!n){var i;this.group&&(i=t.util.transformPoint(this.group.getCenterPoint(),r),e.translate(i.x,i.y),e.rotate(s(this.group.angle))),i=t.util.transformPoint(this.getCenterPoint(),r,null!=this.group),this.group&&(i.x*=this.group.scaleX,i.y*=this.group.scaleY),e.translate(i.x,i.y),e.rotate(s(this.angle)),this.drawBorders(e),this.drawControls(e)}e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke||this.strokeWidth===0)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",e?new t.Shadow(e):null)},setColor:function(e){return this.set("fill",e),this},setAngle:function(e){var t=(this.originX!=="center"||this.originY!=="center")&&this.centeredRotation;return t&&this._setOriginToCenter(),this.set("angle",e),t&&this._resetOrigin(),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=e(this.angle),r=this.getViewportTransform(),i=function(e){return fabric.util.transformPoint(e,r)},s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=t:f&&(o=t),l&&(s+=t),c&&(o+=t),this.currentWidth=s*this.scaleX,this.currentHeight=o*this.scaleY,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var h=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),p=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),d=Math.cos(p+n)*h,v=Math.sin(p+n)*h,m=Math.sin(n),g=Math.cos(n),y=this.getCenterPoint(),b=new fabric.Point(this.currentWidth,this.currentHeight),w=new fabric.Point(y.x-d,y.y-v),E=new fabric.Point(w.x+b.x*g,w.y+b.x*m),S=new fabric.Point(w.x-b.y*m,w.y+b.y*g),x=new fabric.Point(w.x+b.x/2*g,w.y+b.x/2*m),T=i(w),N=i(E),C=i(new fabric.Point(E.x-b.y*m,E.y+b.y*g)),k=i(S),L=i(new fabric.Point(w.x-b.y/2*m,w.y+b.y/2*g)),A=i(x),O=i(new fabric.Point(E.x-b.y/2*m,E.y+b.y/2*g)),M=i(new fabric.Point(S.x+b.x/2*g,S.y+b.x/2*m)),_=i(new fabric.Point(x.x,x.y)),D=Math.cos(p+n)*this.padding*Math.sqrt(2),P=Math.sin(p+n)*this.padding*Math.sqrt(2);return T=T.add(new fabric.Point(-D,-P)),N=N.add(new fabric.Point(P,-D)),C=C.add(new fabric.Point(D,P)),k=k.add(new fabric.Point(-P,D)),L=L.add(new fabric.Point((-D-P)/2,(-P+D)/2)),A=A.add(new fabric.Point((P-D)/2,-(P+D)/2)),O=O.add(new fabric.Point((P+D)/2,(P-D)/2)),M=M.add(new fabric.Point((D-P)/2,(D+P)/2)),_=_.add(new fabric.Point((P-D)/2,-(P+D)/2)),this.oCoords={tl:T,tr:N,br:C,bl:k,ml:L,mt:A,mr:O,mb:M,mtr:_},this._setCornerCoords&&this._setCornerCoords(),this}})}(),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(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getViewportTransform(),r=fabric.util.transformPoint(this.getCenterPoint(),n),i=fabric.Object.NUM_FRACTION_DIGITS,s="translate("+e(r.x,i)+" "+e(r.y,i)+")",o=t!==0?" rotate("+e(t,i)+")":"",u=this.scaleX===1&&this.scaleY===1&&n[0]===1&&n[3]===1?"":" scale("+e(this.scaleX*n[0],i)+" "+e(this.scaleY*n[3],i)+")",a=this.flipX?"matrix(-1 0 0 1 0 0) ":"",f=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[s,o,u,a,f].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=function(){return typeof G_vmlCanvasManager!="undefined"};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.getViewportTransform();e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor;var o=this.getWidth(),u=this.getHeight(),a=this.strokeWidth>1?this.strokeWidth:0,f=this.strokeLineCap==="round"||this.strokeLineCap==="square",l=this.type==="line"&&this.width===1,c=this.type==="line"&&this.height===1,h=f&&c||this.type!=="line",p=f&&l||this.type!=="line";l?o=a/i:c&&(u=a/s),h&&(o+=a/i),p&&(u+=a/s);var d=fabric.util.transformPoint(new fabric.Point(o,u),r,!0),v=d.x,m=d.y;this.group&&(v*=this.group.scaleX,m*=this.group.scaleY),e.strokeRect(~~(-(v/2)-t)-.5,~~(-(m/2)-t)-.5,~~(v+n)+1,~~(m+n)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var g=(this.flipY?m+t*2:-m-t*2)/2;e.beginPath(),e.moveTo(0,g),e.lineTo(0,g+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.getViewportTransform(),i=this.strokeWidth>1?this.strokeWidth:0,s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=i:f&&(o=i),l&&(s+=i),c&&(o+=i),s*=this.scaleX,o*=this.scaleY;var h=fabric.util.transformPoint(new fabric.Point(s,o),r,!0),p=h.x,d=h.y,v=-(p/2),m=-(d/2),g=this.padding,y=n,b=n-t,w=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1,e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,w,v-y-g,m-y-g),this._drawControl("tr",e,w,v+p-y+g,m-y-g),this._drawControl("bl",e,w,v-y-g,m+d+b+g),this._drawControl("br",e,w,v+p+b+g,m+d+b+g),this.get("lockUniScaling")||(this._drawControl("mt",e,w,v+p/2-y,m-y-g),this._drawControl("mb",e,w,v+p/2-y,m+d+b+g),this._drawControl("mr",e,w,v+p+b+g,m+d/2-y),this._drawControl("ml",e,w,v-y-g,m+d/2-y)),this.hasRotatingPoint&&this._drawControl("mtr",e,w,v+p/2-y,this.flipY?m+d+this.rotatingPointOffset-this.cornerSize/2+g:m-this.rotatingPointOffset-this.cornerSize/2-g),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize;this.isControlVisible(e)&&(t()||this.transparentCorners||n.clearRect(i,s,o,o),n[r](i,s,o,o))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),this._renderFill(e),this.stroke&&this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s||(s.left=0),"top"in s||(s.top=0),"transformMatrix"in s||(s.left-=n.width?n.width/2:0,s.top-=n.height?n.height/2:0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e. +height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.save(),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top*this.rx/this.ry:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES);"left"in i||(i.left=0),"top"in i||(i.top=0),"transformMatrix"in i||(i.left-=n.width?n.width/2:0,i.top-=n.height?n.height/2:0);var s=new t.Ellipse(r(i,n));return s.cx=parseFloat(e.getAttribute("cx"))||0,s.cy=parseFloat(e.getAttribute("cy"))||0,s},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx?Math.min(this.rx,this.width/2):0,n=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0,f=.4477152502;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.bezierCurveTo(s+r-f*t,o,s+r,o+f*n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.bezierCurveTo(s+r,o+i-f*n,s+r-f*t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.bezierCurveTo(s+f*t,o+i,s,o+i-f*n,s,o+i-n),e.lineTo(s,o+n),a&&e.bezierCurveTo(s,o+f*n,s+f*t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var f=0,l,c=this.path.length;fv)for(var g=1,y=l.length;g"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),e&&(this._objects.push(e),e.group=this),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e){if(!this.visible)return;e.save(),this.clipTo&&t.util.clipContext(this,e);for(var n=0,r=this._objects.length;n'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.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(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||0},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._transform(e,t);var n=this.transformMatrix,r=this.group&&this.group.type==="path-group";r&&e.translate(-this.group.width/2,-this.group.height/2),n&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),r&&e.translate(this.left,this.top),this._render(e),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE),n.originX||(n.originX="left");var i=new t.Text(e.textContent,n),s=0;return i.originX==="left"&&(s=i.getWidth()/2),i.originX==="right"&&(s=-i.getWidth()/2),i.set({left:i.getLeft()+s,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},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(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.__lastSelected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(e){var t=this.getSelectedText(),n=this._getClipboardData(e);n&&n.setData("text",t),this.copiedText=t,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(e){var t=null,n=this._getClipboardData(e);n?t=n.getData("text"):t=this.copiedText,t&&this.insertChars(t)},cut:function(e){if(this.selectionStart===this.selectionEnd)return;this.copy(),this.removeChars(e)},_getClipboardData:function(e){return e&&(e.clipboardData||fabric.window.clipboardData)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;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(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,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 807e2c508494187bfe6dd4c6072986546a2cb34b..e27e857323d12280262969727b544bd47426a9ea 100644 GIT binary patch literal 56373 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 literal 56257 zcmV(+K;6F|iwFo<0LfDT17=}ja%p2OZE0>UYI6Y8y=!CJMv^G{{rn0EGm!xje93Vp z0}A4CWGCZYC-z!OCOWd>g~+CaF$Hh{P!dPtf4^1LZ=gZR-aUKoos32FySuu&y1Kf$ zYS7uaSfz_uwDX@?K4U!4|3|rVozGSaR>m*izTIJW)5U7W;!9RmtAdr`bT!Yj@E>KK z?Odl>I!{>?Yj#Ik`)(caE-Dk*$-@0aSLA6gzXOEapEC5BE2$DAPQP zyixz#{`cNyT&ZVc~OHv0{UDWV4{3nz1a?+5(}sT06`YAv+O(=vqi~v+WOblASA_S=dgC$#(>IH%u&nYWPf4@OC=2I68KWWu@?M4cd=4=cY#*1bh>Fd|SJdk$ zUo04nIlfP3v&dLtd{i91C1FHASuPiHrHF)3%}1a{$Y6w3T%W};JE+DCMk>l@@2G~C zvl*M|DaZ9{jvCe}khkJp2KheFk_AlA@h<^h9FI3)n!)g^mz5p_qba`UP^VIttm4g< zzG^0$6lc|W4B+YmiA<*q@Ov0CxjgKS%IK$eixV0XvK&T@{)Cl+U4N!1ucwx5h${gWZEbCax(1__;9lktyob9Y4t646)m7=b`dAxK9kvMo zttxiyY_UEpKwZdPzP?^oYje8W@*6a96PD?}*cTMqgi~NM50G4MvJzKI#|g9sMVCL9KvO=$KL5u=KKPO7VZ`OgBToPQ@( zlI;U_P~iQW!RY(p*x0k<``V`ML^r)O^ahrRWuaC@hO2@RQhi8(kGg)7)sa^erM}D; zIjl_jEGWAlbo{Evx}zZILNzmXSuh5i;D=@cTqTPV0fA*ofX!Ve?Xmv416u=yiY|sy z0VqFXw~}9_w*4~9gP;#vgQ{v1DhATsJw;XNTfagGZ%gOg2lB0Cv15f1=FSP%f>jRroW2B4N6qZXjzU|hv#8AXOY{2htk z{qqoihUc(F49~}WDono829AG!7cuPZ8h%~?eK43Rh>m+j|1QLS;}?JfGUPv|cWmZH z#${5J?8il(RQ@lk>kA-XEa;08Ff}lE%JFNKR*qp0KEApihWnd85BltmO>r;FVxvkH zjLX}!nqCpegZpVxGVl7@i{y-UG(SGrf6@PTOgW})Ir=X|4&eV?Ie6l-au@&0zDS?8 zrFTaAV<7d(YEh{iNN500*^grMP5QPwqGkW@i=-^wP-fPI!jS}6D%hN^*#d|(?5tBb z_Pnh8A%gzb<&qUg&`%!-fk3N~J{^jqMwu^e*e_5+2`3%cllfjzkB`i~h~fqCe5%OH)@v+S%qKbMG@ZbF#;*_-R+lGPS- zSn!Sj3RS=X@EsbC9ukQ+Sb1uJiyxDzGGMV%IICdgvB_8(HKjwdW!W8Xz-Lzj8D3dT+z?#C{;nsHamf_7{5Ap)oE{5vFQ9pnC zDGV|%%Xh#~r&(M;)z~a>3n9xEDVzeDe2N67I$@+Rl5RJL&3^?A!T#(B;iVp`6P z!)p6c5D)u+YSkGA;Bdl!0Zg+ZxqX$CS8VncMq&1<2-6U@>u|+EmBeMQ2UqFow7diUMIN^8y|)^ zhvH9>1`P!tzc?&{q8qQymfh|*SHQ&|E?^Kvynq5{vx$e|pp)E-JYJP|4pl>C(DDpg z26|ZK1vCx}Dp8T6B)dsUfe=ns39yf~Na{o}-Zn7;hwPEBWSFv(eX1dd9vM@5ed#GMy_`;2 zS>{FQWOWp38mCLxLWsRo*sV^Oz1~ z!1Hkll;%D~_!)_?;f!-g%rOxoRuCZ*6ZlRbF@eNYH%2DnEIIEK@CW8}jCJAMt~MJE z=(7}hh@DKKWBeDwBM}~n@V*G|pPv(BCa3L(e71J1d7qP4WPGm^_gPmqBlzT7|i*_ zA{5-F{IRG?)%`t_YZ+8@20Ezl65CU+I*s*l8 z+4x&-n-JQ{3#rB%Ftfa2j3#0AMerZPyS=LQfcqf8~w=-vozcT>1;D z0Ez+xQ{0C9W&du}gFiz!-|O!#e6R6)&Ew^Fcmv1BS+BqUVtjLeu)mQ|zShDG{{~*Bwy~`lHt)-24 z+6dEL$G5$U@oVfWc4;(u-HrDWH4vxnslBWC;Uvy78uLsBB5q$Y4-BEy{@!i=85Tna*9sUv? z(bOzaz;OcX35qsOuFf~cEXH@?otD^_av5+YND?pB@eN^85GGn|vI4}?Vv`k~_|>SY zK#8O-NThQq5@+L;dgtOKR5Ix*l# z2+S$~_R2twE7&bM@l}|?pFp7Hd{6-)@db?sEf+NtE)nQAD~m=zQu zwA5)iE-96k<8oPaRxqC4ypx2N0K63-`U1W$5I!A0M-bk|-w&R5R3#UI`909zoqfb- z*1hW8cBbKRoOY+(+s+l>9_!A+69_NEU*bE6TLPY)K(5)?7)X3}(|HYGIu0-4cMZQc zonIh)1mRyGd<5Y;2%kXs4#Fqrbd9v(!u$J8SmB>6CZ68l|M9jnEKIRwA6fR7a6oKQ zY`z~CxHqog2e!lneqcwO!w>A^3;6l=9Pq4w4IKbooPBo=5KeuhStU#!lD>prWXa_= zgXK0mSV~eoldJ9qj$!%&CtRM*@J-wQw>&>{=tHqsQ`qy$^HROc|R z;G9{%<9kBE1FKwW902ir&CI(^<6f{(8-8yDAgLxuwBW=W(H4YDE6|r8nJ-ddA3_O3 zEP~?JvYye*WdMcaW*sAmDIeEkg~S7R=#~_Vt;X&G*1#BV@^rQ{e0UH++|PsRs>pAN z=RSc7NGLPr#}9Gl=lgi3(BSa!ka&d509tP(zy?fa?c$60nj#h=Pkn7QItR9FH;#)5 zl!^*2wZR{rv;Y3x@tc!3zrFtS=9eGe{PO1H)Jpy3^-nKrsnCcIT-3uuZzRZ$A^FFx z0FDO%(Z%90&g_oE$>=afzK=3rCwG3_^$#IVyy1kZX2KiDQFhG z+Z{T3SLWBu(K(F%Z|K`&T^q`-IWdfGMqLO-2`zJro1S&vsrOVKds1U|`FH^RL)ByC z;Ha;Adl^?mDYnluznye+mnXzcp-8P~AwkxquW~pFjB9wHH=G>L@_Q59$UJd4cf03f ze&B)hZa0H1$3+}BoSyGWl8_x#^+o8bt(8tpMPni*M2d}l*+2)=_&&{U^3SLk0!P%S z2!R|$S?i9@YKSIuXrQ^cf;YN|OI`=gKCP_Qw3!3Cc2J-e$|Hj7v|UE~>bXImF^ zg)no=1zwa4dR@OCOa_jNAzEvLSIU(rdteXS{iF zV(WK^n*Ts)$=%E0d3O+cW|J!Z&y-NZGJYu*-^*JuoZ)1dRwQ8otYakv+3(kjCf03X zQh=wH(jOyf#eFoQ_d9#Wea$*m%$OKyh`U4>i4dUp~e{nFDSt1YA&OT zKm)`E=vOt+r!Y^tG~d)#L0}42@uEhak&=Ts$yf`273OEjxuFWRviNif3BY=H0&G8K zXUvI=S9S`3=@`cw!?AMPK?2sOxe)DjsWboqaqs0#SOh!;AE{yS(w73w5g$ng- zofy2eIH}b#IK+5*mOXWD09u>k24;;0M^ETlsmn0yu6e4jj=a^LE*TV&a_G=^*7K6Vw6-L?}FC%Cp9OCY9}hjNu(C-Len< z@Fz;b{=m7JhgJ4D%Wt#b&x3x&%F53)r@v8HY)d31{@hN(iM75)uT_^$7Ve%cRgHiF$L_~+rz&oWDv3(5v;NCMg7{M!21cU zshqX-M0aJzB}Nrq*u}2QV|n9P!PGIz$LFL%%?fer3An~4W<*57hcK-xG8|8fe6e`T z=G95Q^bJkY`@84{wzh5xLz-9NI=beeDqkACy|nf0nA8UK=vfD_v);r5PBOb>GkW^L zN-q*=rKfmhKqWYap%iC$J`ukF+@5cI%g^jQcz8f|JHkJL`g#K0Jb}Rt7D}Gs^xT>% zte-xuvh<%T_U08r(+Fb4{Oi*vuZs%V$f1q>M*YBL8N}V-qoL~?lT;J17%72lHi6G) zGl{GEi=D>H7Z3FcO|5w^^tg(r9UGv+i-k8&FA5v$Q#w*r$@GefLPayCL(aC_bB7BQ z3s3RSRk$1{6W^A{5UBd~&eQ$d?g;hw9Jw9iQU!u&?rMTx+@+|}SNJ(9voHAVJO1E% z6AHtWi71@BvvWRktGI+BuxLbrXPF`+}sR5R V;*GZ%6jKQT?rRmqK=Xqe7wKoDHH%8 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 0b245194..92fbbbda 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -630,12 +630,7 @@ fabric.Collection = { groupSVGElements: function(elements, options, path) { var object; - if (elements.length > 1) { - object = new fabric.PathGroup(elements, options); - } - else { - object = elements[0]; - } + object = new fabric.PathGroup(elements, options); if (typeof path !== 'undefined') { object.setSourcePath(path); @@ -3111,6 +3106,25 @@ if (typeof console !== 'undefined') { } } + /** + * Add a element that envelop all SCG elements and makes the viewbox transformMatrix descend on all elements + */ + function addSvgTransform(doc, matrix) { + matrix[3] = matrix[0] = (matrix[0] > matrix[3] ? matrix[3] : matrix[0]); + if (!(matrix[0] !== 1 || matrix[3] !== 1 || matrix[4] !== 0 || matrix[5] !== 0)) return; + // default is to preserve aspect ratio + // preserveAspectRatio attribute to be implemented + matrix[4] *= matrix[0]; + matrix[5] *= matrix[3]; + var el = document.createElement('g'); + while (doc.firstChild != null) { + var node = doc.firstChild; + el.appendChild(node); + } + el.setAttribute('transform','matrix(' + matrix[0] + ' ' + matrix[1] + ' ' + matrix[2] + ' ' + matrix[3] + ' ' + matrix[4] + ' ' + matrix[5] + ')'); + doc.appendChild(el); + } + /** * Parses an SVG document, converts it to an array of corresponding fabric.* instances and passes them to a callback * @static @@ -3154,6 +3168,27 @@ if (typeof console !== 'undefined') { parseUseDirectives(doc); + var viewBoxAttr = doc.getAttribute('viewBox'), + widthAttr = parseFloat(doc.getAttribute('width')), + heightAttr = parseFloat(doc.getAttribute('height')), + viewBoxWidth, + viewBoxHeight; + + if (viewBoxAttr && (viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue))) { + var minX = parseFloat(viewBoxAttr[1]), + minY = parseFloat(viewBoxAttr[2]), + scaleX = 1, scaleY = 1; + viewBoxWidth = parseFloat(viewBoxAttr[3]); + viewBoxHeight = parseFloat(viewBoxAttr[4]); + if (widthAttr && widthAttr !== viewBoxWidth ) { + scaleX = widthAttr / viewBoxWidth; + } + if (heightAttr && heightAttr !== viewBoxHeight) { + scaleY = heightAttr / viewBoxHeight; + } + addSvgTransform(doc, [scaleX, 0, 0, scaleY, -minX, -minY]); + } + var descendants = fabric.util.toArray(doc.getElementsByTagName('*')); if (descendants.length === 0 && fabric.isLikelyNode) { @@ -3177,42 +3212,15 @@ if (typeof console !== 'undefined') { return; } - var viewBoxAttr = doc.getAttribute('viewBox'), - widthAttr = parseFloat(doc.getAttribute('width')), - heightAttr = parseFloat(doc.getAttribute('height')), - width = null, - height = null, - viewBoxWidth, - viewBoxHeight, - minX, - minY; - - if (viewBoxAttr && (viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue))) { - minX = parseFloat(viewBoxAttr[1]); - minY = parseFloat(viewBoxAttr[2]); - viewBoxWidth = parseFloat(viewBoxAttr[3]); - viewBoxHeight = parseFloat(viewBoxAttr[4]); - } - - if (viewBoxWidth && widthAttr && viewBoxWidth !== widthAttr) { - width = viewBoxWidth; - height = viewBoxHeight; - } - else { - // values of width/height attributes overwrite those extracted from viewbox attribute - width = widthAttr ? widthAttr : viewBoxWidth; - height = heightAttr ? heightAttr : viewBoxHeight; - } - var options = { - width: width, - height: height, + width: widthAttr ? widthAttr : viewBoxWidth, + height: heightAttr ? heightAttr : viewBoxHeight, widthAttr: widthAttr, heightAttr: heightAttr }; - fabric.gradientDefs = fabric.getGradientDefs(doc); - fabric.cssRules = fabric.getCSSRules(doc); + fabric.gradientDefs = extend(fabric.getGradientDefs(doc), fabric.gradientDefs); + fabric.cssRules = extend(fabric.getCSSRules(doc), fabric.cssRules); // Precedence of rules: style > class > attribute fabric.parseElements(elements, function(instances) { @@ -3662,7 +3670,7 @@ fabric.ElementsParser.prototype._createObject = function(klass, el, index) { else { var obj = klass.fromElement(el, this.options); this.reviver && this.reviver(el, obj); - this.instances.splice(index, 0, obj); + this.instances[index] = obj; this.checkIfDone(); } }; @@ -3671,7 +3679,7 @@ fabric.ElementsParser.prototype.createCallback = function(index, el) { var _this = this; return function(obj) { _this.reviver && _this.reviver(el, obj); - _this.instances.splice(index, 0, obj); + _this.instances[index] = obj; _this.checkIfDone(); }; }; @@ -11125,7 +11133,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {CanvasRenderingContext2D} ctx Context to render on */ _renderStroke: function(ctx) { - if (!this.stroke) return; + if (!this.stroke || this.strokeWidth === 0) return; ctx.save(); if (this.strokeDashArray) { @@ -13331,16 +13339,17 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.beginPath(); var isInPathGroup = this.group && this.group.type === 'path-group'; - if (isInPathGroup && !this.transformMatrix) { + if (isInPathGroup) { // Line coords are distances from left-top of canvas to origin of line. // // To render line in a path-group, we need to translate them to // distances from center of path-group to center of line. var cp = this.getCenterPoint(); ctx.translate( - -this.group.width/2 + cp.x, - -this.group.height / 2 + cp.y + cp.x, + cp.y ); + if (!this.transformMatrix) ctx.translate(-this.group.width / 2, -this.group.height / 2); } if (!this.strokeDashArray || this.strokeDashArray && supportsLineDash) { @@ -14488,8 +14497,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot var points = fabric.parsePointsAttribute(element.getAttribute('points')), parsedAttributes = fabric.parseAttributes(element, fabric.Polyline.ATTRIBUTE_NAMES); - fabric.util.normalizePoints(points, options); - + if (!('transformMatrix' in parsedAttributes)) { + fabric.util.normalizePoints(points, options); + } return new fabric.Polyline(points, fabric.util.object.extend(parsedAttributes, options), true); }; /* _FROM_SVG_END_ */ @@ -14698,8 +14708,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot var points = fabric.parsePointsAttribute(element.getAttribute('points')), parsedAttributes = fabric.parseAttributes(element, fabric.Polygon.ATTRIBUTE_NAMES); - fabric.util.normalizePoints(points, options); - + if (!('transformMatrix' in parsedAttributes)) { + fabric.util.normalizePoints(points, options); + } return new fabric.Polygon(points, extend(parsedAttributes, options), true); }; /* _FROM_SVG_END_ */ @@ -14876,7 +14887,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @private * @param {CanvasRenderingContext2D} ctx context to render path on */ - _render: function(ctx) { + _render: function(ctx, noTransform) { var current, // current instruction previous = null, subpathStartX = 0, @@ -14892,6 +14903,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot l = -((this.width / 2) + this.pathOffset.x), t = -((this.height / 2) + this.pathOffset.y); + if (noTransform) { + l += this.width / 2; + t += this.height / 2; + } + for (var i = 0, len = this.path.length; i < len; ++i) { current = this.path[i]; @@ -15173,6 +15189,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot if (!this.visible) return; ctx.save(); + if (noTransform) { + ctx.translate(-this.width/2, -this.height/2); + } var m = this.transformMatrix; if (m) { @@ -15187,7 +15206,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this.clipTo && fabric.util.clipContext(this, ctx); ctx.beginPath(); ctx.globalAlpha = this.group ? (ctx.globalAlpha * this.opacity) : this.opacity; - this._render(ctx); + this._render(ctx, noTransform); this._renderFill(ctx); this._renderStroke(ctx); this.clipTo && ctx.restore(); @@ -18438,14 +18457,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag */ _render: function(ctx) { - var isInPathGroup = this.group && this.group.type === 'path-group'; - if (isInPathGroup && !this.transformMatrix) { - ctx.translate(-this.group.width/2 + this.left, -this.group.height / 2 + this.top); - } - else if (isInPathGroup && this.transformMatrix) { - ctx.translate(-this.group.width/2, -this.group.height/2); - } - if (typeof Cufon === 'undefined' || this.useNative === true) { this._renderViaNative(ctx); } @@ -18461,8 +18472,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag _renderViaNative: function(ctx) { var textLines = this.text.split(this._reNewline); - this.transform(ctx, fabric.isLikelyNode); - this._setTextStyles(ctx); this.width = this._getTextWidth(ctx, textLines); @@ -18676,7 +18685,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @param {Array} textLines Array of all text lines */ _renderTextStroke: function(ctx, textLines) { - if (!this.stroke && !this._skipFillStrokeCheck) return; + if ((!this.stroke || this.strokeWidth === 0) && !this._skipFillStrokeCheck) return; var lineHeights = 0; @@ -18852,15 +18861,24 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Renders text instance on a specified context * @param {CanvasRenderingContext2D} ctx Context to render on */ - render: function(ctx) { + render: function(ctx, noTransform) { // do not render if object is not visible if (!this.visible) return; ctx.save(); + this._transform(ctx, noTransform); + var m = this.transformMatrix; - if (m && (!this.group || this.group.type === 'path-group')) { + var isInPathGroup = this.group && this.group.type === 'path-group'; + if (isInPathGroup) { + ctx.translate(-this.group.width/2, -this.group.height/2); + } + if (m) { ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]); } + if (isInPathGroup) { + ctx.translate(this.left, this.top); + } this._render(ctx); ctx.restore(); }, @@ -19175,7 +19193,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag } if (!options.originX) { - options.originX = 'center'; + options.originX = 'left'; } var text = new fabric.Text(element.textContent, options); @@ -19185,9 +19203,15 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag x/y attributes in SVG correspond to the bottom-left corner of text bounding box top/left properties in Fabric correspond to center point of text bounding box */ - + var offX = 0; + if (text.originX === 'left') { + offX = text.getWidth() / 2; + } + if (text.originX === 'right') { + offX = -text.getWidth() / 2; + } text.set({ - left: text.getLeft() + text.getWidth() / 2, + left: text.getLeft() + offX, top: text.getTop() - text.getHeight() / 2 });