From 72a6c273bf06120dc961c6bebb9df8f972fa1c6c Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sun, 17 Jul 2016 08:35:18 +0200 Subject: [PATCH] remove lastRendered logic (#3111) --- dist/fabric.js | 51 ++++++++++--------------------------- dist/fabric.min.js | 14 +++++----- dist/fabric.min.js.gz | Bin 66330 -> 66282 bytes dist/fabric.require.js | 29 ++++++++------------- src/canvas.class.js | 46 ++++++++------------------------- src/shapes/group.class.js | 3 ++- src/shapes/object.class.js | 2 +- test/unit/canvas.js | 45 +++++++++++++++++++++----------- 8 files changed, 76 insertions(+), 114 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 6a9955ec..f264747b 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -8427,15 +8427,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ altActionKey: 'shiftKey', - /** - * Indicates which key enable last rendered selection independently of stack position - * values: altKey, shiftKey, ctrlKey - * @since 1.6.3 - * @type String - * @default - */ - lastRenderedKey: 'altKey', - /** * Indicates that canvas is interactive. This property should not be changed. * @type Boolean @@ -8676,9 +8667,11 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab isTargetTransparent: function (target, x, y) { var hasBorders = target.hasBorders, transparentCorners = target.transparentCorners, - ctx = this.contextCache; + ctx = this.contextCache, + originalColor = target.selectionBackgroundColor; target.hasBorders = target.transparentCorners = false; + target.selectionBackgroundColor = ''; ctx.save(); ctx.transform.apply(ctx, this.viewportTransform); @@ -8689,6 +8682,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab target.hasBorders = hasBorders; target.transparentCorners = transparentCorners; + target.selectionBackgroundColor = originalColor; var isTransparent = fabric.util.isTransparent( ctx, x, y, this.targetFindTolerance); @@ -9257,19 +9251,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab } }, - /** - * @private - */ - _isLastRenderedObject: function(pointer, e) { - var lastRendered = this.lastRenderedWithControls; - return ( - (this.preserveObjectStacking || e[this.lastRenderedKey]) && - lastRendered && - lastRendered.visible && - (this.containsPoint(null, lastRendered, pointer) || - lastRendered._findTargetCorner(pointer))); - }, - /** * Method that determines what object we are clicking on * @param {Event} e mouse event @@ -9281,7 +9262,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab } var pointer = this.getPointer(e, true), - activeGroup = this.getActiveGroup(); + activeGroup = this.getActiveGroup(), + activeObject = this.getActiveObject(); // first check current group (if one exists) // active group does not check sub targets like normal groups. @@ -9290,14 +9272,13 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab return activeGroup; } - var objects = this._objects; - this.targets = [ ]; - - if (this._isLastRenderedObject(pointer, e)) { - objects = [this.lastRenderedWithControls]; + if (activeObject && this._checkTarget(pointer, activeObject)) { + return activeObject; } - var target = this._searchPossibleTargets(objects, pointer); + this.targets = [ ]; + + var target = this._searchPossibleTargets(this._objects, pointer); this._fireOverOutEvents(target, e); return target; }, @@ -9694,7 +9675,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab continue; } this._objects[i]._renderControls(ctx); - this.lastRenderedWithControls = this._objects[i]; } }, @@ -9703,9 +9683,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @param {fabric.Object} obj Object that was removed */ _onObjectRemoved: function(obj) { - if (obj === this.lastRenderedWithControls) { - delete this.lastRenderedWithControls; - } this.callSuper('_onObjectRemoved', obj); }, @@ -9715,7 +9692,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @chainable */ clear: function () { - delete this.lastRenderedWithControls; return this.callSuper('clear'); } }); @@ -11998,7 +11974,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Boolean} fromLeft When true, context is transformed to object's top/left corner. This is used when rendering text on Node */ transform: function(ctx, fromLeft) { - if (this.group && this.canvas.preserveObjectStacking && this.group === this.canvas._activeGroup) { + if (this.group && !this.group._transformDone && this.group === this.canvas._activeGroup) { this.group.transform(ctx); } var center = fromLeft ? this._getLeftTopCoords() : this.getCenterPoint(); @@ -17534,14 +17510,15 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this.transform(ctx); this._setShadow(ctx); this.clipTo && fabric.util.clipContext(this, ctx); + this._transformDone = true; // the array is now sorted in order of highest first, so start from end for (var i = 0, len = this._objects.length; i < len; i++) { this._renderObject(this._objects[i], ctx); } this.clipTo && ctx.restore(); - ctx.restore(); + this._transformDone = false; }, /** diff --git a/dist/fabric.min.js b/dist/fabric.min.js index c516dc58..f63a50a9 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,8 +1,8 @@ -var fabric=fabric||{version:"1.6.3"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(""),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;for(var i=e.split("."),r=i.length,n=t||fabric.window,s=0;sr;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){for(var e=t.prototype,i=e.stateProperties.length;i--;){var r=e.stateProperties[i],n=r.charAt(0).toUpperCase()+r.slice(1),s="set"+n,o="get"+n;e[o]||(e[o]=function(t){return new Function('return this.get("'+t+'")')}(r)),e[s]||(e[s]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(r))}},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);for(var n=!0,s=t.getImageData(e,i,2*r||1,2*r||1),o=3,a=s.data.length;o0?L-=2*f:1===c&&L<0&&(L+=2*f);for(var D=Math.ceil(Math.abs(L/f*2)),E=[],I=L/D,R=8/3*Math.sin(I/4)*Math.sin(I/4)/Math.sin(I/2),F=P+I,B=0;B=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,S=Math.abs,C=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),S(u)<1e-12){if(S(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){var e=this.constructor.superclass.prototype[t];return arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(l(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(c){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var l;l=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=l}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s,o=n.method?n.method.toUpperCase():"GET",a=n.onComplete||function(){},h=r();return h.onreadystatechange=function(){4===h.readyState&&(a(h),h.onreadystatechange=e)},"GET"===o&&(s=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),h.open(o,i,!0),"POST"!==o&&"PUT"!==o||h.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),h.send(s),h}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(r){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function d(i){r=i||+new Date;var u=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(u,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(d))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return y;if((f||d)&&(_=" translate("+x(f)+" "+x(d)+") "),r=_+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");null!=t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),y}function g(t){var e=t.objects,i=t.options;return e=e.map(function(t){return v[m(t.type)].fromObject(t)}),{objects:e,options:i}}function p(t,e,i){e[i]&&e[i].toSVG&&t.push('\t\n','\t\t\n\t\n')}var v=t.fabric||(t.fabric={}),b=v.util.object.extend,m=v.util.string.capitalize,y=v.util.object.clone,_=v.util.toFixed,x=v.util.parseUnit,S=v.util.multiplyTransformMatrices,C=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,w=/^(symbol|image|marker|pattern|view|svg)$/i,O=/^(?:pattern|defs|symbol|metadata)$/i,T=/^(symbol|g|a|svg)$/i,k={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},j={stroke:"strokeOpacity",fill:"fillOpacity"};v.cssRules={},v.gradientDefs={},v.parseTransformAttribute=function(){function t(t,e){var i=e[0],r=3===e.length?e[1]:0,n=3===e.length?e[2]:0;t[0]=Math.cos(i),t[1]=Math.sin(i),t[2]=-Math.sin(i),t[3]=Math.cos(i),t[4]=r-(t[0]*r+t[2]*n),t[5]=n-(t[1]*r+t[3]*n)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e){t[2]=Math.tan(v.util.degreesToRadians(e[0]))}function r(t,e){t[1]=Math.tan(v.util.degreesToRadians(e[0]))}function n(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var s=[1,0,0,1,0,0],o=v.reNum,a="(?:\\s+,?\\s*|,\\s*)",h="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",c="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+")"+a+"("+o+"))?\\s*\\))",u="(?:(scale)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",f="(?:(translate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")\\s*\\))",g="(?:"+d+"|"+f+"|"+u+"|"+l+"|"+h+"|"+c+")",p="(?:"+g+"(?:"+a+"*"+g+")*)",b="^\\s*(?:"+p+"?)\\s*$",m=new RegExp(b),y=new RegExp(g,"g"); +var fabric=fabric||{version:"1.6.3"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(""),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;for(var i=e.split("."),r=i.length,n=t||fabric.window,s=0;sr;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){for(var e=t.prototype,i=e.stateProperties.length;i--;){var r=e.stateProperties[i],n=r.charAt(0).toUpperCase()+r.slice(1),s="set"+n,o="get"+n;e[o]||(e[o]=function(t){return new Function('return this.get("'+t+'")')}(r)),e[s]||(e[s]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(r))}},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);for(var n=!0,s=t.getImageData(e,i,2*r||1,2*r||1),o=3,a=s.data.length;o0?D-=2*f:1===c&&D<0&&(D+=2*f);for(var L=Math.ceil(Math.abs(D/f*2)),E=[],I=D/L,F=8/3*Math.sin(I/4)*Math.sin(I/4)/Math.sin(I/2),R=P+I,B=0;B=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,S=Math.abs,C=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),S(u)<1e-12){if(S(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){var e=this.constructor.superclass.prototype[t];return arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(l(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(c){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var l;l=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=l}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s,o=n.method?n.method.toUpperCase():"GET",a=n.onComplete||function(){},h=r();return h.onreadystatechange=function(){4===h.readyState&&(a(h),h.onreadystatechange=e)},"GET"===o&&(s=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),h.open(o,i,!0),"POST"!==o&&"PUT"!==o||h.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),h.send(s),h}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(r){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function d(i){r=i||+new Date;var u=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(u,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(d))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return y;if((f||d)&&(_=" translate("+x(f)+" "+x(d)+") "),r=_+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");null!=t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),y}function g(t){var e=t.objects,i=t.options;return e=e.map(function(t){return v[m(t.type)].fromObject(t)}),{objects:e,options:i}}function p(t,e,i){e[i]&&e[i].toSVG&&t.push('\t\n','\t\t\n\t\n')}var v=t.fabric||(t.fabric={}),b=v.util.object.extend,m=v.util.string.capitalize,y=v.util.object.clone,_=v.util.toFixed,x=v.util.parseUnit,S=v.util.multiplyTransformMatrices,C=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,w=/^(symbol|image|marker|pattern|view|svg)$/i,O=/^(?:pattern|defs|symbol|metadata)$/i,T=/^(symbol|g|a|svg)$/i,k={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},j={stroke:"strokeOpacity",fill:"fillOpacity"};v.cssRules={},v.gradientDefs={},v.parseTransformAttribute=function(){function t(t,e){var i=e[0],r=3===e.length?e[1]:0,n=3===e.length?e[2]:0;t[0]=Math.cos(i),t[1]=Math.sin(i),t[2]=-Math.sin(i),t[3]=Math.cos(i),t[4]=r-(t[0]*r+t[2]*n),t[5]=n-(t[1]*r+t[3]*n)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e){t[2]=Math.tan(v.util.degreesToRadians(e[0]))}function r(t,e){t[1]=Math.tan(v.util.degreesToRadians(e[0]))}function n(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var s=[1,0,0,1,0,0],o=v.reNum,a="(?:\\s+,?\\s*|,\\s*)",h="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",c="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+")"+a+"("+o+"))?\\s*\\))",u="(?:(scale)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",f="(?:(translate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")\\s*\\))",g="(?:"+d+"|"+f+"|"+u+"|"+l+"|"+h+"|"+c+")",p="(?:"+g+"(?:"+a+"*"+g+")*)",b="^\\s*(?:"+p+"?)\\s*$",m=new RegExp(b),y=new RegExp(g,"g"); return function(o){var a=s.concat(),h=[];if(!o||o&&!m.test(o))return a;o.replace(y,function(o){var c=new RegExp(g).exec(o).filter(function(t){return""!==t&&null!=t}),l=c[1],u=c.slice(2).map(parseFloat);switch(l){case"translate":n(a,u);break;case"rotate":u[0]=v.util.degreesToRadians(u[0]),t(a,u);break;case"scale":e(a,u);break;case"skewX":i(a,u);break;case"skewY":r(a,u);break;case"matrix":a=u}h.push(a.concat()),a=s.concat()});for(var c=h[0];h.length>1;)h.shift(),c=v.util.multiplyTransformMatrices(c,h[0]);return c}}();var A=new RegExp("^\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*$");v.parseSVGDocument=function(){function t(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}return function(e,i,r){if(e){f(e);var n=new Date,s=v.Object.__uid++,o=d(e),a=v.util.toArray(e.getElementsByTagName("*"));if(o.svgUid=s,0===a.length&&v.isLikelyNode){a=e.selectNodes('//*[name(.)!="svg"]');for(var h=[],c=0,l=a.length;c/i,""))),n&&n.documentElement||e&&e(null),v.parseSVGDocument(n.documentElement,function(i,r){M.set(t,{objects:v.util.array.invoke(i,"toObject"),options:r}),e&&e(i,r)},i)}t=t.replace(/^\n\s*/,"").trim(),M.has(t,function(i){i?M.get(t,function(t){var i=g(t);e(i.objects,i.options)}):new v.util.request(t,{method:"get",onComplete:r})})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else v.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));v.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)},createSVGFontFacesMarkup:function(t){for(var e,i,r,n,s,o,a,h="",c={},l=v.fontPaths,u=0,f=t.length;u',"","\n"].join("")),h},createSVGRefElementsMarkup:function(t){var e=[];return p(e,t,"backgroundColor"),p(e,t,"overlayColor"),e.join("")}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return new e(this.x+(t.x-this.x)/2,this.y+(t.y-this.y)/2)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){this.x=t,this.y=e},setFromPoint:function(t){this.x=t.x,this.y=t.y},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={appendPoint:function(t){this.points.push(t)},appendPoints:function(t){this.points=this.points.concat(t)}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.points.push(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n=new e,s=r.length,o=0;o0&&(n.status="Intersection"),n},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(){return{type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform}},toSVG:function(t){var e,i,r=fabric.util.object.clone(this.coords);if(this.colorStops.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var n in r)"x1"===n||"x2"===n||"r2"===n?r[n]+=this.offsetX-t.width/2:"y1"!==n&&"y2"!==n||(r[n]+=this.offsetY-t.height/2);i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']);for(var s=0;s\n');return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:"y1"!==r&&"y2"!==r||(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;s\n\n\n'},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,preserveObjectStacking:!1,viewportTransform:[1,0,0,1,0,0],backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,_initStatic:function(t,e){this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,this.renderAll.bind(this)),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,this.renderAll.bind(this)),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,this.renderAll.bind(this)),e.overlayColor&&this.setOverlayColor(e.overlayColor,this.renderAll.bind(this)),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){if(e&&e.source){var r=this;fabric.util.loadImage(e.source,function(n){r[t]=new fabric.Pattern({source:n,repeat:e.repeat,offsetX:e.offsetX,offsetY:e.offsetY}),i&&i()})}else this[t]=e,i&&i();return this},_createCanvasElement:function(){var t=fabric.document.createElement("canvas");if(t.style||(t.style={}),!t)throw n;return this._initCanvasElement(t),t},_initCanvasElement:function(t){if(fabric.util.createCanvasElement(t),"undefined"==typeof t.getContext)throw n},_initOptions:function(t){for(var e in t)this[e]=t[e];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return Math.sqrt(this.viewportTransform[0]*this.viewportTransform[3])},setViewportTransform:function(t){var e=this.getActiveGroup();this.viewportTransform=t,this.renderAll();for(var i=0,r=this._objects.length;i"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"\n")},_setSVGObjects:function(t,e){for(var i,r,n=0,s=this.getObjects(),o=s.length;n\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this.getActiveGroup?this.getActiveGroup():null;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this.getActiveGroup?this.getActiveGroup():null;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this.getActiveGroup?this.getActiveGroup():null;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop;t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur,t.shadowOffsetX=this.shadow.offsetX,t.shadowOffsetY=this.shadow.offsetY}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&ci.padding?t.x<0?t.x+=i.padding:t.x-=i.padding:t.x=0,n(t.y)>i.padding?t.y<0?t.y+=i.padding:t.y-=i.padding:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta);return a<0&&(a=360+a),n.target.angle=a%360,!0},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.setAngle(0)},_drawSelection:function(){var t=this.contextTop,e=this._groupSelector,i=e.left,r=e.top,o=n(i),a=n(r);if(t.fillStyle=this.selectionColor,t.fillRect(e.ex-(i>0?0:-i),e.ey-(r>0?0:-r),o,a),t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1){var h=e.ex+s-(i>0?0:o),c=e.ey+s-(r>0?0:a);t.beginPath(),fabric.util.drawDashedLine(t,h,c,h+o,c,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c+a-1,h+o,c+a-1,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c,h,c+a,this.selectionDashArray),fabric.util.drawDashedLine(t,h+o-1,c,h+o-1,c+a,this.selectionDashArray),t.closePath(),t.stroke()}else t.strokeRect(e.ex+s-(i>0?0:o),e.ey+s-(r>0?0:a),o,a)},_isLastRenderedObject:function(t,e){var i=this.lastRenderedWithControls;return(this.preserveObjectStacking||e[this.lastRenderedKey])&&i&&i.visible&&(this.containsPoint(null,i,t)||i._findTargetCorner(t))},findTarget:function(t,e){if(!this.skipTargetFind){var i=this.getPointer(t,!0),r=this.getActiveGroup();if(r&&!e&&this._checkTarget(i,r))return r;var n=this._objects;this.targets=[],this._isLastRenderedObject(i,t)&&(n=[this.lastRenderedWithControls]);var s=this._searchPossibleTargets(n,i);return this._fireOverOutEvents(s,t),s}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout")),this.fire("mouse:over",{target:t,e:e}),t.fire("mouseover"),this._hoveredTarget=t):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=fabric.util.transformPoint(s,fabric.util.invertTransform(this.viewportTransform))),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){return this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:t}),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){return this._discardActiveGroup(),this.fire("selection:cleared",{e:t}),this},deactivateAll:function(){for(var t=this.getObjects(),e=0,i=t.length;e1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor;if(e.selectable){var r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this._setCornerCursor(n,e,t):this.setCursor(i)}else this.setCursor(i);return!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left,top:t.top,width:t.width,height:t.height};return this._isRetinaScaling()&&(r*=fabric.devicePixelRatio),1!==r?this.__toDataURLWithMultiplier(e,i,n,r):this.__toDataURL(e,i,n)},__toDataURL:function(t,e,i){this.renderAll();var r=this.contextContainer.canvas,n=this.__getCroppedCanvas(r,i);"jpg"===t&&(t="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(n||r).toDataURL("image/"+t,e):(n||r).toDataURL("image/"+t);return n&&(n=null),s},__getCroppedCanvas:function(t,e){var i,r,n="left"in e||"top"in e||"width"in e||"height"in e;return n&&(i=fabric.util.createCanvasElement(),r=i.getContext("2d"),i.width=e.width||this.width,i.height=e.height||this.height,r.drawImage(t,-e.left||0,-e.top||0)),i},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=n*r,a=s*r,h=this.getActiveObject(),c=this.getActiveGroup(),l=this.getZoom(),u=l*r/fabric.devicePixelRatio;r>1&&this.setDimensions({width:o,height:a}),this.setZoom(u),i.left&&(i.left*=r),i.top&&(i.top*=r),i.width?i.width*=r:r<1&&(i.width=o),i.height?i.height*=r:r<1&&(i.height=a),c?this._tempRemoveBordersControlsFromGroup(c):h&&this.deactivateAll&&this.deactivateAll();var f=this.__toDataURL(t,e,i);return c?this._restoreBordersControlsOnGroup(c):h&&this.setActiveObject&&this.setActiveObject(h),this.setZoom(l),this.setDimensions({width:n,height:s}),f},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})},_tempRemoveBordersControlsFromGroup:function(t){t.origHasControls=t.hasControls,t.origBorderColor=t.borderColor,t.hasControls=!0,t.borderColor="rgba(0,0,0,0)",t.forEachObject(function(t){t.origBorderColor=t.borderColor,t.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(t){t.hideControls=t.origHideControls,t.borderColor=t.origBorderColor,t.forEachObject(function(t){t.borderColor=t.origBorderColor,delete t.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay;for(var t in r)n[t]=r[t];e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n),n()},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.Image.fromObject(e,function(e){n[t]=e,i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):void(i[t]=!0)},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e,!0)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.toFixed,n=e.util.string.capitalize,s=e.util.degreesToRadians,o=e.StaticCanvas.supports("setLineDash");e.Object||(e.Object=e.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor alignX alignY meetOrSlice skewX skewY".split(" "),initialize:function(t){t&&this.setOptions(t)},_initGradient:function(t){!t.fill||!t.fill.colorStops||t.fill instanceof e.Gradient||this.set("fill",new e.Gradient(t.fill)),!t.stroke||!t.stroke.colorStops||t.stroke instanceof e.Gradient||this.set("stroke",new e.Gradient(t.stroke))},_initPattern:function(t){!t.fill||!t.fill.source||t.fill instanceof e.Pattern||this.set("fill",new e.Pattern(t.fill)),!t.stroke||!t.stroke.source||t.stroke instanceof e.Pattern||this.set("stroke",new e.Pattern(t.stroke))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var i=e.util.getFunctionBody(t.clipTo);"undefined"!=typeof i&&(this.clipTo=new Function("ctx",i))}},setOptions:function(t){for(var e in t)this.set(e,t[e]);this._initGradient(t),this._initPattern(t),this._initClipping(t)},transform:function(t,e){this.group&&this.canvas.preserveObjectStacking&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),t.rotate(s(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),t.transform(1,0,Math.tan(s(this.skewX)),1,0,0),t.transform(1,Math.tan(s(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,n={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,i),top:r(this.top,i),width:r(this.width,i),height:r(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,i),scaleX:r(this.scaleX,i),scaleY:r(this.scaleY,i),angle:r(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():this.transformMatrix,skewX:r(this.skewX,i),skewY:r(this.skewY,i)};return this.includeDefaultValues||(n=this._removeDefaultValues(n)),e.util.populateWithProperties(this,n,t),n},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},get:function(t){return this[t]},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow||(i=new e.Shadow(i)),this[t]=i,"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(t,i){0===this.width&&0===this.height||!this.visible||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setStrokeStyles(t),this._setFillStyles(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this._setOpacity(t),this._setShadow(t),this.clipTo&&e.util.clipContext(this,t),this._render(t,i),this.clipTo&&t.restore(),t.restore())},_setOpacity:function(t){this.group&&this.group._setOpacity(t),t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),o?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),o=this.calcTransformMatrix();o=e.util.multiplyTransformMatrices(n,o),r=e.util.qrDecompose(o),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1/this.borderScaleFactor,t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(s(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(s(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1;this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(this.scaleX+this.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*this.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*this.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_renderFill:function(t){if(this.fill){if(t.save(),this.fill.gradientTransform){var e=this.fill.gradientTransform;t.transform.apply(t,e)}this.fill.toLive&&t.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore()}},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this.stroke.gradientTransform){var e=this.stroke.gradientTransform;t.transform.apply(t,e)}this.stroke.toLive&&t.translate(-this.width/2+this.stroke.offsetX||0,-this.height/2+this.stroke.offsetY||0),t.stroke(),t.restore()}},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t){var i=this.toDataURL();return e.util.loadImage(i,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i);"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 0},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),i.gradientTransform&&(r.gradientTransform=i.gradientTransform);for(var n in i.colorStops){var s=new e.Color(i.colorStops[n]);r.colorStops.push({offset:n,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,e.util.degreesToRadians(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h=t.x,c=t.y,l=e[s]-e[r],u=i[o]-i[n];return(l||u)&&(a=this._getTransformedDimensions(),h=t.x+l*a.x,c=t.y+u*a.y),new fabric.Point(h,c)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n=i&&r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r=t(this.angle),n=this.getWidth(),s=Math.cos(r)*n,o=Math.sin(r)*n;this.left+=s*(e[i]-e[this.originX]),this.top+=o*(e[i]-e[this.originX]),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,i){var r=t(this.oCoords),n=fabric.Intersection.intersectPolygonRectangle(r,e,i);return"Intersection"===n.status},intersectsWithObject:function(e){var i=fabric.Intersection.intersectPolygonPolygon(t(this.oCoords),t(e.oCoords));return"Intersection"===i.status},isContainedWithinObject:function(t){var e=t.getBoundingRect(),i=new fabric.Point(e.left,e.top),r=new fabric.Point(e.left+e.width,e.top+e.height);return this.isContainedWithinRect(i,r)},isContainedWithinRect:function(t,e){var i=this.getBoundingRect();return i.left>=t.x&&i.left+i.width<=e.x&&i.top>=t.y&&i.top+i.height<=e.y},containsPoint:function(t){this.oCoords||this.setCoords();var e=this._getImageLines(this.oCoords),i=this._findCrossPoints(t,e);return 0!==i&&i%2===1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h,c=0;for(var l in e)if(h=e[l],!(h.o.y=t.y&&h.d.y>=t.y||(h.o.x===h.d.x&&h.o.x>=t.x?(o=h.o.x,a=t.y):(i=0,r=(h.d.y-h.o.y)/(h.d.x-h.o.x),n=t.y-i*t.x,s=h.o.y-r*h.o.x,o=-(n-s)/(i-r),a=n+i*o),o>=t.x&&(c+=1),2!==c)))break;return c},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){return this.oCoords||this.setCoords(),fabric.util.makeBoundingBoxFromPoints([this.oCoords.tl,this.oCoords.tr,this.oCoords.br,this.oCoords.bl])},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(s/n):0,c=n/Math.cos(h)/2,l=Math.cos(h+t)*c,u=Math.sin(h+t)*c,f=fabric.util.transformPoint(this.getCenterPoint(),i),d=new fabric.Point(f.x-l,f.y-u),g=new fabric.Point(d.x+n*a,d.y+n*o),p=new fabric.Point(d.x-s*o,d.y+s*a),v=new fabric.Point(f.x+l,f.y+u),b=new fabric.Point((d.x+p.x)/2,(d.y+p.y)/2),m=new fabric.Point((g.x+d.x)/2,(g.y+d.y)/2),y=new fabric.Point((v.x+g.x)/2,(v.y+g.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point(m.x+o*this.rotatingPointOffset,m.y-a*this.rotatingPointOffset);return this.oCoords={tl:d,tr:g,br:v,bl:p,ml:b,mt:m,mr:y,mb:_,mtr:x},this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return[1,0,0,1,0,0]},calcTransformMatrix:function(){var t=this.getCenterPoint(),e=[1,0,0,1,t.x,t.y],r=this._calcRotateMatrix(),n=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),s=this.group?this.group.calcTransformMatrix():[1,0,0,1,0,0];return s=i(s,e),s=i(s,r),s=i(s,n)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas.moveTo(this,t),this}}),function(){function t(t,e){if(e){if(e.toLive)return t+": url(#SVGID_"+e.id+"); ";var i=new fabric.Color(e),r=t+": "+i.toRgb()+"; ",n=i.getAlpha(); -return 1!==n&&(r+=t+"-opacity: "+n.toString()+"; "),r}return t+": none; "}fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(e){var i=this.fillRule,r=this.strokeWidth?this.strokeWidth:"0",n=this.strokeDashArray?this.strokeDashArray.join(" "):"none",s=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",a=this.strokeMiterLimit?this.strokeMiterLimit:"4",h="undefined"!=typeof this.opacity?this.opacity:"1",c=this.visible?"":" visibility: hidden;",l=e?"":this.getSvgFilter(),u=t("fill",this.fill),f=t("stroke",this.stroke);return[f,"stroke-width: ",r,"; ","stroke-dasharray: ",n,"; ","stroke-linecap: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",a,"; ",u,"fill-rule: ",i,"; ","opacity: ",h,";",l,c].join("")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgId:function(){return this.id?'id="'+this.id+'" ':""},getSvgTransform:function(){if(this.group&&"path-group"===this.group.type)return"";var t=fabric.util.toFixed,e=this.getAngle(),i=this.getSkewX()%360,r=this.getSkewY()%360,n=this.getCenterPoint(),s=fabric.Object.NUM_FRACTION_DIGITS,o="path-group"===this.type?"":"translate("+t(n.x,s)+" "+t(n.y,s)+")",a=0!==e?" rotate("+t(e,s)+")":"",h=1===this.scaleX&&1===this.scaleY?"":" scale("+t(this.scaleX,s)+" "+t(this.scaleY,s)+")",c=0!==i?" skewX("+t(i,s)+")":"",l=0!==r?" skewY("+t(r,s)+")":"",u="path-group"===this.type?this.width:0,f=this.flipX?" matrix(-1 0 0 1 "+u+" 0) ":"",d="path-group"===this.type?this.height:0,g=this.flipY?" matrix(1 0 0 -1 0 "+d+")":"";return[o,a,h,f,g,c,l].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.join(" ")+") ":""},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(t){return this.get(t)!==this.originalState[t]},this)},saveState:function(t){return this.stateProperties.forEach(function(t){this.originalState[t]=this.get(t)},this),t&&t.stateProperties&&t.stateProperties.forEach(function(t){this.originalState[t]=this.get(t)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var t=fabric.util.degreesToRadians,e=function(){return"undefined"!=typeof G_vmlCanvasManager};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t){if(!this.hasControls||!this.active)return!1;var e,i,r=t.x,n=t.y;this.__corner=0;for(var s in this.oCoords)if(this.isControlVisible(s)&&("mtr"!==s||this.hasRotatingPoint)&&(!this.get("lockUniScaling")||"mt"!==s&&"mr"!==s&&"mb"!==s&&"ml"!==s)&&(i=this._getImageLines(this.oCoords[s].corner),e=this._findCrossPoints({x:r,y:n},i),0!==e&&e%2===1))return this.__corner=s,s;return!1},_setCornerCoords:function(){var e,i,r=this.oCoords,n=t(45-this.angle),s=.707106*this.cornerSize,o=s*Math.cos(n),a=s*Math.sin(n);for(var h in r)e=r[h].x,i=r[h].y,r[h].corner={tl:{x:e-a,y:i-o},tr:{x:e+o,y:i-a},bl:{x:e-o,y:i+a},br:{x:e+a,y:i+o}}},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width,i=this.height,r=!0,n=!0;return"line"===this.type&&"butt"===this.strokeLineCap&&(n=e,r=i),n&&(i+=i<0?-t:t),r&&(e+=e<0?-t:t),{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return new i.Line(s,r(n,e))},void(i.Line.fromObject=function(t){var e=[t.x1,t.y1,t.x2,t.y2];return new i.Line(e,t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;return i.Circle?void i.warn("fabric.Circle is already defined."):(i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("radius",t.radius||0),this.startAngle=t.startAngle||this.startAngle,this.endAngle=t.endAngle||this.endAngle},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return n(this.callSuper("toObject",t),{radius:this.get("radius"),startAngle:this.startAngle,endAngle:this.endAngle})},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)},complexity:function(){return 1}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},void(i.Circle.fromObject=function(t){return new i.Circle(t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("width",t.width||100).set("height",t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),void(e.Triangle.fromObject=function(t){return new e.Triangle(t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;return e.Ellipse?void e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("rx",t.rx||0),this.set("ry",t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return r(this.callSuper("toObject",t),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)},complexity:function(){return 1}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},void(e.Ellipse.fromObject=function(t){return new e.Ellipse(t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(t){t=t||{},this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){var e=i(this.callSuper("toObject",t),{rx:this.get("rx")||0,ry:this.get("ry")||0});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.width>0&&s.height>0,s},e.Rect.fromObject=function(t){return new e.Rect(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Polyline?void e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,initialize:function(t,i){return e.Polygon.prototype.initialize.call(this,t,i)},_calcDimensions:function(){return e.Polygon.prototype._calcDimensions.call(this)},toObject:function(t){return e.Polygon.prototype.toObject.call(this,t)},toSVG:function(t){return e.Polygon.prototype.toSVG.call(this,t)},_render:function(t,i){e.Polygon.prototype.commonRender.call(this,t,i)&&(this._renderFill(t),this._renderStroke(t))},_renderDashedStroke:function(t){var i,r;t.beginPath();for(var n=0,s=this.points.length;n\n'),t?t(r.join("")):r.join("")},_render:function(t,e){this.commonRender(t,e)&&(this._renderFill(t),(this.stroke||this.strokeDashArray)&&(t.closePath(),this._renderStroke(t)))},commonRender:function(t,e){var i,r=this.points.length;if(!r||isNaN(this.points[r-1].y))return!1;e||t.translate(-this.pathOffset.x,-this.pathOffset.y),t.beginPath(),t.moveTo(this.points[0].x,this.points[0].y);for(var n=0;n"},toObject:function(t){var e=n(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(e.sourcePath=this.sourcePath),this.transformMatrix&&(e.transformMatrix=this.transformMatrix),e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||""; -return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){"string"==typeof t.paths?e.loadSVGFromURL(t.paths,function(r){var n=t.paths;delete t.paths;var s=e.util.groupSVGElements(r,t,n);i(s)}):e.util.enlivenObjects(t.paths,function(r){delete t.paths,i(new e.PathGroup(r,t))})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.array.invoke;if(!e.Group){var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this._objects.length;e--;)this._updateObjectCoords(this._objects[e],t)},_updateObjectCoords:function(t,e){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!e){var i=t.getLeft(),r=t.getTop(),n=this.getCenterPoint();t.set({originalLeft:i,originalTop:r,left:i-n.x,top:r-n.y}),t.setCoords()}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(t){t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){return i(this.callSuper("toObject",t),{objects:s(this._objects,"toObject",t)})},render:function(t){if(this.visible){t.save(),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.transform(t),this._setShadow(t),this.clipTo&&e.util.clipContext(this,t);for(var i=0,r=this._objects.length;i\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in o){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var s=this.fill;this.fill=null,e.push("\n'),this.fill=s}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},clone:function(t,e){this.constructor.fromObject(this.toObject(e),t)},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n=i,s=fabric.util.createCanvasElement(),o=fabric.util.createImage(),a=this;return s.width=n.width,s.height=n.height,s.getContext("2d").drawImage(n,0,0,n.width,n.height),0===e.length?(this._element=i,t&&t(),s):(e.forEach(function(t){t&&t.applyTo(s,t.scaleX||a.scaleX,t.scaleY||a.scaleY),!r&&t&&"Resize"===t.type&&(a.width*=t.scaleX,a.height*=t.scaleY)}),o.width=s.width,o.height=s.height,fabric.isLikelyNode?(o.src=s.toBuffer(void 0,fabric.Image.pngCompression),a._element=o,!r&&(a._filteredEl=o),t&&t()):(o.onload=function(){a._element=o,!r&&(a._filteredEl=o),t&&t(),o.onload=s=n=null},o.src=s.toDataURL("image/png")),s)}},_render:function(t,e){var i,r,n,s=this._findMargins();i=e?this.left:-this.width/2,r=e?this.top:-this.height/2,"slice"===this.meetOrSlice&&(t.beginPath(),t.rect(i,r,this.width,this.height),t.clip()),this.isMoving===!1&&this.resizeFilters.length&&this._needsResize()?(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,n=this.applyFilters(null,this.resizeFilters,this._filteredEl||this._originalElement,!0)):n=this._element,n&&t.drawImage(n,i+s.marginX,r+s.marginY,s.width,s.height),this._stroke(t),this._renderStroke(t)},_needsResize:function(){return this.scaleX!==this._lastScaleX||this.scaleY!==this._lastScaleY},_findMargins:function(){var t,e,i=this.width,r=this.height,n=0,s=0;return"none"===this.alignX&&"none"===this.alignY||(t=[this.width/this._element.width,this.height/this._element.height],e="meet"===this.meetOrSlice?Math.min.apply(null,t):Math.max.apply(null,t),i=this._element.width*e,r=this._element.height*e,"Mid"===this.alignX&&(n=(this.width-i)/2),"Max"===this.alignX&&(n=this.width-i),"Mid"===this.alignY&&(s=(this.height-r)/2),"Max"===this.alignY&&(s=this.height-r)),{width:i,height:r,marginX:n,marginY:s}},_resetWidthHeight:function(){var t=this.getElement();this.set("width",t.width),this.set("height",t.height)},_initElement:function(t,e){this.setElement(fabric.util.getById(t),null,e),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(t,e){t&&t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){this.width="width"in t?t.width:this.getElement()?this.getElement().width||0:0,this.height="height"in t?t.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(t,e){fabric.util.loadImage(t.src,function(i){fabric.Image.prototype._initFilters.call(t,t.filters,function(r){t.filters=r||[],fabric.Image.prototype._initFilters.call(t,t.resizeFilters,function(r){t.resizeFilters=r||[];var n=new fabric.Image(i,t);e&&e(n)})})},null,t.crossOrigin)},fabric.Image.fromURL=function(t,e,i){fabric.util.loadImage(t,function(t){e&&e(new fabric.Image(t,i))},null,i&&i.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href".split(" ")),fabric.Image.fromElement=function(t,i,r){var n,s=fabric.parseAttributes(t,fabric.Image.ATTRIBUTE_NAMES);s.preserveAspectRatio&&(n=fabric.util.parsePreserveAspectRatioAttribute(s.preserveAspectRatio),e(s,n)),fabric.Image.fromURL(s["xlink:href"],i,e(r?fabric.util.object.clone(r):{},s))},fabric.Image.async=!0,void(fabric.Image.pngCompression=1))}("undefined"!=typeof exports?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.getAngle()%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.Brightness=e.util.createClass(e.Image.filters.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[C*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=function(t){return new e.Image.filters.Convolute(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.GradientTransparency=e.util.createClass(e.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,j,A,M,P,L,D;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;h=e)){L=r(1e3*s(c-T.x)),O[L]||(O[L]={});for(var E=k.y-w;E<=k.y+w;E++)E<0||E>=o||(D=r(1e3*s(E-T.y)),O[L][D]||(O[L][D]=m(n(i(L*x,2)+i(D*S,2))/1e3)),u=O[L][D],u>0&&(d=4*(E*e+c),g+=u,j+=u*v[d],A+=u*v[d+1],M+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=j/g,b[d+1]=A/g,b[d+2]=M/g,b[d+3]=P/g}return++t1&&I<-1||(x=2*I*I*I-3*I*I+1,x>0&&(E=4*(D+A*e),k+=x*p[E+3],C+=x,p[E+3]<255&&(x=x*p[E+3]/250),w+=x*p[E],O+=x*p[E+1],T+=x*p[E+2],S+=x))}b[_]=w/S,b[_+1]=O/S,b[_+2]=T/S,b[_+3]=k/C}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=function(t){return new e.Image.filters.Resize(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.StaticCanvas.supports("setLineDash"),o=e.Object.NUM_FRACTION_DIGITS;if(e.Text)return void e.warn("fabric.Text is already defined");var a=e.Object.prototype.stateProperties.concat();a.push("fontFamily","fontWeight","fontSize","text","textDecoration","textAlign","fontStyle","lineHeight","textBackgroundColor"),e.Text=e.util.createClass(e.Object,{_dimensionAffectingProps:{fontSize:!0,fontWeight:!0,fontFamily:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0,textAlign:!0},_reNewline:/\r?\n/,_reSpacesAndTabs:/[ \t\r]+/g,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textAlign:"left",fontStyle:"",lineHeight:1.16,textBackgroundColor:"",stateProperties:a,stroke:null,shadow:null,_fontSizeFraction:.25,_fontSizeMult:1.13,initialize:function(t,e){e=e||{},this.text=t,this.__skipDimension=!0,this.setOptions(e),this.__skipDimension=!1,this._initDimensions()},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t)),this._textLines=this._splitTextIntoLines(),this._clearCache(),this.width=this._getTextWidth(t),this.height=this._getTextHeight(t))},toString:function(){return"#'},_render:function(t){this.clipTo&&e.util.clipContext(this,t),this._setOpacity(t),this._setShadow(t),this._setupCompositeOperation(t),this._renderTextBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._renderText(t),this._renderTextDecoration(t),this.clipTo&&t.restore()},_renderText:function(t){this._translateForTextAlign(t),this._renderTextFill(t),this._renderTextStroke(t),this._translateForTextAlign(t,!0)},_translateForTextAlign:function(t,e){if("left"!==this.textAlign&&"justify"!==this.textAlign){var i=e?-1:1;t.translate("center"===this.textAlign?i*this.width/2:i*this.width,0)}},_setTextStyles:function(t){t.textBaseline="alphabetic",this.skipTextAlign||(t.textAlign=this.textAlign),t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_getNonTransformedDimensions:function(){return{x:this.width,y:this.height}},_renderChars:function(t,e,i,r,n){var s=t.slice(0,-4);if(this[s].toLive){var o=-this.width/2+this[s].offsetX||0,a=-this.height/2+this[s].offsetY||0;e.save(),e.translate(o,a),r-=o,n-=a}e[t](i,r,n),this[s].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearCache:function(){var t=!1;if(this._forceClearCache)return this._forceClearCache=!1,!0;for(var e in this._dimensionAffectingProps)this["__"+e]!==this[e]&&(this["__"+e]=this[e],t=!0);return t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_measureLine:function(t,e){return t.measureText(this._textLines[e]).width},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(t.save(),this._setTextStyles(t),this._shouldClearCache()&&this._initDimensions(t),this.drawSelectionBackground(t),e||this.transform(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._render(t),t.restore())},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=i(this.callSuper("toObject",t),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,textBackgroundColor:this.textBackgroundColor});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this._getSVGLeftTopOffsets(this.ctx),r=this._getSVGTextAndBg(i.textTop,i.textLeft);return this._wrapSVGTextAndBg(e,r),t?t(e.join("")):e.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,i,r,s){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,l),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(s+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),s+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,i,r,s){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),t in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t){return new e.Text(t.text,r(t))},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this.selectionStart!==t&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=t),this._updateTextarea()},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this.selectionEnd!==t&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=t),this._updateTextarea()},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0,this.skipTextAlign=!0,r-="center"===this.textAlign?this.width/2:"right"===this.textAlign?this.width:0;var a,h,c=this._getHeightOfLine(e,s),l=this._getLineLeftOffset(this._getLineWidth(e,s)),u="";r+=l||0,e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var f=o,d=i.length+o;f<=d;f++)a=a||this.getCurrentCharStyle(s,f),h=this.getCurrentCharStyle(s,f+1),(this._hasStyleChanged(a,h)||f===d)&&(this._renderChar(t,e,s,f-1,u,r,n,c),u="",a=h),u+=i[f-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){this.skipTextAlign=!1,"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g=this._getStyleDeclaration(i,r);g?(c=this._getHeightOfChar(e,n,i,r),u=g.stroke,l=g.fill,d=g.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,g&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,g||{}),d=d||this.textDecoration,g&&g.textBackgroundColor&&this._removeShadow(e),l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o),(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),g&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);for(var e,i,r,n,s,o,a=0,h=this._getLeftOffset(),c=this._getTopOffset(),l=0,u=this._textLines.length;lr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(e)):(this.setSelectionStart(e),this.setSelectionEnd(this.__selectionStartOnMouseDown)),this.renderCursorOrSelection())}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(this.ctx,r)):e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.setSelectionStart(t)},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&(this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart)),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(s[parseInt(o,10)-i]=this.styles[e][o],delete this.styles[e][o]);this.styles[e+1]=s}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}this.styles[e][i]=r||t(n[i-1]),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){ -this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.initDelayedCursor(!0)),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t);t.shiftKey?es?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",this.canvas?this.canvas.lowerCanvasEl.parentNode.appendChild(this.hiddenTextarea):fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},getDownCursorOffset:function(t,e){var i,r,n=e?this.selectionEnd:this.selectionStart,s=this.get2DCursorLocation(n),o=s.lineIndex,a=this._textLines[o].slice(0,s.charIndex),h=this._textLines[o].slice(s.charIndex),c=this._textLines[o+1]||"";if(o===this._textLines.length-1||t.metaKey||34===t.keyCode)return this.text.length-n;var l=this._getLineWidth(this.ctx,o);r=this._getLineLeftOffset(l);for(var u=r,f=0,d=a.length;fi){r=!0;var d=a-f,g=a,p=Math.abs(d-i),v=Math.abs(g-i);h=vthis.text.length&&this.setSelectionEnd(this.text.length)},getUpCursorOffset:function(t,e){var i=e?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||t.metaKey||33===t.keyCode)return i;for(var s,o=this._textLines[n].slice(0,r.charIndex),a=this._textLines[n-1]||"",h=this._getLineWidth(this.ctx,r.lineIndex),c=this._getLineLeftOffset(h),l=c,u=0,f=o.length;ui){r=!0;var d=a-f,g=a,p=Math.abs(d-i),v=Math.abs(g-i);h=v=this.text.length&&this.selectionEnd>=this.text.length||(this.abortCursorAnimation(),this._currentCursorOpacity=1,t.shiftKey?this.moveCursorRightWithShift(t):this.moveCursorRightWithoutShift(t),this.initDelayedCursor())},moveCursorRightWithShift:function(t){"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):(this._selectionDirection="right",this._moveRight(t,"selectionEnd"))},moveCursorRightWithoutShift:function(t){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(t,"selectionStart"),this.setSelectionEnd(this.selectionStart)):(this.setSelectionEnd(this.selectionEnd+this.getNumNewLinesInSelectedText()),this.setSelectionStart(this.selectionEnd))},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.clone;e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:0,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,initialize:function(t,i){this.ctx=e.util.createCanvasElement().getContext("2d"),this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this._dimensionAffectingProps.width=!0},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t)),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n=this.width&&!d&&(n.push(s),s="",r=l,d=!0),d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return g&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f),n},_splitTextIntoLines:function(){var t=this.textAlign;this.ctx.save(),this._setTextStyles(this.ctx),this.textAlign="left";var e=this._wrapText(this.ctx,this.text);return this.textAlign=t,this.ctx.restore(),this._textLines=e,this._styleMap=this._generateStyleMap(),e},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())};var e=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,i){var r=e(this.styles),n=this._styleMap[t];t=n.line;for(var s in this.styles){var o=parseInt(s,10);o>t&&(this.styles[o+i]=r[o],r[o-i]||delete this.styles[o])}},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(t,e){fabric.util.loadImage(t.src,function(i){var r=new fabric.Image(i);r._initConfig(t),r._initFilters(t.filters,function(i){r.filters=i||[],r._initFilters(t.resizeFilters,function(t){r.resizeFilters=t||[],e&&e(r)})})})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.contextContainer=s.getContext("2d"),h.nodeCanvas=s,h.contextCache=o.getContext("2d"),h.nodeCacheCanvas=o,h.Font=Canvas.Font,h},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(t,e){return origSetWidth.call(this,t,e),this.nodeCanvas.width=t,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(t,e){return origSetHeight.call(this,t,e),this.nodeCanvas.height=t,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}}(); \ No newline at end of file +},getVpCenter:function(){var t=this.getCenter(),e=fabric.util.invertTransform(this.viewportTransform);return fabric.util.transformPoint({x:t.left,y:t.top},e)},_centerObject:function(t,e){return t.setPositionByOrigin(e,"center","center"),this.renderAll(),this},toDatalessJSON:function(t){return this.toDatalessObject(t)},toObject:function(t){return this._toObjectMethod("toObject",t)},toDatalessObject:function(t){return this._toObjectMethod("toDatalessObject",t)},_toObjectMethod:function(e,i){var r={objects:this._toObjects(e,i)};return t(r,this.__serializeBgOverlay()),fabric.util.populateWithProperties(this,r,i),r},_toObjects:function(t,e){return this.getObjects().filter(function(t){return!t.excludeFromExport}).map(function(i){return this._toObject(i,t,e)},this)},_toObject:function(t,e,i){var r;this.includeDefaultValues||(r=t.includeDefaultValues,t.includeDefaultValues=!1);var n=this._realizeGroupTransformOnObject(t),s=t[e](i);return this.includeDefaultValues||(t.includeDefaultValues=r),this._unwindGroupTransformOnObject(t,n),s},_realizeGroupTransformOnObject:function(t){var e=["angle","flipX","flipY","height","left","scaleX","scaleY","top","width"];if(t.group&&t.group===this.getActiveGroup()){var i={};return e.forEach(function(e){i[e]=t[e]}),this.getActiveGroup().realizeTransform(t),i}return null},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},__serializeBgOverlay:function(){var t={background:this.backgroundColor&&this.backgroundColor.toObject?this.backgroundColor.toObject():this.backgroundColor};return this.overlayColor&&(t.overlay=this.overlayColor.toObject?this.overlayColor.toObject():this.overlayColor),this.backgroundImage&&(t.backgroundImage=this.backgroundImage.toObject()),this.overlayImage&&(t.overlayImage=this.overlayImage.toObject()),t},svgViewportTransformation:!0,toSVG:function(t,e){t||(t={});var i=[];return this._setSVGPreamble(i,t),this._setSVGHeader(i,t),this._setSVGBgOverlayColor(i,"backgroundColor"),this._setSVGBgOverlayImage(i,"backgroundImage",e),this._setSVGObjects(i,e),this._setSVGBgOverlayColor(i,"overlayColor"),this._setSVGBgOverlayImage(i,"overlayImage",e),i.push(""),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"\n")},_setSVGObjects:function(t,e){for(var i,r,n=0,s=this.getObjects(),o=s.length;n\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this.getActiveGroup?this.getActiveGroup():null;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this.getActiveGroup?this.getActiveGroup():null;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this.getActiveGroup?this.getActiveGroup():null;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop;t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur,t.shadowOffsetX=this.shadow.offsetX,t.shadowOffsetY=this.shadow.offsetY}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&ci.padding?t.x<0?t.x+=i.padding:t.x-=i.padding:t.x=0,n(t.y)>i.padding?t.y<0?t.y+=i.padding:t.y-=i.padding:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta);return a<0&&(a=360+a),n.target.angle=a%360,!0},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.setAngle(0)},_drawSelection:function(){var t=this.contextTop,e=this._groupSelector,i=e.left,r=e.top,o=n(i),a=n(r);if(t.fillStyle=this.selectionColor,t.fillRect(e.ex-(i>0?0:-i),e.ey-(r>0?0:-r),o,a),t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1){var h=e.ex+s-(i>0?0:o),c=e.ey+s-(r>0?0:a);t.beginPath(),fabric.util.drawDashedLine(t,h,c,h+o,c,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c+a-1,h+o,c+a-1,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c,h,c+a,this.selectionDashArray),fabric.util.drawDashedLine(t,h+o-1,c,h+o-1,c+a,this.selectionDashArray),t.closePath(),t.stroke()}else t.strokeRect(e.ex+s-(i>0?0:o),e.ey+s-(r>0?0:a),o,a)},findTarget:function(t,e){if(!this.skipTargetFind){var i=this.getPointer(t,!0),r=this.getActiveGroup(),n=this.getActiveObject();if(r&&!e&&this._checkTarget(i,r))return r;if(n&&this._checkTarget(i,n))return n;this.targets=[];var s=this._searchPossibleTargets(this._objects,i);return this._fireOverOutEvents(s,t),s}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout")),this.fire("mouse:over",{target:t,e:e}),t.fire("mouseover"),this._hoveredTarget=t):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=fabric.util.transformPoint(s,fabric.util.invertTransform(this.viewportTransform))),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){return this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:t}),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){return this._discardActiveGroup(),this.fire("selection:cleared",{e:t}),this},deactivateAll:function(){for(var t=this.getObjects(),e=0,i=t.length;e1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor;if(e.selectable){var r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this._setCornerCursor(n,e,t):this.setCursor(i)}else this.setCursor(i);return!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left,top:t.top,width:t.width,height:t.height};return this._isRetinaScaling()&&(r*=fabric.devicePixelRatio),1!==r?this.__toDataURLWithMultiplier(e,i,n,r):this.__toDataURL(e,i,n)},__toDataURL:function(t,e,i){this.renderAll();var r=this.contextContainer.canvas,n=this.__getCroppedCanvas(r,i);"jpg"===t&&(t="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(n||r).toDataURL("image/"+t,e):(n||r).toDataURL("image/"+t);return n&&(n=null),s},__getCroppedCanvas:function(t,e){var i,r,n="left"in e||"top"in e||"width"in e||"height"in e;return n&&(i=fabric.util.createCanvasElement(),r=i.getContext("2d"),i.width=e.width||this.width,i.height=e.height||this.height,r.drawImage(t,-e.left||0,-e.top||0)),i},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=n*r,a=s*r,h=this.getActiveObject(),c=this.getActiveGroup(),l=this.getZoom(),u=l*r/fabric.devicePixelRatio;r>1&&this.setDimensions({width:o,height:a}),this.setZoom(u),i.left&&(i.left*=r),i.top&&(i.top*=r),i.width?i.width*=r:r<1&&(i.width=o),i.height?i.height*=r:r<1&&(i.height=a),c?this._tempRemoveBordersControlsFromGroup(c):h&&this.deactivateAll&&this.deactivateAll();var f=this.__toDataURL(t,e,i);return c?this._restoreBordersControlsOnGroup(c):h&&this.setActiveObject&&this.setActiveObject(h),this.setZoom(l),this.setDimensions({width:n,height:s}),f},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})},_tempRemoveBordersControlsFromGroup:function(t){t.origHasControls=t.hasControls,t.origBorderColor=t.borderColor,t.hasControls=!0,t.borderColor="rgba(0,0,0,0)",t.forEachObject(function(t){t.origBorderColor=t.borderColor,t.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(t){t.hideControls=t.origHideControls,t.borderColor=t.origBorderColor,t.forEachObject(function(t){t.borderColor=t.origBorderColor,delete t.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay;for(var t in r)n[t]=r[t];e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n),n()},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.Image.fromObject(e,function(e){n[t]=e,i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):void(i[t]=!0)},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e,!0)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.toFixed,n=e.util.string.capitalize,s=e.util.degreesToRadians,o=e.StaticCanvas.supports("setLineDash");e.Object||(e.Object=e.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor alignX alignY meetOrSlice skewX skewY".split(" "),initialize:function(t){t&&this.setOptions(t)},_initGradient:function(t){!t.fill||!t.fill.colorStops||t.fill instanceof e.Gradient||this.set("fill",new e.Gradient(t.fill)),!t.stroke||!t.stroke.colorStops||t.stroke instanceof e.Gradient||this.set("stroke",new e.Gradient(t.stroke))},_initPattern:function(t){!t.fill||!t.fill.source||t.fill instanceof e.Pattern||this.set("fill",new e.Pattern(t.fill)),!t.stroke||!t.stroke.source||t.stroke instanceof e.Pattern||this.set("stroke",new e.Pattern(t.stroke))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var i=e.util.getFunctionBody(t.clipTo);"undefined"!=typeof i&&(this.clipTo=new Function("ctx",i))}},setOptions:function(t){for(var e in t)this.set(e,t[e]);this._initGradient(t),this._initPattern(t),this._initClipping(t)},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),t.rotate(s(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),t.transform(1,0,Math.tan(s(this.skewX)),1,0,0),t.transform(1,Math.tan(s(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,n={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,i),top:r(this.top,i),width:r(this.width,i),height:r(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,i),scaleX:r(this.scaleX,i),scaleY:r(this.scaleY,i),angle:r(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():this.transformMatrix,skewX:r(this.skewX,i),skewY:r(this.skewY,i)};return this.includeDefaultValues||(n=this._removeDefaultValues(n)),e.util.populateWithProperties(this,n,t),n},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},get:function(t){return this[t]},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow||(i=new e.Shadow(i)),this[t]=i,"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(t,i){0===this.width&&0===this.height||!this.visible||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setStrokeStyles(t),this._setFillStyles(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this._setOpacity(t),this._setShadow(t),this.clipTo&&e.util.clipContext(this,t),this._render(t,i),this.clipTo&&t.restore(),t.restore())},_setOpacity:function(t){this.group&&this.group._setOpacity(t),t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),o?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),o=this.calcTransformMatrix();o=e.util.multiplyTransformMatrices(n,o),r=e.util.qrDecompose(o),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1/this.borderScaleFactor,t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(s(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(s(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1;this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(this.scaleX+this.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*this.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*this.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_renderFill:function(t){if(this.fill){if(t.save(),this.fill.gradientTransform){var e=this.fill.gradientTransform;t.transform.apply(t,e)}this.fill.toLive&&t.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore()}},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this.stroke.gradientTransform){var e=this.stroke.gradientTransform;t.transform.apply(t,e)}this.stroke.toLive&&t.translate(-this.width/2+this.stroke.offsetX||0,-this.height/2+this.stroke.offsetY||0),t.stroke(),t.restore()}},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t){var i=this.toDataURL();return e.util.loadImage(i,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i);"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 0},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),i.gradientTransform&&(r.gradientTransform=i.gradientTransform);for(var n in i.colorStops){var s=new e.Color(i.colorStops[n]);r.colorStops.push({offset:n,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,e.util.degreesToRadians(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h=t.x,c=t.y,l=e[s]-e[r],u=i[o]-i[n];return(l||u)&&(a=this._getTransformedDimensions(),h=t.x+l*a.x,c=t.y+u*a.y),new fabric.Point(h,c)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n=i&&r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r=t(this.angle),n=this.getWidth(),s=Math.cos(r)*n,o=Math.sin(r)*n;this.left+=s*(e[i]-e[this.originX]),this.top+=o*(e[i]-e[this.originX]),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,i){var r=t(this.oCoords),n=fabric.Intersection.intersectPolygonRectangle(r,e,i);return"Intersection"===n.status},intersectsWithObject:function(e){var i=fabric.Intersection.intersectPolygonPolygon(t(this.oCoords),t(e.oCoords));return"Intersection"===i.status},isContainedWithinObject:function(t){var e=t.getBoundingRect(),i=new fabric.Point(e.left,e.top),r=new fabric.Point(e.left+e.width,e.top+e.height);return this.isContainedWithinRect(i,r)},isContainedWithinRect:function(t,e){var i=this.getBoundingRect();return i.left>=t.x&&i.left+i.width<=e.x&&i.top>=t.y&&i.top+i.height<=e.y},containsPoint:function(t){this.oCoords||this.setCoords();var e=this._getImageLines(this.oCoords),i=this._findCrossPoints(t,e);return 0!==i&&i%2===1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h,c=0;for(var l in e)if(h=e[l],!(h.o.y=t.y&&h.d.y>=t.y||(h.o.x===h.d.x&&h.o.x>=t.x?(o=h.o.x,a=t.y):(i=0,r=(h.d.y-h.o.y)/(h.d.x-h.o.x),n=t.y-i*t.x,s=h.o.y-r*h.o.x,o=-(n-s)/(i-r),a=n+i*o),o>=t.x&&(c+=1),2!==c)))break;return c},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){return this.oCoords||this.setCoords(),fabric.util.makeBoundingBoxFromPoints([this.oCoords.tl,this.oCoords.tr,this.oCoords.br,this.oCoords.bl])},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(s/n):0,c=n/Math.cos(h)/2,l=Math.cos(h+t)*c,u=Math.sin(h+t)*c,f=fabric.util.transformPoint(this.getCenterPoint(),i),d=new fabric.Point(f.x-l,f.y-u),g=new fabric.Point(d.x+n*a,d.y+n*o),p=new fabric.Point(d.x-s*o,d.y+s*a),v=new fabric.Point(f.x+l,f.y+u),b=new fabric.Point((d.x+p.x)/2,(d.y+p.y)/2),m=new fabric.Point((g.x+d.x)/2,(g.y+d.y)/2),y=new fabric.Point((v.x+g.x)/2,(v.y+g.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point(m.x+o*this.rotatingPointOffset,m.y-a*this.rotatingPointOffset);return this.oCoords={tl:d,tr:g,br:v,bl:p,ml:b,mt:m,mr:y,mb:_,mtr:x},this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return[1,0,0,1,0,0]},calcTransformMatrix:function(){var t=this.getCenterPoint(),e=[1,0,0,1,t.x,t.y],r=this._calcRotateMatrix(),n=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),s=this.group?this.group.calcTransformMatrix():[1,0,0,1,0,0];return s=i(s,e),s=i(s,r),s=i(s,n)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas.moveTo(this,t),this}}),function(){function t(t,e){if(e){if(e.toLive)return t+": url(#SVGID_"+e.id+"); ";var i=new fabric.Color(e),r=t+": "+i.toRgb()+"; ",n=i.getAlpha();return 1!==n&&(r+=t+"-opacity: "+n.toString()+"; "),r}return t+": none; "}fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(e){var i=this.fillRule,r=this.strokeWidth?this.strokeWidth:"0",n=this.strokeDashArray?this.strokeDashArray.join(" "):"none",s=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",a=this.strokeMiterLimit?this.strokeMiterLimit:"4",h="undefined"!=typeof this.opacity?this.opacity:"1",c=this.visible?"":" visibility: hidden;",l=e?"":this.getSvgFilter(),u=t("fill",this.fill),f=t("stroke",this.stroke); +return[f,"stroke-width: ",r,"; ","stroke-dasharray: ",n,"; ","stroke-linecap: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",a,"; ",u,"fill-rule: ",i,"; ","opacity: ",h,";",l,c].join("")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgId:function(){return this.id?'id="'+this.id+'" ':""},getSvgTransform:function(){if(this.group&&"path-group"===this.group.type)return"";var t=fabric.util.toFixed,e=this.getAngle(),i=this.getSkewX()%360,r=this.getSkewY()%360,n=this.getCenterPoint(),s=fabric.Object.NUM_FRACTION_DIGITS,o="path-group"===this.type?"":"translate("+t(n.x,s)+" "+t(n.y,s)+")",a=0!==e?" rotate("+t(e,s)+")":"",h=1===this.scaleX&&1===this.scaleY?"":" scale("+t(this.scaleX,s)+" "+t(this.scaleY,s)+")",c=0!==i?" skewX("+t(i,s)+")":"",l=0!==r?" skewY("+t(r,s)+")":"",u="path-group"===this.type?this.width:0,f=this.flipX?" matrix(-1 0 0 1 "+u+" 0) ":"",d="path-group"===this.type?this.height:0,g=this.flipY?" matrix(1 0 0 -1 0 "+d+")":"";return[o,a,h,f,g,c,l].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.join(" ")+") ":""},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(t){return this.get(t)!==this.originalState[t]},this)},saveState:function(t){return this.stateProperties.forEach(function(t){this.originalState[t]=this.get(t)},this),t&&t.stateProperties&&t.stateProperties.forEach(function(t){this.originalState[t]=this.get(t)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var t=fabric.util.degreesToRadians,e=function(){return"undefined"!=typeof G_vmlCanvasManager};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t){if(!this.hasControls||!this.active)return!1;var e,i,r=t.x,n=t.y;this.__corner=0;for(var s in this.oCoords)if(this.isControlVisible(s)&&("mtr"!==s||this.hasRotatingPoint)&&(!this.get("lockUniScaling")||"mt"!==s&&"mr"!==s&&"mb"!==s&&"ml"!==s)&&(i=this._getImageLines(this.oCoords[s].corner),e=this._findCrossPoints({x:r,y:n},i),0!==e&&e%2===1))return this.__corner=s,s;return!1},_setCornerCoords:function(){var e,i,r=this.oCoords,n=t(45-this.angle),s=.707106*this.cornerSize,o=s*Math.cos(n),a=s*Math.sin(n);for(var h in r)e=r[h].x,i=r[h].y,r[h].corner={tl:{x:e-a,y:i-o},tr:{x:e+o,y:i-a},bl:{x:e-o,y:i+a},br:{x:e+a,y:i+o}}},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width,i=this.height,r=!0,n=!0;return"line"===this.type&&"butt"===this.strokeLineCap&&(n=e,r=i),n&&(i+=i<0?-t:t),r&&(e+=e<0?-t:t),{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return new i.Line(s,r(n,e))},void(i.Line.fromObject=function(t){var e=[t.x1,t.y1,t.x2,t.y2];return new i.Line(e,t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;return i.Circle?void i.warn("fabric.Circle is already defined."):(i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("radius",t.radius||0),this.startAngle=t.startAngle||this.startAngle,this.endAngle=t.endAngle||this.endAngle},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return n(this.callSuper("toObject",t),{radius:this.get("radius"),startAngle:this.startAngle,endAngle:this.endAngle})},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)},complexity:function(){return 1}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},void(i.Circle.fromObject=function(t){return new i.Circle(t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("width",t.width||100).set("height",t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),void(e.Triangle.fromObject=function(t){return new e.Triangle(t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;return e.Ellipse?void e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("rx",t.rx||0),this.set("ry",t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return r(this.callSuper("toObject",t),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)},complexity:function(){return 1}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},void(e.Ellipse.fromObject=function(t){return new e.Ellipse(t)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(t){t=t||{},this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){var e=i(this.callSuper("toObject",t),{rx:this.get("rx")||0,ry:this.get("ry")||0});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.width>0&&s.height>0,s},e.Rect.fromObject=function(t){return new e.Rect(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Polyline?void e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,initialize:function(t,i){return e.Polygon.prototype.initialize.call(this,t,i)},_calcDimensions:function(){return e.Polygon.prototype._calcDimensions.call(this)},toObject:function(t){return e.Polygon.prototype.toObject.call(this,t)},toSVG:function(t){return e.Polygon.prototype.toSVG.call(this,t)},_render:function(t,i){e.Polygon.prototype.commonRender.call(this,t,i)&&(this._renderFill(t),this._renderStroke(t))},_renderDashedStroke:function(t){var i,r;t.beginPath();for(var n=0,s=this.points.length;n\n'),t?t(r.join("")):r.join("")},_render:function(t,e){this.commonRender(t,e)&&(this._renderFill(t),(this.stroke||this.strokeDashArray)&&(t.closePath(),this._renderStroke(t)))},commonRender:function(t,e){var i,r=this.points.length;if(!r||isNaN(this.points[r-1].y))return!1;e||t.translate(-this.pathOffset.x,-this.pathOffset.y),t.beginPath(),t.moveTo(this.points[0].x,this.points[0].y);for(var n=0;n"},toObject:function(t){var e=n(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(e.sourcePath=this.sourcePath),this.transformMatrix&&(e.transformMatrix=this.transformMatrix),e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){"string"==typeof t.paths?e.loadSVGFromURL(t.paths,function(r){var n=t.paths;delete t.paths;var s=e.util.groupSVGElements(r,t,n);i(s)}):e.util.enlivenObjects(t.paths,function(r){delete t.paths,i(new e.PathGroup(r,t)); +})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.array.invoke;if(!e.Group){var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this._objects.length;e--;)this._updateObjectCoords(this._objects[e],t)},_updateObjectCoords:function(t,e){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!e){var i=t.getLeft(),r=t.getTop(),n=this.getCenterPoint();t.set({originalLeft:i,originalTop:r,left:i-n.x,top:r-n.y}),t.setCoords()}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(t){t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){return i(this.callSuper("toObject",t),{objects:s(this._objects,"toObject",t)})},render:function(t){if(this.visible){t.save(),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.transform(t),this._setShadow(t),this.clipTo&&e.util.clipContext(this,t),this._transformDone=!0;for(var i=0,r=this._objects.length;i\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in o){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var s=this.fill;this.fill=null,e.push("\n'),this.fill=s}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},clone:function(t,e){this.constructor.fromObject(this.toObject(e),t)},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n=i,s=fabric.util.createCanvasElement(),o=fabric.util.createImage(),a=this;return s.width=n.width,s.height=n.height,s.getContext("2d").drawImage(n,0,0,n.width,n.height),0===e.length?(this._element=i,t&&t(),s):(e.forEach(function(t){t&&t.applyTo(s,t.scaleX||a.scaleX,t.scaleY||a.scaleY),!r&&t&&"Resize"===t.type&&(a.width*=t.scaleX,a.height*=t.scaleY)}),o.width=s.width,o.height=s.height,fabric.isLikelyNode?(o.src=s.toBuffer(void 0,fabric.Image.pngCompression),a._element=o,!r&&(a._filteredEl=o),t&&t()):(o.onload=function(){a._element=o,!r&&(a._filteredEl=o),t&&t(),o.onload=s=n=null},o.src=s.toDataURL("image/png")),s)}},_render:function(t,e){var i,r,n,s=this._findMargins();i=e?this.left:-this.width/2,r=e?this.top:-this.height/2,"slice"===this.meetOrSlice&&(t.beginPath(),t.rect(i,r,this.width,this.height),t.clip()),this.isMoving===!1&&this.resizeFilters.length&&this._needsResize()?(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,n=this.applyFilters(null,this.resizeFilters,this._filteredEl||this._originalElement,!0)):n=this._element,n&&t.drawImage(n,i+s.marginX,r+s.marginY,s.width,s.height),this._stroke(t),this._renderStroke(t)},_needsResize:function(){return this.scaleX!==this._lastScaleX||this.scaleY!==this._lastScaleY},_findMargins:function(){var t,e,i=this.width,r=this.height,n=0,s=0;return"none"===this.alignX&&"none"===this.alignY||(t=[this.width/this._element.width,this.height/this._element.height],e="meet"===this.meetOrSlice?Math.min.apply(null,t):Math.max.apply(null,t),i=this._element.width*e,r=this._element.height*e,"Mid"===this.alignX&&(n=(this.width-i)/2),"Max"===this.alignX&&(n=this.width-i),"Mid"===this.alignY&&(s=(this.height-r)/2),"Max"===this.alignY&&(s=this.height-r)),{width:i,height:r,marginX:n,marginY:s}},_resetWidthHeight:function(){var t=this.getElement();this.set("width",t.width),this.set("height",t.height)},_initElement:function(t,e){this.setElement(fabric.util.getById(t),null,e),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(t,e){t&&t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){this.width="width"in t?t.width:this.getElement()?this.getElement().width||0:0,this.height="height"in t?t.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(t,e){fabric.util.loadImage(t.src,function(i){fabric.Image.prototype._initFilters.call(t,t.filters,function(r){t.filters=r||[],fabric.Image.prototype._initFilters.call(t,t.resizeFilters,function(r){t.resizeFilters=r||[];var n=new fabric.Image(i,t);e&&e(n)})})},null,t.crossOrigin)},fabric.Image.fromURL=function(t,e,i){fabric.util.loadImage(t,function(t){e&&e(new fabric.Image(t,i))},null,i&&i.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href".split(" ")),fabric.Image.fromElement=function(t,i,r){var n,s=fabric.parseAttributes(t,fabric.Image.ATTRIBUTE_NAMES);s.preserveAspectRatio&&(n=fabric.util.parsePreserveAspectRatioAttribute(s.preserveAspectRatio),e(s,n)),fabric.Image.fromURL(s["xlink:href"],i,e(r?fabric.util.object.clone(r):{},s))},fabric.Image.async=!0,void(fabric.Image.pngCompression=1))}("undefined"!=typeof exports?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.getAngle()%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.Brightness=e.util.createClass(e.Image.filters.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[C*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=function(t){return new e.Image.filters.Convolute(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Image.filters.GradientTransparency=e.util.createClass(e.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,j,A,M,P,D,L;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;h=e)){D=r(1e3*s(c-T.x)),O[D]||(O[D]={});for(var E=k.y-w;E<=k.y+w;E++)E<0||E>=o||(L=r(1e3*s(E-T.y)),O[D][L]||(O[D][L]=m(n(i(D*x,2)+i(L*S,2))/1e3)),u=O[D][L],u>0&&(d=4*(E*e+c),g+=u,j+=u*v[d],A+=u*v[d+1],M+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=j/g,b[d+1]=A/g,b[d+2]=M/g,b[d+3]=P/g}return++t1&&I<-1||(x=2*I*I*I-3*I*I+1,x>0&&(E=4*(L+A*e),k+=x*p[E+3],C+=x,p[E+3]<255&&(x=x*p[E+3]/250),w+=x*p[E],O+=x*p[E+1],T+=x*p[E+2],S+=x))}b[_]=w/S,b[_+1]=O/S,b[_+2]=T/S,b[_+3]=k/C}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=function(t){return new e.Image.filters.Resize(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.StaticCanvas.supports("setLineDash"),o=e.Object.NUM_FRACTION_DIGITS;if(e.Text)return void e.warn("fabric.Text is already defined");var a=e.Object.prototype.stateProperties.concat();a.push("fontFamily","fontWeight","fontSize","text","textDecoration","textAlign","fontStyle","lineHeight","textBackgroundColor"),e.Text=e.util.createClass(e.Object,{_dimensionAffectingProps:{fontSize:!0,fontWeight:!0,fontFamily:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0,textAlign:!0},_reNewline:/\r?\n/,_reSpacesAndTabs:/[ \t\r]+/g,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textAlign:"left",fontStyle:"",lineHeight:1.16,textBackgroundColor:"",stateProperties:a,stroke:null,shadow:null,_fontSizeFraction:.25,_fontSizeMult:1.13,initialize:function(t,e){e=e||{},this.text=t,this.__skipDimension=!0,this.setOptions(e),this.__skipDimension=!1,this._initDimensions()},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t)),this._textLines=this._splitTextIntoLines(),this._clearCache(),this.width=this._getTextWidth(t),this.height=this._getTextHeight(t))},toString:function(){return"#'},_render:function(t){this.clipTo&&e.util.clipContext(this,t),this._setOpacity(t),this._setShadow(t),this._setupCompositeOperation(t),this._renderTextBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._renderText(t),this._renderTextDecoration(t),this.clipTo&&t.restore()},_renderText:function(t){this._translateForTextAlign(t),this._renderTextFill(t),this._renderTextStroke(t),this._translateForTextAlign(t,!0)},_translateForTextAlign:function(t,e){if("left"!==this.textAlign&&"justify"!==this.textAlign){var i=e?-1:1;t.translate("center"===this.textAlign?i*this.width/2:i*this.width,0)}},_setTextStyles:function(t){t.textBaseline="alphabetic",this.skipTextAlign||(t.textAlign=this.textAlign),t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_getNonTransformedDimensions:function(){return{x:this.width,y:this.height}},_renderChars:function(t,e,i,r,n){var s=t.slice(0,-4);if(this[s].toLive){var o=-this.width/2+this[s].offsetX||0,a=-this.height/2+this[s].offsetY||0;e.save(),e.translate(o,a),r-=o,n-=a}e[t](i,r,n),this[s].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearCache:function(){var t=!1;if(this._forceClearCache)return this._forceClearCache=!1,!0;for(var e in this._dimensionAffectingProps)this["__"+e]!==this[e]&&(this["__"+e]=this[e],t=!0);return t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_measureLine:function(t,e){return t.measureText(this._textLines[e]).width},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(t.save(),this._setTextStyles(t),this._shouldClearCache()&&this._initDimensions(t),this.drawSelectionBackground(t),e||this.transform(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._render(t),t.restore())},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=i(this.callSuper("toObject",t),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,textBackgroundColor:this.textBackgroundColor});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this._getSVGLeftTopOffsets(this.ctx),r=this._getSVGTextAndBg(i.textTop,i.textLeft);return this._wrapSVGTextAndBg(e,r),t?t(e.join("")):e.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,i,r,s){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,l),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(s+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),s+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,i,r,s){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),t in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t){return new e.Text(t.text,r(t))},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this.selectionStart!==t&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=t),this._updateTextarea()},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this.selectionEnd!==t&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=t),this._updateTextarea()},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0,this.skipTextAlign=!0,r-="center"===this.textAlign?this.width/2:"right"===this.textAlign?this.width:0;var a,h,c=this._getHeightOfLine(e,s),l=this._getLineLeftOffset(this._getLineWidth(e,s)),u="";r+=l||0,e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var f=o,d=i.length+o;f<=d;f++)a=a||this.getCurrentCharStyle(s,f),h=this.getCurrentCharStyle(s,f+1),(this._hasStyleChanged(a,h)||f===d)&&(this._renderChar(t,e,s,f-1,u,r,n,c),u="",a=h),u+=i[f-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){this.skipTextAlign=!1,"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g=this._getStyleDeclaration(i,r);g?(c=this._getHeightOfChar(e,n,i,r),u=g.stroke,l=g.fill,d=g.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,g&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,g||{}),d=d||this.textDecoration,g&&g.textBackgroundColor&&this._removeShadow(e),l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o),(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),g&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);for(var e,i,r,n,s,o,a=0,h=this._getLeftOffset(),c=this._getTopOffset(),l=0,u=this._textLines.length;lr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(e)):(this.setSelectionStart(e),this.setSelectionEnd(this.__selectionStartOnMouseDown)),this.renderCursorOrSelection())}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(this.ctx,r)):e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.setSelectionStart(t)},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&(this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart)),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(s[parseInt(o,10)-i]=this.styles[e][o],delete this.styles[e][o]);this.styles[e+1]=s}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}this.styles[e][i]=r||t(n[i-1]),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.initDelayedCursor(!0)),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t);t.shiftKey?es?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",this.canvas?this.canvas.lowerCanvasEl.parentNode.appendChild(this.hiddenTextarea):fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},getDownCursorOffset:function(t,e){var i,r,n=e?this.selectionEnd:this.selectionStart,s=this.get2DCursorLocation(n),o=s.lineIndex,a=this._textLines[o].slice(0,s.charIndex),h=this._textLines[o].slice(s.charIndex),c=this._textLines[o+1]||"";if(o===this._textLines.length-1||t.metaKey||34===t.keyCode)return this.text.length-n;var l=this._getLineWidth(this.ctx,o);r=this._getLineLeftOffset(l);for(var u=r,f=0,d=a.length;fi){r=!0;var d=a-f,g=a,p=Math.abs(d-i),v=Math.abs(g-i);h=vthis.text.length&&this.setSelectionEnd(this.text.length)},getUpCursorOffset:function(t,e){var i=e?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||t.metaKey||33===t.keyCode)return i;for(var s,o=this._textLines[n].slice(0,r.charIndex),a=this._textLines[n-1]||"",h=this._getLineWidth(this.ctx,r.lineIndex),c=this._getLineLeftOffset(h),l=c,u=0,f=o.length;ui){r=!0;var d=a-f,g=a,p=Math.abs(d-i),v=Math.abs(g-i);h=v=this.text.length&&this.selectionEnd>=this.text.length||(this.abortCursorAnimation(),this._currentCursorOpacity=1,t.shiftKey?this.moveCursorRightWithShift(t):this.moveCursorRightWithoutShift(t),this.initDelayedCursor())},moveCursorRightWithShift:function(t){"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):(this._selectionDirection="right",this._moveRight(t,"selectionEnd"))},moveCursorRightWithoutShift:function(t){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(t,"selectionStart"),this.setSelectionEnd(this.selectionStart)):(this.setSelectionEnd(this.selectionEnd+this.getNumNewLinesInSelectedText()),this.setSelectionStart(this.selectionEnd))},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.clone;e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:0,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,initialize:function(t,i){this.ctx=e.util.createCanvasElement().getContext("2d"),this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this._dimensionAffectingProps.width=!0},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t)),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n=this.width&&!d&&(n.push(s),s="",r=l,d=!0),d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return g&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f),n},_splitTextIntoLines:function(){var t=this.textAlign;this.ctx.save(),this._setTextStyles(this.ctx),this.textAlign="left";var e=this._wrapText(this.ctx,this.text);return this.textAlign=t,this.ctx.restore(),this._textLines=e,this._styleMap=this._generateStyleMap(),e},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())};var e=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,i){var r=e(this.styles),n=this._styleMap[t];t=n.line;for(var s in this.styles){var o=parseInt(s,10);o>t&&(this.styles[o+i]=r[o],r[o-i]||delete this.styles[o])}},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(t,e){fabric.util.loadImage(t.src,function(i){var r=new fabric.Image(i);r._initConfig(t),r._initFilters(t.filters,function(i){r.filters=i||[],r._initFilters(t.resizeFilters,function(t){r.resizeFilters=t||[],e&&e(r)})})})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.contextContainer=s.getContext("2d"),h.nodeCanvas=s,h.contextCache=o.getContext("2d"),h.nodeCacheCanvas=o,h.Font=Canvas.Font,h},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(t,e){return origSetWidth.call(this,t,e),this.nodeCanvas.width=t,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(t,e){return origSetHeight.call(this,t,e),this.nodeCanvas.height=t,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 07aa68b40d4a0e36cb68bc3f47a74274fdffe4a7..327e86a3a220a8f3afa28cf3de32e033a756d0c6 100644 GIT binary patch delta 42263 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
XrG%E{G9GA9pCX_88eE`Y3e>-b88)|UL< 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 0 ? 0 : aleft), groupSelector.ey + STROKE_OFFSET - (top > 0 ? 0 : atop), aleft, atop); } }, - _isLastRenderedObject: function(pointer, e) { - var lastRendered = this.lastRenderedWithControls; - return (this.preserveObjectStacking || e[this.lastRenderedKey]) && lastRendered && lastRendered.visible && (this.containsPoint(null, lastRendered, pointer) || lastRendered._findTargetCorner(pointer)); - }, findTarget: function(e, skipGroup) { if (this.skipTargetFind) { return; } - var pointer = this.getPointer(e, true), activeGroup = this.getActiveGroup(); + var pointer = this.getPointer(e, true), activeGroup = this.getActiveGroup(), activeObject = this.getActiveObject(); if (activeGroup && !skipGroup && this._checkTarget(pointer, activeGroup)) { return activeGroup; } - var objects = this._objects; - this.targets = []; - if (this._isLastRenderedObject(pointer, e)) { - objects = [ this.lastRenderedWithControls ]; + if (activeObject && this._checkTarget(pointer, activeObject)) { + return activeObject; } - var target = this._searchPossibleTargets(objects, pointer); + this.targets = []; + var target = this._searchPossibleTargets(this._objects, pointer); this._fireOverOutEvents(target, e); return target; }, @@ -4894,17 +4890,12 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { continue; } this._objects[i]._renderControls(ctx); - this.lastRenderedWithControls = this._objects[i]; } }, _onObjectRemoved: function(obj) { - if (obj === this.lastRenderedWithControls) { - delete this.lastRenderedWithControls; - } this.callSuper("_onObjectRemoved", obj); }, clear: function() { - delete this.lastRenderedWithControls; return this.callSuper("clear"); } }); @@ -5792,7 +5783,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { this._initClipping(options); }, transform: function(ctx, fromLeft) { - if (this.group && this.canvas.preserveObjectStacking && this.group === this.canvas._activeGroup) { + if (this.group && !this.group._transformDone && this.group === this.canvas._activeGroup) { this.group.transform(ctx); } var center = fromLeft ? this._getLeftTopCoords() : this.getCenterPoint(); @@ -8378,11 +8369,13 @@ fabric.util.object.extend(fabric.Object.prototype, { this.transform(ctx); this._setShadow(ctx); this.clipTo && fabric.util.clipContext(this, ctx); + this._transformDone = true; for (var i = 0, len = this._objects.length; i < len; i++) { this._renderObject(this._objects[i], ctx); } this.clipTo && ctx.restore(); ctx.restore(); + this._transformDone = false; }, _renderControls: function(ctx, noTransform) { this.callSuper("_renderControls", ctx, noTransform); diff --git a/src/canvas.class.js b/src/canvas.class.js index 5e7a23c4..0446e727 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -101,15 +101,6 @@ */ altActionKey: 'shiftKey', - /** - * Indicates which key enable last rendered selection independently of stack position - * values: altKey, shiftKey, ctrlKey - * @since 1.6.3 - * @type String - * @default - */ - lastRenderedKey: 'altKey', - /** * Indicates that canvas is interactive. This property should not be changed. * @type Boolean @@ -350,9 +341,11 @@ isTargetTransparent: function (target, x, y) { var hasBorders = target.hasBorders, transparentCorners = target.transparentCorners, - ctx = this.contextCache; + ctx = this.contextCache, + originalColor = target.selectionBackgroundColor; target.hasBorders = target.transparentCorners = false; + target.selectionBackgroundColor = ''; ctx.save(); ctx.transform.apply(ctx, this.viewportTransform); @@ -363,6 +356,7 @@ target.hasBorders = hasBorders; target.transparentCorners = transparentCorners; + target.selectionBackgroundColor = originalColor; var isTransparent = fabric.util.isTransparent( ctx, x, y, this.targetFindTolerance); @@ -931,19 +925,6 @@ } }, - /** - * @private - */ - _isLastRenderedObject: function(pointer, e) { - var lastRendered = this.lastRenderedWithControls; - return ( - (this.preserveObjectStacking || e[this.lastRenderedKey]) && - lastRendered && - lastRendered.visible && - (this.containsPoint(null, lastRendered, pointer) || - lastRendered._findTargetCorner(pointer))); - }, - /** * Method that determines what object we are clicking on * @param {Event} e mouse event @@ -955,7 +936,8 @@ } var pointer = this.getPointer(e, true), - activeGroup = this.getActiveGroup(); + activeGroup = this.getActiveGroup(), + activeObject = this.getActiveObject(); // first check current group (if one exists) // active group does not check sub targets like normal groups. @@ -964,14 +946,13 @@ return activeGroup; } - var objects = this._objects; - this.targets = [ ]; - - if (this._isLastRenderedObject(pointer, e)) { - objects = [this.lastRenderedWithControls]; + if (activeObject && this._checkTarget(pointer, activeObject)) { + return activeObject; } - var target = this._searchPossibleTargets(objects, pointer); + this.targets = [ ]; + + var target = this._searchPossibleTargets(this._objects, pointer); this._fireOverOutEvents(target, e); return target; }, @@ -1368,7 +1349,6 @@ continue; } this._objects[i]._renderControls(ctx); - this.lastRenderedWithControls = this._objects[i]; } }, @@ -1377,9 +1357,6 @@ * @param {fabric.Object} obj Object that was removed */ _onObjectRemoved: function(obj) { - if (obj === this.lastRenderedWithControls) { - delete this.lastRenderedWithControls; - } this.callSuper('_onObjectRemoved', obj); }, @@ -1389,7 +1366,6 @@ * @chainable */ clear: function () { - delete this.lastRenderedWithControls; return this.callSuper('clear'); } }); diff --git a/src/shapes/group.class.js b/src/shapes/group.class.js index e5ee7a77..8eb5c1d9 100644 --- a/src/shapes/group.class.js +++ b/src/shapes/group.class.js @@ -276,14 +276,15 @@ this.transform(ctx); this._setShadow(ctx); this.clipTo && fabric.util.clipContext(this, ctx); + this._transformDone = true; // the array is now sorted in order of highest first, so start from end for (var i = 0, len = this._objects.length; i < len; i++) { this._renderObject(this._objects[i], ctx); } this.clipTo && ctx.restore(); - ctx.restore(); + this._transformDone = false; }, /** diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index c96b2720..0c2d4f9e 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -837,7 +837,7 @@ * @param {Boolean} fromLeft When true, context is transformed to object's top/left corner. This is used when rendering text on Node */ transform: function(ctx, fromLeft) { - if (this.group && this.canvas.preserveObjectStacking && this.group === this.canvas._activeGroup) { + if (this.group && !this.group._transformDone && this.group === this.canvas._activeGroup) { this.group.transform(ctx); } var center = fromLeft ? this._getLeftTopCoords() : this.getCenterPoint(); diff --git a/test/unit/canvas.js b/test/unit/canvas.js index 4b2cc20a..3066f880 100644 --- a/test/unit/canvas.js +++ b/test/unit/canvas.js @@ -234,23 +234,36 @@ canvas.remove(rect); }); - test('findTarget last rendered', function() { + test('findTarget preserveObjectStacking false', function() { ok(typeof canvas.findTarget == 'function'); - var rect = makeRect({ left: 0, top: 0 }), target; + canvas.preserveObjectStacking = false; + var rect = makeRect({ left: 0, top: 0 }), + rectOver = makeRect({ left: 0, top: 0 }), + target, + pointer = { clientX: 5, clientY: 5 }; canvas.add(rect); - target = canvas.findTarget({ - clientX: 5, clientY: 5 - }); - canvas.setActiveObject(target); - equal(target, rect, 'Should return the rect'); + canvas.add(rectOver); + canvas.setActiveObject(rect); canvas.renderAll(); - equal(canvas.lastRenderedWithControls, rect); - canvas.remove(rect); - target = canvas.findTarget({ - clientX: 5, clientY: 5 - }); - equal(target, null, 'Should not find target'); - equal(canvas.lastRenderedWithControls, undefined, 'lastRendereWithControls reference should disappear'); + target = canvas.findTarget(pointer); + equal(target, rect, 'Should return the rect'); + }); + + test('findTarget preserveObjectStacking true', function() { + ok(typeof canvas.findTarget == 'function'); + canvas.preserveObjectStacking = true; + var rect = makeRect({ left: 0, top: 0 }), + rectOver = makeRect({ left: 0, top: 0 }), + target, + pointer = { clientX: 5, clientY: 5 }; + canvas.add(rect); + canvas.add(rectOver); + target = canvas.findTarget(pointer); + equal(target, rectOver, 'Should return the rectOver, rect is not considered'); + canvas.setActiveObject(rect); + target = canvas.findTarget(pointer); + equal(target, rect, 'Should return the rect, because it is active'); + canvas.preserveObjectStacking = false; }); test('findTarget with subTargetCheck', function() { @@ -344,12 +357,13 @@ var rect1 = makeRect({ left: 0, top: 0 }), target; var rect2 = makeRect({ left: 20, top: 20 }); canvas.perPixelTargetFind = true; + canvas.preserveObjectStacking = true; canvas.add(rect1); canvas.add(rect2); var group = new fabric.Group([ rect1, rect2 ]); canvas.setActiveGroup(group); target = canvas.findTarget({ - clientX: 10, clientY: 10 + clientX: 8, clientY: 8 }); equal(target, group, 'Should return the activegroup'); @@ -358,6 +372,7 @@ }); equal(target, null, 'Should miss the activegroup'); canvas.perPixelTargetFind = false; + canvas.preserveObjectStacking = false; }); test('activeGroup sendToBack', function() {