From 55d842c40097cb8de0acbc1099411160d1e495e1 Mon Sep 17 00:00:00 2001 From: Asturur Date: Sat, 12 Nov 2016 18:43:41 +0100 Subject: [PATCH 1/5] deleted double default cleaning --- dist/fabric.js | 141 ++++++++++++++++++++++++++++++------- dist/fabric.min.js | 12 ++-- dist/fabric.min.js.gz | Bin 68001 -> 68175 bytes dist/fabric.require.js | 76 +++++++++++++++----- src/shapes/image.class.js | 4 -- src/shapes/object.class.js | 8 +-- src/shapes/rect.class.js | 4 +- src/shapes/text.class.js | 4 +- 8 files changed, 186 insertions(+), 63 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 9057c3257c6..594f802616b 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -7036,7 +7036,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ objects: this._toObjects(methodName, propertiesToInclude) }; - extend(data, this.__serializeBgOverlay(propertiesToInclude)); + extend(data, this.__serializeBgOverlay(methodName, propertiesToInclude)); fabric.util.populateWithProperties(this, data, propertiesToInclude); @@ -7075,7 +7075,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ /** * @private */ - __serializeBgOverlay: function(propertiesToInclude) { + __serializeBgOverlay: function(methodName, propertiesToInclude) { var data = { background: (this.backgroundColor && this.backgroundColor.toObject) ? this.backgroundColor.toObject(propertiesToInclude) @@ -7088,10 +7088,10 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ : this.overlayColor; } if (this.backgroundImage) { - data.backgroundImage = this.backgroundImage.toObject(propertiesToInclude); + data.backgroundImage = this._toObject(this.backgroundImage, methodName, propertiesToInclude); } if (this.overlayImage) { - data.overlayImage = this.overlayImage.toObject(propertiesToInclude); + data.overlayImage = this._toObject(this.overlayImage, methodName, propertiesToInclude); } return data; @@ -8369,7 +8369,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * Indicates which key enable unproportional scaling - * values: altKey, shiftKey, ctrlKey + * values: 'altKey', 'shiftKey', 'ctrlKey'. + * If `null` or 'none' or any other string that is not a modifier key + * feature is disabled feature disabled. * @since 1.6.2 * @type String * @default @@ -8396,7 +8398,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * Indicates which key enable centered Transfrom - * values: altKey, shiftKey, ctrlKey + * values: 'altKey', 'shiftKey', 'ctrlKey'. + * If `null` or 'none' or any other string that is not a modifier key + * feature is disabled feature disabled. * @since 1.6.2 * @type String * @default @@ -8405,7 +8409,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * Indicates which key enable alternate action on corner - * values: altKey, shiftKey, ctrlKey + * values: 'altKey', 'shiftKey', 'ctrlKey'. + * If `null` or 'none' or any other string that is not a modifier key + * feature is disabled feature disabled. * @since 1.6.2 * @type String * @default @@ -8428,7 +8434,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * Indicates which key enable multiple click selection - * values: altKey, shiftKey, ctrlKey, cmdKey + * values: 'altKey', 'shiftKey', 'ctrlKey'. + * If `null` or 'none' or any other string that is not a modifier key + * feature is disabled feature disabled. * @since 1.6.2 * @type String * @default @@ -8438,7 +8446,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * Indicates which key enable alternative selection * in case of target overlapping with active object - * values: altKey, shiftKey, ctrlKey, cmdKey + * values: 'altKey', 'shiftKey', 'ctrlKey'. + * If `null` or 'none' or any other string that is not a modifier key + * feature is disabled feature disabled. * @since 1.6.5 * @type null|String * @default @@ -8554,6 +8564,23 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ preserveObjectStacking: false, + /** + * Indicates the angle that an object will lock to while rotating. + * @type Number + * @since 1.6.7 + * @default + */ + snapAngle: 0, + + /** + * Indicates the distance from the snapAngle the rotation will lock to the snapAngle. + * When `null`, the snapThreshold will default to the snapAngle. + * @type null|Number + * @since 1.6.7 + * @default + */ + snapThreshold: null, + /** * Indicates if the right click on canvas can output the context menu or not * @type Boolean @@ -8625,8 +8652,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @chainable */ renderAll: function () { - if (this.selection && !this._groupSelector && !this.isDrawingMode) { + if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) { this.clearContext(this.contextTop); + this.contextTopDirty = false; } var canvasToDrawOn = this.contextContainer; this.renderCanvas(canvasToDrawOn, this._chooseObjectsToRender()); @@ -8649,7 +8677,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab } this.fire('after:render'); - + this.contextTopDirty = true; return this; }, @@ -9247,15 +9275,36 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab var lastAngle = atan2(t.ey - t.top, t.ex - t.left), curAngle = atan2(y - t.top, x - t.left), - angle = radiansToDegrees(curAngle - lastAngle + t.theta); + angle = radiansToDegrees(curAngle - lastAngle + t.theta), + hasRoated = true; // normalize angle to positive value if (angle < 0) { angle = 360 + angle; } - t.target.angle = angle % 360; - return true; + angle %= 360 + + if (t.target.snapAngle > 0) { + var snapAngle = t.target.snapAngle, + snapThreshold = t.target.snapThreshold || snapAngle, + rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle, + leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle; + + if (Math.abs(angle - leftAngleLocked) < snapThreshold) { + angle = leftAngleLocked; + } + else if (Math.abs(angle - rightAngleLocked) < snapThreshold) { + angle = rightAngleLocked; + } + + if (t.target.angle === angle) { + hasRoated = false + } + } + + t.target.angle = angle; + return hasRoated; }, /** @@ -9957,6 +10006,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab addListener(this.upperCanvasEl, 'mousedown', this._onMouseDown); addListener(this.upperCanvasEl, 'mousemove', this._onMouseMove); addListener(this.upperCanvasEl, 'mouseout', this._onMouseOut); + addListener(this.upperCanvasEl, 'mouseenter', this._onMouseEnter); addListener(this.upperCanvasEl, 'wheel', this._onMouseWheel); addListener(this.upperCanvasEl, 'contextmenu', this._onContextMenu); @@ -9988,6 +10038,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this._onOrientationChange = this._onOrientationChange.bind(this); this._onMouseWheel = this._onMouseWheel.bind(this); this._onMouseOut = this._onMouseOut.bind(this); + this._onMouseEnter = this._onMouseEnter.bind(this); this._onContextMenu = this._onContextMenu.bind(this); }, @@ -10000,6 +10051,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab removeListener(this.upperCanvasEl, 'mousedown', this._onMouseDown); removeListener(this.upperCanvasEl, 'mousemove', this._onMouseMove); removeListener(this.upperCanvasEl, 'mouseout', this._onMouseOut); + removeListener(this.upperCanvasEl, 'mouseenter', this._onMouseEnter); removeListener(this.upperCanvasEl, 'wheel', this._onMouseWheel); removeListener(this.upperCanvasEl, 'contextmenu', this._onContextMenu); @@ -10052,6 +10104,17 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab target && target.fire('mouseout', { e: e }); }, + /** + * @private + * @param {Event} e Event object fired on mouseenter + */ + _onMouseEnter: function(e) { + if (!this.findTarget(e)) { + this.fire('mouse:over', { target: null, e: e }); + this._hoveredTarget = null; + } + }, + /** * @private * @param {Event} [e] Event object fired on Event.js orientation change @@ -10351,6 +10414,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ __onMouseDown: function (e) { + var target = this.findTarget(e), + pointer = this.getPointer(e, true); + // if right click just fire events var isRightClick = 'which' in e ? e.which === 3 : e.button === 2; if (isRightClick) { @@ -10370,9 +10436,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab return; } - var target = this.findTarget(e), - pointer = this.getPointer(e, true); - // save pointer for check in __onMouseUp event this._previousPointer = pointer; @@ -12183,7 +12246,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati _removeDefaultValues: function(object) { var prototype = fabric.util.getKlass(object.type).prototype, stateProperties = prototype.stateProperties; - +console.log(prototype); stateProperties.forEach(function(prop) { if (object[prop] === prototype[prop]) { delete object[prop]; @@ -12640,7 +12703,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati } if (options.format === 'jpeg') { - canvas.backgroundColor = '#fff'; + canvas.backgroundFill = '#fff'; } var origParams = { @@ -20878,12 +20941,11 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Constructor * @memberOf fabric.Image.filters.Saturate.prototype * @param {Object} [options] Options object - * @param {Number} [options.contrast=0] Value to saturate the image (-255...255) + * @param {Number} [options.saturate=0] Value to saturate the image (-100...100) */ initialize: function(options) { options = options || { }; this.saturate = options.saturate || 0; - this.loadProgram(); }, /** @@ -22457,13 +22519,21 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag fabric.util.object.extend(this._getStyleDeclaration(loc.lineIndex, loc.charIndex), styles); }, + /** + * @private + * @param {CanvasRenderingContext2D} ctx Context to render on + * @param {Boolean} noTransform + */ + render: function(ctx, noTransform) { + this.clearContextTop(); + this.callSuper('render', ctx, noTransform); + }, + /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on */ _render: function(ctx) { - this.oldWidth = this.width; - this.oldHeight = this.height; this.callSuper('_render', ctx); this.ctx = ctx; // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor @@ -22472,6 +22542,24 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.renderCursorOrSelection(); }, + /** + * Prepare and clean the contextTop + */ + clearContextTop: function() { + if (!this.active || !this.isEditing) { + return; + } + if (this.canvas && this.canvas.contextTop) { + var ctx = this.canvas.contextTop; + ctx.save(); + ctx.transform.apply(ctx, this.canvas.viewportTransform); + this.transform(ctx); + this.transformMatrix && ctx.transform.apply(ctx, this.transformMatrix); + this._clearTextArea(ctx); + ctx.restore(); + } + }, + /** * Renders cursor or selection (depending on what exists) */ @@ -22481,7 +22569,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag } var chars = this.text.split(''), boundaries, ctx; - if (this.canvas.contextTop) { + if (this.canvas && this.canvas.contextTop) { ctx = this.canvas.contextTop; ctx.save(); ctx.transform.apply(ctx, this.canvas.viewportTransform); @@ -22501,13 +22589,12 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag boundaries = this._getCursorBoundaries(chars, 'selection'); this.renderSelection(chars, boundaries, ctx); } - ctx.restore(); }, _clearTextArea: function(ctx) { // we add 4 pixel, to be sure to do not leave any pixel out - var width = this.oldWidth + 4, height = this.oldHeight + 4; + var width = this.width + 4, height = this.height + 4; ctx.clearRect(-width / 2, -height / 2, width, height); }, /** @@ -22962,7 +23049,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag ctx.fillRect( leftOffset + lineLeftOffset + this._getWidthOfCharsAt(ctx, i, j), topOffset + lineTopOffset, - this._getWidthOfChar(ctx, _char, i, j) + 1, + this._getWidthOfChar(ctx, _char, i, j), heightOfLine / this.lineHeight ); } diff --git a/dist/fabric.min.js b/dist/fabric.min.js index ae1a1e80ea9..c82983f2a16 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,8 +1,8 @@ var fabric=fabric||{version:"1.6.6"};"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;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)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){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},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);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?I-=2*f:1===c&&I<0&&(I+=2*f);for(var D=Math.ceil(Math.abs(I/f*2)),E=[],L=I/D,R=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),F=P+L,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(c(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(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=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=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}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(t){}}();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 i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(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");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}),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 M=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){A.set(t,{objects:v.util.array.invoke(i,"toObject"),options:r}),e&&e(i,r)},i)}t=t.replace(/^\n\s*/,"").trim(),A.has(t,function(i){i?A.get(t,function(t){var i=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"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),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 this.lerp(t)},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){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("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={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},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.appendPoint(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,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},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)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),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,viewportTransform:[1,0,0,1,0,0],backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_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(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw n;if("undefined"==typeof e.getContext)throw n;return e},_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(t),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,i=this._activeGroup;this.viewportTransform=t;for(var r=0,n=this._objects.length;r"),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=0,n=this.getObjects(),s=n.length;r\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;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._activeGroup;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._activeGroup;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(t){}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(t){var e=this._groupSelector,i=e.left,r=e.top,a=n(i),h=n(r);if(this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(e.ex-(i>0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&this._checkTarget(n,s))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&this._checkTarget(n,o)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_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},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},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=this.restorePointerVpt(s)),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},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e&&e.fire("deselected",{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){var e=this.getActiveGroup();return this.fire("before:selection:cleared",{e:t,target:e}),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)}},__onMouseWheel:function(t){this.fire("mouse:wheel",{e:t})},_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),i.actionPerformed&&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}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");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||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),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)}),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 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]},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_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._setOpacity(t),this._setShadow(t),this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this._render(t,i),this.clipTo&&t.restore(),t.restore())},_renderBackground:function(t){this.backgroundColor&&(t.fillStyle=this.backgroundColor,t.fillRect(-this.width/2,-this.height/2,this.width,this.height),this._removeShadow(t))},_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,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.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,i){var r=this.toDataURL(i);return e.util.loadImage(r,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,{enableRetinaScaling:t.enableRetinaScaling});"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,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},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="undefined"!=typeof i&&"undefined"!=typeof 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,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),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||e.isContainedWithinObject(this)||this.isContainedWithinObject(e)},isContainedWithinObject:function(e){for(var i=t(this.oCoords),r=0;r<4;r++)if(!e.containsPoint(i[r]))return!1;return!0},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=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},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}})}(),function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i){if(!fabric.isLikelyNode&&t instanceof Element)return t===i;if(t instanceof Array){if(t.length!==i.length)return!1;var r=i.concat().sort(),n=t.concat().sort();return!n.some(function(t,i){return!e(r[i],t)})}if(t instanceof Object){for(var s in t)if(!e(t[s],i[s]))return!1;return!0}return t===i}var i=fabric.util.object.extend;fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return!e(this.originalState,this)},saveState:function(e){return t(this,"originalState",this.stateProperties),e&&e.stateProperties&&t(this,"originalState",e.stateProperties),this},setupState:function(t){return this.originalState={},this.saveState(t),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,e){var r=[t.x1,t.y1,t.x2,t.y2],n=new i.Line(r,t);return e&&e(n),n}))}("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,e){var r=new i.Circle(t);return e&&e(r),r}))}("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,i){var r=new e.Triangle(t);return i&&i(r),r}))}("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,i){var r=new e.Ellipse(t);return i&&i(r),r}))}("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.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i){var r=new e.Rect(t);return i&&i(r),r}}("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 o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.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'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?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,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.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,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.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,M,A,P,I,D;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;h=e)){I=r(1e3*s(c-T.x)),O[I]||(O[I]={});for(var E=k.y-w;E<=k.y+w;E++)E<0||E>=o||(D=r(1e3*s(E-T.y)),O[I][D]||(O[I][D]=m(n(i(I*x,2)+i(D*S,2))/1e3)),u=O[I][D],u>0&&(d=4*(E*e+c),g+=u,j+=u*v[d],M+=u*v[d+1],A+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=j/g,b[d+1]=M/g,b[d+2]=A/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(E=4*(D+M*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.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_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._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",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,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].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?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(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},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_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,charSpacing:this.charSpacing});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.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,o){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,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,i,r,o){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,i){var n=new e.Text(t.text,r(t));return i&&i(n),n},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._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(e,r)):t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,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;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"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,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else 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)),b&&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;l0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(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.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this._fireSelectionChanged(),this._updateTextarea(),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.cursorOffsetCache={},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),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{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.selectionStart=t,this.selectionEnd=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),!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")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),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.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_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.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this._fireSelectionChanged(),this._updateTextarea()},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?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;",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},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},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:2,__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;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),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.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,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file +this},viewportCenterObjectV:function(t){var e=this.getVpCenter();return this._centerObject(t,new fabric.Point(t.getCenterPoint().x,e.y))},getVpCenter:function(){var t=this.getCenter(),e=fabric.util.invertTransform(this.viewportTransform);return fabric.util.transformPoint({x:t.left,y:t.top},e)},_centerObject:function(t,e){return t.setPositionByOrigin(e,"center","center"),this.renderAll(),this},toDatalessJSON:function(t){return this.toDatalessObject(t)},toObject:function(t){return this._toObjectMethod("toObject",t)},toDatalessObject:function(t){return this._toObjectMethod("toDatalessObject",t)},_toObjectMethod:function(e,i){var r={objects:this._toObjects(e,i)};return t(r,this.__serializeBgOverlay(e,i)),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=t[e](i);return this.includeDefaultValues||(t.includeDefaultValues=r),n},__serializeBgOverlay:function(t,e){var i={background:this.backgroundColor&&this.backgroundColor.toObject?this.backgroundColor.toObject(e):this.backgroundColor};return this.overlayColor&&(i.overlay=this.overlayColor.toObject?this.overlayColor.toObject(e):this.overlayColor),this.backgroundImage&&(i.backgroundImage=this._toObject(this.backgroundImage,t,e)),this.overlayImage&&(i.overlayImage=this._toObject(this.overlayImage,t,e)),i},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=0,n=this.getObjects(),s=n.length;r\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;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._activeGroup;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._activeGroup;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(t){}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),h=!0;if(a<0&&(a=360+a),a%=360,n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&this._checkTarget(n,s))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&this._checkTarget(n,o)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_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},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},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=this.restorePointerVpt(s)),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},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e&&e.fire("deselected",{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){var e=this.getActiveGroup();return this.fire("before:selection:cleared",{e:t,target:e}),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)}},__onMouseWheel:function(t){this.fire("mouse:wheel",{e:t})},_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),i.actionPerformed&&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}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");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||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),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)}),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 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 console.log(i),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]},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_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._setOpacity(t),this._setShadow(t),this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this._render(t,i),this.clipTo&&t.restore(),t.restore())},_renderBackground:function(t){this.backgroundColor&&(t.fillStyle=this.backgroundColor,t.fillRect(-this.width/2,-this.height/2,this.width,this.height),this._removeShadow(t))},_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,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.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,i){var r=this.toDataURL(i);return e.util.loadImage(r,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,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundFill="#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,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},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="undefined"!=typeof i&&"undefined"!=typeof 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,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),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||e.isContainedWithinObject(this)||this.isContainedWithinObject(e)},isContainedWithinObject:function(e){for(var i=t(this.oCoords),r=0;r<4;r++)if(!e.containsPoint(i[r]))return!1;return!0},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=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},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}})}(),function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i){if(!fabric.isLikelyNode&&t instanceof Element)return t===i;if(t instanceof Array){if(t.length!==i.length)return!1;var r=i.concat().sort(),n=t.concat().sort();return!n.some(function(t,i){return!e(r[i],t)})}if(t instanceof Object){for(var s in t)if(!e(t[s],i[s]))return!1;return!0}return t===i}var i=fabric.util.object.extend;fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return!e(this.originalState,this)},saveState:function(e){return t(this,"originalState",this.stateProperties),e&&e.stateProperties&&t(this,"originalState",e.stateProperties),this},setupState:function(t){return this.originalState={},this.saveState(t),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,e){var r=[t.x1,t.y1,t.x2,t.y2],n=new i.Line(r,t);return e&&e(n),n}))}("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,e){var r=new i.Circle(t);return e&&e(r),r}))}("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,i){var r=new e.Triangle(t);return i&&i(r),r}))}("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,i){var r=new e.Ellipse(t);return i&&i(r),r}))}("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.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i){var r=new e.Rect(t);return i&&i(r),r}}("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 o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.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'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?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,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.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,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.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,M,A,P,I,D;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;h=e)){I=r(1e3*s(c-T.x)),O[I]||(O[I]={});for(var E=k.y-w;E<=k.y+w;E++)E<0||E>=o||(D=r(1e3*s(E-T.y)),O[I][D]||(O[I][D]=m(n(i(I*x,2)+i(D*S,2))/1e3)),u=O[I][D],u>0&&(d=4*(E*e+c),g+=u,j+=u*v[d],M+=u*v[d+1],A+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=j/g,b[d+1]=M/g,b[d+2]=A/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(E=4*(D+M*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.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_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._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",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,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].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?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(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},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_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,charSpacing:this.charSpacing});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.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,o){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,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,i,r,o){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,i){var n=new e.Text(t.text,r(t));return i&&i(n),n},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._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(e,r)):t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,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;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"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,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else 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)),b&&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;l0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(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.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this._fireSelectionChanged(),this._updateTextarea(),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.cursorOffsetCache={},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),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{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.selectionStart=t,this.selectionEnd=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),!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")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),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.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_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.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this._fireSelectionChanged(),this._updateTextarea()},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?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;",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},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},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:2,__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;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),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.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,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 1702e9e6b3f73b4180aecc0a7046c448c58e95da..ae0363f8db95adde316ec7dec2eb474a651caa89 100644 GIT binary patch delta 67070 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%0D~6iqXw$WTRmRf>tDT~Q zD2rV(uKUO{8*6;!(FK8sCIt{gMGEb}RAeezt z8K~>TOp-6x%CLccEf3L-INPH?hfklfy?*zx=M*^$)-2owbnHvm0z5Tqp|ZuFQZ4V) z+caGG7ASmsyiPMLixi?mqCIwulrK<`G6?q z%9p6WqoW-LTc6Bro{|}lH&Hyph01m4G+Dwb;H4F2{cE(c^F^8L*85~eP7##6z7S>r z2%LVE@POW_TywL$zJk2(qJJ#sFj;m|t-UN`p{(QGIK~eSOte_UOC17*l}(Gb z(?tTur4)+-j8#viv*HMNQ3xu!nn$bSr3@OL|K#KWNKFzMIyl&mBr>jFMo+zoNg*cT z6sg9oTUqi>U43&q8Sbu(Y(`3W%!F+_^4%M&2U|bYqQ*kYPFTQEbvP&rnSUx)4jFos zp-8_Pr42SfgbIt^u1bE-0wWn|0lJK9G*^OG#^JwZV5D}%U2Tt3lsQcrnIOd-ts=iy zwnL(augv{f!&i~WaMqahPLmo+)Q2w1$EDrc(BI0ghWnvFLCBNBL{Ms&n5q}i@xg7mjnr|p#g>?lq^-#o-%QwaHTA*=wq4;iSxXV6! zBS(1s5Z)+o@=i*|mjfeqgb(HGjQ@5LUBp2L zeJ~qgbj?()3LSJf=SiL?mu6j`Rb8J;b$wQK=~e^HrO}0T6m-AHXMaqaj511854*rt8AvDbUgWk$RHR6X@_PF3R7r-cE~9|lu$w$G0G*0Q40`BDpi{-#xl>pz40?3 zJ2&umvttFK5*N2NPn6pxyzhfW|)(^BU=Jfy@PXK44B$Q`JbjmgAp#mOb|{P@v-uv zh?uTS^;w}wBt!8eDNs|%WcARjw6@9sX_&_HC~cN022@tDZId-yNK%aG49gjYi@MtU zkdmg-=7-2Wo6+5r)pj_(tG~%m@Qf{>$c)K{J|mZi`dvf2d4J8v0CX?JyQ#ovn4-~q zqq(9giIFyt7_wayM~2CXkisYqd+tHhKB=MY=VSXY0^)r_W%hZOBN2vXxf!%bLoosyCs!O&mW@_c4jyHf8;=o0laa*V+pUQEtuFGj897o{Yx_=wss!b0l5tL` z(giQQe1S46P=9f71s=haimQ~bK6aAFOxP90cm$But|u8+QAm2DzdtMc49+FFU`3~{ zx&AsAUn3Oj`hUrL*Y38BWKs0{{uMI!+73ZBDN?qR8B#EpV<$7-H%@XaCu1EAuMR{) zA|@1|0HiE#S?9Okdh{C&ik3aEb(3YW(eGzD2JICaX@F-%Xr_~H0*TJBCG;>FL#VAzEZ`{b}0T{6+doyV&`&i-Z4jM zebtO(t$*Zz4KVia&4_%w)o-x+1^Z|aX`hmziEd{iN48O6Jp_6C53?v?#~K-@>_}#U z&%vkyoPbs^7ZUx;JghHsk-f~p@iK|pDfUs>zv*SJAK$XS>1Fh2qF$j$98f+$p-5YL zgXIJqEyyc?gyxDUbj)#xIc5f7+55(YXqoFWJ7s>83 zOJjtB&m0u;luJ-)@lvLDB0Q@a(~57y9sR7C4Nuyg{aEJjO(18{s1AOjMWCSVChMN5 z4TxCQyi*XF=xNh;Xs|+mLEqv>CGOvLYgx>G! zO@DQB78pmACjl{}Iujj*APCS!QGEQE5WNn|o*uz0>5lVRXuy$Law?(L_;z5PKFJD) zqJwA!3JF7@>k{sYMXZ2mpAQT|)ukOV8IF2GF^h*|Ah(_m__IaY?`ZYUYXm2c2b5?y zEOZ}_(XsSNZ#azs5j=sPMCj7WG2o1S0Dn61$0iey-L)tbQO-(x~k4v?a2wg1L|2gjkTsyd+VZ(?d5P!^) zim)eIq}>lB32X*ArIA(_qGxY0Qy$qJBWvVueO3HWz(H%Uu1t*Ex~Vc0EjYioFn?@w z1XqH8kDDr*Lq(?wk;i#S=ayl6-;`X_zHYC3=WNPrvD>IhjdGNl2*mE7b9)UP-W6Os zms6+ zxr`9h1zbXm_-rs?Ljp$O-_xT`J^r``IXM1%fQ1Y^s>hED4^%X7{s8<4?$+7Ej~_v) zZF9axAt~S97&S!_S$KdjlYbn^?H8oc`2g%rETe`KxCr-a?VLcYu66`jQ(sC}sUv8P z-#H$?IsUn@#xRRl{hQ8OqJKX7h{h}-YNMi#_Ynn5VwD3n=?o5_N`=p*fJK}g#smDT zvcc|!_TWH5+LF?iDh)5eIiO9Ki2* z?67!iSiS;v5BjiAX=&fX9GkCWm}0JnD?v;`vKCSV9Nx*66*og@T;489uokF*1bDc| zHr`KVpbJ=jE&07les6>%OuuWnJJmjHcxx=R<|qdeV7eBhYh`g*15?(-AF~RFSr@Bx z7&0;p(fI9cuYUfz;0;H^k0Zl;yLqUhJ>3nJpk$hWgRNPLa79shdlUhu7l&iua zwNr;PZ-2q~tr4WwNH)7Y_WEXRIE&wsQ2RWe7@gcIr_{zc~? zGIE4cVeTgi9Ac|((G3;dxJ5T^(M>$Smmgx9G}3l?6YC8w#az)08oVh^7c8rDSypig zxl?p;f`lvt(f0}NGrW+?b}AEAIyQ;3cG0W45Rc@!#%&Xt$s~UA^#C25>n;%K9w+|= z@n{Y}FgaT}27k-st8~DhPk%;vg_)dkLojagW zgh{?0lU!FSCmCPcl>)AtqGDNMg8k?e>y_m{sa{5;qg0C=I4O2DSWD!{W60XCk=diG zSCu(MuZ`(@w}Dt$(Ef*xBG?lY<6H#1xBuVHr5K0nSsi&N0+!MFHMkCK_o z4A%NBi`FG^p{!~T0I@2xG3|jyJ0CxWL?(PPdS6h)0e`g@TFAIvAez=I`kVpj2&P$N zIijv)sl+Ztxu6^&z)?WBP*i~KSIYgJ^rOzmVFlQHr99uM6w)w)UN=gaRKyiT7Jq*N zV?_gr6Qv!g^x1}YBNmu0pUoj z`h>T(RDQ~K8#!%%_gL1QOfYw#s?Y}_3c1|*!$B6SWhv&w8L zBw#@+v68h@a4U|PjvUhx+JBv+lLr-Iy?g_9Kikl_@BGK_XS-(6H0b-(IJ|5^g{>S0 zRizmX_sr{-J;+_$sMd(S*diJnr;q{9pN_XxYJQ$ov!tARlKoa?_the^%~L%O7NVdP z(!60whf;yY>lzzhWcQG%O|i8-kLP6s%zTAEK2^Ca*vxts98=cjgnyuJj_59RT9RIQ-vc+TOejA=$-eph9& zQ7hvOQj(I}+NfPfZX=(xk6?X;+DqYmr1(KQZ6lu5c}f!oxRR&LqDVwDKgO3x8V~Ry z)lLBpGja^DA}15x>3?&dc$>Ss(p#1PBooFm$ zA8MzU(59-iegAr>h0X3rXPWsDHdwJF9lVQEo)&ZP&p& zgN1aG*5v**2MueKN6|`@Z#P~-*boSxUYqS{pX6>gjhsa7J;#nQ8VY_wz2o=#J(QgR zk_~x8Gz&%|%-FbB3?mznuv}bHg)X>R=O40s-c+HGZVk7#8?v$4qPM)3XpxAb{5^(W zMG8u(O8uy=Uw_b95>k?xq$jyj+C{7F+C^Hx{?6#dLqER*g3|b*MD8V9YDuRGD)|-l zR|_t7Sm_j2`tHtHd`Zx1O+X<& zYUyVp6eLJc_QqDOKS`z`^?Znq6z!N*?~3(oal{Jy$bT|+tMDG8_yw38Zy}30wjh=v zk0k*XI~9>lM<12By(Gf3MDg!(bRf>k(GzibHhL<~mZN9layj~1td^s1?mX)S$$YM^ z0N-$db3Zr~GN1WAfIv9#O`{aI{BZpyxf-3c@?M!%u;y?C^3;T_U}cA`;0F`7g1HV) zML@y2PJcX{!6uP!Gl0gZPUF@oKA>?8u2;ge{4ITB#t`3)9vYxrZVG4{u*yKHTWS=#kYs*@6}dg$Af)eGNLUT3iC&~c_7 z+kjD{8zk4z5eZIW+|Olkm0TnYf03_J(k6bz%DrgZ<qoCS>d2taJB^%Qesw9m(|Bn>b18SO=FyAfEZ(rwD732|Fi-0PBDs?q@98f7ue*B!4tZs)7HQ7X7(@JocZ7+TKJ2L4$krsM${Swu;TOE!^7k zrL=4KLXxk7=+C@CxYFmWG$;vepkoETHO>a2%te5JD#I8BeaMI zc6I7cnWd%NI>s^1)vZr+)I;T=Fkbf0B-yb7$xV`eX zyM$d8Y73pOmxx|2P-+I{zzFx715y-xl)fzH*?HzX*5f<7o(7p3NpEjkt#+HGidrp6FIlz%|k`yLwk>Pn&EH7vk(EJYOQwaWv%sK6$`AbDVt} zdv1UbEy5on7gJ~+zurQDOXK!oy(8QqRp!MNaBKTzIJ#jFgljq2>O+=r=q`;n`?dkJ zZR7dH$P9SB#2dl7`D-)}&mX!)o-L5?v6?&~43Q#65qjnXByFsr3NrK8H|x6mw7wPcGO-}V}?RFaWsKgulIZGe_!8Vz{-81772 zEsJqjkDcbtFn?(7iZVb0j~d=#*~VNLOIBm?1wrhNYE;)Pn+YRPf6s=}x)3&ogWP?0 zq#@RXeK(@LLb@FBC2SX)U6GQHDe`ZrDN?*9h1!%Ke`n41{xo{kD9S_Z2kMxft4VOG zP}gQuqZdMG=WTj3%Glr*dUYg$Tq&J#1SKyMN9_7e0ha$+y^cA@5Z7SlvOj zyMMfs;nZ!HcCBT~DHSxDI){S#WUZFwOBzHhY6htO|Afql(?+sil9!(f^J_?fg8A(b z4S@s#)C7MW5h!M{^`xD47T7Lr7iATm3s#Qmkvtb|XQ=ke-A38O> z_o}cAw_q!!6!HOKc=v$?k#GOy{?qOHg^_JvKq*_G6~;#CspiBpL#=ov($MM3j| zZM*CxZAmVw#hWE^*^)_2J5R(It*6J>_jUg5FK=vao1 zNPk^Z*X*V=WLejbJhmfU+mK-+?CLB;<2K@)mK}6$zy<2A#~vd~6iS3GzJyG(Xza1c z)FnEgWzeEH&tdCT>iI|+LAHFXOci6c=8Oe7s=loh$5vEZwytK92P?tf3pvU6_20=J zb4Ak1lH%ms=MUABwP~veZ;)UO4MmmV9)Is*37BKh7juY2cATi-quN**{IPtn$e~*? zL_u1(tZy^dl|Ihn01A#Y4%Gapv~65Rh$8Q5VRvl#3E+%!WVx`hXf@tUn$D<2kF|oi z@T;n6JL9-fzH$|XW)m&KG08A@I>dz|b^(It`f{brG6P|^NUFE;7NG%t+Iod@xqnV> zB5C3}(6ie3m`EnAXfmnZCZ}g?LnlJ(KKoCfX))xSi~;4{_z&o*p5$^x88FfeU>%bF z3t14dzyTEaulNs=W1?gzPx7hq=k0S{*->5wD;q1Hc@GiSw8{G&-i^EmqP>veb=a{k zU8f*j{q-r6Cfp-jP@?1ac6gF3ngN7vG5{-{hZ$X6q<(U z&`Ko_jgymlF0q=9PF8_YO~;M8sm5$cPzf`=$yPEQuQ%USZz*osU;!O0!uKpfHJ!`x zHA*7QiX~>$(=Z+qD#bK#1Ap5Hy}`msPAzL(?KI#;xQ|cqWrfS{b`r7P9rg!-gw#3j zJ8lfE)@KoNtOIV3Hl(GODd$@Oq92L*Dx9!EW3$~*60wAmxC$ns*^WiPmpfT=66if7 ziO6_t&7~^mNM(*?oFm2a_;G~>KD4n{Pbq2L>mhvhe0{B_;!&Ga<$vsZB{Nog5IP|$ zRAF{pG%}^K5Hq}HVD~EbS+t;8?xeaFeinha8DAQ;6D+j1FtLP-Wo-Ni!8+C+%ma>l zcXFQ(TdSQ!tT)^n@#1n*OY0rX0N!cTkdZ$e?VyS`i%uaZ^r%iAAt z!TuKz1=$Lyg8OkCr++#N)6w<0tAH;D==oCfVX@l@(mhv5E~DP-@7(yuk3)Q7>0iQp zWLL`!ZRHQq=Dzg*g+FMohdqD6U;K~;G%RaA(rkt?>2v2o-BV}aZ**gXkmjh`BpUNH z*{<~sWLT!v8>K>?Mq(RD!17R#uq=`}G77N8Wm;ALee~0hTRW!;U`CmK zC+x_O!=ROR)KQV&>6R7;T1~JFDn(a_J&ytdnJtUlV1L&1;?|C=ms=Nhr1=syRj#gx zvad|4S+F-J_Q1CnXr6GHYyda25~Y&0DX1gPv{SLyxYQ=0;Cj4Rlf9NxizBU&Z%{`0 z$!Zz{l|02e3+;KLhd8PJF8yAs&Nk9a0GMyjT(@WF5LULRzr8_NS=9F(Kf|p2@uJxv zJ1c&hEPqyNWHy zBgOR3;fU)eXVlZiy50;D6ofI+msg2mtWC%2p&{$6Sf2T`TH! zyR}6l>bs1_@w;bzi>5sbldveOGUBmilUkSCPx*`aoNe}u!_kN~+Jo}|&`LPCR$YUg zEz7`-Sf%Ca1-}B`Ay!>)DVN*(P7uDCv7LcBPN$_G7wZ~9(VbJtJ-1Y- zQh#KCwylfML)qw26C0soLFh#{0Pl(HeAAY9AYCv}c5E8Os*Cjs8*(fFr0%Vh*}Dk& zA}Fh2`e4-(ptd~;f9X+P*_o66zX3T&rHwNmtxT20Gao^eOmvGvlrD=?WW%t8n8Z>j z%uvBQs1qi@zI9{Up{)I?oH@tIl^Dcn$$ui^KzRj!x=Ln%UBsbEWm>(^(F%^!Y!NIZ z(*PXEM(-l$P_))nx`*pOTeS=gLUV+qi3}ozLcE_kl0$ab*|cf#eRh-1>2)CtYUs6> z4RN!Rop;4scDqB5zYUa_WkH+Po=-P2SY=REDy=Y*>B?KgaYphDu%+F-NmCih<9{0) z$gm}KB*ml&rGfG?H&pKB0OFt>4srpHhB)XJ=cR!(veiM}=F#`uKzf}UNOyoos7f(> zBI+(wM*wWC_Z$*65atz>zm>0ofjBc};76_U;w)(o2M1#K?1?yd_Dl@=-#m+2GLtqf z&UJ7{noD9q*;z6}&N;23Y#6Xr(to^il;1?^Itqme@?C%8aM9jAb)k(k)&SZi3;b)W zJumYANz0-oE|$evvV2)wl2t@F138=gkY_N;`s;eMV0QqHb3jS2)XO%k?~!Dn-90%XLZ>GeG5jJMIjzkmI>fMVLLp z-*Owh_r7(0^Kh(lNC$Y{_kXch1G=-qsPu-qPH(n12y`%#gcnik5io-chJv7C4`IX} zL5Mwu4|@z9_~&?!AOrn9-jg6l{vPjnE4jxTWzX7vd*0^TbN1byyW#fyjkZUiXHSBn zJv>W$>Ok!^9iu(ontQxTdvdqzdBPv~gPeHcgeHS)fJ3SAWF&#>7enDPo~8yX8BX)AOGjaub>Rg2QXK)xvE zY7z6_q)WFSsGh3)Do`UF^qP??a&JSNFVGYxL~5u%Co5Q-eEUcljD<%jD`*;|OulD~ zrh(A-0!_HXGmUtodw&UA#(NrNeuI{{uQMEElJR0h_clTiS;x1Oy-IWkjeRUs^rV&md3!@BXFb~{YYOs>@iF#Eg%S-^oAp)QzyNJnbc!Wjg%{S>h};(01_lX z?~SrCf;y0INa%r=J(T$vG7n^SWdAjYSmMT$4~IYg^5*pWw=Z74d;Qaor>|cB>GiuK zWT_MK$g~i0>VFjWNHI$2TH%mZva41U_SZ+D ztUNk$5{g6?@htHg)Ttg8W@V94K1Sx{z_>bg<_y8a(|qQEAPB2!|9L1` zMy+n%)^|eGZ9Q+1ndqhkI$2FA-MD`B>bKOFC2&ctuVby$L07yhp+%RzUpL<29b7(H znGPRIbDOskqOBANOYdy&wD)33rxuz-=vB}}x8k{2&rG_sQO{_pq9$L8lF9^YP!!WD zg@3hcsET}3B_Jo$Y%}C`myC;gBci=>WV5wx_0p300MG%~K_Y4FHtOfu6+C{N9S$ZI zvJ*eD0DDGm;%#aFT7hG$z_BSn5Sm7gLZ}}1o@iO^Wtz zk1bUvtqg9ff15Dhr0yu|Qd6~e(YkX{A1$)Hi}uX=?;nVswfgYcaPstU@RHZdqLfM{ z>R5NyQKJ+6m6n*-i{;fK>BKhXDUB;ziyD8B9+RX*z^SQ45pW{l=XR1p**OtWb3c{P z^;Q2;qvUo53sDa_OH~BS4?rwW>QQoYIb?>MOS4%+T75`;)z@0mU8XTB!flG!G}6Db ze9@>q^Wl6BAEz2sNlC&_o{AJNyJAA3ys8F3!bT{WC^v*_58VSlBwQeEMG-53e5HSf zH_IcJ_fXS{mzS&MJ+uaGjk8cR7xm6P%Yd#F3L%veHXAp~46$dF;M7k{zn8Dl89~3a zT@V*S0!NE?QJV03VSOA&!rrID4j)vX=k6W~%iujr`NEX=+)vaUYMc`#nOhNffCS;ZGw6x z!8m_@yIi};XAse8XWcUDv~!7pcV*x>+JCA`@-xbNr!c!GeBa4Bs;HO!IFNt+xKpa^ z$9I|l3@o9;IB2^gY_+^0`MvbIF)$DYA!Tr@5RhX=u#LJ9P`r>FRnMG=4M=NQ#v$ZD z8JMv^t;Qk<3OKiH*W{IRjiRvb)mzJR40!@S;Ji0th5 ztY%ZDt?TLB)Az2Z%ze+AI=OgNjrVSEt!jcYS0V1p1ajP_IX-(kfFDj`AQncT zWQ~=WJ)?6JRFcPnf89*EkI=`h|2#iGmp!ZETgImJ%ZgUgi1Z#REz8AL9jbO~*VKmiGn+k#K~2QVOIt3?GO+YFJGC~gk$`#@~)cXMzjteOx*Q6(WV#uQ;94r0m#r=PEK=OGmk&lo3w(+lwd9z1{TYE|%*S&)!5>2c5VJ8KQk@aqaciOWg?_)x99HB;Pxhs#G|*Q!f6c^{r8L-9ex%s)mAc|} z5$*ntTlw>+u*$dyui~FAmk)PBq4zI8y;8SmsB&)h*N1=h^w%vt{iI4mJ^eM%(}#9+ zOFuuin@-h?IDSf%mInjNbLI~P+_*LW^bB-k#c(j>uw`13A+deCX;B2NZCVp(aPB7B zdb-Z$ zNGk@-iKQfBS54&ai1$vDc4k;wIF(wDz5X+Gv<9Li@rnL3Ks4f8M6sOIvtqR>E;0Fj z9nRW3+*(%V{zMuEzCk)v4H1=)qD_fdh#Bf0!tQ@r!{3d1_3$O4$_eb#lX5yLdolF3 zmR?ONNUx@&iqey~>Xr3e`6Q1sxT{BbxRzp4KzcD96_mb+i(W3;$;Xci#6M={U}>Bo zom*Oe5s##sbY^Ni-35dU1K!D2fH(*pgIu2laxo zDavE3*$`Kttf6h&N@FJ2ISJ7F`pO8e0iLbx?c{NTv|uQ@oNQauqG3%(yUe+$0+tBS zEGWs-*;iB*H|+=*tmwI00_yEo>$4SV?vj5IE0io@MA;(_w|PBn+yms?vcA*p#VWUK z6pMak4GXw8ZPb(WEZ_!(9w+m^tt;K>k9Mk9YK zv!dB{i?G^J9;GKs#~`e0_tnjE>`)H2OXj-7r`;c8(bX#M#YzLNH+rym6|j|hHIfDa zmnJK%p?(F2)i79Z5L-&R=32dKwhS-a8{6oFKmXEbtBHOkd5o~Nj8*g^&O zR)$19sROP4YRPtKm%%$6xvrdEHl%-_ar#+fI@f=O^-u2{<-RaN=emJyd=7jF>Q>0< zXSL0mjh3*%0x5;bMG-J6U0hWj3K)YgKNri*ML|Yg2x0-Kv@9>Q>_RPa;(`)(YoL|f z?)YL@`hMM|arx8syN;KS`e^J?CVPZ-8Edv`Y(i1eZcTacE^kP4hNTS&)nv26ehA1*=Jg?(bH+$G zeVAb*!(GM9#ta)|Us^q`6NYlEM&&}&v9`@A=pb?E@u{ZrCP_)Ep=r67Wl?cU?CDL7 z1K*NREP$;14H+Jp3InVxB$o5I(0r>Tp#3L^yumd1q{Rjji9SZ{EJkNdZ7SBIilTk`x}mQd!jpd>DeK@}QBko? zuk27F;3_@1{wpYw_0VEbA-7U{(T#_ZIDlnY05*39l<#2+TP{u zS*wH}0d}v2H*u|+rV1MOv7?fInf#Wj+P*DrP{~g2))TuH+;Hx9>3*O2-^(eJCtIg# z3sKv@q2k*oX=YmfH=op~JGP z$c-kOpp;sdR@FgQCUr$Jsh0ZA`*>x29qTU-xs@G!S9ohulLHNH-+d3qcVC=%IGl&G z<6R@0^Vjgc_T>ApO4U{Z8e5bFQuP?%<8zGZrVi0!E}D>Bl=goHmn>(b6Cf=ZJ8YLc zE(yW_nl+ZTU1PnU@<_eoY0_uq5JvE|i1X)z2^S$qt=IGTRL--fONO*yYq!{-1=m*O0N<~kA=^>l!=-Mo_sfWPotMB*x#r&j^t zhk2?_5{c_zJ6(Tjrwi?z)zhh=D*)&)0d1`43PJrrBrXGaFCgz+=DmQtbD4J&$a@WW zFJ#_p$a^94o;KvYvhu1v+|=`4Le_%C)&i>8;u5c`#$`h(T8(xm;1TltQDKZwmmXWSNc0dNPfm*HY<22TF5q;R-Oq~;K53X&V zDlo|$XkY%3!3-%M>EJP0byVi@P~dN3f?+92SMFS`ausLo3Z+FkP^v&4$@OULm&epr zPsAsVhGu_Ca)rYwpgSi+JGx{Q%&ACh&6ZAES(vodLl;(-V>gS`5d}zflF;ZDQ-D!f zdj?1$`jk@0dV2{tB3Y>4%@kXmJggw~U4i1>jffI0!&X~veN&56V$ua|`Cs|uWimSt zXJ^Q7dRG93ls6-7JM_h_XNTU{*`5AiH?fl+66b%mTRm)cbWOo7X`|QH6zLLPZIs~c*A3n=2 z7VCd0DG?~1Yb8Ee15|xycP%gS6r%4QaI~QxN7om=IKRsW&>E^rp4UiTPW*^bYtRyo zqQX7;%zuOHgA8SmL7TLt0K20DF{wu>6Ej6fDZ67O_gTz$yeDtZhh62pWUxodtX^agF14K4(j8_tt+_cd-S0NqNN22 z)QOec#n!m~gs+T)S@xopdc2N7Gd=IwtA!;OJ(5+J&k0*wo6EQr)fYT=rBQbz=UBb8&&96!kN-1(mNouULQ90(9H* zDEWp1G|YzH?D5f(UJ|}dsuWJ)o22~BRea^$e&V_>sN3pLBJCtXX(vFXe3d^MDrKFp zm5zE1Iw@3#G8SRySLPv9e$2f69SMD;DM5(aJM>FG7>7*(&>eOeX$B#_h=uX#` z8Z9(=UbE_l?6-8e`H>yi+bVz0QV3k*Dfmo5I`MWUx@V=f32V&Z8F8(QN*_vS*+5x^ z=vPI#VnWT2Q%?#xd|#%vsZgy7@CeA9lMLNEz{L4IQjR|q%erC(dV0%%IjN>1gFm4s z411t=&cja~>3PUQnCG6neqbI+s#`s1Qf{UgVBM7iR|k_)edfK_a!P;d3*50Lq1>*z zv8a|1tfH3FlCND~c^&eQZl@~TyWAh`iPm7w+x!DGNubp&MFjAuKb>A*E*aB*ljO-o zT0Thp4EegGxc95Uvgkdt=9C!yTL=|EZU39WH^af#%+xa`L;;tnI+`Vh-WJt2GR1Nu@V|dx6X$7Mo-C#)NXvnZ zpdZkPWKKUG(^@NWCQj9QA}|hAh3vSPL^%RnRPqs#u>f3jF6d#UI)5y zsv~e%I4C)ydxn2Qw6%5cjkFOyy2OUX7l}|V_IY5qe^SRvl(w{U)1(sK3yA9e0s7VH zZ{RnHPoV$33I>4d2w^Ko(I&RIn<@_6eT+�RXL_U6lbC$PN?bEhp=CqXh24ZBGN3 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

K`;(U^t(V=2U(lSXC)qa+c`=0I#{b8+?Y% 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 6767b8e38e3..46699634228 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -3562,7 +3562,7 @@ fabric.Pattern = fabric.util.createClass({ var data = { objects: this._toObjects(methodName, propertiesToInclude) }; - extend(data, this.__serializeBgOverlay(propertiesToInclude)); + extend(data, this.__serializeBgOverlay(methodName, propertiesToInclude)); fabric.util.populateWithProperties(this, data, propertiesToInclude); return data; }, @@ -3585,7 +3585,7 @@ fabric.Pattern = fabric.util.createClass({ } return object; }, - __serializeBgOverlay: function(propertiesToInclude) { + __serializeBgOverlay: function(methodName, propertiesToInclude) { var data = { background: this.backgroundColor && this.backgroundColor.toObject ? this.backgroundColor.toObject(propertiesToInclude) : this.backgroundColor }; @@ -3593,10 +3593,10 @@ fabric.Pattern = fabric.util.createClass({ data.overlay = this.overlayColor.toObject ? this.overlayColor.toObject(propertiesToInclude) : this.overlayColor; } if (this.backgroundImage) { - data.backgroundImage = this.backgroundImage.toObject(propertiesToInclude); + data.backgroundImage = this._toObject(this.backgroundImage, methodName, propertiesToInclude); } if (this.overlayImage) { - data.overlayImage = this.overlayImage.toObject(propertiesToInclude); + data.overlayImage = this._toObject(this.overlayImage, methodName, propertiesToInclude); } return data; }, @@ -4219,6 +4219,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { skipTargetFind: false, isDrawingMode: false, preserveObjectStacking: false, + snapAngle: 0, + snapThreshold: null, stopContextMenu: false, fireRightClick: false, _initInteractive: function() { @@ -4253,8 +4255,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { return objsToRender; }, renderAll: function() { - if (this.selection && !this._groupSelector && !this.isDrawingMode) { + if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) { this.clearContext(this.contextTop); + this.contextTopDirty = false; } var canvasToDrawOn = this.contextContainer; this.renderCanvas(canvasToDrawOn, this._chooseObjectsToRender()); @@ -4267,6 +4270,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this._drawSelection(ctx); } this.fire("after:render"); + this.contextTopDirty = true; return this; }, _resetCurrentTransform: function() { @@ -4614,12 +4618,24 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { if (t.target.get("lockRotation")) { return false; } - var lastAngle = atan2(t.ey - t.top, t.ex - t.left), curAngle = atan2(y - t.top, x - t.left), angle = radiansToDegrees(curAngle - lastAngle + t.theta); + var lastAngle = atan2(t.ey - t.top, t.ex - t.left), curAngle = atan2(y - t.top, x - t.left), angle = radiansToDegrees(curAngle - lastAngle + t.theta), hasRoated = true; if (angle < 0) { angle = 360 + angle; } - t.target.angle = angle % 360; - return true; + angle %= 360; + if (t.target.snapAngle > 0) { + var snapAngle = t.target.snapAngle, snapThreshold = t.target.snapThreshold || snapAngle, rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle, leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle; + if (Math.abs(angle - leftAngleLocked) < snapThreshold) { + angle = leftAngleLocked; + } else if (Math.abs(angle - rightAngleLocked) < snapThreshold) { + angle = rightAngleLocked; + } + if (t.target.angle === angle) { + hasRoated = false; + } + } + t.target.angle = angle; + return hasRoated; }, setCursor: function(value) { this.upperCanvasEl.style.cursor = value; @@ -5043,6 +5059,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { addListener(this.upperCanvasEl, "mousedown", this._onMouseDown); addListener(this.upperCanvasEl, "mousemove", this._onMouseMove); addListener(this.upperCanvasEl, "mouseout", this._onMouseOut); + addListener(this.upperCanvasEl, "mouseenter", this._onMouseEnter); addListener(this.upperCanvasEl, "wheel", this._onMouseWheel); addListener(this.upperCanvasEl, "contextmenu", this._onContextMenu); addListener(this.upperCanvasEl, "touchstart", this._onMouseDown); @@ -5067,6 +5084,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this._onOrientationChange = this._onOrientationChange.bind(this); this._onMouseWheel = this._onMouseWheel.bind(this); this._onMouseOut = this._onMouseOut.bind(this); + this._onMouseEnter = this._onMouseEnter.bind(this); this._onContextMenu = this._onContextMenu.bind(this); }, removeListeners: function() { @@ -5074,6 +5092,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { removeListener(this.upperCanvasEl, "mousedown", this._onMouseDown); removeListener(this.upperCanvasEl, "mousemove", this._onMouseMove); removeListener(this.upperCanvasEl, "mouseout", this._onMouseOut); + removeListener(this.upperCanvasEl, "mouseenter", this._onMouseEnter); removeListener(this.upperCanvasEl, "wheel", this._onMouseWheel); removeListener(this.upperCanvasEl, "contextmenu", this._onContextMenu); removeListener(this.upperCanvasEl, "touchstart", this._onMouseDown); @@ -5106,6 +5125,15 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { e: e }); }, + _onMouseEnter: function(e) { + if (!this.findTarget(e)) { + this.fire("mouse:over", { + target: null, + e: e + }); + this._hoveredTarget = null; + } + }, _onOrientationChange: function(e, self) { this.__onOrientationChange && this.__onOrientationChange(e, self); }, @@ -5254,6 +5282,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this._handleEvent(e, "up"); }, __onMouseDown: function(e) { + var target = this.findTarget(e), pointer = this.getPointer(e, true); var isRightClick = "which" in e ? e.which === 3 : e.button === 2; if (isRightClick) { if (this.fireRightClick) { @@ -5268,7 +5297,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { if (this._currentTransform) { return; } - var target = this.findTarget(e), pointer = this.getPointer(e, true); this._previousPointer = pointer; var shouldRender = this._shouldRender(target, pointer), shouldGroup = this._shouldGroup(e, target); if (this._shouldClearSelection(e, target)) { @@ -5911,6 +5939,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { }, _removeDefaultValues: function(object) { var prototype = fabric.util.getKlass(object.type).prototype, stateProperties = prototype.stateProperties; + console.log(prototype); stateProperties.forEach(function(prop) { if (object[prop] === prototype[prop]) { delete object[prop]; @@ -6167,7 +6196,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { options.format = "jpeg"; } if (options.format === "jpeg") { - canvas.backgroundColor = "#fff"; + canvas.backgroundFill = "#fff"; } var origParams = { active: this.get("active"), @@ -9883,7 +9912,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ initialize: function(options) { options = options || {}; this.saturate = options.saturate || 0; - this.loadProgram(); }, applyTo: function(canvasEl) { var context = canvasEl.getContext("2d"), imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), data = imageData.data, max, adjust = -this.saturate * .01; @@ -10489,20 +10517,36 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ } fabric.util.object.extend(this._getStyleDeclaration(loc.lineIndex, loc.charIndex), styles); }, + render: function(ctx, noTransform) { + this.clearContextTop(); + this.callSuper("render", ctx, noTransform); + }, _render: function(ctx) { - this.oldWidth = this.width; - this.oldHeight = this.height; this.callSuper("_render", ctx); this.ctx = ctx; this.cursorOffsetCache = {}; this.renderCursorOrSelection(); }, + clearContextTop: function() { + if (!this.active || !this.isEditing) { + return; + } + if (this.canvas && this.canvas.contextTop) { + var ctx = this.canvas.contextTop; + ctx.save(); + ctx.transform.apply(ctx, this.canvas.viewportTransform); + this.transform(ctx); + this.transformMatrix && ctx.transform.apply(ctx, this.transformMatrix); + this._clearTextArea(ctx); + ctx.restore(); + } + }, renderCursorOrSelection: function() { if (!this.active || !this.isEditing) { return; } var chars = this.text.split(""), boundaries, ctx; - if (this.canvas.contextTop) { + if (this.canvas && this.canvas.contextTop) { ctx = this.canvas.contextTop; ctx.save(); ctx.transform.apply(ctx, this.canvas.viewportTransform); @@ -10523,7 +10567,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ ctx.restore(); }, _clearTextArea: function(ctx) { - var width = this.oldWidth + 4, height = this.oldHeight + 4; + var width = this.width + 4, height = this.height + 4; ctx.clearRect(-width / 2, -height / 2, width, height); }, get2DCursorLocation: function(selectionStart) { @@ -10765,7 +10809,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ } _char = line[j]; ctx.fillStyle = style.textBackgroundColor; - ctx.fillRect(leftOffset + lineLeftOffset + this._getWidthOfCharsAt(ctx, i, j), topOffset + lineTopOffset, this._getWidthOfChar(ctx, _char, i, j) + 1, heightOfLine / this.lineHeight); + ctx.fillRect(leftOffset + lineLeftOffset + this._getWidthOfCharsAt(ctx, i, j), topOffset + lineTopOffset, this._getWidthOfChar(ctx, _char, i, j), heightOfLine / this.lineHeight); } lineTopOffset += heightOfLine; } diff --git a/src/shapes/image.class.js b/src/shapes/image.class.js index ddaddca3b18..af1f6091cfd 100644 --- a/src/shapes/image.class.js +++ b/src/shapes/image.class.js @@ -273,10 +273,6 @@ object.width /= scaleX; object.height /= scaleY; - if (!this.includeDefaultValues) { - this._removeDefaultValues(object); - } - return object; }, diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index 1ef44c44828..cd4d2ce952e 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -892,12 +892,12 @@ skewY: toFixed(this.skewY, NUM_FRACTION_DIGITS) }; + fabric.util.populateWithProperties(this, object, propertiesToInclude); + if (!this.includeDefaultValues) { object = this._removeDefaultValues(object); } - fabric.util.populateWithProperties(this, object, propertiesToInclude); - return object; }, @@ -918,7 +918,7 @@ _removeDefaultValues: function(object) { var prototype = fabric.util.getKlass(object.type).prototype, stateProperties = prototype.stateProperties; - +console.log(prototype); stateProperties.forEach(function(prop) { if (object[prop] === prototype[prop]) { delete object[prop]; @@ -1375,7 +1375,7 @@ } if (options.format === 'jpeg') { - canvas.backgroundColor = '#fff'; + canvas.backgroundFill = '#fff'; } var origParams = { diff --git a/src/shapes/rect.class.js b/src/shapes/rect.class.js index 4faa0467334..0ed642d667d 100644 --- a/src/shapes/rect.class.js +++ b/src/shapes/rect.class.js @@ -154,9 +154,7 @@ rx: this.get('rx') || 0, ry: this.get('ry') || 0 }); - if (!this.includeDefaultValues) { - this._removeDefaultValues(object); - } + return object; }, diff --git a/src/shapes/text.class.js b/src/shapes/text.class.js index 11bdeed8d62..9f32cb2a5a5 100644 --- a/src/shapes/text.class.js +++ b/src/shapes/text.class.js @@ -884,9 +884,7 @@ textBackgroundColor: this.textBackgroundColor, charSpacing: this.charSpacing }); - if (!this.includeDefaultValues) { - this._removeDefaultValues(object); - } + return object; }, From 5cbb925f0d7a6ca0737c593dc6ecd769ea937397 Mon Sep 17 00:00:00 2001 From: Asturur Date: Sat, 12 Nov 2016 23:22:56 +0100 Subject: [PATCH 2/5] rework object export --- src/shapes/circle.class.js | 6 +----- src/shapes/ellipse.class.js | 5 +---- src/shapes/image.class.js | 19 +++++++++---------- src/shapes/itext.class.js | 10 +--------- src/shapes/object.class.js | 1 - src/shapes/path.class.js | 11 ++--------- src/shapes/path_group.class.js | 5 +---- src/shapes/rect.class.js | 7 +------ src/shapes/text.class.js | 27 +++++++++++++-------------- src/shapes/textbox.class.js | 4 +--- 10 files changed, 30 insertions(+), 65 deletions(-) diff --git a/src/shapes/circle.class.js b/src/shapes/circle.class.js index e8515fa2543..df56730d239 100644 --- a/src/shapes/circle.class.js +++ b/src/shapes/circle.class.js @@ -84,11 +84,7 @@ * @return {Object} object representation of an instance */ toObject: function(propertiesToInclude) { - return extend(this.callSuper('toObject', propertiesToInclude), { - radius: this.get('radius'), - startAngle: this.startAngle, - endAngle: this.endAngle - }); + return this.callSuper('toObject', ['radius', 'startAngle', 'endAngle'].concat(propertiesToInclude)); }, /* _TO_SVG_START_ */ diff --git a/src/shapes/ellipse.class.js b/src/shapes/ellipse.class.js index 6feb6e58f12..d6226590d1a 100644 --- a/src/shapes/ellipse.class.js +++ b/src/shapes/ellipse.class.js @@ -101,10 +101,7 @@ * @return {Object} object representation of an instance */ toObject: function(propertiesToInclude) { - return extend(this.callSuper('toObject', propertiesToInclude), { - rx: this.get('rx'), - ry: this.get('ry') - }); + return this.callSuper('toObject', ['rx', 'ry'].concat(propertiesToInclude)); }, /* _TO_SVG_START_ */ diff --git a/src/shapes/image.class.js b/src/shapes/image.class.js index af1f6091cfd..71c228d89b4 100644 --- a/src/shapes/image.class.js +++ b/src/shapes/image.class.js @@ -259,16 +259,15 @@ this.resizeFilters.forEach(function(filterObj) { filterObj && resizeFilters.push(filterObj.toObject()); }); - - var object = extend(this.callSuper('toObject', propertiesToInclude), { - src: this.getSrc(), - filters: filters, - resizeFilters: resizeFilters, - crossOrigin: this.crossOrigin, - alignX: this.alignX, - alignY: this.alignY, - meetOrSlice: this.meetOrSlice - }); + var object = extend( + this.callSuper( + 'toObject', + ['crossOrigin', 'alignX', 'alignY', 'meetOrSlice'].concat(propertiesToInclude) + ), { + src: this.getSrc(), + filters: filters, + resizeFilters: resizeFilters, + }); object.width /= scaleX; object.height /= scaleY; diff --git a/src/shapes/itext.class.js b/src/shapes/itext.class.js index 9382c911937..e68e6e68922 100644 --- a/src/shapes/itext.class.js +++ b/src/shapes/itext.class.js @@ -1146,16 +1146,8 @@ * @return {Object} object representation of an instance */ toObject: function(propertiesToInclude) { - var clonedStyles = { }, i, j, row; - for (i in this.styles) { - row = this.styles[i]; - clonedStyles[i] = { }; - for (j in row) { - clonedStyles[i][j] = clone(row[j]); - } - } return fabric.util.object.extend(this.callSuper('toObject', propertiesToInclude), { - styles: clonedStyles + styles: clone(this.styles, true) }); } }); diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index cd4d2ce952e..02cec102fc5 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -918,7 +918,6 @@ _removeDefaultValues: function(object) { var prototype = fabric.util.getKlass(object.type).prototype, stateProperties = prototype.stateProperties; -console.log(prototype); stateProperties.forEach(function(prop) { if (object[prop] === prototype[prop]) { delete object[prop]; diff --git a/src/shapes/path.class.js b/src/shapes/path.class.js index fdeb20ea439..2a2af92819b 100644 --- a/src/shapes/path.class.js +++ b/src/shapes/path.class.js @@ -473,16 +473,9 @@ * @return {Object} object representation of an instance */ toObject: function(propertiesToInclude) { - var o = extend(this.callSuper('toObject', propertiesToInclude), { - path: this.path.map(function(item) { return item.slice() }), - pathOffset: this.pathOffset + var o = extend(this.callSuper('toObject', ['sourcePath', 'pathOffset'].concat(propertiesToInclude)), { + path: this.path.map(function(item) { return item.slice() }) }); - if (this.sourcePath) { - o.sourcePath = this.sourcePath; - } - if (this.transformMatrix) { - o.transformMatrix = this.transformMatrix; - } return o; }, diff --git a/src/shapes/path_group.class.js b/src/shapes/path_group.class.js index 9a0b4307b76..056b2fba4f1 100644 --- a/src/shapes/path_group.class.js +++ b/src/shapes/path_group.class.js @@ -143,12 +143,9 @@ * @return {Object} object representation of an instance */ toObject: function(propertiesToInclude) { - var o = extend(parentToObject.call(this, propertiesToInclude), { + var o = extend(parentToObject.call(this, ['sourcePath'].concat(propertiesToInclude)), { paths: invoke(this.getObjects(), 'toObject', propertiesToInclude) }); - if (this.sourcePath) { - o.sourcePath = this.sourcePath; - } return o; }, diff --git a/src/shapes/rect.class.js b/src/shapes/rect.class.js index 0ed642d667d..0077d3680f8 100644 --- a/src/shapes/rect.class.js +++ b/src/shapes/rect.class.js @@ -150,12 +150,7 @@ * @return {Object} object representation of an instance */ toObject: function(propertiesToInclude) { - var object = extend(this.callSuper('toObject', propertiesToInclude), { - rx: this.get('rx') || 0, - ry: this.get('ry') || 0 - }); - - return object; + return this.callSuper('toObject', ['rx', 'ry'].concat(propertiesToInclude)); }, /* _TO_SVG_START_ */ diff --git a/src/shapes/text.class.js b/src/shapes/text.class.js index 9f32cb2a5a5..ef6a04dce22 100644 --- a/src/shapes/text.class.js +++ b/src/shapes/text.class.js @@ -872,20 +872,19 @@ * @return {Object} Object representation of an instance */ toObject: function(propertiesToInclude) { - var object = extend(this.callSuper('toObject', propertiesToInclude), { - 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, - charSpacing: this.charSpacing - }); - - return object; + var additionalProperties = [ + 'text', + 'fontSize', + 'fontWeight', + 'fontFamily', + 'fontStyle', + 'lineHeight', + 'textDecoration', + 'textAlign', + 'textBackgroundColor', + 'charSpacing' + ].concat(propertiesToInclude); + return this.callSuper('toObject', additionalProperties); }, /* _TO_SVG_START_ */ diff --git a/src/shapes/textbox.class.js b/src/shapes/textbox.class.js index 8c1c4cb0010..870c174ab63 100644 --- a/src/shapes/textbox.class.js +++ b/src/shapes/textbox.class.js @@ -435,9 +435,7 @@ * @return {Object} object representation of an instance */ toObject: function(propertiesToInclude) { - return fabric.util.object.extend(this.callSuper('toObject', propertiesToInclude), { - minWidth: this.minWidth - }); + return this.callSuper('toObject', ['minWidth'].concat(propertiesToInclude)); } }); /** From c4b00a22e34bcdfaef43f89accf39edfa07f554a Mon Sep 17 00:00:00 2001 From: Asturur Date: Sat, 12 Nov 2016 23:33:00 +0100 Subject: [PATCH 3/5] fixed tests --- dist/fabric.js | 141 +++++++------------------------------ dist/fabric.min.js | 12 ++-- dist/fabric.min.js.gz | Bin 68175 -> 68001 bytes dist/fabric.require.js | 76 +++++--------------- test/unit/canvas.js | 2 +- test/unit/canvas_static.js | 4 +- 6 files changed, 52 insertions(+), 183 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 594f802616b..9057c3257c6 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -7036,7 +7036,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ objects: this._toObjects(methodName, propertiesToInclude) }; - extend(data, this.__serializeBgOverlay(methodName, propertiesToInclude)); + extend(data, this.__serializeBgOverlay(propertiesToInclude)); fabric.util.populateWithProperties(this, data, propertiesToInclude); @@ -7075,7 +7075,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ /** * @private */ - __serializeBgOverlay: function(methodName, propertiesToInclude) { + __serializeBgOverlay: function(propertiesToInclude) { var data = { background: (this.backgroundColor && this.backgroundColor.toObject) ? this.backgroundColor.toObject(propertiesToInclude) @@ -7088,10 +7088,10 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ : this.overlayColor; } if (this.backgroundImage) { - data.backgroundImage = this._toObject(this.backgroundImage, methodName, propertiesToInclude); + data.backgroundImage = this.backgroundImage.toObject(propertiesToInclude); } if (this.overlayImage) { - data.overlayImage = this._toObject(this.overlayImage, methodName, propertiesToInclude); + data.overlayImage = this.overlayImage.toObject(propertiesToInclude); } return data; @@ -8369,9 +8369,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * Indicates which key enable unproportional scaling - * values: 'altKey', 'shiftKey', 'ctrlKey'. - * If `null` or 'none' or any other string that is not a modifier key - * feature is disabled feature disabled. + * values: altKey, shiftKey, ctrlKey * @since 1.6.2 * @type String * @default @@ -8398,9 +8396,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * Indicates which key enable centered Transfrom - * values: 'altKey', 'shiftKey', 'ctrlKey'. - * If `null` or 'none' or any other string that is not a modifier key - * feature is disabled feature disabled. + * values: altKey, shiftKey, ctrlKey * @since 1.6.2 * @type String * @default @@ -8409,9 +8405,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * Indicates which key enable alternate action on corner - * values: 'altKey', 'shiftKey', 'ctrlKey'. - * If `null` or 'none' or any other string that is not a modifier key - * feature is disabled feature disabled. + * values: altKey, shiftKey, ctrlKey * @since 1.6.2 * @type String * @default @@ -8434,9 +8428,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * Indicates which key enable multiple click selection - * values: 'altKey', 'shiftKey', 'ctrlKey'. - * If `null` or 'none' or any other string that is not a modifier key - * feature is disabled feature disabled. + * values: altKey, shiftKey, ctrlKey, cmdKey * @since 1.6.2 * @type String * @default @@ -8446,9 +8438,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * Indicates which key enable alternative selection * in case of target overlapping with active object - * values: 'altKey', 'shiftKey', 'ctrlKey'. - * If `null` or 'none' or any other string that is not a modifier key - * feature is disabled feature disabled. + * values: altKey, shiftKey, ctrlKey, cmdKey * @since 1.6.5 * @type null|String * @default @@ -8564,23 +8554,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ preserveObjectStacking: false, - /** - * Indicates the angle that an object will lock to while rotating. - * @type Number - * @since 1.6.7 - * @default - */ - snapAngle: 0, - - /** - * Indicates the distance from the snapAngle the rotation will lock to the snapAngle. - * When `null`, the snapThreshold will default to the snapAngle. - * @type null|Number - * @since 1.6.7 - * @default - */ - snapThreshold: null, - /** * Indicates if the right click on canvas can output the context menu or not * @type Boolean @@ -8652,9 +8625,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @chainable */ renderAll: function () { - if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) { + if (this.selection && !this._groupSelector && !this.isDrawingMode) { this.clearContext(this.contextTop); - this.contextTopDirty = false; } var canvasToDrawOn = this.contextContainer; this.renderCanvas(canvasToDrawOn, this._chooseObjectsToRender()); @@ -8677,7 +8649,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab } this.fire('after:render'); - this.contextTopDirty = true; + return this; }, @@ -9275,36 +9247,15 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab var lastAngle = atan2(t.ey - t.top, t.ex - t.left), curAngle = atan2(y - t.top, x - t.left), - angle = radiansToDegrees(curAngle - lastAngle + t.theta), - hasRoated = true; + angle = radiansToDegrees(curAngle - lastAngle + t.theta); // normalize angle to positive value if (angle < 0) { angle = 360 + angle; } - angle %= 360 - - if (t.target.snapAngle > 0) { - var snapAngle = t.target.snapAngle, - snapThreshold = t.target.snapThreshold || snapAngle, - rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle, - leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle; - - if (Math.abs(angle - leftAngleLocked) < snapThreshold) { - angle = leftAngleLocked; - } - else if (Math.abs(angle - rightAngleLocked) < snapThreshold) { - angle = rightAngleLocked; - } - - if (t.target.angle === angle) { - hasRoated = false - } - } - - t.target.angle = angle; - return hasRoated; + t.target.angle = angle % 360; + return true; }, /** @@ -10006,7 +9957,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab addListener(this.upperCanvasEl, 'mousedown', this._onMouseDown); addListener(this.upperCanvasEl, 'mousemove', this._onMouseMove); addListener(this.upperCanvasEl, 'mouseout', this._onMouseOut); - addListener(this.upperCanvasEl, 'mouseenter', this._onMouseEnter); addListener(this.upperCanvasEl, 'wheel', this._onMouseWheel); addListener(this.upperCanvasEl, 'contextmenu', this._onContextMenu); @@ -10038,7 +9988,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this._onOrientationChange = this._onOrientationChange.bind(this); this._onMouseWheel = this._onMouseWheel.bind(this); this._onMouseOut = this._onMouseOut.bind(this); - this._onMouseEnter = this._onMouseEnter.bind(this); this._onContextMenu = this._onContextMenu.bind(this); }, @@ -10051,7 +10000,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab removeListener(this.upperCanvasEl, 'mousedown', this._onMouseDown); removeListener(this.upperCanvasEl, 'mousemove', this._onMouseMove); removeListener(this.upperCanvasEl, 'mouseout', this._onMouseOut); - removeListener(this.upperCanvasEl, 'mouseenter', this._onMouseEnter); removeListener(this.upperCanvasEl, 'wheel', this._onMouseWheel); removeListener(this.upperCanvasEl, 'contextmenu', this._onContextMenu); @@ -10104,17 +10052,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab target && target.fire('mouseout', { e: e }); }, - /** - * @private - * @param {Event} e Event object fired on mouseenter - */ - _onMouseEnter: function(e) { - if (!this.findTarget(e)) { - this.fire('mouse:over', { target: null, e: e }); - this._hoveredTarget = null; - } - }, - /** * @private * @param {Event} [e] Event object fired on Event.js orientation change @@ -10414,9 +10351,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ __onMouseDown: function (e) { - var target = this.findTarget(e), - pointer = this.getPointer(e, true); - // if right click just fire events var isRightClick = 'which' in e ? e.which === 3 : e.button === 2; if (isRightClick) { @@ -10436,6 +10370,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab return; } + var target = this.findTarget(e), + pointer = this.getPointer(e, true); + // save pointer for check in __onMouseUp event this._previousPointer = pointer; @@ -12246,7 +12183,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati _removeDefaultValues: function(object) { var prototype = fabric.util.getKlass(object.type).prototype, stateProperties = prototype.stateProperties; -console.log(prototype); + stateProperties.forEach(function(prop) { if (object[prop] === prototype[prop]) { delete object[prop]; @@ -12703,7 +12640,7 @@ console.log(prototype); } if (options.format === 'jpeg') { - canvas.backgroundFill = '#fff'; + canvas.backgroundColor = '#fff'; } var origParams = { @@ -20941,11 +20878,12 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Constructor * @memberOf fabric.Image.filters.Saturate.prototype * @param {Object} [options] Options object - * @param {Number} [options.saturate=0] Value to saturate the image (-100...100) + * @param {Number} [options.contrast=0] Value to saturate the image (-255...255) */ initialize: function(options) { options = options || { }; this.saturate = options.saturate || 0; + this.loadProgram(); }, /** @@ -22519,21 +22457,13 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag fabric.util.object.extend(this._getStyleDeclaration(loc.lineIndex, loc.charIndex), styles); }, - /** - * @private - * @param {CanvasRenderingContext2D} ctx Context to render on - * @param {Boolean} noTransform - */ - render: function(ctx, noTransform) { - this.clearContextTop(); - this.callSuper('render', ctx, noTransform); - }, - /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on */ _render: function(ctx) { + this.oldWidth = this.width; + this.oldHeight = this.height; this.callSuper('_render', ctx); this.ctx = ctx; // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor @@ -22542,24 +22472,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.renderCursorOrSelection(); }, - /** - * Prepare and clean the contextTop - */ - clearContextTop: function() { - if (!this.active || !this.isEditing) { - return; - } - if (this.canvas && this.canvas.contextTop) { - var ctx = this.canvas.contextTop; - ctx.save(); - ctx.transform.apply(ctx, this.canvas.viewportTransform); - this.transform(ctx); - this.transformMatrix && ctx.transform.apply(ctx, this.transformMatrix); - this._clearTextArea(ctx); - ctx.restore(); - } - }, - /** * Renders cursor or selection (depending on what exists) */ @@ -22569,7 +22481,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag } var chars = this.text.split(''), boundaries, ctx; - if (this.canvas && this.canvas.contextTop) { + if (this.canvas.contextTop) { ctx = this.canvas.contextTop; ctx.save(); ctx.transform.apply(ctx, this.canvas.viewportTransform); @@ -22589,12 +22501,13 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag boundaries = this._getCursorBoundaries(chars, 'selection'); this.renderSelection(chars, boundaries, ctx); } + ctx.restore(); }, _clearTextArea: function(ctx) { // we add 4 pixel, to be sure to do not leave any pixel out - var width = this.width + 4, height = this.height + 4; + var width = this.oldWidth + 4, height = this.oldHeight + 4; ctx.clearRect(-width / 2, -height / 2, width, height); }, /** @@ -23049,7 +22962,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag ctx.fillRect( leftOffset + lineLeftOffset + this._getWidthOfCharsAt(ctx, i, j), topOffset + lineTopOffset, - this._getWidthOfChar(ctx, _char, i, j), + this._getWidthOfChar(ctx, _char, i, j) + 1, heightOfLine / this.lineHeight ); } diff --git a/dist/fabric.min.js b/dist/fabric.min.js index c82983f2a16..ae1a1e80ea9 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,8 +1,8 @@ var fabric=fabric||{version:"1.6.6"};"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;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)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){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},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);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?I-=2*f:1===c&&I<0&&(I+=2*f);for(var D=Math.ceil(Math.abs(I/f*2)),E=[],L=I/D,R=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),F=P+L,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(c(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(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=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=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}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(t){}}();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 i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(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");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}),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 M=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){A.set(t,{objects:v.util.array.invoke(i,"toObject"),options:r}),e&&e(i,r)},i)}t=t.replace(/^\n\s*/,"").trim(),A.has(t,function(i){i?A.get(t,function(t){var i=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"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),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 this.lerp(t)},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){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("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={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},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.appendPoint(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,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},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)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),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,viewportTransform:[1,0,0,1,0,0],backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_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(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw n;if("undefined"==typeof e.getContext)throw n;return e},_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(t),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,i=this._activeGroup;this.viewportTransform=t;for(var r=0,n=this._objects.length;r"),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=0,n=this.getObjects(),s=n.length;r\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;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._activeGroup;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._activeGroup;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(t){}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),h=!0;if(a<0&&(a=360+a),a%=360,n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&this._checkTarget(n,s))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&this._checkTarget(n,o)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_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},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},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=this.restorePointerVpt(s)),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},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e&&e.fire("deselected",{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){var e=this.getActiveGroup();return this.fire("before:selection:cleared",{e:t,target:e}),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)}},__onMouseWheel:function(t){this.fire("mouse:wheel",{e:t})},_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),i.actionPerformed&&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}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");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||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),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)}),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 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 console.log(i),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]},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_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._setOpacity(t),this._setShadow(t),this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this._render(t,i),this.clipTo&&t.restore(),t.restore())},_renderBackground:function(t){this.backgroundColor&&(t.fillStyle=this.backgroundColor,t.fillRect(-this.width/2,-this.height/2,this.width,this.height),this._removeShadow(t))},_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,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.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,i){var r=this.toDataURL(i);return e.util.loadImage(r,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,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundFill="#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,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},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="undefined"!=typeof i&&"undefined"!=typeof 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,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),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||e.isContainedWithinObject(this)||this.isContainedWithinObject(e)},isContainedWithinObject:function(e){for(var i=t(this.oCoords),r=0;r<4;r++)if(!e.containsPoint(i[r]))return!1;return!0},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=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},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}})}(),function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i){if(!fabric.isLikelyNode&&t instanceof Element)return t===i;if(t instanceof Array){if(t.length!==i.length)return!1;var r=i.concat().sort(),n=t.concat().sort();return!n.some(function(t,i){return!e(r[i],t)})}if(t instanceof Object){for(var s in t)if(!e(t[s],i[s]))return!1;return!0}return t===i}var i=fabric.util.object.extend;fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return!e(this.originalState,this)},saveState:function(e){return t(this,"originalState",this.stateProperties),e&&e.stateProperties&&t(this,"originalState",e.stateProperties),this},setupState:function(t){return this.originalState={},this.saveState(t),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,e){var r=[t.x1,t.y1,t.x2,t.y2],n=new i.Line(r,t);return e&&e(n),n}))}("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,e){var r=new i.Circle(t);return e&&e(r),r}))}("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,i){var r=new e.Triangle(t);return i&&i(r),r}))}("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,i){var r=new e.Ellipse(t);return i&&i(r),r}))}("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.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i){var r=new e.Rect(t);return i&&i(r),r}}("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 o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.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'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?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,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.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,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.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,M,A,P,I,D;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;h=e)){I=r(1e3*s(c-T.x)),O[I]||(O[I]={});for(var E=k.y-w;E<=k.y+w;E++)E<0||E>=o||(D=r(1e3*s(E-T.y)),O[I][D]||(O[I][D]=m(n(i(I*x,2)+i(D*S,2))/1e3)),u=O[I][D],u>0&&(d=4*(E*e+c),g+=u,j+=u*v[d],M+=u*v[d+1],A+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=j/g,b[d+1]=M/g,b[d+2]=A/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(E=4*(D+M*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.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_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._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",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,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].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?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(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},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_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,charSpacing:this.charSpacing});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.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,o){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,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,i,r,o){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,i){var n=new e.Text(t.text,r(t));return i&&i(n),n},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._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(e,r)):t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,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;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"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,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else 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)),b&&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;l0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(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.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this._fireSelectionChanged(),this._updateTextarea(),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.cursorOffsetCache={},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),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{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.selectionStart=t,this.selectionEnd=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),!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")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),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.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_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.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this._fireSelectionChanged(),this._updateTextarea()},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?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;",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},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},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:2,__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;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),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.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,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file +this},viewportCenterObjectV:function(t){var e=this.getVpCenter();return this._centerObject(t,new fabric.Point(t.getCenterPoint().x,e.y))},getVpCenter:function(){var t=this.getCenter(),e=fabric.util.invertTransform(this.viewportTransform);return fabric.util.transformPoint({x:t.left,y:t.top},e)},_centerObject:function(t,e){return t.setPositionByOrigin(e,"center","center"),this.renderAll(),this},toDatalessJSON:function(t){return this.toDatalessObject(t)},toObject:function(t){return this._toObjectMethod("toObject",t)},toDatalessObject:function(t){return this._toObjectMethod("toDatalessObject",t)},_toObjectMethod:function(e,i){var r={objects:this._toObjects(e,i)};return t(r,this.__serializeBgOverlay(i)),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=t[e](i);return this.includeDefaultValues||(t.includeDefaultValues=r),n},__serializeBgOverlay:function(t){var e={background:this.backgroundColor&&this.backgroundColor.toObject?this.backgroundColor.toObject(t):this.backgroundColor};return this.overlayColor&&(e.overlay=this.overlayColor.toObject?this.overlayColor.toObject(t):this.overlayColor),this.backgroundImage&&(e.backgroundImage=this.backgroundImage.toObject(t)),this.overlayImage&&(e.overlayImage=this.overlayImage.toObject(t)),e},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=0,n=this.getObjects(),s=n.length;r\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;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._activeGroup;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._activeGroup;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(t){}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(t){var e=this._groupSelector,i=e.left,r=e.top,a=n(i),h=n(r);if(this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(e.ex-(i>0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&this._checkTarget(n,s))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&this._checkTarget(n,o)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_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},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},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=this.restorePointerVpt(s)),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},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e&&e.fire("deselected",{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){var e=this.getActiveGroup();return this.fire("before:selection:cleared",{e:t,target:e}),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)}},__onMouseWheel:function(t){this.fire("mouse:wheel",{e:t})},_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),i.actionPerformed&&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}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");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||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),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)}),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 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]},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_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._setOpacity(t),this._setShadow(t),this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this._render(t,i),this.clipTo&&t.restore(),t.restore())},_renderBackground:function(t){this.backgroundColor&&(t.fillStyle=this.backgroundColor,t.fillRect(-this.width/2,-this.height/2,this.width,this.height),this._removeShadow(t))},_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,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.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,i){var r=this.toDataURL(i);return e.util.loadImage(r,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,{enableRetinaScaling:t.enableRetinaScaling});"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,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},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="undefined"!=typeof i&&"undefined"!=typeof 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,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),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||e.isContainedWithinObject(this)||this.isContainedWithinObject(e)},isContainedWithinObject:function(e){for(var i=t(this.oCoords),r=0;r<4;r++)if(!e.containsPoint(i[r]))return!1;return!0},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=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},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}})}(),function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i){if(!fabric.isLikelyNode&&t instanceof Element)return t===i;if(t instanceof Array){if(t.length!==i.length)return!1;var r=i.concat().sort(),n=t.concat().sort();return!n.some(function(t,i){return!e(r[i],t)})}if(t instanceof Object){for(var s in t)if(!e(t[s],i[s]))return!1;return!0}return t===i}var i=fabric.util.object.extend;fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return!e(this.originalState,this)},saveState:function(e){return t(this,"originalState",this.stateProperties),e&&e.stateProperties&&t(this,"originalState",e.stateProperties),this},setupState:function(t){return this.originalState={},this.saveState(t),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,e){var r=[t.x1,t.y1,t.x2,t.y2],n=new i.Line(r,t);return e&&e(n),n}))}("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,e){var r=new i.Circle(t);return e&&e(r),r}))}("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,i){var r=new e.Triangle(t);return i&&i(r),r}))}("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,i){var r=new e.Ellipse(t);return i&&i(r),r}))}("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.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i){var r=new e.Rect(t);return i&&i(r),r}}("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 o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.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'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?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,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.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,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.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,M,A,P,I,D;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;h=e)){I=r(1e3*s(c-T.x)),O[I]||(O[I]={});for(var E=k.y-w;E<=k.y+w;E++)E<0||E>=o||(D=r(1e3*s(E-T.y)),O[I][D]||(O[I][D]=m(n(i(I*x,2)+i(D*S,2))/1e3)),u=O[I][D],u>0&&(d=4*(E*e+c),g+=u,j+=u*v[d],M+=u*v[d+1],A+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=j/g,b[d+1]=M/g,b[d+2]=A/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(E=4*(D+M*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.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_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._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",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,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].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?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(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},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_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,charSpacing:this.charSpacing});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.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,o){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,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,i,r,o){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,i){var n=new e.Text(t.text,r(t));return i&&i(n),n},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._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(e,r)):t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,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;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"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,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else 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)),b&&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;l0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(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.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this._fireSelectionChanged(),this._updateTextarea(),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.cursorOffsetCache={},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),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{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.selectionStart=t,this.selectionEnd=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),!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")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),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.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_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.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this._fireSelectionChanged(),this._updateTextarea()},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?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;",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},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},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:2,__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;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),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.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,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index ae0363f8db95adde316ec7dec2eb474a651caa89..1702e9e6b3f73b4180aecc0a7046c448c58e95da 100644 GIT binary patch delta 66834 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%0D~6iqXw$WTRmRf>tDT~Q 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�RXL_U6lbC$PN?bEhp=CqXh24ZBGN3 zE*8c$O}yLlU?OF(c}JiOwtSzI49xJWNi#<`^a^7=wl{xGaYjCzOY+~GZyRQfT~BW8 zS2nwn^>vf-#eCjA;6p7<`oaa#V9Ns!vTPFH%Q?O3X7TWKb>l**EYd8n5JY;nBmpQR}4 zmXJ8-N^vv?qEcoW_=_*Z(0i63?<7^Kt57Pv8j*kAw#Ki0`$gJ4>wSxz?F5-!C^uU} zM=pK1nrc&BiquclWw8~~Wc-}dxSjAexan417sLou>D<(!HPL#nlKA!=)wDmI4OifX zOYp)HiKBXLEl|L8Nf?uT=rOe6xsO=E?gacGkLXVAwMz~rmJq9BwSA&^l_O?l)+f`Q z9Up&!S;p8!LlbNR%Aewzh4wA$=Gkah>qgnF32(Pn$cq&Tsj&ppOPLO!DxBlY)X*)% zIqW)go(8nP9jE{(0aXDmQm_%A4D37&UAc6-f{*T@T=tM4&vrQJ_qB97vK5&5XTh$@ zQKDnnIK!K*!RD2;%~RC2cOu1n>f21I_4$AMYFvHDRx`;xvK#5TeGa3En)j- z4mi*HNjYohT|Dj;{l$L+alk~%&#y_j9Ys0Y8GLA#YY@D2@h-BjAUAptPwFcjA8ir%xQ|Lu{EhG`#(=X(P?0FE(p$ zJq_!B(sapJN_)x%Tj%EptEi3AF;;T7bsANRpEQ+5zucY3y9Y`7$ocS|HUQ934}x9tA?W1E50g5y(Q8=O} zt;e0JRRgrasur#W>w7pwtx0l%?i5nyl#r3GbNdj#HVv-JI<=utTil3dz=*R+V9wbe zSr(08um0bacK+S!BLRqJv6X+f5QtFXs#1ahHzLyg(Mb*ini|_VFm)}opVUHQC1iI6 zzhd;{9RFYAV7wK#qDj#u@0H&#i)2NfLrnVa|)55vY+bF7$?w++-D5@uScIZma%W z5n|--3k~N0&I?FsDy?0J1q9DwITjGFL7D{*EL;?KN)|C1x>t;BX?rwitn=6;28v8m z{$%I;-Tt$V{;p*4g2S`30H;muST4B0bLzn zF9+D)0d{o|b`50Rc7pNO6Y~8f01PM-Qa~WDui(;dnHpL`Tb_TzyX0mFRMm+tLU9|4 z8#-|}2N-wY=A*bLQ;S}v_Xnv1pzOd}abcv}veaut@+t1-fXTcYr9mMLow>O-GS^1s zBIQ#?(h!TEutV>WCKy-bK$m=4_E_ zz6d>PqQ_B7=G%XsKTW*)JqA+lmZ8H)KJmV934#$LT2BHJBU&;IB}USk`JK3xutNFo zlU6;ncCvyQqZTQvwP1bx8K`&QSa)D!I7T%j~`dAzwSe1IYTfYpJT8ml1W>lb+eMU zu42`eXyFXvpxJHKpp}zXo1-;uG~ukgVo^dsFvhX0DJ@-EHRam&rftKrNlhp)UYCh1*pVFr z%{VmTbFUJl50;x024a*)y*(&eI>{W;8(4^ zjr`is*Uf=UJD@cAwV|(y_ANwMHA>t05vJ>h056aIrWuOXnkiqk_MiVX{|a(V5MNd@ zb0--oF0!mv`Tt{`lg}cSneu{Q1S(?_Qnigd-(h1welu z<^cu|Beq=#>bel~mLgxV3o#jFWbCK@#R^7pwqBu7M?*L8ZR8|}xkrPrIm|l$-W6#a-c=Lg-*B*jTBoxD-bFikwKJ z6Y;y~VfL}Mq2gK+2~8`mE5ZuM*8zWhK92|YBBP2wn+MTSgH^sHzHbn(uchh69o2M;=Bqa#Xme4+%u8c@rXjULL06Kc-bS}=oi)i&K; z>OGO zdNJHFMh^w<$T5NSj@wRsJ+Im5zuK_)5x$qBBb6%J9lRS+F|zQ$4>L4SZ3U^gvZF1i z&-*e2_h&aKV4tCA{cMB5oTTi|1UxngRY8xka~@zA!0Mdehmldze^i zmfP|zy!zB)xw&RuZQ)$YxO#tHPFlkjs@ja@gnxC2E4eq1TW|Kh>J}s+pTNjp?6vF# zV##@{vKC5}i|!H<0Kdo71?8Fj!zW)$By72K!_+xl5TV%(z=pljM}lNc4QNowEWA>itF9UlqHu=@L_R`kTmX?} z@qy5u@5-_O=zon2&OJap{!jUT_7YVa-rr^V`#LMr`CgLG_ht!P9mQ(zEQP`s30pTG zOTGpFAb!O>3Hl44isOGvxDa=(os&AUMu-Y3+KUUdKMO2te`|EinxZWTnbVkuc$KJK z_=ONJd5wipDI@pxuFTl_BjHM^iz}(b20olA?OEL?bSd@FrIpOv`eN9SJRmD3?mm7T z4hG&yS!u^*m==O!&V8@EUODo;&C*~!vPx))gZ1oBndk_C?GAsrcHs2Fk7Ih+<@&Fd}=W=gwR~9#)NnXcD8L+0DU^?WpvS&qJ?^0I1K()N?f94 z9T16BU9tVL5LR_Xgg0Kq`Iox7@n-&PDwx2MIin4LDYF5S$!&oq^4|3i15L1gMh-_? z$qv$aY5%+BGP{4O!oW+WHBoxH@Gh_`<*Y#K-Jm7sP16IyLrA(CBIj-_QjVfG6urUd zAT8zyJ_Tv9l@x-47MSiSZ{jqBU!+Q|iL-B1_KlO>U>~XDF@Z6pMg_+UIml+@s!^Wj zLQX^&r}_*A>bChg#35M;{8Wx!kmS1&rB8qEZ7fnx?#o7655TRW^#J5b zTJOdXdp8(YZcN1HUx&@N8^z&z*rUeT-i#d2z8WaRHB%@zM4hy2GcBpV8(GUn(<)eB z#?*)>8M)*Aen0ru0IG(*r}v}pH?XQM3U8`wz~O5yXHb-9*0D;npFZRZ->&I#Mj zZERaPbCG|Qw2`No8Fag1?3#9BB~fph?&?n6XZA4ez0OoK|HRuYc!QCp6O{E-QsSW- z4AX4DAOJ*l-kYEfEZ5L;jXZQ+ zBRlJ8yVLDI6Zmf^hK@Q@c{6c^JIWjD&3^v??ckNFUw+n&{c_KFb6Y>La`Y36*aCPX z*S~KP8>Y<2bN0JniwyGzxihP?BLm;kt8a*8LLi6BBRu3r)rLu>VRV6>; ziJQTB_NfRYUUxMd5+d(h!-iQtTdwEnD^`CXAmKfwbuRs4I!X9sl71E$OcL1!hkW2e z^Y)EqA*6UA1YevrGHP&93lTMVxQmbKnZ$UOW>QJKt07v-FR6G5^!{bg*j*4kyeU2j z%e&c=I37=moC6=>qiUNuwj_U}?k&8j$7Nh z7aqoy%-a&ouwvxw5{2Ie_;cJS6=|Hza*G#5ZlRo}jIj+Uuu#pCXW#&YD)dU3TJItH zLv^YAcGrT0{nk1lvsXa?O@vtrm4<)we~G>qFuONF3IW{(CD;`w5T$#!8|RwzU`=)N z`YVC|{IDA5=+3}SJjt~MSryS8PEnzw@$O}{d8NZ1zJc!nhX&?zqpe7GlEI|f?VkcF zopM_!-x@6R-LFb$$Wm4sCbmgq#eC|HN1_RUHjToVVUX?xIU73b27o(32R3(|NE|k z0d91{ao0fw@3sPcOUzU5yEK0;VK!Qb`DGkLWDhU}6qc6^U8@vUP!Uv!&SnQK1I7bR6|8%US+JdzN#t=YS z(90JfCvE8}-9k{*V0OY!$XVFG4tiqn5Fa&3ZVYPTA~985v1+&jR3AB zs~NFjDbU_Ox%{8y;(Av7zDlMi|F8AY*}upv%myD>75YQfF?{7iLTB94yi-mHDQD1D#ZfxN+mNQqvYEm*CU|~k7WQ^IUQL30? zK}&#CrMj^QCFEARZKXb@&;#Y2)J6rBN?UWD(I5(27bJZ^)i5HfG?=Dlk8O+1*sj!M z+mee~_K{le8+PZzuw1@4aE)KWO`PQOz>2al9CpT80e*j%z`sR|4vq$B4_mBbv}YZ- zTIcmhY3_7aQG#=*8l9YrFgM@=lCR8MDD>ds@M_%cUTEo()MPoin2MCF43Lz_vNc+C z;}muMXZU+yUCxW{IYiDKsgfTczs$Zv?uDs+Yra40TDNAqZjENURQD_7+acR!ee6}d zfYqHDj3<9o?u|bOJC&NXMp?Y*rYFykgqT6#Yjie)F;Awjg)rvnRQNAam_D3Reb`oa zE|&1IhTjZ+OK1ePVg@}a?Z#em7oTw#sUg`+uo2mW*Fb0#l^VqpH43N>4+c6MMHEm0 z@|UxtYPugy+Au^M9o$mO_@J}sE#d2+Gef6bem8$i!~U4{Sb4&RYQhetq0t{>*F~!PM^9@1fbN4{6o^eVxop(!cjw-nQuf%O7^2o`?2)rFuS8JwFIf z>;L-w-Rk~nebD&c@%V;3zJGlCNoxcokUAFPgt|fRyi=&J z%LjjvAk8<<+`jmvdS$Itr>wG8(CCjv`8mB@|rgFEuwX;{jZq8G*-?C?qCH%Ur8E42g%eJ!3%DB}M_S=Sq&8U}+ z)bcPvs7yXJel(QXpVUM>h+S5GF1sw#qUN~016(rnjw6aM#TP5@|JIFIMeAG}YKQBj>7$@%iC=e2)7xw(LO_C+7gE znNgQUA3x??amxGkf-WyW;ggdK^t@7h0AvG>Mmw5{>ll&sj~_3P+n38mdc)^ek!t@e z9-`z&lnwA`QsulGqxBsz$KM0q zK^}E-E^~x4EKD7K(w}u%KLyB+c|#$fH0I%y%X)8@G2j^Syq5Ki-|MD~Ktkm4d3S}l zKo!p+0Jr}I#XP}HgfUO2h9`feToPA5ofDqZJ{NO=xv5js)P=YrGq12*IW%8+LBP=-dUMapyg#6@KTvtLUDNQ1i~1 zX}mmbLp5y>9hiY5?56DG-?@uszU<|oDIfBb*GP%_4AuvAf5Y2$08oDvP6u|Zjyi=M zB2RnxF{kPC2#Q?wwo<(fO|M4iKWloojq)9@@{m{gpVkc|F9H?3C}-Y*($g#GaITmt zSP@kKHFx>264a>^8V_xO>gVJ)?9c2Vwgxwt`Au2LWMVo zR?C!g9Y2rAn#g6GwG)4m&fGv~L7~&QlyNr@;<%&uw09|9#y7o<_z>TcsPv^ksc85n zHs+C#T*a4~>Ha~!@8Gqx{b577hN+0Su^d^_g*9pGmk%VfI1=d#{n`8 z=!oQ(w?C+?x<%~|nG?n(;|UV;mbruSBxnUjlpZU)(p|t8ZaII_Pk6>UY0XVosPqHaf zQqr(1jQ?BMeXxHG=IU|4Lo3M(4;IDe7)?}~Vo~t9Nk(Z4qo4MUb0?ZQ5u{utwIaw# zBqO;eh@aJGV~MkIn_DSJa-ioV1~=W@@k52qGYB4e@fo>RV)<6us| zykTAeuHF^sXpoO1e4?3qfEAYDfiHZao~1nDd+V%el_B@M9hN{TW!{l1 zmADEzfO3C2Kk(Kn{VU8jdR7lx(KnZ?qgVeCBC|sXQh8xQ(?}Ps;EW0DdP*0#OhMD+p5E2 zTmfuS-Tf>296*eE=1U!q&|_4KB=rb&H|u3zkkV-=yi z$*FJY8tT3Gt@9i2QRqfyEF0Y_eUGrEWtd?z00QAT&4vP)rpA zh*Y5Jh8M8ll%{4%?V4l*?p&u+)>x`%44M8uJ;jOpvvFewN6~U>C!DVsw%H@gzk;-? z&dxdeY~kEE;SAUgM?~*dtvnVTWkP>_LfKI%==RHcIm!%U1cWwsWcb6(@ZD|~Fnd&N zx_$9RP3H5zWUIw5G*iuvwj@d{SC5@_Yo%mJRF{dtO&I2BDLcKK(iaO1#~cUvAOyI@ zPD@*A!{LY8UXnMa5J*L3@b?RHdLv|;pT4;n&$sJxANoDlIs>=+NOPey)8Bt}A|EgZ z##PV5rlgSf=ZpE=c1}+dvg6`ewXmZlw;p{5Q*|Qb!U(fmKp*FpEsk4a(>zkfH%y4H z2KYROo3g7lwat3PlpjJrwa>i@jvTqNSeM%XGN(mJdAm<%r5BT%=K_P zB6<8ev1t1z^&py}$^#=jSxtWdiIfwH2qMvw7U8Ht9ng-Nbfibh?HPY!C##(QlWEKy zwT5JqBM&V51n0jstAdK^+FliTir&xze2LnsAC}~!TY&?d0p~!Q1rw{?*c9R342{%M zz=5mLHAnOy}Dz4&z|FY6kf|K#o&KQBN51v@qE<4 zZ=-8PHAwX;69C{;fdz7LOA}tC!FR}lCHXH15cvu%{=G!Fb9q%%=*UZ2u1}>8^U^TM z-V5vF*sxTj6XUp4-i&3;v5Gmy7<6ll5%?>=kL5R}vys!1f8qNa_TYP-W(*#4(311l zES6koCoC!ev*S;`H}`+OZD4O2r7IB|#dNT;02XInfa*#0i$?fY5v}Gt#e1dM`)2Sq zzY_-YZQfiK2B>jG?QYV|^G<2CT8=#2#2bTv~$`VE;p-Li25 z9p^d|t`to!!2uBMfEBn1Aui9aS^5F_3l={xBG+x9X9ov_u=mCcvKJ&7dv6I`6_KkF zv-pCYZrTscbtZJ$4v%;F49#E=|i`jg~tB?0k)mV!>51osSI6jz^K#1Y@FhOJ+CnY zOofk>p;Ew*R1@T;xd9iSxK$0bqcsyFon($=SD9ye55KgDQK^vSAgfX(T7m$YS1E`e zNiqvAm-0&*_i1$UO4LjP2UC6YUtcB{sbe-!COD7#lq+n*SUKbkJCtoU1*rs$6QthW z!?i(yV+em-rf|2FM=0^x((Xv92hLb+PNmbj;!tK-q$Or$QB^-lr*miOZt8X&0PQ)g^s>Fqm|iKmMB>~(4G^| z30BZOD^aitN`3Fe-p3}zNXeR)?a*=*xmO|7p2 z{t|y1kb(;e6;Of-^oU-!O`u@3av!Lt#5x3@>8Zf;O%QTbAisLG&z|qe;BGf-RHiRNK$Icx_@m9p0NNjD(Dz-X{_Bsm4yP@VTVCPG3}4_`HB@dgYM>WnvEZX#kQM zF+ilj43VU{6+~ES*sx?>9pBz-(7u1`7q-``Y&7Yf6n76Kw_s&L$7SMR1*0Ger766L z1lU>iL-t#`-27O~(@6^V6x0p4w}LznKmiy+Q`}}5jkCc%N`?@!4T()?jKK&sLP?kz zNzzy#YpYDsSNchmnnSrG?C@So>c%Q?iOvDGY$VJZf;2-!5(V}J0uX;D^BHQg z=Tg80rDFqR1Gf%Gp0{ooaq)R#hiVqeb5cU%> zW9b9wol%L1ML~=@!^hi|L_9OPf0iMdhESM^CW_6oWCmk ziiiNvH@tPhuNXf^J$P16DPgxu4B?T&5Qyc){+CTHiiu>Q3y2xW+cB0irmx6YO_>Ot zyLN#GEk-+#->%Qk0TUp4dfaK_MD zP`1U~f4Rlne~UCd^?hz#sbrMSr7KFZ;jBb4YbJ*nCC#q1Ii(C)^Ke$7_D4g>GYXNL zik+0F>Ad2N)Q+TM7K?ucAc-USpyMVUTZzYtsBp+gy29#R5Nb9J%^HMX#9JCEaag$n zM2;_#=FH}Rvcn|Os=P}OqNiD@ zryoQ0);6k{wBEz<#aLz>O)Le zIU43>du2m~oYl<^H4~M?~KuQW#&6$ zR4!baSX(}#V_$!>_)4?^#2eQN`D}JtGM_U~ver%a9(Z|lbo%nekH5Y+Qaxc_m@Cvn zdsFiREnOm8R>GPs6E8Q35~VaqnHK*FGM>E5s&65*i!S+<;*;5P;B(L&M3Q`r;`BSr zWreY|08hpY(qdh3BPcsB61C?w&&YGIH1<}T`$;WEx$A!%j9d%8YNN>d6z6P*3YC*j zsBssE3k|y=mNG`Y?DC@Jp$?j>u4%h?ONMgh7H@P3+kpNfZeUir?_jS3hWM&!?x@1eVSaBy-8U}U)N`k4@D4F0AZcC_ ztX%<#M>rD3ERy_!zWGX1BXurnpvF-+=$72PQ_n2NN$eyVHd8*glC};+%-2#dmGXZ7 z{`7y%7K8D~7gUe|KDlDbN&=Wd7Xg_2U) zj9CZvCNpc@EPcA_SN1$eq6P_v7XZ9N3%so^J74=&Pn}z9|187(h)1VBN(ZBeLy@F- z5=!VJkD70g#@A-~zHD+fI};s8zo}|-w1%E>Eff)18smy}O77V!W-d)5Ex;ZkEMdnhN6<|K}>< z?X&}7#jlGc;1LZQP^a&<|B9>R_civG1JXLSGx4yb_!O%m#csFQt_bC%oIhRFX8fO&yn80iqCn=UqgT^JcE#A z!CXSa76YByz7}VZ*u@>D!Ycd?6^_#)?=J0HM)9q>%{UeAwI=mhqp)I^Be%fi@ zbgsKcuw_ZojC@-ozeh`;y@c?~!}<87Rmlg4`v7qtATEh-x-WZZ@cyX#0e*jz!@&#z&7EwG^k8X|$p<;ly=y!&A)(r$cpvY2*eBBKzTTL_mNKEQC!;U^G| z#v3@{aVj=+z~hVp2h+Huz>{g5cTYR*gJ;irfbFl{6My-+C!VKuWKFT)eKNB4O!)BY z?f!tXugm_M9Q{9)$vgwXhF*VKfzC+t*`@&sgtG1i5LQ58REuIc#|H=%{`he?_y=A{ zx?Q-B)LjH;0BykQtEo6l#syzZ1@BMToSk;nE291Ci{DAQM$QvKF&dtiUkZnwoHRlE zaH79P4fl$Yn!>6ruUz#Fg*#=34TbxNHdGPodfj)9#G5Bq96^ag$Zn(IT?uM(4Qj@T zWbUix6UCla{eYM)vI>O=_FYO$1d8r3?sdGRantF^(BkspY@C1L>8VaKyg1kJvzU%c z_hjVqWIX)J#0egmsW#-hP%CfGXZRw;jd-u(gU$P=rkn==;@{IYwT>%lIq=T16(H(u zw^vFLBG50b74ffs)_*Lrs)=BvwB1g7PSvdV_kI?|m%0E<+Y$-PYe*nm?fqvxrVEpN zUZ4hBr=p9!t8ahyuD;qK)NmC%e7{o%N2agg9Zj?S09=sD{hQD!Btw=oawt^tjtnw1 z{)6vh$RAVTj~}0g_g;Ya5ZZ&Yc(KbKT*forgKMp~C(e~-paoFZ2vFVL5;@PRpXcMU zmU^24(VlhAyH7i)mbygzrNW;sSv6l0wgNjH15b>`+8lof^NTp^y0wkxhZp0y#X`6O zvi&+P{cKl<*W)WPmH)Ier?#&IwjAezTaGKiEyso6mgD4Z;hvM(XS4TIe@1Ti!skV8 zmIoXeRrKHF)UZ{PzbvxGgJb3REL#4F6djmn)hfwnI3yMP`0?O=s7{*Hfm4Mj)()qt zh$}u-iBEs+OB73W297DB?g^Yjg6zpzC7m2-P3$$Ct~Fl(1=>qR1?zQ}oE2dJz4<(! z!3~dpO8m2Ir@bsXTyUtAp-hI_SO|9gfNe5bL#h5=90Z|8J95SzJ`L6mc))?MO8={| z5suQUENLJ#DQzpA`K1Vhs!nMZOlf9u|49d*wYq=(XMe;1q7(h$kb>xp4#8;F9S#P9 z6XD|-hYv6e`?v|iuCFo;_|r*GD)z6pst4Pa_28a$WkKEg+TvR6u(k<63R>F*P*1hB zU8uE9@cJ$Bhqwk5!0Q(mwcUU6$0wbv+yCb4KXyu3^FREtlSli*{*z}z!6h)y(?4RK zum6AWHRbvG51i*<@I-KBkmul=1I+X6$y3VnWQchV`opIHNId28o$&RCNxR*9Gqj_H)^YInWTP%vAkL&DA>@niEFQ5pZW47U$HLYxxJm2@s>V+vQc(2M6x^?Ogr`*5b8Pf;t&r# z@Zx6iu;)ZD;(NiIgd(1!k*NfK@B}R=04E5e0S_%YGr>u5-c95OoQbNt=*-66Yts4W z-n2CIk(mXd7SbL-__9gWXW2f*&hm|Xy!)rL7<$CveCo+-HsHB1`f9hs6`?|3}d`hucGf&H}B*AvI& z5OZM1Xx_*sM(0Eq3My<4PsbZ#bF+)PD!w?`Aa4bJ@Qz9-0C&_Csa&ri(Qg^^`E6r= z5i2e-`%F5_)0=FB?Zs6mBWS{{#zm*ppKt*tot!|6?W7G>JI!V3VXr;xRZ$22W|69c zA`6NvBUKYcCKQ=FPTycrWo1g62cLesxx8iwrelFclVKBw#>C|ot z$n|#B^P0iPqUSY%k%`yuYJIjU6M#B@=uEeVZh@hgSjLb~P#cTG!DKL6sM=@rIaBp6 z>2v9HI4OVAGpmPIiNHh@A}|SwaC^99Sx=|JWNUZSg+`U!i_ueXX{DzL} z$edh(+i|2frl6fVGMn};C`E^G_#pyxSneN&{LtK86(8Vy8WArzm|6@B5DCqHD=PF< z!)Z4%V?uhwsj?h)6$NK$hCVd?>uepm&X#@FB8=DVWspfn3cS)r#yg5zq~#?s?W7{{ zKuFEufmkN_?0<^thvF=)Mo$7a5bJHg9Wi_qqnRPdloxJ9Wqj-CBjr6X=3+nN%3>NO*DA9$te| z1j0;>Ylji*PZ*UzJCXs!VHx+I!FGc`=kXBGh#}wzfW#nvAg<#~z@;sJF1No=Z}?Jn zZ)&_8E5N)e)GPGcr$9zz(hdWwpI-}f%62$Rd&93)j-fPY zm+osb8|d%2vuJ10e!8FC-RUOJ6QK^adWfBauQ+fCmzxbK>3TvC<6b*TELvYW;wC=W_wpS1QODwCJZo<{ zwFXd7`vWAMhLe6m$0qOa&u{QY>qfN^U8-FQzNM918^g6}IO!l34z;)xOh9ZI0K9~?hwt7JRvJEgYgk3-)f%=dtuYXlhfl}XP`ZF^ec8Q68VCbVF}R@M zOAO9rkmApPWC5Duf+<sGD>yWN6X3;*{xKKqOv5SaA3d$U(??qZ5IKg`4z$gUme@KdEv64Bx3R0K+2)0~9Nd^J(y^}$Je826#R5q%vKS7U7;n<9;N~=4JZJVfL8$I{XL>DEmL82h> z#Jl@JPqK`H{#)>liF?D=-5QmTbdF}0o@*SUu4|-qjBI_QdbmLY$&&yI!3X3W@4%&h z!#6{M1Sl;el@J^)ChIA2rk)ZP{FJy*Pl*fpK1=~PMhkiS}drP;1 zpC{Aq5*>gqz^|bG~ml-ybmFA35Iv=NqaDWsO5w<&f$e%1WQe%(B*@tad2t z9a6=^KTgMmi!3LfE&kvh(%sd2^oDwWkb;jc{cm%`@>L1fWwUZ0CGW~FmzAw_@E@gD zdhqOzowm~n6oH8L+oYresXZq#ineN=#(AfWzrEqXAEGY&k$R{y9zt%)flfIvDPLSC zNOgYX45d*`jZz<`rA9^nO?L26vO;?Tbs4t*kYXP)eYY)KsoGXLh^`*^RxT2MG_HS9 zCYMc5@LyaMxjz_odQQ)_h$L%9FNz^c8DuGd94XP{M{$gy2~ZFC8+EGDz=$hzDuiV^ zgiMYDE60J(alkpgxOlS~@5mW_c(}W|A!p5(i%=E46yACan&}g>$WxYL}XP0S? z#%5lepF<3K)`Fp+J3h~&p6hGR^~1Nt+aCVT7D;)8!XD%?)^)k(`1l)tlKHkD(+^nB zX#cO}WRpS9e!e*YioWc#~hWlcUqUcip?@EIGPL z1u7HJ(?kBs8gf+C&2_$iiuk~zH!$yZ54zg>wZ6^)x=v`oC}QK30mjW#A(u^cd^r9l z4XgncbE7xpD!w7PZ)zz>o%lXi!+(LoHXOs@qpwXWst{mLk1cSH`hr0?(Q$EfI$*$g z`$xHcrWPKZ5D83Te2nPO4{p&h3%#I|MJ!l5$#=Hqw1wxN-XEKPSn2*nA)11r;@;Ly z^mVvANJMAz%B3hdr^1pitFERD?TMdw%}?|BQak5oLVR@7gVktXLi^I~->*k-r z?^|toeY2`*S9&|fR41$x4Cs15;nc#ExPd$R0fbQD>vD+7D_YcS?31A zE^6ptmB79=nK*(_Kis>iwKbgps{%)~1>%k@A_?$C(Uo&_Dv66`cF_y?1*2c(a`-Z| znAu#tQCFapDDmp@b&0;ADELC044e}psifgJe&|&cRZN$E0zLOUQdDKEB+m;UdNtMtrD^GM-i^C@KU3Hr77U#h`w!EA8aIScI^S=1Iw?t)L{O=Aj8k`G$FNyHmhYuQ!N%S+f7zfqtxCq#i$ z=65Iq?;{z1G^8-GAP38I4s`M`Tc*`8o8O_oZ{+}&-3VeFD+5vj=c~)7rU*G#E|ufH z$cS--MMr5{bR=<`m1xj`vFomjyuE1(I&ZD?fSIh);VD1{n;k76?uX}e+ndg6hdt(*Q3NByt-#2YnUVhX88}xNA zkv&cBxVET8e(-72ScB7mL@jp(;G=hKa)fqnqtsuOf09eKB3)|F{%MPc=Z5>!UBRL( z^>IbbHh}NV(Is5|DBN4azxTR;HZ7wgI*s;F{9c~U&-VA{$9iewd6G=?YwYfdyuYG@=c5kmC`)8muQ!)gr}{1}+vnHo?xTATsNxh_+U$6^ zF|X^&fl?^2pEYI^l-?TLK=E*Tu&?0gNbH+`XJPc;p%`qLwFsFytYuT(CDB6cH+RBR}g|NbZ zKqo3Rwiv~N2UD_K-S^I4R1^^CkH92}0lq`-OMyIeHj>?uo zL4;%d)x zd|6YH7o_{ZJPG+8l#kbyf|`k&C=$i2Fcqo)Wqq?+JPkG^+~_hjbJ)YpyfB6Bm@Q5w zzP(vA`a*{{?PK8x_n*=Ed6X1q5?P%VXA&2w43(UAsI#RV`kG~MX@3>c-GvH&v|*3m z&I9nHuNe*UNvP12(FM+}0GWz8nnk#n)odi&kOYJZG8d=8{!8>PqKQ6lH_#ENY?@7p zKu}g6oG|L)!2zpfozvML(TY z`E*vD4NB|P7^1b1qu(ZV+5oYC)l6(!hjH1gC#BMgD+UFNt;Edr#O@bSI+_3?td84h zrAXf;7ICm0DnGJhhQgLey)+@*S;bPWP}p*XBxYE#@loPDy-6^g-&4bJQjln&(aSw7 zVS480(fI2a&FEKmcl<6fAX8BfEoxIzhZI$P8mOc_KM@zd!95(I@2CBLeHs7!@Y}EB zbYn%V10*ioO;<~&?pKeu)CB||=yP~Degs#6I%6a9b+0Y}hyUT9q|?HVoutpuKUus5 z&9F`TN(*+bQ#rK`WD>1EL~a8IL0;Rz#7R4o@47vtE`wo^sKWcQEiYCgK#@!6S$s~F z?A$VgSP_m6UslyX9opA_#j2o=ZR$q_JnKv>dbON(7(wKj=_DC&rVEx-!3cMYve+>m zhaeR&+@fd~gDrCMOwhs>RqC^Nd)-z;A&JgZn^M%UDZprvZIH%Md`=Q`=pKv|!rDb? zXm85x#^e&t{z(ISRBUJ_esCXXjwB;+G?{3_z6FC)j6Ukr5=6Lvw}*)oDqckQ3<-+y zFGC?gMK|3ClpM&<`w0+KxN*^SII1Y4g&`TSx+ZE{-L3WXhGMt{pHz$QuK?*|cTgo2 zU)X>Rjq^X7d~MYcdiyh=wpqN#lEr%r4yHF+s(+1*Lcvni{r^b~b5bVvh>*(SvqAH6 z(v#+1O$^mR$0kI7sOI$qUC?_l3eh|$yJ~b~ir4S2go*?4MTkmlW>GXb&@nla2C+1} zy@X`;U3YvH3WoXx;;mxLQVhC^HwT@aDv}p?l0yBQVE)c7Wf*OZt)dR}Emm z^(vnigQMu^Dvb^zig9^BLQ9TxWIJRd#ap3k&98w#QdJax!0cSVl0ady)}JaSYU1SE z^=xD`JHX$=g-*!0n9G#YZ5(Wfuv${oSqgS5;11}h@}Pc%IkY&q1!TBYea1HLI1_Gq zG}V_h)WU-w-|xZRhgj8R-s<6Cb?g8LVq}?BTwG>K2(~<_*kh@N9@;$!L1HoFS~DC# z(3+Gf+p&{>=1xepoQ`a}szxY~Gv#spp3!ezMhDwTifJDY^Q5u)s45m;@4Icr`11B3 z|DCE73mP9hTjB{7mBG9Za3kOWY+=eGv~e}4lRhR$hzg@3fsoiORcLwEQ1LLsOwhhnQTOh^nz1Mwd z_BbO%b8(BZU;@?%$8xp5_X%9!F&rmr zZ_U4d_pEGaz0ExbW0f(kH-aw2w@eSz1k2Al9)&(05-PP5v9+}$g;!fzljTkPZB`+S zi@{fH z3BR}au($ZQ$0)!(Lz3+=I%`i8cY6*6C4T4Cd|5Ykgg!Z>XU|_edHds=bJ*|aFJAqB z3?DE5^LaM@M&H)7(2%c!G zBy&xgX4GXVxOQdteX-2nmo-I~+$168cdjX>HFm9mldQB?L58jvGx}I5%uHDvQjz6I zL$%dzNk35{sZtu1a#|{XG3A5t)TrVh?PqUJ+Ym+@kPs(LOzCF5z{6NAUcl-NB71Wq zYuIk~xvP+1{26tIFQP)HZRz7VdTJxZ1gk_~55TJh-PLH)25yByk4Z$vTu1^3ie`n~ zGoI@ljytV>sH(RQF71I%=AxY12qHGM3Mwvwg^DV~M)&Ih4#^vTK*@x@FapGtwN#Fl zt&~nbf?EJ;-5>#@*e+b3ikLXvv^g%O4Z6M%Uu-Z{0o}PtI?aMwZ=4k-9u@PoH5V!@61(gFLql(4Jb4MQQ`dKLup1`qlOn zNVWNMaJ_iRlC2kOcGo)8Q-2iQ`;P&GkoPP0*Q>=pjX{Gnq>~wcXEqB!NLMEZZ?ox*~>{?Eo&y%EI6_{d|wuSA_=AW{H}mh+sk+&)83}TB2#g55(65M zZV|^5J$__l$Pw%J=(giO8!(#!0sHTf36VD?GRxCQETuxue2wV*LHAo4(7oAhn58d? zok=F zIvlIY$K7m0?gT91Lio#qHJ@=yIAi4qy3ASQ?F&j85B%Y!9a%6Xb6a`9oe{U!KAUuOkmDL^m+o~H=6>J*-J^kE-QYsvP|?Z zfNbD`KRIAX-Y=~Nsg(GZMZ^!wj*=CUYRRl5rFaYdLM_i1SnEA&iD%~1)`)P2AlCHD z^$)v$W+widuv?3I5$sPFodx@50ger&!SuW=Z2_)|!EO}a9w zua#hB3A*t|(u~nI2o-X(?!uGtH3Ycgrgwwy??=#9q!^@LzNOmfDivQ|2tQPq;H{+L@F5WHies!rGg(Mw+`m!m#Ygu<6135&gnj1batioXT#qO%QB< zq&_FAhV1W;NRRj)+o4F|EjZ~8%>h-RlZ1b(hn#GLn*Uj2{5u`6((s&)@@e5300hvX z7;kZSwW=@j)f3?+UGP)N_NV%$Ef)2k)od&;{ScoiEtvAYKqmDNMNJ*?!s)M^3W|}` z!UPC(}x3`O9 z&LlwhuRX}FOfS**Wu7ijj(%)6w%no8bO8gsG&tdA8%_|`ojAjjc7H!VuHzejN7`J4tJ*G()m7C0cG#Q}dxVi9Y-(hKC%$lb1P3S!pijo1F5B#3gz>Ba3WifT}4 zX%T)hLaP^>wEHZ}w<1h`yI~BHjd%<$6K0}Al(ss9%8jlQha-uvMf{Bw&RPLta1F#U zD#@ic1Pl#AlkwiM|G!rD|LYVknD>C--Yc7byJ>;JyoN>cbO7Ls&qU^V1wemy+lk07vhEGYQXWTfWEj~RN@e%3dz!(P@1BD*b{muibTWJ2rWF7 z39~Dly`xK7Yzf9=(A{Ys1Y;`bOwDvKd;~L2$z_l$Lg|{X!0`;r5v+qW2=h%Bmn7-M zy;C2JzlJ0ENn0XKngr5Dscm93X@<3{I;u89VkZmBDzvy#hDK2N9$Kdl>pMUsr_46W z8B1y`m_z_zc%=e=fvI%_bEzMgpP`wMw0c?!V<%=LR;DX_iK4%RJI|uH$K6Hf&cD4K zD81f3C0h-t!_nh7?qlw&zS(_1FM#c~db>~~;r_UDvwIj;ZHJpSl+;QPwI3V24e&SDRQF zrGddEOk!cYB3>RZ$dP%y;p$$cm+(s7-><{>*PzX+)627zo3ICqa>Mau(j=j)tbKxX zD)l%|@-$Qg?bNA6G7g!O!}-e!aq-ZX;D;fX0hRiCP!pl&!($z-T6)r#|5H>T2&w$K*h zx}6>-d|GUF`bGE-SHuR82s6Z(PN_`%ohAMbiGmHqrJs-p-3Wy=bmR}qpx;_ns_WlP z4uu4Hd|}06&+yM=;5vvZV=i{qH3nEZ1A?%Q)mAqf&~cc?Nt^-yX|6xDCp$)d4a^Vw zo>awu6lFBvKTXkp%C~*TNu>e%#ahLm%67;(a?W|xNTZoCv`;P>?BA#5*{mCQX{ZQ0 z*`cPJLONwqzrA;alDWq#cW2}`0ctLaRnZk2E61Nip*^n!<4VGnCfeq?x{erXsDh){ zM*2#6c;Oy`qw*X!c+?luLPJg~?P}V+n>0PV#^O(PZ=)~{Z}7IkLTYG0G8hjBv!+)b=u-yaZYdP` zNJg6-O`GGAw75dvFHRdExcdY|WG81J*lzT(;q3(#9JCC!F36g~^KMmWEr4ylH?|6Y zWdb7_qc@*fsaBA0v0fK0Trtyk;^O35Gq&7}G~RH9#S$8y6{s{>aqF%IR#34Ahox3L z51ydZaz0{Qc^|c@?b!tN)kXV`>X|!>tWN7KKI#M#P&BlZXinQ>?FB?TP=jmlw8bzD z*EvQvJ$lz3@h6(U>uPAbO`2FcwX8OOIoAp}+>suK!X9@_rjg2SSucwx*QwPSvn4XF zRUE&HUR7i@pETr6r`8h;4liq5k6;1MUI9l-`bxnycb%a+p5{kV9^LbVYmO_z9R2UN zhWyVpC?_0_XWrvuQW(Y1fC~xkng^iy>5i79)OJWx!TD3gm6|brJN{9{Np-n@iZKbW z8PM+){HH;?MWHb0w4y*K@`BuIh1+

K`;(U^t(V=2U(lSXC)qa+c`=0I#{b8+?Y% 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 delta 67070 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 0) { - var snapAngle = t.target.snapAngle, snapThreshold = t.target.snapThreshold || snapAngle, rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle, leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle; - if (Math.abs(angle - leftAngleLocked) < snapThreshold) { - angle = leftAngleLocked; - } else if (Math.abs(angle - rightAngleLocked) < snapThreshold) { - angle = rightAngleLocked; - } - if (t.target.angle === angle) { - hasRoated = false; - } - } - t.target.angle = angle; - return hasRoated; + t.target.angle = angle % 360; + return true; }, setCursor: function(value) { this.upperCanvasEl.style.cursor = value; @@ -5059,7 +5043,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { addListener(this.upperCanvasEl, "mousedown", this._onMouseDown); addListener(this.upperCanvasEl, "mousemove", this._onMouseMove); addListener(this.upperCanvasEl, "mouseout", this._onMouseOut); - addListener(this.upperCanvasEl, "mouseenter", this._onMouseEnter); addListener(this.upperCanvasEl, "wheel", this._onMouseWheel); addListener(this.upperCanvasEl, "contextmenu", this._onContextMenu); addListener(this.upperCanvasEl, "touchstart", this._onMouseDown); @@ -5084,7 +5067,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this._onOrientationChange = this._onOrientationChange.bind(this); this._onMouseWheel = this._onMouseWheel.bind(this); this._onMouseOut = this._onMouseOut.bind(this); - this._onMouseEnter = this._onMouseEnter.bind(this); this._onContextMenu = this._onContextMenu.bind(this); }, removeListeners: function() { @@ -5092,7 +5074,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { removeListener(this.upperCanvasEl, "mousedown", this._onMouseDown); removeListener(this.upperCanvasEl, "mousemove", this._onMouseMove); removeListener(this.upperCanvasEl, "mouseout", this._onMouseOut); - removeListener(this.upperCanvasEl, "mouseenter", this._onMouseEnter); removeListener(this.upperCanvasEl, "wheel", this._onMouseWheel); removeListener(this.upperCanvasEl, "contextmenu", this._onContextMenu); removeListener(this.upperCanvasEl, "touchstart", this._onMouseDown); @@ -5125,15 +5106,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { e: e }); }, - _onMouseEnter: function(e) { - if (!this.findTarget(e)) { - this.fire("mouse:over", { - target: null, - e: e - }); - this._hoveredTarget = null; - } - }, _onOrientationChange: function(e, self) { this.__onOrientationChange && this.__onOrientationChange(e, self); }, @@ -5282,7 +5254,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this._handleEvent(e, "up"); }, __onMouseDown: function(e) { - var target = this.findTarget(e), pointer = this.getPointer(e, true); var isRightClick = "which" in e ? e.which === 3 : e.button === 2; if (isRightClick) { if (this.fireRightClick) { @@ -5297,6 +5268,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { if (this._currentTransform) { return; } + var target = this.findTarget(e), pointer = this.getPointer(e, true); this._previousPointer = pointer; var shouldRender = this._shouldRender(target, pointer), shouldGroup = this._shouldGroup(e, target); if (this._shouldClearSelection(e, target)) { @@ -5939,7 +5911,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { }, _removeDefaultValues: function(object) { var prototype = fabric.util.getKlass(object.type).prototype, stateProperties = prototype.stateProperties; - console.log(prototype); stateProperties.forEach(function(prop) { if (object[prop] === prototype[prop]) { delete object[prop]; @@ -6196,7 +6167,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { options.format = "jpeg"; } if (options.format === "jpeg") { - canvas.backgroundFill = "#fff"; + canvas.backgroundColor = "#fff"; } var origParams = { active: this.get("active"), @@ -9912,6 +9883,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ initialize: function(options) { options = options || {}; this.saturate = options.saturate || 0; + this.loadProgram(); }, applyTo: function(canvasEl) { var context = canvasEl.getContext("2d"), imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), data = imageData.data, max, adjust = -this.saturate * .01; @@ -10517,36 +10489,20 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ } fabric.util.object.extend(this._getStyleDeclaration(loc.lineIndex, loc.charIndex), styles); }, - render: function(ctx, noTransform) { - this.clearContextTop(); - this.callSuper("render", ctx, noTransform); - }, _render: function(ctx) { + this.oldWidth = this.width; + this.oldHeight = this.height; this.callSuper("_render", ctx); this.ctx = ctx; this.cursorOffsetCache = {}; this.renderCursorOrSelection(); }, - clearContextTop: function() { - if (!this.active || !this.isEditing) { - return; - } - if (this.canvas && this.canvas.contextTop) { - var ctx = this.canvas.contextTop; - ctx.save(); - ctx.transform.apply(ctx, this.canvas.viewportTransform); - this.transform(ctx); - this.transformMatrix && ctx.transform.apply(ctx, this.transformMatrix); - this._clearTextArea(ctx); - ctx.restore(); - } - }, renderCursorOrSelection: function() { if (!this.active || !this.isEditing) { return; } var chars = this.text.split(""), boundaries, ctx; - if (this.canvas && this.canvas.contextTop) { + if (this.canvas.contextTop) { ctx = this.canvas.contextTop; ctx.save(); ctx.transform.apply(ctx, this.canvas.viewportTransform); @@ -10567,7 +10523,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ ctx.restore(); }, _clearTextArea: function(ctx) { - var width = this.width + 4, height = this.height + 4; + var width = this.oldWidth + 4, height = this.oldHeight + 4; ctx.clearRect(-width / 2, -height / 2, width, height); }, get2DCursorLocation: function(selectionStart) { @@ -10809,7 +10765,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ } _char = line[j]; ctx.fillStyle = style.textBackgroundColor; - ctx.fillRect(leftOffset + lineLeftOffset + this._getWidthOfCharsAt(ctx, i, j), topOffset + lineTopOffset, this._getWidthOfChar(ctx, _char, i, j), heightOfLine / this.lineHeight); + ctx.fillRect(leftOffset + lineLeftOffset + this._getWidthOfCharsAt(ctx, i, j), topOffset + lineTopOffset, this._getWidthOfChar(ctx, _char, i, j) + 1, heightOfLine / this.lineHeight); } lineTopOffset += heightOfLine; } diff --git a/test/unit/canvas.js b/test/unit/canvas.js index f37dee01985..ce23997a54a 100644 --- a/test/unit/canvas.js +++ b/test/unit/canvas.js @@ -41,7 +41,7 @@ var PATH_DATALESS_JSON = '{"objects":[{"type":"path","originX":"left","originY":"top","left":100,"top":100,"width":200,"height":200,"fill":"rgb(0,0,0)",' + '"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,' + '"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' + - '"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"path":"http://example.com/","pathOffset":{"x":200,"y":200}}],"background":""}'; + '"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"pathOffset":{"x":200,"y":200},"path":"http://example.com/"}],"background":""}'; var RECT_JSON = '{"objects":[{"type":"rect","originX":"left","originY":"top","left":0,"top":0,"width":10,"height":10,"fill":"rgb(0,0,0)",' + '"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' + diff --git a/test/unit/canvas_static.js b/test/unit/canvas_static.js index cde812b821d..035f34c5bac 100644 --- a/test/unit/canvas_static.js +++ b/test/unit/canvas_static.js @@ -28,7 +28,7 @@ var PATH_DATALESS_JSON = '{"objects":[{"type":"path","originX":"left","originY":"top","left":100,"top":100,"width":200,"height":200,"fill":"rgb(0,0,0)",' + '"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,' + '"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' + - '"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"path":"http://example.com/","pathOffset":{"x":200,"y":200}}],"background":""}'; + '"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"pathOffset":{"x":200,"y":200},"path":"http://example.com/"}],"background":""}'; var RECT_JSON = '{"objects":[{"type":"rect","originX":"left","originY":"top","left":0,"top":0,"width":10,"height":10,"fill":"rgb(0,0,0)",' + '"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,' + @@ -38,7 +38,7 @@ var RECT_JSON_WITH_PADDING = '{"objects":[{"type":"rect","originX":"left","originY":"top","left":0,"top":0,"width":10,"height":20,"fill":"rgb(0,0,0)",' + '"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,' + '"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,' + - '"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"padding":123,"foo":"bar","rx":0,"ry":0}],"background":""}'; + '"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"rx":0,"ry":0,"padding":123,"foo":"bar"}],"background":""}'; function getAbsolutePath(path) { var isAbsolute = /^https?:/.test(path); From bfd8341054c872864095d9112fd305bd4b065851 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sat, 12 Nov 2016 23:37:56 +0100 Subject: [PATCH 4/5] fix fabric2 api change. --- src/shapes/object.class.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index 02cec102fc5..644ece7cdc0 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -1374,7 +1374,7 @@ } if (options.format === 'jpeg') { - canvas.backgroundFill = '#fff'; + canvas.backgroundColor = '#fff'; } var origParams = { From b3979c2e68bf0b1402ce729259bc2dfd451c4a61 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sat, 12 Nov 2016 23:48:06 +0100 Subject: [PATCH 5/5] removed unused var --- src/shapes/text.class.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/shapes/text.class.js b/src/shapes/text.class.js index ef6a04dce22..e9bf682cf6d 100644 --- a/src/shapes/text.class.js +++ b/src/shapes/text.class.js @@ -3,7 +3,6 @@ 'use strict'; var fabric = global.fabric || (global.fabric = { }), - extend = fabric.util.object.extend, clone = fabric.util.object.clone, toFixed = fabric.util.toFixed, NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,