From 161a3e8acb6272fd850386e7c8af661fb41fe33d Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sun, 13 Nov 2016 00:57:55 +0100 Subject: [PATCH] v167 (#3417) --- CHANGELOG.md | 10 ++ HEADER.js | 4 +- dist/fabric.js | 251 ++++++++++++++++++++++++----------------- dist/fabric.min.js | 14 +-- dist/fabric.min.js.gz | Bin 68001 -> 68031 bytes dist/fabric.require.js | 160 ++++++++++++-------------- package.json | 4 +- 7 files changed, 242 insertions(+), 201 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c8423fbe22..ec467bbe581 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +**Version 1.6.7** + +- Add: Snap rotation added to objects. two parameter introduced, snapAngle and snapTreshold. [#3383](https://github.com/kangax/fabric.js/pull/3383) +- Fix: Pass target to right click event. [#3381](https://github.com/kangax/fabric.js/pull/3381) +- Fix: Correct rendering of bg color for styled text and correct clearing of itext area. [#3388](https://github.com/kangax/fabric.js/pull/3388) +- Add: Fire mouse:over on the canvas when we enter the canvas from outside the element. [#3388](https://github.com/kangax/fabric.js/pull/3389) +- Fix: Fix calculation of words width with spaces and justify. [#3408](https://github.com/kangax/fabric.js/pull/3408) +- Fix: Do not export defaults properties for bg and overlay if requested. [#3415](https://github.com/kangax/fabric.js/pull/3415) +- Fix: Change export toObect to always delete default properties if requested. [#3416](https://github.com/kangax/fabric.js/pull/3416) + **Version 1.6.6** - Add: Contrast and Saturate filters [#3341](https://github.com/kangax/fabric.js/pull/3341) diff --git a/HEADER.js b/HEADER.js index 51e45d5c950..a8fa8fda139 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ -/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ + /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.6.6" }; +var fabric = fabric || { version: "1.6.7" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/dist/fabric.js b/dist/fabric.js index 9057c3257c6..d5659540411 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=json,gestures minifier=uglifyjs` */ -/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ + /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.6.6" }; +var fabric = fabric || { version: "1.6.7" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -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; @@ -12157,12 +12220,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati 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; }, @@ -12183,7 +12246,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati _removeDefaultValues: function(object) { var prototype = fabric.util.getKlass(object.type).prototype, stateProperties = prototype.stateProperties; - stateProperties.forEach(function(prop) { if (object[prop] === prototype[prop]) { delete object[prop]; @@ -15089,11 +15151,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @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_ */ @@ -15487,10 +15545,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @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_ */ @@ -15752,14 +15807,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @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 - }); - if (!this.includeDefaultValues) { - this._removeDefaultValues(object); - } - return object; + return this.callSuper('toObject', ['rx', 'ry'].concat(propertiesToInclude)); }, /* _TO_SVG_START_ */ @@ -16740,16 +16788,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @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; }, @@ -17388,12 +17429,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @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; }, @@ -18328,24 +18366,19 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot 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; - if (!this.includeDefaultValues) { - this._removeDefaultValues(object); - } - return object; }, @@ -20878,12 +20911,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(); }, /** @@ -20935,7 +20967,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag '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, @@ -21432,7 +21463,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag // stretch the line var words = line.split(/\s+/), charOffset = 0, - wordsWidth = this._getWidthOfWords(ctx, words.join(''), lineIndex, 0), + wordsWidth = this._getWidthOfWords(ctx, words.join(' '), lineIndex, 0), widthDiff = this.width - wordsWidth, numSpaces = words.length - 1, spaceWidth = numSpaces > 0 ? widthDiff / numSpaces : 0, @@ -21804,22 +21835,19 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @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 - }); - if (!this.includeDefaultValues) { - this._removeDefaultValues(object); - } - return object; + var additionalProperties = [ + 'text', + 'fontSize', + 'fontWeight', + 'fontFamily', + 'fontStyle', + 'lineHeight', + 'textDecoration', + 'textAlign', + 'textBackgroundColor', + 'charSpacing' + ].concat(propertiesToInclude); + return this.callSuper('toObject', additionalProperties); }, /* _TO_SVG_START_ */ @@ -22457,13 +22485,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 +22508,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 +22535,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 +22555,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 +23015,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 ); } @@ -23272,16 +23325,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * @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) }); } }); @@ -25635,9 +25680,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot * @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)); } }); /** diff --git a/dist/fabric.min.js b/dist/fabric.min.js index ae1a1e80ea9..7061e98a161 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])); +var fabric=fabric||{version:"1.6.7"};"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 E=Math.ceil(Math.abs(I/f*2)),D=[],L=I/E,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 e.util.populateWithProperties(this,n,t),this.includeDefaultValues||(n=this._removeDefaultValues(n)),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 this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},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 this.callSuper("toObject",["rx","ry"].concat(t))},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){return this.callSuper("toObject",["rx","ry"].concat(t))},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",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()})});return 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,E;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 D=k.y-w;D<=k.y+w;D++)D<0||D>=o||(E=r(1e3*s(D-T.y)),O[I][E]||(O[I][E]=m(n(i(I*x,2)+i(E*S,2))/1e3)),u=O[I][E],u>0&&(d=4*(D*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&&(D=4*(E+M*e),k+=x*p[D+3],C+=x,p[D+3]<255&&(x=x*p[D+3]/250),w+=x*p[D],O+=x*p[D+1],T+=x*p[D+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=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",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,s,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,s,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,r){var n=new e.Text(t.text,i(t));return r&&r(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..af3fab50ffab25650b4bf708f13141bc424c43d9 100644 GIT binary patch delta 66210 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

0lIbD3TOILJ583QS%Mb_!=zVe@)J2 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%0Ap-7``nf0 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 delta 66247 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

K`;(U^t(V=2U(l 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 6767b8e38e3..0f16dd9e4e5 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,5 +1,5 @@ var fabric = fabric || { - version: "1.6.6" + version: "1.6.7" }; if (typeof exports !== "undefined") { @@ -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)) { @@ -5900,10 +5928,10 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { skewX: toFixed(this.skewX, NUM_FRACTION_DIGITS), 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; }, toDatalessObject: function(propertiesToInclude) { @@ -7271,11 +7299,7 @@ fabric.util.object.extend(fabric.Object.prototype, { return this; }, 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)); }, toSVG: function(reviver) { var markup = this._createBaseSVGMarkup(), x = 0, y = 0, angle = (this.endAngle - this.startAngle) % (2 * pi); @@ -7422,10 +7446,7 @@ fabric.util.object.extend(fabric.Object.prototype, { return this.get("ry") * this.get("scaleY"); }, 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)); }, toSVG: function(reviver) { var markup = this._createBaseSVGMarkup(), x = 0, y = 0; @@ -7524,14 +7545,7 @@ fabric.util.object.extend(fabric.Object.prototype, { ctx.closePath(); }, toObject: function(propertiesToInclude) { - var object = extend(this.callSuper("toObject", propertiesToInclude), { - rx: this.get("rx") || 0, - ry: this.get("ry") || 0 - }); - if (!this.includeDefaultValues) { - this._removeDefaultValues(object); - } - return object; + return this.callSuper("toObject", [ "rx", "ry" ].concat(propertiesToInclude)); }, toSVG: function(reviver) { var markup = this._createBaseSVGMarkup(), x = this.left, y = this.top; @@ -7977,18 +7991,11 @@ fabric.util.object.extend(fabric.Object.prototype, { return "#"; }, toObject: function(propertiesToInclude) { - var o = extend(this.callSuper("toObject", propertiesToInclude), { + var o = extend(this.callSuper("toObject", [ "sourcePath", "pathOffset" ].concat(propertiesToInclude)), { path: this.path.map(function(item) { return item.slice(); - }), - pathOffset: this.pathOffset + }) }); - if (this.sourcePath) { - o.sourcePath = this.sourcePath; - } - if (this.transformMatrix) { - o.transformMatrix = this.transformMatrix; - } return o; }, toDatalessObject: function(propertiesToInclude) { @@ -8341,12 +8348,9 @@ fabric.util.object.extend(fabric.Object.prototype, { return this.callSuper("_set", prop, value); }, 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; }, toDatalessObject: function(propertiesToInclude) { @@ -8791,20 +8795,13 @@ fabric.util.object.extend(fabric.Object.prototype, { this.resizeFilters.forEach(function(filterObj) { filterObj && resizeFilters.push(filterObj.toObject()); }); - var object = extend(this.callSuper("toObject", propertiesToInclude), { + var object = extend(this.callSuper("toObject", [ "crossOrigin", "alignX", "alignY", "meetOrSlice" ].concat(propertiesToInclude)), { src: this.getSrc(), filters: filters, - resizeFilters: resizeFilters, - crossOrigin: this.crossOrigin, - alignX: this.alignX, - alignY: this.alignY, - meetOrSlice: this.meetOrSlice + resizeFilters: resizeFilters }); object.width /= scaleX; object.height /= scaleY; - if (!this.includeDefaultValues) { - this._removeDefaultValues(object); - } return object; }, toSVG: function(reviver) { @@ -9883,7 +9880,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; @@ -9908,7 +9904,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ (function(global) { "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, MIN_TEXT_WIDTH = 2; + var fabric = global.fabric || (global.fabric = {}), clone = fabric.util.object.clone, toFixed = fabric.util.toFixed, NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS, MIN_TEXT_WIDTH = 2; if (fabric.Text) { fabric.warn("fabric.Text is already defined"); return; @@ -10037,7 +10033,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ this._renderChars(method, ctx, line, left, top, lineIndex); return; } - var words = line.split(/\s+/), charOffset = 0, wordsWidth = this._getWidthOfWords(ctx, words.join(""), lineIndex, 0), widthDiff = this.width - wordsWidth, numSpaces = words.length - 1, spaceWidth = numSpaces > 0 ? widthDiff / numSpaces : 0, leftOffset = 0, word; + var words = line.split(/\s+/), charOffset = 0, wordsWidth = this._getWidthOfWords(ctx, words.join(" "), lineIndex, 0), widthDiff = this.width - wordsWidth, numSpaces = words.length - 1, spaceWidth = numSpaces > 0 ? widthDiff / numSpaces : 0, leftOffset = 0, word; for (var i = 0, len = words.length; i < len; i++) { while (line[charOffset] === " " && charOffset < line.length) { charOffset++; @@ -10241,22 +10237,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ return this.text.split(this._reNewline); }, 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 - }); - if (!this.includeDefaultValues) { - this._removeDefaultValues(object); - } - return object; + var additionalProperties = [ "text", "fontSize", "fontWeight", "fontFamily", "fontStyle", "lineHeight", "textDecoration", "textAlign", "textBackgroundColor", "charSpacing" ].concat(propertiesToInclude); + return this.callSuper("toObject", additionalProperties); }, toSVG: function(reviver) { if (!this.ctx) { @@ -10489,20 +10471,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 +10521,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 +10763,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; } @@ -10920,16 +10918,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ return height; }, 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) }); } }); @@ -12260,9 +12250,7 @@ fabric.util.object.extend(fabric.IText.prototype, { return Math.max(this.minWidth, this.dynamicMinWidth); }, toObject: function(propertiesToInclude) { - return fabric.util.object.extend(this.callSuper("toObject", propertiesToInclude), { - minWidth: this.minWidth - }); + return this.callSuper("toObject", [ "minWidth" ].concat(propertiesToInclude)); } }); fabric.Textbox.fromObject = function(object, callback) { diff --git a/package.json b/package.json index bb76ec708bc..20d45eff92d 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ -{ + { "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", "homepage": "http://fabricjs.com/", - "version": "1.6.6", + "version": "1.6.7", "author": "Juriy Zaytsev ", "contributors": [ {