From 7f3e290095698f42c05ae5097489a1ad11378941 Mon Sep 17 00:00:00 2001 From: Asturur Date: Mon, 24 Apr 2017 02:18:01 +0200 Subject: [PATCH 1/2] v1.7.10 --- CHANGELOG.md | 13 +++ HEADER.js | 2 +- ISSUE_TEMPLATE.md | 2 +- dist/fabric.js | 284 ++++++++++++++++++++++++++++++++++++------------- dist/fabric.min.js | 18 ++-- dist/fabric.min.js.gz | Bin 69961 -> 70354 bytes dist/fabric.require.js | 202 ++++++++++++++++++++++++----------- package.json | 2 +- 8 files changed, 375 insertions(+), 148 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a8353180..b136265d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +**Version 1.7.10** + +- Fix: correct svg export for radial gradients [#3807](https://github.com/kangax/fabric.js/pull/3807) +- Fix: Update fireout events to export the event object [#3853](https://github.com/kangax/fabric.js/pull/3853) +- Fix: Improve callSuper to avoid infinite loops (not all of them) [#3844](https://github.com/kangax/fabric.js/pull/3844) +- Fix: avoid selectionBackgroundColor leak on toDataUrl [#3862](https://github.com/kangax/fabric.js/pull/3862) +- Fix: toDatelessObject for Group [#3863](https://github.com/kangax/fabric.js/pull/3863) +- Improvement: better caching logic for groups [#3864](https://github.com/kangax/fabric.js/pull/3864) +- Fix: correct svg gradient export for radial in polygons [#3866](https://github.com/kangax/fabric.js/pull/3866) +- Fix: First draw could be empty for some objects [#3870](https://github.com/kangax/fabric.js/pull/3870) +- Fix: Always send event data to object:selected [#3871](https://github.com/kangax/fabric.js/pull/3871) +- Improvement: reduce angle calculation error [#3872](https://github.com/kangax/fabric.js/pull/3872) + **Version 1.7.9** - Fix: Avoid textarea wrapping from chome v57+ [#3804](https://github.com/kangax/fabric.js/pull/3804) diff --git a/HEADER.js b/HEADER.js index 3d06b294a..33eb499c6 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.7.9" }; +var fabric = fabric || { version: "1.7.10" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 97897e2a1..cb7002c1c 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -25,7 +25,7 @@ Remove the template from below and provide thoughtful commentary *and code sampl ## Version -1.7.8 +1.7.10 ## Test Case http://jsfiddle.net/fabricjs/Da7SP/ diff --git a/dist/fabric.js b/dist/fabric.js index 13b54c472..665aa7d8d 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) */ -var fabric = fabric || { version: "1.7.9" }; +var fabric = fabric || { version: "1.7.10" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -874,7 +874,7 @@ fabric.CommonMethods = { object = new fabric.PathGroup(elements, options); if (typeof path !== 'undefined') { - object.setSourcePath(path); + object.sourcePath = path; } return object; }, @@ -1920,10 +1920,27 @@ fabric.CommonMethods = { function Subclass() { } function callSuper(methodName) { - var fn = this.constructor.superclass.prototype[methodName]; + var parentMethod = null, + _this = this; + + // climb prototype chain to find method not equal to callee's method + while (_this.constructor.superclass) { + var superClassMethod = _this.constructor.superclass.prototype[methodName]; + if (_this[methodName] !== superClassMethod) { + parentMethod = superClassMethod; + break; + } + // eslint-disable-next-line + _this = _this.constructor.superclass.prototype; + } + + if (!parentMethod) { + return console.log('tried to callSuper ' + methodName + ', method not found in prototype chain', this); + } + return (arguments.length > 1) - ? fn.apply(this, slice.call(arguments, 1)) - : fn.call(this); + ? parentMethod.apply(this, slice.call(arguments, 1)) + : parentMethod.call(this); } /** @@ -5376,6 +5393,8 @@ fabric.ElementsParser.prototype.checkIfDone = function() { } /* _FROM_SVG_END_ */ + var clone = fabric.util.object.clone; + /** * Gradient class * @class fabric.Gradient @@ -5440,7 +5459,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { for (var position in colorStops) { var color = new fabric.Color(colorStops[position]); this.colorStops.push({ - offset: position, + offset: parseFloat(position), color: color.toRgb(), opacity: color.getAlpha() }); @@ -5474,17 +5493,17 @@ fabric.ElementsParser.prototype.checkIfDone = function() { * @return {String} SVG representation of an gradient (linear/radial) */ toSVG: function(object) { - var coords = fabric.util.object.clone(this.coords), - markup, commonAttributes; - + var coords = clone(this.coords, true), + markup, commonAttributes, colorStops = clone(this.colorStops, true), + needsSwap = coords.r1 > coords.r2; // colorStops must be sorted ascending - this.colorStops.sort(function(a, b) { + colorStops.sort(function(a, b) { return a.offset - b.offset; }); if (!(object.group && object.group.type === 'path-group')) { for (var prop in coords) { - if (prop === 'x1' || prop === 'x2' || prop === 'r2') { + if (prop === 'x1' || prop === 'x2') { coords[prop] += this.offsetX - object.width / 2; } else if (prop === 'y1' || prop === 'y2') { @@ -5510,24 +5529,46 @@ fabric.ElementsParser.prototype.checkIfDone = function() { ]; } else if (this.type === 'radial') { + // svg radial gradient has just 1 radius. the biggest. markup = [ '\n' ]; } - for (var i = 0; i < this.colorStops.length; i++) { + if (this.type === 'radial') { + if (needsSwap) { + // svg goes from internal to external radius. if radius are inverted, swap color stops. + colorStops = colorStops.concat(); + colorStops.reverse(); + for (var i = 0; i < colorStops.length; i++) { + colorStops[i].offset = 1 - colorStops[i].offset; + } + } + var minRadius = Math.min(coords.r1, coords.r2); + if (minRadius > 0) { + // i have to shift all colorStops and add new one in 0. + var maxRadius = Math.max(coords.r1, coords.r2), + percentageShift = minRadius / maxRadius; + for (var i = 0; i < colorStops.length; i++) { + colorStops[i].offset += percentageShift * (1 - colorStops[i].offset); + } + } + } + + for (var i = 0; i < colorStops.length; i++) { + var colorStop = colorStops[i]; markup.push( '\n' ); } @@ -5579,7 +5620,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { if (typeof opacity !== 'undefined') { color = new fabric.Color(color).setAlpha(opacity).toRgba(); } - gradient.addColorStop(parseFloat(offset), color); + gradient.addColorStop(offset, color); } return gradient; @@ -9497,13 +9538,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab angle = radiansToDegrees(curAngle - lastAngle + t.theta), hasRoated = true; - // normalize angle to positive value - if (angle < 0) { - angle = 360 + angle; - } - - angle %= 360; - if (t.target.snapAngle > 0) { var snapAngle = t.target.snapAngle, snapThreshold = t.target.snapThreshold || snapAngle, @@ -9516,13 +9550,21 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab else if (Math.abs(angle - rightAngleLocked) < snapThreshold) { angle = rightAngleLocked; } + } - if (t.target.angle === angle) { - hasRoated = false; - } + // normalize angle to positive value + if (angle < 0) { + angle = 360 + angle; + } + angle %= 360; + + if (t.target.angle === angle) { + hasRoated = false; + } + else { + t.target.angle = angle; } - t.target.angle = angle; return hasRoated; }, @@ -9657,16 +9699,16 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab if (this._hoveredTarget !== target) { if (this._hoveredTarget) { this.fire('mouse:out', { target: this._hoveredTarget, e: e }); - this._hoveredTarget.fire('mouseout'); + this._hoveredTarget.fire('mouseout', { e: e }); } this.fire('mouse:over', { target: target, e: e }); - target.fire('mouseover'); + target.fire('mouseover', { e: e }); this._hoveredTarget = target; } } else if (this._hoveredTarget) { this.fire('mouse:out', { target: this._hoveredTarget, e: e }); - this._hoveredTarget.fire('mouseout'); + this._hoveredTarget.fire('mouseout', { e: e }); this._hoveredTarget = null; } }, @@ -11104,7 +11146,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab // remove group alltogether if after removal it only contains 1 object this.discardActiveGroup(e); // activate last remaining object - this.setActiveObject(activeGroup.item(0)); + this.setActiveObject(activeGroup.item(0), e); return; } } @@ -11125,7 +11167,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab var group = this._createGroup(target); group.addWithUpdate(); - this.setActiveGroup(group); + this.setActiveGroup(group, e); this._activeObject = null; this.fire('selection:created', { target: group, e: e }); @@ -11170,7 +11212,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab group.addWithUpdate(); this.setActiveGroup(group, e); group.saveCoords(); - this.fire('selection:created', { target: group }); + this.fire('selection:created', { target: group, e: e }); this.renderAll(); } }, @@ -12388,9 +12430,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * When set to `true`, object's cache will be rerendered next render call. * since 1.7.0 * @type Boolean - * @default false + * @default true */ - dirty: false, + dirty: true, /** * When set to `true`, force the object to have its own cache, even if it is inside a group @@ -12435,7 +12477,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati } if (this.objectCaching) { this._createCacheCanvas(); - this.setupState({ propertySet: 'cacheProperties' }); } }, @@ -12444,6 +12485,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @private */ _createCacheCanvas: function() { + this._cacheProperties = {}; this._cacheCanvas = fabric.document.createElement('canvas'); this._cacheContext = this._cacheCanvas.getContext('2d'); this._updateCacheCanvas(); @@ -12750,7 +12792,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati ctx.transform.apply(ctx, this.transformMatrix); } this.clipTo && fabric.util.clipContext(this, ctx); - if (this.objectCaching && (!this.group || this.needsItsOwnCache)) { + if (this.shouldCache()) { if (!this._cacheCanvas) { this._createCacheCanvas(); } @@ -12772,6 +12814,28 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati }, /** + * Decide if the object should cache or not. + * objectCaching is a global flag, wins over everything + * needsItsOwnCache should be used when the object drawing method requires + * a cache step. None of the fabric classes requires it. + * Generally you do not cache objects in groups because the group outside is cached. + * @return {Boolean} + */ + shouldCache: function() { + return this.objectCaching && + (!this.group || this.needsItsOwnCache || !this.group.isCaching()); + }, + + /** + * Check if this object or a child object will cast a shadow + * used by Group.shouldCache to know if child has a shadow recursively + * @return {Boolean} + */ + willDrawShadow: function() { + return !!this.shadow; + }, + + /** * Execute the drawing operation for an object on a specified context * @param {CanvasRenderingContext2D} ctx Context to render on * @param {Boolean} [noTransform] When true, context is not transformed @@ -12892,11 +12956,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati /** * Renders controls and borders for the object * @param {CanvasRenderingContext2D} ctx Context to render on - * @param {Boolean} [noTransform] When true, context is not transformed */ - _renderControls: function(ctx, noTransform) { - if (!this.active || noTransform - || (this.group && this.group !== this.canvas.getActiveGroup())) { + _renderControls: function(ctx) { + if (!this.active || (this.group && this.group !== this.canvas.getActiveGroup())) { return; } @@ -13697,6 +13759,13 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati */ _getLeftTopCoords: function() { return this.translateToOriginPoint(this.getCenterPoint(), 'left', 'top'); + }, + + /** + * Callback; invoked right before object is about to go from active to inactive + */ + onDeselect: function() { + /* NOOP */ } }); @@ -14155,6 +14224,10 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati _calcRotateMatrix: function() { if (this.angle) { var theta = degreesToRadians(this.angle), cos = Math.cos(theta), sin = Math.sin(theta); + // trying to keep rounding error small, ugly but it works. + if (cos === 6.123233995736766e-17 || cos === -1.8369701987210297e-16) { + cos = 0; + } return [cos, sin, -sin, cos, 0, 0]; } return fabric.iMatrix.concat(); @@ -14552,6 +14625,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot hasStateChanged: function(propertySet) { propertySet = propertySet || originalSet; propertySet = '_' + propertySet; + if (!Object.keys(this[propertySet]).length) { + return true; + } return !_isEqual(this[propertySet], this, true); }, @@ -14703,12 +14779,14 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * Draws a colored layer behind the object, inside its selection borders. * Requires public options: padding, selectionBackgroundColor * this function is called when the context is transformed + * has checks to be skipped when the object is on a staticCanvas * @param {CanvasRenderingContext2D} ctx Context to draw on * @return {fabric.Object} thisArg * @chainable */ drawSelectionBackground: function(ctx) { - if (!this.selectionBackgroundColor || this.group || !this.active) { + if (!this.selectionBackgroundColor || this.group || !this.active || + (this.canvas && !this.canvas.interactive)) { return this; } ctx.save(); @@ -16380,7 +16458,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot extend = fabric.util.object.extend, min = fabric.util.array.min, max = fabric.util.array.max, - toFixed = fabric.util.toFixed; + toFixed = fabric.util.toFixed, + NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; if (fabric.Polyline) { fabric.warn('fabric.Polyline is already defined'); @@ -16499,20 +16578,25 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {String} svg representation of an instance */ toSVG: function(reviver) { - var points = [], addTransform, + var points = [], diffX, diffY, markup = this._createBaseSVGMarkup(); - for (var i = 0, len = this.points.length; i < len; i++) { - points.push(toFixed(this.points[i].x, 2), ',', toFixed(this.points[i].y, 2), ' '); - } if (!(this.group && this.group.type === 'path-group')) { - addTransform = ' translate(' + (-this.pathOffset.x) + ', ' + (-this.pathOffset.y) + ') '; + diffX = this.pathOffset.x; + diffY = this.pathOffset.y; + } + + for (var i = 0, len = this.points.length; i < len; i++) { + points.push( + toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS), ',', + toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS), ' ' + ); } markup.push( '<', this.type, ' ', this.getSvgId(), 'points="', points.join(''), '" style="', this.getSvgStyles(), - '" transform="', this.getSvgTransform(), addTransform, + '" transform="', this.getSvgTransform(), ' ', this.getSvgTransformMatrix(), '"/>\n' ); @@ -16834,12 +16918,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this._setPositionDimensions(options); - if (options.sourcePath) { - this.setSourcePath(options.sourcePath); - } if (this.objectCaching) { this._createCacheCanvas(); - this.setupState({ propertySet: 'cacheProperties' }); } }, @@ -17766,12 +17846,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } this.setOptions(options); this.setCoords(); - if (options.sourcePath) { - this.setSourcePath(options.sourcePath); - } if (this.objectCaching) { this._createCacheCanvas(); - this.setupState({ propertySet: 'cacheProperties' }); } }, @@ -17970,7 +18046,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot fabric.PathGroup.fromObject = function(object, callback) { var originalPaths = object.paths; delete object.paths; - // remove this pattern from 2.0 accepts only object if (typeof originalPaths === 'string') { fabric.loadSVGFromURL(originalPaths, function (elements) { var pathUrl = originalPaths; @@ -18078,8 +18153,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this._objects[i].group = this; } - this.originalState = { }; - if (options.originX) { this.originX = options.originX; } @@ -18271,6 +18344,24 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot }, /** + * Returns object representation of an instance, in dataless mode. + * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output + * @return {Object} object representation of an instance + */ + toDatalessObject: function(propertiesToInclude) { + var objsToObject = this.getObjects().map(function(obj) { + var originalDefaults = obj.includeDefaultValues; + obj.includeDefaultValues = obj.group.includeDefaultValues; + var _obj = obj.toDatalessObject(propertiesToInclude); + obj.includeDefaultValues = originalDefaults; + return _obj; + }); + return extend(this.callSuper('toDatalessObject', propertiesToInclude), { + objects: objsToObject + }); + }, + + /** * Renders instance on a given context * @param {CanvasRenderingContext2D} ctx context to render instance on */ @@ -18281,6 +18372,52 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot }, /** + * Decide if the object should cache or not. + * objectCaching is a global flag, wins over everything + * needsItsOwnCache should be used when the object drawing method requires + * a cache step. None of the fabric classes requires it. + * Generally you do not cache objects in groups because the group outside is cached. + * @return {Boolean} + */ + shouldCache: function() { + var parentCache = this.objectCaching && (!this.group || this.needsItsOwnCache || !this.group.isCaching()); + this.caching = parentCache; + if (parentCache) { + for (var i = 0, len = this._objects.length; i < len; i++) { + if (this._objects[i].willDrawShadow()) { + this.caching = false; + return false; + } + } + } + return parentCache; + }, + + /** + * Check if this object or a child object will cast a shadow + * @return {Boolean} + */ + willDrawShadow: function() { + if (this.shadow) { + return true; + } + for (var i = 0, len = this._objects.length; i < len; i++) { + if (this._objects[i].willDrawShadow()) { + return true; + } + } + return false; + }, + + /** + * Check if this group or its parent group are caching, recursively up + * @return {Boolean} + */ + isCaching: function() { + return this.caching || this.group && this.group.isCaching(); + }, + + /** * Execute the drawing operation for an object on a specified context * @param {CanvasRenderingContext2D} ctx Context to render on * @param {Boolean} [noTransform] When true, context is not transformed @@ -21929,7 +22066,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { */ _renderChars: function(method, ctx, chars, left, top) { // remove Text word from method var - var shortM = method.slice(0, -4), char, width; + var shortM = method.slice(0, -4), _char, width; if (this[shortM].toLive) { var offsetX = -this.width / 2 + this[shortM].offsetX || 0, offsetY = -this.height / 2 + this[shortM].offsetY || 0; @@ -21943,8 +22080,8 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { chars = chars.split(''); for (var i = 0, len = chars.length; i < len; i++) { char = chars[i]; - width = ctx.measureText(char).width + additionalSpace; - ctx[method](char, left, top); + width = ctx.measureText(_char).width + additionalSpace; + ctx[method](_char, left, top); left += width > 0 ? width : 0; } } @@ -23386,11 +23523,11 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { additionalSpace = this._getWidthOfCharSpacing(); chars = _char.split(''); charWidth = 0; - for (var j = 0, len = chars.length, char; j < len; j++) { - char = chars[j]; - shouldFill && ctx.fillText(char, left + charWidth, top); - shouldStroke && ctx.strokeText(char, left + charWidth, top); - _charWidth = ctx.measureText(char).width + additionalSpace; + for (var j = 0, len = chars.length, jChar; j < len; j++) { + jChar = chars[j]; + shouldFill && ctx.fillText(jChar, left + charWidth, top); + shouldStroke && ctx.strokeText(jChar, left + charWidth, top); + _charWidth = ctx.measureText(jChar).width + additionalSpace; charWidth += _charWidth > 0 ? _charWidth : 0; } } @@ -23889,6 +24026,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { onDeselect: function() { this.isEditing && this.exitEditing(); this.selected = false; + this.callSuper('onDeselect'); }, /** diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 3e9096624..c6328d354 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,9 +1,9 @@ -var fabric=fabric||{version:"1.7.9"};"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(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E")),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.iMatrix=[1,0,0,1,0,0],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)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);"undefined"!=typeof e&&(this.clipTo=new Function("ctx",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,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},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?D-=2*f:1===c&&D<0&&(D+=2*f);for(var E=Math.ceil(Math.abs(D/f*2)),I=[],L=D/E,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=A+L,R=0;R=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,C=Math.abs,S=[],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),C(u)<1e-12){if(C(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){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=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 _;if((f||d)&&(x=" translate("+y(f)+" "+y(d)+") "),r=x+" 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), -_}function g(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}var p=t.fabric||(t.fabric={}),v=p.util.object.extend,b=p.util.object.clone,m=p.util.toFixed,y=p.util.parseUnit,_=p.util.multiplyTransformMatrices,x=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,C=/^(symbol|image|marker|pattern|view|svg)$/i,S=/^(?:pattern|defs|symbol|metadata|clipPath|mask)$/i,w=/^(symbol|g|a|svg)$/i,O={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",opacity:"opacity"},T={stroke:"strokeOpacity",fill:"fillOpacity"};p.cssRules={},p.gradientDefs={},p.parseTransformAttribute=function(){function t(t,e){var i=Math.cos(e[0]),r=Math.sin(e[0]),n=0,s=0;3===e.length&&(n=e[1],s=e[2]),t[0]=i,t[1]=r,t[2]=-r,t[3]=i,t[4]=n-(i*n-r*s),t[5]=s-(r*n+i*s)}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,i){t[i]=Math.tan(p.util.degreesToRadians(e[0]))}function r(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var n=[1,0,0,1,0,0],s=p.reNum,o="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+s+")\\s*\\))",h="(?:(skewY)\\s*\\(\\s*("+s+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+")"+o+"("+s+"))?\\s*\\))",l="(?:(scale)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",u="(?:(translate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",f="(?:(matrix)\\s*\\(\\s*("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")\\s*\\))",d="(?:"+f+"|"+u+"|"+l+"|"+c+"|"+a+"|"+h+")",g="(?:"+d+"(?:"+o+"*"+d+")*)",v="^\\s*(?:"+g+"?)\\s*$",b=new RegExp(v),m=new RegExp(d,"g");return function(s){var o=n.concat(),a=[];if(!s||s&&!b.test(s))return o;s.replace(m,function(s){var h=new RegExp(d).exec(s).filter(function(t){return!!t}),c=h[1],l=h.slice(2).map(parseFloat);switch(c){case"translate":r(o,l);break;case"rotate":l[0]=p.util.degreesToRadians(l[0]),t(o,l);break;case"scale":e(o,l);break;case"skewX":i(o,l,2);break;case"skewY":i(o,l,1);break;case"matrix":o=l}a.push(o.concat()),o=n.concat()});for(var h=a[0];a.length>1;)a.shift(),h=p.util.multiplyTransformMatrices(h,a[0]);return h}}();var j=new RegExp("^\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*$");p.parseSVGDocument=function(t,e,i,r){if(t){f(t);var n=p.Object.__uid++,s=d(t),o=p.util.toArray(t.getElementsByTagName("*"));if(s.crossOrigin=r&&r.crossOrigin,s.svgUid=n,0===o.length&&p.isLikelyNode){o=t.selectNodes('//*[name(.)!="svg"]');for(var a=[],h=0,c=o.length;h/i,""))),n&&n.documentElement||e&&e(null),p.parseSVGDocument(n.documentElement,function(t,i){e&&e(t,i)},i,r)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:n})},loadSVGFromString:function(t,e,i,r){t=t.trim();var n;if("undefined"!=typeof DOMParser){var s=new DOMParser;s&&s.parseFromString&&(n=s.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t.replace(//i,"")));p.parseSVGDocument(n.documentElement,function(t,i){e(t,i)},i,r)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r,n){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0,this.parsingOptions=n},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(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},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'},setOptions:function(t){for(var e in t)this[e]=t[e]},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=fabric.util.transformPoint,s=fabric.util.invertTransform,o=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass(fabric.CommonMethods,{initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!1,_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){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw o;if("undefined"==typeof e.getContext)throw o;return e},_initOptions:function(t){this._setOptions(t),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 this.viewportTransform[0]},setViewportTransform:function(t){var e,i=this._activeGroup,r=!1,n=!0;this.viewportTransform=t;for(var s=0,o=this._objects.length;s"),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","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),"\n")},createSVGRefElementsMarkup:function(){var t=this,e=["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)});return e.join("")},createSVGFontFacesMarkup:function(){for(var t,e,i,r,n,s,o,a="",h={},c=fabric.fontPaths,l=this.getObjects(),u=0,f=l.length;u',"\n",a,"","\n"].join("")),a},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n")}else 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,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_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&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s: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&&s===this._searchPossibleTargets([s],n))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&o===this._searchPossibleTargets([o],n)){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,"touch-action":"none"}),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){var e=this._activeObject;e&&(e.set("active",!1),t!==e&&e.onDeselect&&"function"==typeof e.onDeselect&&e.onDeselect()),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){var i=this.getActiveObject();return i&&i!==t&&i.fire("deselected",{e:e}),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._hoveredTarget===t&&(this._hoveredTarget=null),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){var t=this._activeObject;t&&(t.set("active",!1),t.onDeselect&&"function"==typeof t.onDeselect&&t.onDeselect()),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return e&&(this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),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 e&&(this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t})),this},deactivateAll:function(){for(var t,e=this.getObjects(),i=0,r=e.length;i1)){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._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],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=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||!e.selectable)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!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,n._setOptions(r),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)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_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.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{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,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!1,needsItsOwnCache:!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(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t),this.objectCaching&&(this._createCacheCanvas(),this.setupState({propertySet:"cacheProperties"}))},_createCacheCanvas:function(){this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this._getNonTransformedDimensions(),n=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,s=i.scaleX*t*n,o=i.scaleY*t*n,a=r.x*s,h=r.y*o;return{width:a+2,height:h+2,zoomX:s,zoomY:o}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.action;if("scale"===t.slice(0,5))return!1}var e=this._getCacheCanvasDimensions(),i=e.width,r=e.height,n=e.zoomX,s=e.zoomY;return(i!==this.cacheWidth||r!==this.cacheHeight)&&(this._cacheCanvas.width=Math.ceil(i),this._cacheCanvas.height=Math.ceil(r),this._cacheContext.translate(i/2,r/2),this._cacheContext.scale(n,s),this.cacheWidth=i,this.cacheHeight=r,this.zoomX=n,this.zoomY=s,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},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),this.angle&&t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),this.skewX&&t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),this.skewY&&t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(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:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(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():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},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"#"},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}},_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?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},render:function(t,i){0===this.width&&0===this.height||!this.visible||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),!this.objectCaching||this.group&&!this.needsItsOwnCache?(this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})):(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)),this.clipTo&&t.restore(),t.restore())},drawObject:function(t,e){this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._render(t,e)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheWidth/2,-this.cacheHeight/2)},isCacheDirty:function(t){if(!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(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),a?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(),s=this.calcTransformMatrix();s=e.util.multiplyTransformMatrices(n,s),r=e.util.qrDecompose(s),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(o(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)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),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 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return 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),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),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,o(-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._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]);var e=o?new a(i[o],i):new a(i);n&&n(e)})},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,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_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(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||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 fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_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)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{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("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("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;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_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)}}),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},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,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){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&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("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,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;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&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)}}),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},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,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");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(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("")}}),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,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var o=e.Object.prototype.cacheProperties.concat();o.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:o,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){for(var e,i=[],r=this._createBaseSVGMarkup(),n=0,o=this.points.length;n\n'),t?t(r.join("")):r.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});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){var r=t.paths;delete t.paths,"string"==typeof r?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},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;if(!e.Group){var s={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.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},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.dirty=!0,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.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,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){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},drawObject:function(t){for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){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()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},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[S*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=e.Image.filters.BaseFilter.fromObject}("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,k,M,P,A,D,E;for(T.x=(t+.5)*y,j.x=r(T.x),h=0;h=e)){D=r(1e3*s(c-T.x)),O[D]||(O[D]={});for(var I=j.y-w;I<=j.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[D][E]||(O[D][E]=m(n(i(D*x,2)+i(E*C,2))/1e3)),u=O[D][E],u>0&&(d=4*(I*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],P+=u*v[d+2],A+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=P/g,b[d+3]=A/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(I=4*(E+M*e),j+=x*p[I+3],S+=x,p[I+3]<255&&(x=x*p[I+3]/250),w+=x*p[I],O+=x*p[I+1],T+=x*p[I+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=j/S}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=e.Image.filters.BaseFilter.fromObject}("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'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=2*this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_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},_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;t.fillStyle=s,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=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),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&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e)))},_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,n,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,n,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),this._dimensionAffectingProps.indexOf(t)>-1&&(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,r){return e.Object._fromObject("Text",t,i,r,"text")},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=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);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?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.restartCursorIfNeeded(),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=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.hiddenTextarea.blur&&this.hiddenTextarea.blur(),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&&(o=!0,s[h-i]=this.styles[e][a],delete this.styles[e][a])}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])}var h=r||t(n[i-1]);h&&(this.styles[e][i]=h),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 r){var s=parseInt(n,10);s<=e&&delete r[s]}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.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.isEditing&&(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="white-space: nowrap; position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 1px; height: 1px; 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(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):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.set("dirty",!0),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={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),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(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},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())},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,e){var i=this._styleMap[t];t=i.line,fabric.IText.prototype.shiftLineStyles.call(this,t,e)},_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 +var fabric=fabric||{version:"1.7.10"};"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(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E")),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.iMatrix=[1,0,0,1,0,0],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)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);"undefined"!=typeof e&&(this.clipTo=new Function("ctx",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,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},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?P-=2*f:1===c&&P<0&&(P+=2*f);for(var I=Math.ceil(Math.abs(P/f*2)),E=[],L=P/I,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=A+L,R=0;R=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,C=Math.abs,S=[],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),C(u)<1e-12){if(C(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){for(var e=null,i=this;i.constructor.superclass;){var n=i.constructor.superclass.prototype[t];if(i[t]!==n){e=n;break}i=i.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",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){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=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 _;if((f||d)&&(x=" translate("+y(f)+" "+y(d)+") "),r=x+" 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),_}function g(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}var p=t.fabric||(t.fabric={}),v=p.util.object.extend,b=p.util.object.clone,m=p.util.toFixed,y=p.util.parseUnit,_=p.util.multiplyTransformMatrices,x=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,C=/^(symbol|image|marker|pattern|view|svg)$/i,S=/^(?:pattern|defs|symbol|metadata|clipPath|mask)$/i,w=/^(symbol|g|a|svg)$/i,O={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",opacity:"opacity"},T={stroke:"strokeOpacity",fill:"fillOpacity"};p.cssRules={},p.gradientDefs={},p.parseTransformAttribute=function(){function t(t,e){var i=Math.cos(e[0]),r=Math.sin(e[0]),n=0,s=0;3===e.length&&(n=e[1],s=e[2]),t[0]=i,t[1]=r,t[2]=-r,t[3]=i,t[4]=n-(i*n-r*s),t[5]=s-(r*n+i*s)}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,i){t[i]=Math.tan(p.util.degreesToRadians(e[0]))}function r(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var n=[1,0,0,1,0,0],s=p.reNum,o="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+s+")\\s*\\))",h="(?:(skewY)\\s*\\(\\s*("+s+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+")"+o+"("+s+"))?\\s*\\))",l="(?:(scale)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",u="(?:(translate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",f="(?:(matrix)\\s*\\(\\s*("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")\\s*\\))",d="(?:"+f+"|"+u+"|"+l+"|"+c+"|"+a+"|"+h+")",g="(?:"+d+"(?:"+o+"*"+d+")*)",v="^\\s*(?:"+g+"?)\\s*$",b=new RegExp(v),m=new RegExp(d,"g");return function(s){var o=n.concat(),a=[];if(!s||s&&!b.test(s))return o;s.replace(m,function(s){var h=new RegExp(d).exec(s).filter(function(t){return!!t}),c=h[1],l=h.slice(2).map(parseFloat);switch(c){case"translate":r(o,l);break;case"rotate":l[0]=p.util.degreesToRadians(l[0]),t(o,l);break;case"scale":e(o,l);break;case"skewX":i(o,l,2);break;case"skewY":i(o,l,1);break;case"matrix":o=l}a.push(o.concat()),o=n.concat()});for(var h=a[0];a.length>1;)a.shift(),h=p.util.multiplyTransformMatrices(h,a[0]);return h}}();var j=new RegExp("^\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*$");p.parseSVGDocument=function(t,e,i,r){if(t){f(t);var n=p.Object.__uid++,s=d(t),o=p.util.toArray(t.getElementsByTagName("*"));if(s.crossOrigin=r&&r.crossOrigin,s.svgUid=n,0===o.length&&p.isLikelyNode){o=t.selectNodes('//*[name(.)!="svg"]');for(var a=[],h=0,c=o.length;h/i,""))),n&&n.documentElement||e&&e(null),p.parseSVGDocument(n.documentElement,function(t,i){e&&e(t,i)},i,r)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:n})},loadSVGFromString:function(t,e,i,r){t=t.trim();var n;if("undefined"!=typeof DOMParser){var s=new DOMParser;s&&s.parseFromString&&(n=s.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t.replace(//i,"")));p.parseSVGDocument(n.documentElement,function(t,i){e(t,i)},i,r)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r,n){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0,this.parsingOptions=n},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}var n=fabric.util.object.clone;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:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,i,r=n(this.coords,!0),s=n(this.colorStops,!0),o=r.r1>r.r2;if(s.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var a in r)"x1"===a||"x2"===a?r[a]+=this.offsetX-t.width/2:"y1"!==a&&"y2"!==a||(r[a]+=this.offsetY-t.height/2);if(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']),"radial"===this.type){if(o){s=s.concat(),s.reverse();for(var h=0;h0)for(var l=Math.max(r.r1,r.r2),u=c/l,h=0;h\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'},setOptions:function(t){for(var e in t)this[e]=t[e]},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=fabric.util.transformPoint,s=fabric.util.invertTransform,o=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass(fabric.CommonMethods,{initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!1,_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){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw o;if("undefined"==typeof e.getContext)throw o;return e},_initOptions:function(t){this._setOptions(t),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 this.viewportTransform[0]},setViewportTransform:function(t){var e,i=this._activeGroup,r=!1,n=!0;this.viewportTransform=t;for(var s=0,o=this._objects.length;s"),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","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),"\n")},createSVGRefElementsMarkup:function(){var t=this,e=["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)});return e.join("")},createSVGFontFacesMarkup:function(){for(var t,e,i,r,n,s,o,a="",h={},c=fabric.fontPaths,l=this.getObjects(),u=0,f=l.length;u',"\n",a,"","\n"].join("")),a},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n")}else 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,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_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&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s: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(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&&s===this._searchPossibleTargets([s],n))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&o===this._searchPossibleTargets([o],n)){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",{e:e})),this.fire("mouse:over",{target:t,e:e}),t.fire("mouseover",{e:e}),this._hoveredTarget=t):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout",{e:e}),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,"touch-action":"none"}),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){var e=this._activeObject;e&&(e.set("active",!1),t!==e&&e.onDeselect&&"function"==typeof e.onDeselect&&e.onDeselect()),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){var i=this.getActiveObject();return i&&i!==t&&i.fire("deselected",{e:e}),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._hoveredTarget===t&&(this._hoveredTarget=null),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){var t=this._activeObject;t&&(t.set("active",!1),t.onDeselect&&"function"==typeof t.onDeselect&&t.onDeselect()),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return e&&(this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),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 e&&(this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t})),this},deactivateAll:function(){for(var t,e=this.getObjects(),i=0,r=e.length;i1)){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._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],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=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||!e.selectable)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!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),e)}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,e),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,e:t}),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,n._setOptions(r),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)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_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.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{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,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,needsItsOwnCache:!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(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t),this.objectCaching&&this._createCacheCanvas()},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this._getNonTransformedDimensions(),n=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,s=i.scaleX*t*n,o=i.scaleY*t*n,a=r.x*s,h=r.y*o;return{width:a+2,height:h+2,zoomX:s,zoomY:o}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.action;if("scale"===t.slice(0,5))return!1}var e=this._getCacheCanvasDimensions(),i=e.width,r=e.height,n=e.zoomX,s=e.zoomY;return(i!==this.cacheWidth||r!==this.cacheHeight)&&(this._cacheCanvas.width=Math.ceil(i),this._cacheCanvas.height=Math.ceil(r),this._cacheContext.translate(i/2,r/2),this._cacheContext.scale(n,s),this.cacheWidth=i,this.cacheHeight=r,this.zoomX=n,this.zoomY=s,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},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),this.angle&&t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),this.skewX&&t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),this.skewY&&t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(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:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(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():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},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"#"},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}},_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?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},render:function(t,i){0===this.width&&0===this.height||!this.visible||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache()?(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)):(this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},shouldCache:function(){return this.objectCaching&&(!this.group||this.needsItsOwnCache||!this.group.isCaching())},willDrawShadow:function(){return!!this.shadow},drawObject:function(t,e){this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._render(t,e)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheWidth/2,-this.cacheHeight/2)},isCacheDirty:function(t){if(!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(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),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t){if(this.active&&(!this.group||this.group===this.canvas.getActiveGroup())){var i,r=this.getViewportTransform(),n=this.calcTransformMatrix();n=e.util.multiplyTransformMatrices(r,n),i=e.util.qrDecompose(n),t.save(),t.translate(i.translateX,i.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(i.angle)),this.drawBordersInGroup(t,i)):(t.rotate(o(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)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),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 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return 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),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),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,o(-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._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]);var e=o?new a(i[o],i):new a(i);n&&n(e)})},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")},onDeselect:function(){}})}(),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,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_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(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return 6.123233995736766e-17!==i&&i!==-1.8369701987210297e-16||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_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)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{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("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("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;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_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)}}),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},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,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){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&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("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,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;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&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)}}),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},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,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");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(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("")}}),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,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed,o=e.Object.NUM_FRACTION_DIGITS;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var a=e.Object.prototype.cacheProperties.concat();a.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:a,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){var e,i,r=[],n=this._createBaseSVGMarkup();this.group&&"path-group"===this.group.type||(e=this.pathOffset.x,i=this.pathOffset.y);for(var a=0,h=this.points.length;a\n'),t?t(n.join("")):n.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});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){var r=t.paths;delete t.paths,"string"==typeof r?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},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;if(!e.Group){var s={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;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.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},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.dirty=!0,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.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,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){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache||!this.group.isCaching());if(this.caching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){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()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},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[S*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=e.Image.filters.BaseFilter.fromObject}("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,k,M,D,A,P,I;for(T.x=(t+.5)*y,j.x=r(T.x),h=0;h=e)){P=r(1e3*s(c-T.x)),O[P]||(O[P]={});for(var E=j.y-w;E<=j.y+w;E++)E<0||E>=o||(I=r(1e3*s(E-T.y)),O[P][I]||(O[P][I]=m(n(i(P*x,2)+i(I*C,2))/1e3)),u=O[P][I],u>0&&(d=4*(E*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],D+=u*v[d+2],A+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=D/g,b[d+3]=A/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(E=4*(I+M*e),j+=x*p[E+3],S+=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],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=j/S}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=e.Image.filters.BaseFilter.fromObject}("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'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=2*this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_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},_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;t.fillStyle=s,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=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),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&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e)))},_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,n,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,n,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),this._dimensionAffectingProps.indexOf(t)>-1&&(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,r){return e.Object._fromObject("Text",t,i,r,"text")},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=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);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?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.restartCursorIfNeeded(),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=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.hiddenTextarea.blur&&this.hiddenTextarea.blur(),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&&(o=!0,s[h-i]=this.styles[e][a],delete this.styles[e][a])}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])}var h=r||t(n[i-1]);h&&(this.styles[e][i]=h),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 r){var s=parseInt(n,10);s<=e&&delete r[s]}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.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.isEditing&&(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="white-space: nowrap; position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 1px; height: 1px; 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(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):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.set("dirty",!0),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={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),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(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},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())},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,e){var i=this._styleMap[t];t=i.line,fabric.IText.prototype.shiftLineStyles.call(this,t,e)},_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 81fb2f8b5b5cdd56e3ccb846b7d40f71cddd6266..884db280c4dee8dd47b6e1c66d570319dd6dd5aa 100644 GIT binary patch delta 70242 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 c8vubxf9r7t!G{$IAu;eTcq4f_X_T$PP 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 U>l-E$BG)+l|7KQE6@B*u0L578k^lez delta 69804 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 V||)uFu0wf^p--O$ho*r49VDF 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 36f05f01f..84d01a7e2 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,5 +1,5 @@ var fabric = fabric || { - version: "1.7.9" + version: "1.7.10" }; if (typeof exports !== "undefined") { @@ -414,7 +414,7 @@ fabric.CommonMethods = { var object; object = new fabric.PathGroup(elements, options); if (typeof path !== "undefined") { - object.setSourcePath(path); + object.sourcePath = path; } return object; }, @@ -990,8 +990,19 @@ fabric.CommonMethods = { }; function Subclass() {} function callSuper(methodName) { - var fn = this.constructor.superclass.prototype[methodName]; - return arguments.length > 1 ? fn.apply(this, slice.call(arguments, 1)) : fn.call(this); + var parentMethod = null, _this = this; + while (_this.constructor.superclass) { + var superClassMethod = _this.constructor.superclass.prototype[methodName]; + if (_this[methodName] !== superClassMethod) { + parentMethod = superClassMethod; + break; + } + _this = _this.constructor.superclass.prototype; + } + if (!parentMethod) { + return console.log("tried to callSuper " + methodName + ", method not found in prototype chain", this); + } + return arguments.length > 1 ? parentMethod.apply(this, slice.call(arguments, 1)) : parentMethod.call(this); } function createClass() { var parent = null, properties = slice.call(arguments, 0); @@ -2881,6 +2892,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { r2: el.getAttribute("r") || "50%" }; } + var clone = fabric.util.object.clone; fabric.Gradient = fabric.util.createClass({ offsetX: 0, offsetY: 0, @@ -2911,7 +2923,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { for (var position in colorStops) { var color = new fabric.Color(colorStops[position]); this.colorStops.push({ - offset: position, + offset: parseFloat(position), color: color.toRgb(), opacity: color.getAlpha() }); @@ -2931,13 +2943,13 @@ fabric.ElementsParser.prototype.checkIfDone = function() { return object; }, toSVG: function(object) { - var coords = fabric.util.object.clone(this.coords), markup, commonAttributes; - this.colorStops.sort(function(a, b) { + var coords = clone(this.coords, true), markup, commonAttributes, colorStops = clone(this.colorStops, true), needsSwap = coords.r1 > coords.r2; + colorStops.sort(function(a, b) { return a.offset - b.offset; }); if (!(object.group && object.group.type === "path-group")) { for (var prop in coords) { - if (prop === "x1" || prop === "x2" || prop === "r2") { + if (prop === "x1" || prop === "x2") { coords[prop] += this.offsetX - object.width / 2; } else if (prop === "y1" || prop === "y2") { coords[prop] += this.offsetY - object.height / 2; @@ -2951,10 +2963,27 @@ fabric.ElementsParser.prototype.checkIfDone = function() { if (this.type === "linear") { markup = [ "\n' ]; } else if (this.type === "radial") { - markup = [ "\n' ]; + markup = [ "\n' ]; } - for (var i = 0; i < this.colorStops.length; i++) { - markup.push("\n'); + if (this.type === "radial") { + if (needsSwap) { + colorStops = colorStops.concat(); + colorStops.reverse(); + for (var i = 0; i < colorStops.length; i++) { + colorStops[i].offset = 1 - colorStops[i].offset; + } + } + var minRadius = Math.min(coords.r1, coords.r2); + if (minRadius > 0) { + var maxRadius = Math.max(coords.r1, coords.r2), percentageShift = minRadius / maxRadius; + for (var i = 0; i < colorStops.length; i++) { + colorStops[i].offset += percentageShift * (1 - colorStops[i].offset); + } + } + } + for (var i = 0; i < colorStops.length; i++) { + var colorStop = colorStops[i]; + markup.push("\n'); } markup.push(this.type === "linear" ? "\n" : "\n"); return markup.join(""); @@ -2983,7 +3012,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { if (typeof opacity !== "undefined") { color = new fabric.Color(color).setAlpha(opacity).toRgba(); } - gradient.addColorStop(parseFloat(offset), color); + gradient.addColorStop(offset, color); } return gradient; } @@ -4729,10 +4758,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { 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), hasRoated = true; - if (angle < 0) { - angle = 360 + angle; - } - angle %= 360; if (t.target.snapAngle > 0) { var snapAngle = t.target.snapAngle, snapThreshold = t.target.snapThreshold || snapAngle, rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle, leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle; if (Math.abs(angle - leftAngleLocked) < snapThreshold) { @@ -4740,11 +4765,16 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { } else if (Math.abs(angle - rightAngleLocked) < snapThreshold) { angle = rightAngleLocked; } - if (t.target.angle === angle) { - hasRoated = false; - } } - t.target.angle = angle; + if (angle < 0) { + angle = 360 + angle; + } + angle %= 360; + if (t.target.angle === angle) { + hasRoated = false; + } else { + t.target.angle = angle; + } return hasRoated; }, setCursor: function(value) { @@ -4819,13 +4849,17 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { target: this._hoveredTarget, e: e }); - this._hoveredTarget.fire("mouseout"); + this._hoveredTarget.fire("mouseout", { + e: e + }); } this.fire("mouse:over", { target: target, e: e }); - target.fire("mouseover"); + target.fire("mouseover", { + e: e + }); this._hoveredTarget = target; } } else if (this._hoveredTarget) { @@ -4833,7 +4867,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { target: this._hoveredTarget, e: e }); - this._hoveredTarget.fire("mouseout"); + this._hoveredTarget.fire("mouseout", { + e: e + }); this._hoveredTarget = null; } }, @@ -5670,7 +5706,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { target.set("active", false); if (activeGroup.size() === 1) { this.discardActiveGroup(e); - this.setActiveObject(activeGroup.item(0)); + this.setActiveObject(activeGroup.item(0), e); return; } } else { @@ -5686,7 +5722,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { if (this._activeObject && target !== this._activeObject) { var group = this._createGroup(target); group.addWithUpdate(); - this.setActiveGroup(group); + this.setActiveGroup(group, e); this._activeObject = null; this.fire("selection:created", { target: group, @@ -5714,7 +5750,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this.setActiveGroup(group, e); group.saveCoords(); this.fire("selection:created", { - target: group + target: group, + e: e }); this.renderAll(); } @@ -5997,7 +6034,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { objectCaching: objectCaching, statefullCache: false, noScaleCache: true, - dirty: false, + dirty: true, needsItsOwnCache: false, 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(" "), cacheProperties: ("fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray" + " strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor").split(" "), @@ -6008,12 +6045,10 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { } if (this.objectCaching) { this._createCacheCanvas(); - this.setupState({ - propertySet: "cacheProperties" - }); } }, _createCacheCanvas: function() { + this._cacheProperties = {}; this._cacheCanvas = fabric.document.createElement("canvas"); this._cacheContext = this._cacheCanvas.getContext("2d"); this._updateCacheCanvas(); @@ -6197,7 +6232,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { ctx.transform.apply(ctx, this.transformMatrix); } this.clipTo && fabric.util.clipContext(this, ctx); - if (this.objectCaching && (!this.group || this.needsItsOwnCache)) { + if (this.shouldCache()) { if (!this._cacheCanvas) { this._createCacheCanvas(); } @@ -6220,6 +6255,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { this.clipTo && ctx.restore(); ctx.restore(); }, + shouldCache: function() { + return this.objectCaching && (!this.group || this.needsItsOwnCache || !this.group.isCaching()); + }, + willDrawShadow: function() { + return !!this.shadow; + }, drawObject: function(ctx, noTransform) { this._renderBackground(ctx); this._setStrokeStyles(ctx); @@ -6284,8 +6325,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { alternative && alternative(ctx); } }, - _renderControls: function(ctx, noTransform) { - if (!this.active || noTransform || this.group && this.group !== this.canvas.getActiveGroup()) { + _renderControls: function(ctx) { + if (!this.active || this.group && this.group !== this.canvas.getActiveGroup()) { return; } var vpt = this.getViewportTransform(), matrix = this.calcTransformMatrix(), options; @@ -6652,7 +6693,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { }, _getLeftTopCoords: function() { return this.translateToOriginPoint(this.getCenterPoint(), "left", "top"); - } + }, + onDeselect: function() {} }); })(); @@ -6844,6 +6886,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { _calcRotateMatrix: function() { if (this.angle) { var theta = degreesToRadians(this.angle), cos = Math.cos(theta), sin = Math.sin(theta); + if (cos === 6.123233995736766e-17 || cos === -1.8369701987210297e-16) { + cos = 0; + } return [ cos, sin, -sin, cos, 0, 0 ]; } return fabric.iMatrix.concat(); @@ -7036,6 +7081,9 @@ fabric.util.object.extend(fabric.Object.prototype, { hasStateChanged: function(propertySet) { propertySet = propertySet || originalSet; propertySet = "_" + propertySet; + if (!Object.keys(this[propertySet]).length) { + return true; + } return !_isEqual(this[propertySet], this, true); }, saveState: function(options) { @@ -7120,7 +7168,7 @@ fabric.util.object.extend(fabric.Object.prototype, { } }, drawSelectionBackground: function(ctx) { - if (!this.selectionBackgroundColor || this.group || !this.active) { + if (!this.selectionBackgroundColor || this.group || !this.active || this.canvas && !this.canvas.interactive) { return this; } ctx.save(); @@ -7837,7 +7885,7 @@ fabric.util.object.extend(fabric.Object.prototype, { (function(global) { "use strict"; - var fabric = global.fabric || (global.fabric = {}), extend = fabric.util.object.extend, min = fabric.util.array.min, max = fabric.util.array.max, toFixed = fabric.util.toFixed; + var fabric = global.fabric || (global.fabric = {}), extend = fabric.util.object.extend, min = fabric.util.array.min, max = fabric.util.array.max, toFixed = fabric.util.toFixed, NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; if (fabric.Polyline) { fabric.warn("fabric.Polyline is already defined"); return; @@ -7879,14 +7927,15 @@ fabric.util.object.extend(fabric.Object.prototype, { }); }, toSVG: function(reviver) { - var points = [], addTransform, markup = this._createBaseSVGMarkup(); - for (var i = 0, len = this.points.length; i < len; i++) { - points.push(toFixed(this.points[i].x, 2), ",", toFixed(this.points[i].y, 2), " "); - } + var points = [], diffX, diffY, markup = this._createBaseSVGMarkup(); if (!(this.group && this.group.type === "path-group")) { - addTransform = " translate(" + -this.pathOffset.x + ", " + -this.pathOffset.y + ") "; + diffX = this.pathOffset.x; + diffY = this.pathOffset.y; + } + for (var i = 0, len = this.points.length; i < len; i++) { + points.push(toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS), ",", toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS), " "); } - markup.push("<", this.type, " ", this.getSvgId(), 'points="', points.join(""), '" style="', this.getSvgStyles(), '" transform="', this.getSvgTransform(), addTransform, " ", this.getSvgTransformMatrix(), '"/>\n'); + markup.push("<", this.type, " ", this.getSvgId(), 'points="', points.join(""), '" style="', this.getSvgStyles(), '" transform="', this.getSvgTransform(), " ", this.getSvgTransformMatrix(), '"/>\n'); return reviver ? reviver(markup.join("")) : markup.join(""); }, commonRender: function(ctx, noTransform) { @@ -8017,14 +8066,8 @@ fabric.util.object.extend(fabric.Object.prototype, { this.path = this._parsePath(); } this._setPositionDimensions(options); - if (options.sourcePath) { - this.setSourcePath(options.sourcePath); - } if (this.objectCaching) { this._createCacheCanvas(); - this.setupState({ - propertySet: "cacheProperties" - }); } }, _setPositionDimensions: function(options) { @@ -8528,14 +8571,8 @@ fabric.util.object.extend(fabric.Object.prototype, { } this.setOptions(options); this.setCoords(); - if (options.sourcePath) { - this.setSourcePath(options.sourcePath); - } if (this.objectCaching) { this._createCacheCanvas(); - this.setupState({ - propertySet: "cacheProperties" - }); } }, parseDimensionsFromPaths: function(options) { @@ -8702,7 +8739,6 @@ fabric.util.object.extend(fabric.Object.prototype, { for (var i = this._objects.length; i--; ) { this._objects[i].group = this; } - this.originalState = {}; if (options.originX) { this.originX = options.originX; } @@ -8817,11 +8853,50 @@ fabric.util.object.extend(fabric.Object.prototype, { objects: objsToObject }); }, + toDatalessObject: function(propertiesToInclude) { + var objsToObject = this.getObjects().map(function(obj) { + var originalDefaults = obj.includeDefaultValues; + obj.includeDefaultValues = obj.group.includeDefaultValues; + var _obj = obj.toDatalessObject(propertiesToInclude); + obj.includeDefaultValues = originalDefaults; + return _obj; + }); + return extend(this.callSuper("toDatalessObject", propertiesToInclude), { + objects: objsToObject + }); + }, render: function(ctx) { this._transformDone = true; this.callSuper("render", ctx); this._transformDone = false; }, + shouldCache: function() { + var parentCache = this.objectCaching && (!this.group || this.needsItsOwnCache || !this.group.isCaching()); + this.caching = parentCache; + if (parentCache) { + for (var i = 0, len = this._objects.length; i < len; i++) { + if (this._objects[i].willDrawShadow()) { + this.caching = false; + return false; + } + } + } + return parentCache; + }, + willDrawShadow: function() { + if (this.shadow) { + return true; + } + for (var i = 0, len = this._objects.length; i < len; i++) { + if (this._objects[i].willDrawShadow()) { + return true; + } + } + return false; + }, + isCaching: function() { + return this.caching || this.group && this.group.isCaching(); + }, drawObject: function(ctx) { for (var i = 0, len = this._objects.length; i < len; i++) { this._renderObject(this._objects[i], ctx); @@ -10276,7 +10351,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { return maxWidth; }, _renderChars: function(method, ctx, chars, left, top) { - var shortM = method.slice(0, -4), char, width; + var shortM = method.slice(0, -4), _char, width; if (this[shortM].toLive) { var offsetX = -this.width / 2 + this[shortM].offsetX || 0, offsetY = -this.height / 2 + this[shortM].offsetY || 0; ctx.save(); @@ -10289,8 +10364,8 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { chars = chars.split(""); for (var i = 0, len = chars.length; i < len; i++) { char = chars[i]; - width = ctx.measureText(char).width + additionalSpace; - ctx[method](char, left, top); + width = ctx.measureText(_char).width + additionalSpace; + ctx[method](_char, left, top); left += width > 0 ? width : 0; } } else { @@ -10957,11 +11032,11 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { additionalSpace = this._getWidthOfCharSpacing(); chars = _char.split(""); charWidth = 0; - for (var j = 0, len = chars.length, char; j < len; j++) { - char = chars[j]; - shouldFill && ctx.fillText(char, left + charWidth, top); - shouldStroke && ctx.strokeText(char, left + charWidth, top); - _charWidth = ctx.measureText(char).width + additionalSpace; + for (var j = 0, len = chars.length, jChar; j < len; j++) { + jChar = chars[j]; + shouldFill && ctx.fillText(jChar, left + charWidth, top); + shouldStroke && ctx.strokeText(jChar, left + charWidth, top); + _charWidth = ctx.measureText(jChar).width + additionalSpace; charWidth += _charWidth > 0 ? _charWidth : 0; } } else { @@ -11226,6 +11301,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { onDeselect: function() { this.isEditing && this.exitEditing(); this.selected = false; + this.callSuper("onDeselect"); }, initAddedHandler: function() { var _this = this; diff --git a/package.json b/package.json index 2f346fd3a..91a09619f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "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.7.9", + "version": "1.7.10", "author": "Juriy Zaytsev ", "contributors": [ { From 122c2a5ae1c6ffe7a9099d1e2df007d0056fef42 Mon Sep 17 00:00:00 2001 From: Asturur Date: Mon, 24 Apr 2017 02:27:50 +0200 Subject: [PATCH 2/2] fixed error --- dist/fabric.js | 2 +- dist/fabric.min.js | 2 +- dist/fabric.min.js.gz | Bin 70354 -> 70354 bytes dist/fabric.require.js | 2 +- src/shapes/text.class.js | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 665aa7d8d..2d9d9894f 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -22079,7 +22079,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { var additionalSpace = this._getWidthOfCharSpacing(); chars = chars.split(''); for (var i = 0, len = chars.length; i < len; i++) { - char = chars[i]; + _char = chars[i]; width = ctx.measureText(_char).width + additionalSpace; ctx[method](_char, left, top); left += width > 0 ? width : 0; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index c6328d354..31b40e2fa 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -4,6 +4,6 @@ this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this. },_toObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(t),n=this.callSuper("_toObject",t,e,i);return this._unwindGroupTransformOnObject(t,r),n},_realizeGroupTransformOnObject:function(t){var e=["angle","flipX","flipY","height","left","scaleX","scaleY","top","width"];if(t.group&&t.group===this.getActiveGroup()){var i={};return e.forEach(function(e){i[e]=t[e]}),this.getActiveGroup().realizeTransform(t),i}return null},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},_setSVGObject:function(t,e,i){var r;r=this._realizeGroupTransformOnObject(e),this.callSuper("_setSVGObject",t,e,i),this._unwindGroupTransformOnObject(e,r)}});for(var a in fabric.StaticCanvas)"prototype"!==a&&(fabric.Canvas[a]=fabric.StaticCanvas[a]);fabric.isTouchSupported&&(fabric.Canvas.prototype._setCursorFromEvent=function(){}),fabric.Element=fabric.Canvas}(),function(){var t={mt:0,tr:1,mr:2,br:3,mb:4,bl:5,ml:6,tl:7},e=fabric.util.addListener,i=fabric.util.removeListener;fabric.util.object.extend(fabric.Canvas.prototype,{cursorMap:["n-resize","ne-resize","e-resize","se-resize","s-resize","sw-resize","w-resize","nw-resize"],_initEventListeners:function(){this._bindEvents(),e(fabric.window,"resize",this._onResize),e(this.upperCanvasEl,"mousedown",this._onMouseDown),e(this.upperCanvasEl,"mousemove",this._onMouseMove),e(this.upperCanvasEl,"mouseout",this._onMouseOut),e(this.upperCanvasEl,"mouseenter",this._onMouseEnter),e(this.upperCanvasEl,"wheel",this._onMouseWheel),e(this.upperCanvasEl,"contextmenu",this._onContextMenu),e(this.upperCanvasEl,"touchstart",this._onMouseDown,{passive:!1}),e(this.upperCanvasEl,"touchmove",this._onMouseMove,{passive:!1}),"undefined"!=typeof eventjs&&"add"in eventjs&&(eventjs.add(this.upperCanvasEl,"gesture",this._onGesture),eventjs.add(this.upperCanvasEl,"drag",this._onDrag),eventjs.add(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.add(this.upperCanvasEl,"shake",this._onShake),eventjs.add(this.upperCanvasEl,"longpress",this._onLongPress))},_bindEvents:function(){this._onMouseDown=this._onMouseDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this)},removeListeners:function(){i(fabric.window,"resize",this._onResize),i(this.upperCanvasEl,"mousedown",this._onMouseDown),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"mouseout",this._onMouseOut),i(this.upperCanvasEl,"mouseenter",this._onMouseEnter),i(this.upperCanvasEl,"wheel",this._onMouseWheel),i(this.upperCanvasEl,"contextmenu",this._onContextMenu),i(this.upperCanvasEl,"touchstart",this._onMouseDown),i(this.upperCanvasEl,"touchmove",this._onMouseMove),"undefined"!=typeof eventjs&&"remove"in eventjs&&(eventjs.remove(this.upperCanvasEl,"gesture",this._onGesture),eventjs.remove(this.upperCanvasEl,"drag",this._onDrag),eventjs.remove(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.remove(this.upperCanvasEl,"shake",this._onShake),eventjs.remove(this.upperCanvasEl,"longpress",this._onLongPress))},_onGesture:function(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t){this.__onMouseWheel(t)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t}),this._iTextInstances&&this._iTextInstances.forEach(function(t){t.isEditing&&t.hiddenTextarea.focus()})},_onMouseEnter:function(t){this.findTarget(t)||(this.fire("mouse:over",{target:null,e:t}),this._hoveredTarget=null)},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e)},_onContextMenu:function(t){return this.stopContextMenu&&(t.stopPropagation(),t.preventDefault()),!1},_onMouseDown:function(t){this.__onMouseDown(t),e(fabric.document,"touchend",this._onMouseUp,{passive:!1}),e(fabric.document,"touchmove",this._onMouseMove,{passive:!1}),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"touchmove",this._onMouseMove),"touchstart"===t.type?i(this.upperCanvasEl,"mousedown",this._onMouseDown):(e(fabric.document,"mouseup",this._onMouseUp),e(fabric.document,"mousemove",this._onMouseMove))},_onMouseUp:function(t){if(this.__onMouseUp(t),i(fabric.document,"mouseup",this._onMouseUp),i(fabric.document,"touchend",this._onMouseUp),i(fabric.document,"mousemove",this._onMouseMove),i(fabric.document,"touchmove",this._onMouseMove),e(this.upperCanvasEl,"mousemove",this._onMouseMove),e(this.upperCanvasEl,"touchmove",this._onMouseMove,{passive:!1}),"touchend"===t.type){var r=this;setTimeout(function(){e(r.upperCanvasEl,"mousedown",r._onMouseDown)},400)}},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t,e){var i=this.getActiveGroup()||this.getActiveObject();return(!i||!i.isEditing||t!==i)&&!!(t&&(t.isMoving||t!==i)||!t&&i||!t&&!i&&!this._groupSelector||e&&this._previousPointer&&this.selection&&(e.x!==this._previousPointer.x||e.y!==this._previousPointer.y))},__onMouseUp:function(t){var e,i=!0,r=this._currentTransform,n=this._groupSelector,s=!n||0===n.left&&0===n.top;if(this.isDrawingMode&&this._isCurrentlyDrawing)return void this._onMouseUpInDrawingMode(t);r&&(this._finalizeCurrentTransform(),i=!r.actionPerformed),e=i?this.findTarget(t,!0):r.target;var o=this._shouldRender(e,this.getPointer(t));e||!s?this._maybeGroupObjects(t):(this._groupSelector=null,this._currentTransform=null),e&&(e.isMoving=!1),this._handleCursorAndEvent(t,e,"up"),e&&(e.__corner=0),o&&this.renderAll()},_handleCursorAndEvent:function(t,e,i){this._setCursorFromEvent(t,e),this._handleEvent(t,i,e?e:null)},_handleEvent:function(t,e,i){var r="undefined"==typeof i?this.findTarget(t):i,n=this.targets||[],s={e:t,target:r,subTargets:n};this.fire("mouse:"+e,s),r&&r.fire("mouse"+e,s);for(var o=0;o1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],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=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||!e.selectable)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!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),e)}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,e),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,e:t}),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,n._setOptions(r),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)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_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.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{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,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,needsItsOwnCache:!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(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t),this.objectCaching&&this._createCacheCanvas()},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this._getNonTransformedDimensions(),n=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,s=i.scaleX*t*n,o=i.scaleY*t*n,a=r.x*s,h=r.y*o;return{width:a+2,height:h+2,zoomX:s,zoomY:o}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.action;if("scale"===t.slice(0,5))return!1}var e=this._getCacheCanvasDimensions(),i=e.width,r=e.height,n=e.zoomX,s=e.zoomY;return(i!==this.cacheWidth||r!==this.cacheHeight)&&(this._cacheCanvas.width=Math.ceil(i),this._cacheCanvas.height=Math.ceil(r),this._cacheContext.translate(i/2,r/2),this._cacheContext.scale(n,s),this.cacheWidth=i,this.cacheHeight=r,this.zoomX=n,this.zoomY=s,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},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),this.angle&&t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),this.skewX&&t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),this.skewY&&t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(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:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(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():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},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"#"},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}},_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?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},render:function(t,i){0===this.width&&0===this.height||!this.visible||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache()?(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)):(this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},shouldCache:function(){return this.objectCaching&&(!this.group||this.needsItsOwnCache||!this.group.isCaching())},willDrawShadow:function(){return!!this.shadow},drawObject:function(t,e){this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._render(t,e)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheWidth/2,-this.cacheHeight/2)},isCacheDirty:function(t){if(!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(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),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t){if(this.active&&(!this.group||this.group===this.canvas.getActiveGroup())){var i,r=this.getViewportTransform(),n=this.calcTransformMatrix();n=e.util.multiplyTransformMatrices(r,n),i=e.util.qrDecompose(n),t.save(),t.translate(i.translateX,i.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(i.angle)),this.drawBordersInGroup(t,i)):(t.rotate(o(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)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),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 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return 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),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),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,o(-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._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]);var e=o?new a(i[o],i):new a(i);n&&n(e)})},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")},onDeselect:function(){}})}(),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,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_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(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return 6.123233995736766e-17!==i&&i!==-1.8369701987210297e-16||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_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)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{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("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("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;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_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)}}),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},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,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){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&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("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,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;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&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)}}),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},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,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");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(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("")}}),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,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed,o=e.Object.NUM_FRACTION_DIGITS;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var a=e.Object.prototype.cacheProperties.concat();a.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:a,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){var e,i,r=[],n=this._createBaseSVGMarkup();this.group&&"path-group"===this.group.type||(e=this.pathOffset.x,i=this.pathOffset.y);for(var a=0,h=this.points.length;a\n'),t?t(n.join("")):n.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});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){var r=t.paths;delete t.paths,"string"==typeof r?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},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;if(!e.Group){var s={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;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.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},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.dirty=!0,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.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,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){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache||!this.group.isCaching());if(this.caching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){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()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},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[S*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=e.Image.filters.BaseFilter.fromObject}("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,k,M,D,A,P,I;for(T.x=(t+.5)*y,j.x=r(T.x),h=0;h=e)){P=r(1e3*s(c-T.x)),O[P]||(O[P]={});for(var E=j.y-w;E<=j.y+w;E++)E<0||E>=o||(I=r(1e3*s(E-T.y)),O[P][I]||(O[P][I]=m(n(i(P*x,2)+i(I*C,2))/1e3)),u=O[P][I],u>0&&(d=4*(E*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],D+=u*v[d+2],A+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=D/g,b[d+3]=A/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(E=4*(I+M*e),j+=x*p[E+3],S+=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],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=j/S}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=e.Image.filters.BaseFilter.fromObject}("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'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=2*this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_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},_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;t.fillStyle=s,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=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),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&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e)))},_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,n,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,n,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),this._dimensionAffectingProps.indexOf(t)>-1&&(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,r){return e.Object._fromObject("Text",t,i,r,"text")},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=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);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?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;ri&&(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,k,M,D,A,P,I;for(T.x=(t+.5)*y,j.x=r(T.x),h=0;h=e)){P=r(1e3*s(c-T.x)),O[P]||(O[P]={});for(var E=j.y-w;E<=j.y+w;E++)E<0||E>=o||(I=r(1e3*s(E-T.y)),O[P][I]||(O[P][I]=m(n(i(P*x,2)+i(I*C,2))/1e3)),u=O[P][I],u>0&&(d=4*(E*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],D+=u*v[d+2],A+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=D/g,b[d+3]=A/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(E=4*(I+M*e),j+=x*p[E+3],S+=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],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=j/S}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=e.Image.filters.BaseFilter.fromObject}("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'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=2*this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_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},_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;t.fillStyle=s,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=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),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&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e)))},_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,n,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,n,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),this._dimensionAffectingProps.indexOf(t)>-1&&(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,r){return e.Object._fromObject("Text",t,i,r,"text")},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=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);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?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.restartCursorIfNeeded(),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=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.hiddenTextarea.blur&&this.hiddenTextarea.blur(),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&&(o=!0,s[h-i]=this.styles[e][a],delete this.styles[e][a])}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])}var h=r||t(n[i-1]);h&&(this.styles[e][i]=h),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 r){var s=parseInt(n,10);s<=e&&delete r[s]}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.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.isEditing&&(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="white-space: nowrap; position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 1px; height: 1px; 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(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):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.set("dirty",!0),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={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),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(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},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())},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,e){var i=this._styleMap[t];t=i.line,fabric.IText.prototype.shiftLineStyles.call(this,t,e)},_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 884db280c4dee8dd47b6e1c66d570319dd6dd5aa..ee5138bc9af6e0446004ddc619c21dde549386eb 100644 GIT binary patch delta 14399 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 0 ? width : 0; diff --git a/src/shapes/text.class.js b/src/shapes/text.class.js index f3770fad7..cc0890ce0 100644 --- a/src/shapes/text.class.js +++ b/src/shapes/text.class.js @@ -490,7 +490,7 @@ var additionalSpace = this._getWidthOfCharSpacing(); chars = chars.split(''); for (var i = 0, len = chars.length; i < len; i++) { - char = chars[i]; + _char = chars[i]; width = ctx.measureText(_char).width + additionalSpace; ctx[method](_char, left, top); left += width > 0 ? width : 0;