From a8e88a3ffb3d875a43af0370f7f47fe7c372e6bf Mon Sep 17 00:00:00 2001 From: Asturur Date: Fri, 3 Mar 2017 12:01:29 +0100 Subject: [PATCH 1/2] add focus on moouse out --- dist/fabric.js | 441 +++++++----------------------- dist/fabric.min.js | 17 +- dist/fabric.min.js.gz | Bin 69708 -> 69099 bytes dist/fabric.require.js | 308 ++++++--------------- src/mixins/canvas_events.mixin.js | 7 + 5 files changed, 193 insertions(+), 580 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 8cef518b47c..2a02912bd62 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.6" }; +var fabric = fabric || { version: '1.7.6' }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -14,23 +14,22 @@ if (typeof document !== 'undefined' && typeof window !== 'undefined') { } else { // assume we're running under node.js when document/window are not present - fabric.document = require("jsdom") + 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") - ); + decodeURIComponent('%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E'), + { features: { + FetchExternalResources: ['img'] + } + }); - if (fabric.document.createWindow) { - fabric.window = fabric.document.createWindow(); - } else { - fabric.window = fabric.document.parentWindow; - } + fabric.window = fabric.document.defaultView; } /** * True when in environment that supports touch events * @type boolean */ -fabric.isTouchSupported = "ontouchstart" in fabric.document.documentElement; +fabric.isTouchSupported = 'ontouchstart' in fabric.document.documentElement; /** * True when in environment that's probably Node.js @@ -947,11 +946,6 @@ fabric.CommonMethods = { */ createCanvasElement: function(canvasEl) { canvasEl || (canvasEl = fabric.document.createElement('canvas')); - /* eslint-disable camelcase */ - if (!canvasEl.getContext && typeof G_vmlCanvasManager !== 'undefined') { - G_vmlCanvasManager.initElement(canvasEl); - } - /* eslint-enable camelcase */ return canvasEl; }, @@ -962,9 +956,7 @@ fabric.CommonMethods = { * @return {HTMLImageElement} HTML image element */ createImage: function() { - return fabric.isLikelyNode - ? new (require('canvas').Image)() - : fabric.document.createElement('img'); + return fabric.document.createElement('img'); }, /** @@ -1438,172 +1430,6 @@ fabric.CommonMethods = { var slice = Array.prototype.slice; - /* _ES5_COMPAT_START_ */ - - if (!Array.prototype.indexOf) { - /** - * Finds index of an element in an array - * @param {*} searchElement - * @return {Number} - */ - Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { - if (this === void 0 || this === null) { - throw new TypeError(); - } - var t = Object(this), len = t.length >>> 0; - if (len === 0) { - return -1; - } - var n = 0; - if (arguments.length > 0) { - n = Number(arguments[1]); - if (n !== n) { // shortcut for verifying if it's NaN - n = 0; - } - else if (n !== 0 && n !== Number.POSITIVE_INFINITY && n !== Number.NEGATIVE_INFINITY) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - } - if (n >= len) { - return -1; - } - var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); - for (; k < len; k++) { - if (k in t && t[k] === searchElement) { - return k; - } - } - return -1; - }; - } - - if (!Array.prototype.forEach) { - /** - * Iterates an array, invoking callback for each element - * @param {Function} fn Callback to invoke for each element - * @param {Object} [context] Context to invoke callback in - * @return {Array} - */ - Array.prototype.forEach = function(fn, context) { - for (var i = 0, len = this.length >>> 0; i < len; i++) { - if (i in this) { - fn.call(context, this[i], i, this); - } - } - }; - } - - if (!Array.prototype.map) { - /** - * Returns a result of iterating over an array, invoking callback for each element - * @param {Function} fn Callback to invoke for each element - * @param {Object} [context] Context to invoke callback in - * @return {Array} - */ - Array.prototype.map = function(fn, context) { - var result = []; - for (var i = 0, len = this.length >>> 0; i < len; i++) { - if (i in this) { - result[i] = fn.call(context, this[i], i, this); - } - } - return result; - }; - } - - if (!Array.prototype.every) { - /** - * Returns true if a callback returns truthy value for all elements in an array - * @param {Function} fn Callback to invoke for each element - * @param {Object} [context] Context to invoke callback in - * @return {Boolean} - */ - Array.prototype.every = function(fn, context) { - for (var i = 0, len = this.length >>> 0; i < len; i++) { - if (i in this && !fn.call(context, this[i], i, this)) { - return false; - } - } - return true; - }; - } - - if (!Array.prototype.some) { - /** - * Returns true if a callback returns truthy value for at least one element in an array - * @param {Function} fn Callback to invoke for each element - * @param {Object} [context] Context to invoke callback in - * @return {Boolean} - */ - Array.prototype.some = function(fn, context) { - for (var i = 0, len = this.length >>> 0; i < len; i++) { - if (i in this && fn.call(context, this[i], i, this)) { - return true; - } - } - return false; - }; - } - - if (!Array.prototype.filter) { - /** - * Returns the result of iterating over elements in an array - * @param {Function} fn Callback to invoke for each element - * @param {Object} [context] Context to invoke callback in - * @return {Array} - */ - Array.prototype.filter = function(fn, context) { - var result = [], val; - for (var i = 0, len = this.length >>> 0; i < len; i++) { - if (i in this) { - val = this[i]; // in case fn mutates this - if (fn.call(context, val, i, this)) { - result.push(val); - } - } - } - return result; - }; - } - - if (!Array.prototype.reduce) { - /** - * Returns "folded" (reduced) result of iterating over elements in an array - * @param {Function} fn Callback to invoke for each element - * @return {*} - */ - Array.prototype.reduce = function(fn /*, initial*/) { - var len = this.length >>> 0, - i = 0, - rv; - - if (arguments.length > 1) { - rv = arguments[1]; - } - else { - do { - if (i in this) { - rv = this[i++]; - break; - } - // if array contains no values, no initial value to return - if (++i >= len) { - throw new TypeError(); - } - } - while (true); - } - for (; i < len; i++) { - if (i in this) { - rv = fn.call(null, rv, this[i], i, this); - } - } - return rv; - }; - } - - /* _ES5_COMPAT_END_ */ - /** * Invokes method on all items in a given array * @memberOf fabric.util.array @@ -1762,20 +1588,6 @@ fabric.CommonMethods = { (function() { - /* _ES5_COMPAT_START_ */ - if (!String.prototype.trim) { - /** - * Trims a string (removing whitespace from the beginning and the end) - * @function external:String#trim - * @see String#trim on MDN - */ - String.prototype.trim = function () { - // this trim is not fully ES3 or ES5 compliant, but it should cover most cases for now - return this.replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, ''); - }; - } - /* _ES5_COMPAT_END_ */ - /** * Camelizes a string * @memberOf fabric.util.string @@ -1828,45 +1640,6 @@ fabric.CommonMethods = { })(); -/* _ES5_COMPAT_START_ */ -(function() { - - var slice = Array.prototype.slice, - apply = Function.prototype.apply, - Dummy = function() { }; - - if (!Function.prototype.bind) { - /** - * Cross-browser approximation of ES5 Function.prototype.bind (not fully spec conforming) - * @see Function#bind on MDN - * @param {Object} thisArg Object to bind function to - * @param {Any[]} Values to pass to a bound function - * @return {Function} - */ - Function.prototype.bind = function(thisArg) { - var _this = this, args = slice.call(arguments, 1), bound; - if (args.length) { - bound = function() { - return apply.call(_this, this instanceof Dummy ? this : thisArg, args.concat(slice.call(arguments))); - }; - } - else { - /** @ignore */ - bound = function() { - return apply.call(_this, this instanceof Dummy ? this : thisArg, arguments); - }; - } - Dummy.prototype = this.prototype; - bound.prototype = new Dummy(); - - return bound; - }; - } - -})(); -/* _ES5_COMPAT_END_ */ - - (function() { var slice = Array.prototype.slice, emptyFunction = function() { }, @@ -2160,14 +1933,11 @@ fabric.CommonMethods = { } var pointerX = function(event) { - // looks like in IE (<9) clientX at certain point (apparently when mouseup fires on VML element) - // is represented as COM object, with all the consequences, like "unknown" type and error on [[Get]] - // need to investigate later - return (typeof event.clientX !== unknown ? event.clientX : 0); + return event.clientX; }, pointerY = function(event) { - return (typeof event.clientY !== unknown ? event.clientY : 0); + return event.clientY; }; function _getPointer(event, pageProp, clientProp) { @@ -3242,7 +3012,8 @@ if (typeof console !== 'undefined') { 'stroke-opacity': 'strokeOpacity', 'stroke-width': 'strokeWidth', 'text-decoration': 'textDecoration', - 'text-anchor': 'originX' + 'text-anchor': 'originX', + opacity: 'opacity' }, colorAttributes = { @@ -3294,6 +3065,12 @@ if (typeof console !== 'undefined') { value = false; } } + else if (attr === 'opacity') { + value = parseFloat(value); + if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') { + value *= parentAttributes.opacity; + } + } else if (attr === 'originX' /* text-anchor */) { value = value === 'start' ? 'left' : value === 'end' ? 'right' : 'center'; } @@ -3512,8 +3289,8 @@ if (typeof console !== 'undefined') { style.replace(/;\s*$/, '').split(';').forEach(function (chunk) { var pair = chunk.split(':'); - attr = normalizeAttr(pair[0].trim().toLowerCase()); - value = normalizeValue(attr, pair[1].trim()); + attr = pair[0].trim().toLowerCase(); + value = pair[1].trim(); oStyle[attr] = value; }); @@ -3529,8 +3306,8 @@ if (typeof console !== 'undefined') { continue; } - attr = normalizeAttr(prop.toLowerCase()); - value = normalizeValue(attr, style[prop]); + attr = prop.toLowerCase(); + value = style[prop]; oStyle[attr] = value; } @@ -3959,23 +3736,27 @@ if (typeof console !== 'undefined') { var ownAttributes = attributes.reduce(function(memo, attr) { value = element.getAttribute(attr); - if (value) { - attr = normalizeAttr(attr); - value = normalizeValue(attr, value, parentAttributes, fontSize); - + if (value) { // eslint-disable-line memo[attr] = value; } return memo; }, { }); - // add values parsed from style, which take precedence over attributes // (see: http://www.w3.org/TR/SVG/styling.html#UsingPresentationAttributes) ownAttributes = extend(ownAttributes, extend(getGlobalStylesForElement(element, svgUid), fabric.parseStyleAttribute(element))); - if (ownAttributes.font) { - fabric.parseFontDeclaration(ownAttributes.font, ownAttributes); + + var normalizedAttr, normalizedValue, normalizedStyle = {}; + for (var attr in ownAttributes) { + normalizedAttr = normalizeAttr(attr); + normalizedValue = normalizeValue(normalizedAttr, ownAttributes[attr], parentAttributes, fontSize); + normalizedStyle[normalizedAttr] = normalizedValue; + } + if (normalizedStyle && normalizedStyle.font) { + fabric.parseFontDeclaration(normalizedStyle.font, normalizedStyle); } - return _setStrokeFillOpacity(extend(parentAttributes, ownAttributes)); + var mergedAttrs = extend(parentAttributes, normalizedStyle); + return reAllowedParents.test(element.nodeName) ? mergedAttrs : _setStrokeFillOpacity(mergedAttrs); }, /** @@ -4085,8 +3866,8 @@ if (typeof console !== 'undefined') { for (var i = 0, len = propertyValuePairs.length; i < len; i++) { var pair = propertyValuePairs[i].split(/\s*:\s*/), - property = normalizeAttr(pair[0]), - value = normalizeValue(property, pair[1], pair[0]); + property = pair[0], + value = pair[1]; ruleObj[property] = value; } rule = match[1]; @@ -10321,6 +10102,13 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this.fire('mouse:out', { target: target, e: e }); this._hoveredTarget = null; target && target.fire('mouseout', { e: e }); + if (this._iTextInstances) { + this._iTextInstances.forEach(function(obj) { + if (obj.isEditing) { + obj.hiddenTextarea.focus(); + } + }); + } }, /** @@ -10678,10 +10466,13 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this._beforeTransform(e, target); this._setupCurrentTransform(e, target); } - - if (target !== this.getActiveGroup() && target !== this.getActiveObject()) { + var activeObject = this.getActiveObject(); + if (target !== this.getActiveGroup() && target !== activeObject) { this.deactivateAll(); - target.selectable && this.setActiveObject(target, e); + if (target.selectable) { + activeObject && activeObject.fire('deselected', { e: e }); + this.setActiveObject(target, e); + } } } this._handleEvent(e, 'down', target ? target : null); @@ -12414,8 +12205,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati width = dim.x * zoomX, height = dim.y * zoomY; return { - width: Math.ceil(width) + 2, - height: Math.ceil(height) + 2, + width: width + 2, + height: height + 2, zoomX: zoomX, zoomY: zoomY }; @@ -12439,8 +12230,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati zoomX = dims.zoomX, zoomY = dims.zoomY; if (width !== this.cacheWidth || height !== this.cacheHeight) { - this._cacheCanvas.width = width; - this._cacheCanvas.height = height; + this._cacheCanvas.width = Math.ceil(width); + this._cacheCanvas.height = Math.ceil(height); this._cacheContext.translate(width / 2, height / 2); this._cacheContext.scale(zoomX, zoomY); this.cacheWidth = width; @@ -13356,8 +13147,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati object = clone(object, true); if (forceAsync) { fabric.util.enlivenPatterns([object.fill, object.stroke], function(patterns) { - object.fill = patterns[0]; - object.stroke = patterns[1]; + if (typeof patterns[0] !== 'undefined') { + object.fill = patterns[0]; + } + if (typeof patterns[1] !== 'undefined') { + object.stroke = patterns[1]; + } var instance = extraParam ? new klass(object[extraParam], object) : new klass(object); callback && callback(instance); }); @@ -14518,10 +14313,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function() { - var degreesToRadians = fabric.util.degreesToRadians, - /* eslint-disable camelcase */ - isVML = function() { return typeof G_vmlCanvasManager !== 'undefined'; }; - /* eslint-enable camelcase */ + var degreesToRadians = fabric.util.degreesToRadians; + fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ { /** @@ -14830,7 +14623,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } break; default: - isVML() || this.transparentCorners || ctx.clearRect(left, top, size, size); + this.transparentCorners || ctx.clearRect(left, top, size, size); ctx[methodName + 'Rect'](left, top, size, size); if (stroke) { ctx.strokeRect(left, top, size, size); @@ -15305,10 +15098,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot // Line coords are distances from left-top of canvas to origin of line. // To render line in a path-group, we need to translate them to // distances from center of path-group to center of line. - var cp = this.getCenterPoint(); + var cp = this.getCenterPoint(), + offset = this.strokeWidth / 2; ctx.translate( - cp.x - this.strokeWidth / 2, - cp.y - this.strokeWidth / 2 + cp.x - (this.strokeLineCap === 'butt' && this.height === 0 ? 0 : offset), + cp.y - (this.strokeLineCap === 'butt' && this.width === 0 ? 0 : offset) ); } @@ -15360,10 +15154,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot _getNonTransformedDimensions: function() { var dim = this.callSuper('_getNonTransformedDimensions'); if (this.strokeLineCap === 'butt') { - if (dim.x === 0) { + if (this.width === 0) { dim.y -= this.strokeWidth; } - if (dim.y === 0) { + if (this.height === 0) { dim.x -= this.strokeWidth; } } @@ -17582,23 +17376,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @param {Boolean} [forceAsync] Force an async behaviour trying to create pattern first */ fabric.Path.fromObject = function(object, callback, forceAsync) { - // remove this pattern rom 2.0, accept just object. - var path; - if (typeof object.path === 'string') { - fabric.loadSVGFromURL(object.path, function (elements) { - var pathUrl = object.path; - path = elements[0]; - delete object.path; - - fabric.util.object.extend(path, object); - path.setSourcePath(pathUrl); - - callback && callback(path); - }); - } - else { - return fabric.Object._fromObject('Path', object, callback, forceAsync, 'path'); - } + return fabric.Object._fromObject('Path', object, callback, forceAsync, 'path'); }; /* _FROM_SVG_START_ */ @@ -17897,7 +17675,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot var originalPaths = object.paths; delete object.paths; // remove this pattern from 2.0 accepts only object - if (typeof orignalPaths === 'string') { + if (typeof originalPaths === 'string') { fabric.loadSVGFromURL(originalPaths, function (elements) { var pathUrl = originalPaths; var pathGroup = fabric.util.groupSVGElements(elements, object, pathUrl); @@ -18933,22 +18711,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot /** @ignore */ replacement.width = canvasEl.width; replacement.height = canvasEl.height; - if (fabric.isLikelyNode) { - replacement.src = canvasEl.toBuffer(undefined, fabric.Image.pngCompression); - // onload doesn't fire in some node versions, so we invoke callback manually + replacement.onload = function() { _this._element = replacement; !forResizing && (_this._filteredEl = replacement); callback && callback(_this); - } - else { - replacement.onload = function() { - _this._element = replacement; - !forResizing && (_this._filteredEl = replacement); - callback && callback(_this); - replacement.onload = canvasEl = null; - }; - replacement.src = canvasEl.toDataURL('image/png'); - } + replacement.onload = canvasEl = null; + }; + replacement.src = canvasEl.toDataURL('image/png'); return canvasEl; }, @@ -21736,6 +21505,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this.callSuper('initialize', options); this.__skipDimension = false; this._initDimensions(); + this.setCoords(); this.setupState({ propertySet: '_dimensionAffectingProps' }); }, @@ -21781,9 +21551,9 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { */ _getCacheCanvasDimensions: function() { var dim = this.callSuper('_getCacheCanvasDimensions'); - var fontSize = Math.ceil(this.fontSize) * 2; - dim.width += fontSize; - dim.height += fontSize; + var fontSize = this.fontSize * 2; + dim.width += fontSize * dim.zoomX; + dim.height += fontSize * dim.zoomY; return dim; }, @@ -23138,9 +22908,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), - leftOffset = (lineIndex === 0 && charIndex === 0) - ? this._getLineLeftOffset(this._getLineWidth(ctx, lineIndex)) - : boundaries.leftOffset, + leftOffset = boundaries.leftOffset, multiplier = this.scaleX * this.canvas.getZoom(), cursorWidth = this.cursorWidth / multiplier; @@ -24261,9 +24029,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), - leftOffset = (lineIndex === 0 && charIndex === 0) - ? this._getLineLeftOffset(this._getLineWidth(this.ctx, lineIndex)) - : boundaries.leftOffset, + leftOffset = boundaries.leftOffset, m = this.calcTransformMatrix(), p = { x: boundaries.left + leftOffset, @@ -24467,10 +24233,6 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this.shiftLineStyles(lineIndex, +1); - if (!this.styles[lineIndex + 1]) { - this.styles[lineIndex + 1] = {}; - } - var currentCharStyle = {}, newLineStyles = {}; @@ -24480,21 +24242,24 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { // if there's nothing after cursor, // we clone current char style onto the next (otherwise empty) line - if (isEndOfLine) { + if (isEndOfLine && currentCharStyle) { newLineStyles[0] = clone(currentCharStyle); this.styles[lineIndex + 1] = newLineStyles; } // otherwise we clone styles of all chars // after cursor onto the next line, from the beginning else { + var somethingAdded = false; for (var index in this.styles[lineIndex]) { - if (parseInt(index, 10) >= charIndex) { - newLineStyles[parseInt(index, 10) - charIndex] = this.styles[lineIndex][index]; + var numIndex = parseInt(index, 10); + if (numIndex >= charIndex) { + somethingAdded = true; + newLineStyles[numIndex - charIndex] = this.styles[lineIndex][index]; // remove lines from the previous line since they're on a new line now delete this.styles[lineIndex][index]; } } - this.styles[lineIndex + 1] = newLineStyles; + somethingAdded && (this.styles[lineIndex + 1] = newLineStyles); } this._forceClearCache = true; }, @@ -24528,9 +24293,8 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { } } } - - this.styles[lineIndex][charIndex] = - style || clone(currentLineStyles[charIndex - 1]); + var newStyle = style || currentLineStyles[charIndex - 1]; + newStyle && (this.styles[lineIndex][charIndex] = newStyle); this._forceClearCache = true; }, @@ -26225,8 +25989,6 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } }; - var clone = fabric.util.object.clone; - fabric.util.object.extend(fabric.Textbox.prototype, /** @lends fabric.IText.prototype */ { /** * @private @@ -26278,24 +26040,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot */ shiftLineStyles: function(lineIndex, offset) { // shift all line styles by 1 upward - var clonedStyles = clone(this.styles), - map = this._styleMap[lineIndex]; - + var map = this._styleMap[lineIndex]; // adjust line index lineIndex = map.line; - - for (var line in this.styles) { - var numericLine = parseInt(line, 10); - - if (numericLine > lineIndex) { - this.styles[numericLine + offset] = clonedStyles[numericLine]; - - if (!clonedStyles[numericLine - offset]) { - delete this.styles[numericLine]; - } - } - } - //TODO: evaluate if delete old style lines with offset -1 + fabric.IText.prototype.shiftLineStyles.call(this, lineIndex, offset); }, /** @@ -26521,9 +26269,6 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot nodeCanvas = new Canvas(width || 600, height || 600, nodeCanvasOptions), nodeCacheCanvas = new Canvas(width || 600, height || 600, nodeCanvasOptions); - // jsdom doesn't create style on canvas element, so here be temp. workaround - canvasEl.style = { }; - canvasEl.width = nodeCanvas.width; canvasEl.height = nodeCanvas.height; options = options || { }; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 26439d5980b..43dff80c00f 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,9 +1,8 @@ -var fabric=fabric||{version:"1.7.6"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(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,_=Math.sqrt,y=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 y;if((f||d)&&(x=" translate("+_(f)+" "+_(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),y}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,_=p.util.parseUnit,y=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"},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){if(t){f(t);var r=p.Object.__uid++,n=d(t),s=p.util.toArray(t.getElementsByTagName("*"));if(n.svgUid=r,0===s.length&&p.isLikelyNode){s=t.selectNodes('//*[name(.)!="svg"]');for(var o=[],a=0,h=s.length;a/i,""))),r&&r.documentElement||e&&e(null),p.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:r})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));p.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(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:{},_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:Math.ceil(a)+2,height:Math.ceil(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=i,this._cacheCanvas.height=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),"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||(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){i.fill=t[0],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;return!1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(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 _=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),y=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(y.x+a*this.rotatingPointOffset,y.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=_,g.mt=y,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"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,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 orignalPaths?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);_[s]=e,_[s+1]=i,_[s+2]=r,_[s+3]=n+y*(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)*_,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[y]=w/C,b[y+1]=O/C,b[y+2]=T/C,b[y+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*Math.ceil(this.fontSize);return t.width+=e,t.height+=e,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._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=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(e,r)):t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,_=0,y=g.length;_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=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(this.ctx,r)):e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&(this.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&&(s[parseInt(o,10)-i]=this.styles[e][o],delete this.styles[e][o]);this.styles[e+1]=s}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}this.styles[e][i]=r||t(n[i-1]),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.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="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),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())};var e=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,i){var r=e(this.styles),n=this._styleMap[t];t=n.line;for(var s in this.styles){var o=parseInt(s,10);o>t&&(this.styles[o+i]=r[o],r[o-i]||delete this.styles[o])}},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font, -h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file +var fabric=fabric||{version:"1.7.6"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]}}),fabric.window=fabric.document.defaultView),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},createImage:function(){return 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?A-=2*f:1===c&&A<0&&(A+=2*f);for(var E=Math.ceil(Math.abs(A/f*2)),I=[],L=A/E,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=D+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,_=Math.sqrt,y=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/g,">")}fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),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 y;if((f||d)&&(x=" translate("+_(f)+" "+_(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),y}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,_=p.util.parseUnit,y=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){if(t){f(t);var r=p.Object.__uid++,n=d(t),s=p.util.toArray(t.getElementsByTagName("*"));if(n.svgUid=r,0===s.length&&p.isLikelyNode){s=t.selectNodes('//*[name(.)!="svg"]');for(var o=[],a=0,h=s.length;a/i,""))),r&&r.documentElement||e&&e(null),p.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:r})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));p.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(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:{},_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),"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||(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; +return!1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(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 _=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),y=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(y.x+a*this.rotatingPointOffset,y.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=_,g.mt=y,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"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,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);_[s]=e,_[s+1]=i,_[s+2]=r,_[s+3]=n+y*(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,D,A,E;for(T.x=(t+.5)*_,j.x=r(T.x),h=0;h=e)){A=r(1e3*s(c-T.x)),O[A]||(O[A]={});for(var I=j.y-w;I<=j.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[A][E]||(O[A][E]=m(n(i(A*x,2)+i(E*C,2))/1e3)),u=O[A][E],u>0&&(d=4*(I*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],P+=u*v[d+2],D+=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]=D/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[y]=w/C,b[y+1]=O/C,b[y+2]=T/C,b[y+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._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,_=0,y=g.length;_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||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 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="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),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.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 3f3b841f3fd2b1f29b7202a3821c1a6403d7d8b9..d9b69229fc92cb6d938d4164ef68ea1021f61f6b 100644 GIT binary patch literal 69099 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 VjOz;~6C$fP{{P!wXT+=J0|0@r4!!^Y literal 69708 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

g%B~4h=l@{y9V+C z;EEPV@_{=tn z{fRmou1gp7kqv1*~MNM0?hM;(1@mSdN8r z*bsiAcL&k!pY`G9ZbPnI+>~2$m*|<)yzb`mN0<;nxt25zf%q(~Wu6d1^_NX63=BYtKNqrb zBN`uRD5AnuC&CbSx@4!+;oxC~@q=32r;w zSEeonFGwbodz+Fns#RQHDIXN(g{eeEL0Y;=tvgro3NXQQa00mS5>^w7S<@Pa2F~q0 z<>|Vo=BBhr=2wwui$UE($6eJ4EN8bxgns=_lCvg~M{|c4%8Mbn=TW#4-rcovm0rW9 zB7?;FCMC$dyL;Xz;buD{OH0`FwC74&ehEndFd(@RU$}JvG~Q)F2D?$qP#Ao2{nD^i z*d+DRmMz_Y4IQT)0wQxG6cYhW^9$K$XREelpT!*c-q=7SNB2Ersvy zHl1jMBRb)flls&UE?~(G^v~aD^E2YMR_TjmoOx+Ss>kjvZHL@m5CtYtBd=D5fRXX+ z0Qjf58@UTNBhB69F{Ox1W@K&-r?{zURrtsf&|%)5lvFgr(v6_lJ1^sKMJxUmkzu`a z=1-5wx=Q}}sC>!eYRj6k>HLyW1Q7FSxMIl$Psjm#+WWR&y73OEt}>CQO$4>^0DY(3 zS*Dj4fo-)Ff1HygN{d{Lb-2wt@XBq#B6^;I$TQ%6v1;=SMV=wIg{M493$^WIZq)Z@ zW8KpfTC`9pvY>xD1@IXFph0%WD(Mn(+Z}Q87v4~g&>N-A9HM2&-3jT4RC0ty4j}tt zwDNXq=31A~mt^;`dn>VxmvVfg?di-_8#r;r)`c&QOfvLTe^<_Q>wmO>E8NMqhn0tD>8l?iZ%T<)T`_MYT=rr)pLdYe5}OX|d*&Hu)}s zp_W0M&!SQKvO0Hkf56%yl(#!t4IQWg+b_-jy0QJDCcCsC<$m#A@wF*8+3DmCt&q0w zuIgY~H|3WQR-UYj#s!k)6sQ^HR`-FJwpOB=T(<00k|gMrr}5kt_SF)H54!*851xMq zWM?0l$+CggUP>H75BTSS5#5eQ0T8%>-+kK3gd`L=y(QEg6wYEg%$~t`GN-NC`)$i- zqU;0r|CY)=s0-kbOy_#Q;t!1Ib~-|_Zi0P?c^`m8wgWs+G_BI5iG^{snTdhp&a#Yw zA-B_pUD4LAb#DIh!%M+Md!(oM@!hsIcK`8w z41@ni_xZQO=XgS3XY#{gIR(20{h?^=5B~6+BC?cs*d1z_zkkZJm-BpUWcuzI&sKE& zj~dDfrgRK&cnt7VjMamfQ;g}PG7e(sz|zP$ASIc9i+|t6|FsF`bsmYz2RCw~SmJn- z-&>@kir9iKaCt)y6|6bI6|n&a0FY$h(zT^2hKr}8-q(dH%81v#0k11jAUjCZHl}UUWo9Un|0#NWmXDZ7Fj90meUZX zGw(_b4?`E)=rFvJwMIdf!(h)<#Uf&>)h(iKMAWNb_QgAr1t@e<VlQ*gIey|b*{Lmy)6x>suq zAIdw&E8gtl{@7%D_*Ox;ls4Yll{k0Zr7D#ZwL&Wd)o1QY^{lHf3ojzZ+q9YHEDL66 z8P4Y{rjSd$5xITzB}NvN`)G7yCFHO6H#JfGbu^kOenszDLID~gQuMVAF*AlraF!SQ z*_e!)?Q_RF2YMxSJiMKA_cLfR`ziRzjvb&qV}s`^J#KJH`eb$2iIdX_o1)B;7Mipz z&8)?xkxblQcgp~UNy;e<=_=ReLDST}Xs1xD*`$$eIr91pWe#g0ZlET4eO#Z1)SFhY z#+Nbx_>B+21qK7)`V)#~fQ4^xnP39oxs=3W8eB{QJ{HWZYYS)Ng8c4ao9A)9{j7Nkw}jC*|s4vM;7W71SCTPd?OlCNc-g)t?Zc z>HUUFU0+Tp-8pVnNeSl`zpJ6G`iWh_aco<^qX$@*QlI=8;MtSbESTc< z3<->(c?6@FARU4)QC?ko_(jh)^hd?wg$16J)&|PAk&k*wZsgBO&EG^}{KZ?QY=Ky9 za{=T7dH`NjGg_!#=3Z73wmf0&<4i|Rmkity?rprVz4GmKsX+0{Clo|QOlz<3Q*E^u zZOh%W+Lxpld!beo*KUrU$9liR1pK`h^2_zL+9u+RS^-`$wD`&j8<%3GxDa8D<{Z3d z8964Epm_-YVDZov7GLo~XSgdVK%SlOMx`lJu4E^`!BYuMG&bYTH*pi9KfUFdQ?V{-*1dTC0?p4aw&xte2Nve!1{bBR0+?}T;8s)PcJ1Pu24d1+P#3T(+U=boo-BFSuAtDX zkX^q@0N&liAHb3fTyB`$hwW3&%b$Zqr|jhv{w#~-&?RT>R+?85wsMb^6V_GdwtVxz z{@Ty(?)Hy_s!6dMAkxlY9l3qO9}c>X+>ao31LX$&{x`Vhk@mfDSN_$(!G*g;6RsN| zVsXoDyEH@?{I<)7M4x%`ihV@NeD1H@mBe3LEODhmqUgCDIYsGnbT>~Kmwrd%Cb+kz zSt$-L*_dxcJte$nL_LG3i?Qk}D_RR3&%UQ0i7yg+3>I3Z^+L2`TXT8DgU*HROW28$ z@wn`A7rd~$0zdJS7r{9268?m2!ikB1QzJ|MGvhxC{xdgb(q7!%%~3%c7Q;Z1=k~&( zZFz3b;ltUZeQ^U(D`Ki3O9FvD{AaZT%DHSM^gC+>RDg~VZq=zk=9V8|`NQ}#H?Ui5 zYPcKNEjQ9);ll+Qfey#b2SZ!E3lTTtlN6S-balYTz_r~CBFq^%bodwOkCnHKqAKWw zwTPl23zEwRQI_UE>Hkw|7Kmlm&t~T}c2lu3yQUpdL-9sk@S~;t3@8 z+yGB}1_`$9`T_6du&H~$+v^}--p#^v7O}f^5^XP&n11nfhdUNU;W}e?DO!3{Oo*Pm z@6egP1Bb4AgjHnQ)kPACq*ai9Vd>qPKNoU`*z*o1kaC~+WI`^}fIZ3XMBx?719bC! zhyM1_5kFLveW6me`9UPuaD`UoR5 z^(rD2OjX4hr5DIO3Le+IN6u3|@u$i09q-N}ScMT4fzVqX5J~uAr${)#PZ^CmhBBVM zMZz@`at93k$^$j8oqHAOPv!k{nFU`TIjVgRUC;3!O%J5YOdl}nef^v1GS6}S8|pIo zSMj1cf>>wHW(ik5K)Z5?d0j+^EI~Y5CaF~jZg%def6MEtG)aE1j5XVh3cizUmAjYX zvCh{3ojj&N=45CC)@m0QS`4ISl4{PHDS|r`=#QRitO{q((LHG9Gdl24N5v26O$a}w z2j%=uN-xS$?6avKchFOFCvA~I?Q>w=JLsmljn5o37CX7^*&_-Gj zV4{V4IQ7+Q3IfrT-&y2?toqNSE>rtMbKKN*MlNx=#iaShedZ$(_|s+u=QMDG-q~5! zcE|9yb?4$=;12>yu<20+2jkApZ2Yl_aTPHRWLy>*Ki`{i#xwG#acXixBAu=xsDC@- zqMAswhYvqIT#H_E!%M33{_9FFcxg@t)D&&%`(wU~R_4?S@oINgdqaOC`a7e)0sUPP z3wJ5<&fAvkcZ)&}F5s1K{Z8G(B;fhR)XLwH^V7rvSLo_o3(s95L&`oN422_-{^3I= z6Y{8vWHLHuyx_;aa(TFyj0!JcE4N(N(rDJ3&wk$94qg}ww_LX-phZNIPXs0`OLhn)|$%7hRx+eh%kwF!YIOm&kN&xMg&1=^YcYjvZIXXF^2%bzUDW}_> z8P|T)VD84~F~LR;V$NW;1M*7@Cfb{EEg zTIsy($p*C|{J3b_T|mD8p7z?ktgtMiibA7 z_X=15AA1Fe3Mb!AM=818Qe-VX4ymGk6|6elmT7!_3_XoKGeS7YYI4Qo^`9;T!%+xhJl>iyd6tJOTyxD%i%Q<&<>w8`g z=5C?jVC3$H3#6&5C?)0b#T<(9@(w@w4WUbKKhk|&LhoIo;fSaq@~`a3y|M!iUh<&A zEmzcvuh+W~jS5eVy1j4nWEU+}?JFA}M!?--Aj=xv7JfM_Gmv<&P%!2V+4ALPvr{!M zRilUA>VgwftQjp=ttZ2AW`}^Wyo7%6i^(U#=%MiXMveD-QA1*c@}sJb1izf68$MlK zVpRAM5RQ$xH;2Ng>M$I!wm)=I^@M|AB*5sc5HqTcjFIN%+SQIPqx0%=R$dj>5D;SO zu-kC)lNzU3tO0=DkPjff*4B9@+# zTI_P@3BJQ9uSwkobpitv@%pPr7oTznmQV_^vq?T3*NGJ=1yGHLzjYEuJX_IbO`&e_ z+%;gaw`sEa`P2K#LyM+Di(G@0Woxu}|LwzjJoWc0UMLXf2-6_Lei4nVWMM?41UC*J%-&mZ4NP_fS@;`40kw8k&^1Uvi< z=kgHl?uazxru{wgeCeq3+WMOZE??H1Ri~LIabweqM+<8w+8m;byl}9 zPV-V&MSbOj@7eO=VWYf$&Y+AMG>~9|IUbkp;K=MwMvh{1rpA$$YKt#iIToF>AOh*# ztRk3LehttB3IC>*|Juc_;p`q>%VHtXt@Kwsc*u2L&C{~Z`61f$Gm*>BUG5SW*ouo_ z_QmH90d$i!7DA(V;R4_aCNA~);{cLlBqccheRtR2)%QTtl%l!NWuC(EGE2NE zJ}S>B6dP|=Z&c@NvWfA~6_a=$-gX}Dn^B-C%vsN=#(K1R@i z58KNp9MA%s#(r)L2S5x5p{&0P`)*VSrESfZbjfC4-Ys6^;qr)Ko;QwD%2W7OcXGXx z;vp01G+FElPWb5?LvzcAhg3}sDx=sySrT0_$+H2O&XsQ+w<%fZ<2uF$gfmSGk#?wS zZX)8&+?ok{EMUkn*E`39dMiRwe9+^b0oJCe(S^m(LUUZ9HmDp26@K-IN)0#o`@{Fd z8Oa}dzi-m$%oc7oLPv=s)I+)QO_9z(c_=XCM%vz-8cXn&8LY{_QGs0h{&hNo;*n%&lct2yyLP!?PY;m{Oeh3Ot)Ok zS-i*GU_P&TDVscCFh2U5cHX@agMiO1%mMl*{&NEaMO{%*$k$52_m;kQ^uBqJzI;rp zs!c~L_K0?iR%M%;i#!cx`9n>1iY|BfKxN5?TJ30~?Nmm4^62(e>rT1sBYIG@FItyZ z1rN2`l0{qCt}OLXi!Ie+OSL!;ufjQdsJ)&n*u(aCnTJ~Isn&X`HTGw7e$v~y5y#7x zLR%pFYuA96IMnhVirlqB5!vW$M1Bwh@o z-6Zi_VOq;ttQ}H~t8h-pt5TyrB{+JU05pu7Axw>scf*BlIIbB9n-hkD6$LjBRRnWZ ztw=_yiqr!pRZlo#YSHlpF9RE!<-dI{T^^XQTbvmZk3f-oU_CFgeQwOQ)wAJD)0E#= zt3qiyM!OEyjf<`peAG|{L@}H+Kir9DzN#~(gQO_TU0Qq%>-ad^G)|M`LB3IZBOQ|X zZqH*+>vw48lrgHc_R!WdG@jjhCbY&fBJ`uYbb8bM!u<=$N5o~Sxg(ZQE7**5#a!sM z$S0~qJ-c#GLm5EbDEz0BsJg+o8~8S&i5PJWp_mxfxnpPIt3}8NQ{AO+ryQXeIa6^; zYdL4WR$i9rXzj={BVou@yo=tOxf_4kn~nO1espjU9r}ZV1Nhz?9BklwY;$iiz!mD_ zMGfe#HkUTNpT#LL>=r!^FZzLS&%?YA@IOyf%9%ph0ur~u-5sgGj;$l8YX%2oj4EY7 z9|L8|qC&u*+`j}Lx%y(|;Rj`W#O)t=%P`aOB^OlY9?cGyqZz&n;HQ%r-dm;}N{E^gHcbf&Eup$l^QMKG{|}u-V=hX{(=Bqr=uev4 zkUAberj*~RNuR3#POE;63hVhp97EVf-~HhWH0C9j7H)Vr=zTlR+ux%5q#WouFFfo% zN7pll!`@R!;L$b&I-%40*2{NFBy`_7m~x9(egLNC0Z1t|CtnwjK2Z=|OYtxLuq#hS zh42VRWLM6(zbusAeF)a1*=|Nn@~Pu;{V{%rO?v%AAy0{8CqMG))Oh<^YrrKG=W0Zdx)NoJ!AYQq@R(Fx>M~L zTiWpxDmirso$G0U7-SkAfQfGh?WNNjLM3q20GdavsKkIXKjO5KDh$4=#^9bR>Eo%Y+km2`s-@^(0UkL4 zB#mm)r&et*A<1ep*)*f3zo9Q|`y18fBgXSJjRyC&S{^dHskH8jM+@rbbPsQq(binB zZua0?)LG!R%tHCw>O(6YR7981W>!X7nVuCNvkk?~xt=wotf8J2&@PaJ=F7sR_lfBV z04*$rS)FA$skLJSWYI#uilmP5n6Xk-)DmW_waZq_ce6!zf|=#xngM)Y<~^&rHS$M_k$UE+ZAlM_V{dw3b4h768gFuwotL4l5j}brypJg ze(!fgmt%T$$v&Ik4&0|ZRQ2qh&D+lS>>E;gasP56MyM?9A{o;llk@kU)}bFy-eZRl zotYgfH*@w)eazRj#?XB2Z)2bkJKqPL#q{>O-JSaWR{MUYeM4u^bWB#GlTH3@@aHD* ztiSd9Z{dHIdx4NnVf-J4H%tUEd9j%-vk(iseamAmQ?xDn+jo8Z4}+`}WHFWhj;f2o z6%(yta22FU5>tNOTpV0&MRQm@iNY%;s>9?YMNiMv`pf4SvEHQXh=~fYM9Su(bC{fk z5$p$uIO^knmYcI665YYv*R-WEKOg;;MNx7sBA|i-^cI{Jtb2HcQKCd+Robzr#7Och zq^?rmVgk}l4P%AqNYxn7SkLZ#BVVA!IA;t5k~aY2z8nvj!=txvwK|41bqpKo7#4M8 zdL2(|>Ui2v$5T~@*!B}uQA$Wz1!FUqag;rIHr0I!W7zQq(_Lka0-woGBMGRHuUbAq z;MXl*xhhlpjtRU#%UAfSAzEHn?nau!`34BzHvFTH9{fW?5Iqmfy*|OIwn)Iq8(E*0 zvleS1-7Rt^An|7f8xZ-kLmx^1mc48bfbefGJG0gj*!*E@)`>Eo%ImvB z5(5>P2U_NVnR)0w!y{VDJk&A|&CJi-Z%KSK*0Mj`>nQ@ z6EheTLB8s?N?Kx44}hbfn1+sn;6Oq&ec}1q*5Fe^%oJ**1-(G`7lk~HPmtI6C@K_= z%P9%Hv_ifvaBF6UGY4ZAXKJ@+es=Z8cUw*0QhMKf zJ^sFKEXV^(#iTFX&c zp$9J0t;9R{-NX11Ea4sr0PF#}!QwX5th*(bmGIL8G6us#9v)(Nr>@INdTYi5c|u_j zUB}sCSN{e8%fCLu7s5hF`l2TLY`jl{mO1%vi# z)T1U8cLFP(QEnL!WDZ_(O07R-pe)t$DhYl~W~r6RCm%iS@GrnCTD+d=v&!_@$n=@? z)Q)5qYt4Ze_Y0{J1je}_{CAq;7S>4u=`(@!!wS;ZoqX;T07{t=2Z%bWE>hN0%jNRv z_q3&Oi@tcJzPS=;jmeVmt51$wnR%~%k;e7W%7DG0*iLEHYWoWaj1AiFqx|V(nygux zhiF&`H2|&#vWt-}%`ZRHo0%GW)v(RcW`}s0@{(mhs@eL@ie^5=C#1u~$Ifxlp%HK& zfYdB>1=OJcSrGAfS{T!RXX*$n9xE&!D=ZFl@+6+NeSJ|n0(tj_5-Z0FE8`P)l@gyj z5*zo1Fh>6gAQua!>fP(}CvAak+E1)Kxf1B{C=)MQ0z|Uo_-DYxPu%+D;+KU__NseS zI5V(CBUL~^mpJ6Vvi-!d_MSMdL}fbG0h(`O9h%0!dloF}lf9dP58X-u)49<7tq5%? zbTbrbLrN2&Erwp4#ZRVQ6NbaqOsiti+U!QJakkZJ#FvpUkWyfAqjzhu)w)GZ7lbm` zB`AZO=8l(flwlnrDGL2~!dDb)#5=1}$w@X9OWwAC-hsx6Pw+L;*LzY%##o3#t~g-p zD&>f2Y>jl1*xM7DX|YlL0s;gAavy%$MGbEo!HSgZ=01jZ>lyg zG9lF>pP@*xduwNoo&_cXBk08lw(te)cmv=Um3%Vh+o&YfYQo^qF@PB* z_YJ^&m=qc_K^=^77+l^1e)zOr6Tpw^815x`3ap&Xfm3+YUKXCS={0%n*w;C@8D3Y* zgE-vncINY|rafqhPIPZI1BU`ib%i#v&W{_7i<7m5oN?KupMkH5k*N~J?xwNWY2gvj zU7%$(P{$=73wQ!4<9?|B{kxyuy!`aTr*?b&2Lg?vjtC2gXJ6U>+T>MDrkgis<0pg<>k7K+g6@Tb)k zjnkp`)0JY1jlMj|*c#2OFKcK}(QK0weO`gnUIJuY?p#Q$P;MGE!DSZcypY&WNwAeq zVXk*w9x&qul7=wJP#EHuoaWoWB>R$zsb8#2A>>h!-uKai!@p3x4M$IBKBRk2Xkmh)yqWFqP~hq_}@ zEXPkje>i{p>E+SsyW^kEU%&g|-RX&XDMJ)5J*v&ygtJK6Bo~oR%^U1RDn5NZ7V6(c zj3mUz){`8)oVs$Cx@?Tjqaagxpp38&rbKs_;{JUU>Y=a>}^+?GR z=_#MdmC<84mK1F$(?*WPe_)QaZ^=aoFhE%(r!NGPK;CTx`5?IflqYLrQdu*DX(+Oj z;7jTg(d=|?v=`Aa0`_B^bOdfNlSr~U0NP#@-F{Wk5Q}mULA_xF40FLT)>!5zhhlyA z8rU49&f775A!Xjq@QXV!hERwh;l&t&X`5*FL-NLoCHqvWuayuJZkCgCPVFggLYR_Z zjfXv|5Nqy<-XfVyS}y|e-6wRw!Qjgv^i*_}{QXy;<)!HRYplV1nv`uk~AacKv6mB%F3}qd8WZNFzyiJ092gG z$ugKH*IW;knR=)^sYwx47L_#{=O*X6^xFnheMr^0X`Z0LVgWesg!^0FAHaz^i#Bui znk|A&#Gi@Hy!}RLVinDDU(KXB$K5YbPfg_<4X8o{s&J}gkgRk(?_9l_s#2};d_j1J z=Yn-RrU7OzL^V&t}SOzOe*a(wkQ{V%fy>#Gr!6wUKrVt)s$3T;WEQyUoLCgF# zy9&v}7o8)v8s1oa0n^{dA<_w8)+k%yaKAUd;gyiZ1s2$wZ)MC@#H1_(oZwptmWO^~ zmAtsD40zXMzPG@?T>67m6wuh_(izH%K5mjM%<+U7sydNs334nK#@3$7{DGx(c%9`% z5M8@b7m83dgEnu#yR4Vt%&IA)V(5J2i_DM5DhbPZ3tIFVROuL4q8K^f?Zpm#yzJXR z(3GOb>;$7l{?!yVQ)UTLiNWHx(5{7z!;ffDeSL;6y;^Hp^;{*~1ONp9G*bvauR~$=u=Flgjk;zw5vehbyKadlw%)M>o>I;ztConK0Z->%%F8aZ^BxNjagJW4* z6fv+K%ABQcvC1UET8<_<2o0^+ViO^)l){R!^f-PwpMRpIzzp~R!fC=Q!Dsr?B+6c1 zK;kiP0}BSIn|YdSX3LWqq(^wtBkhIFpRAGuMi*bciGz!X&9P2=g#qEVxc?Fp7xH%v z3jf%}Xn$GfSX7KmhT>NY%Ci%^lKw=8xQ^N2tfodku{?|e%tSqd4y^MdF4}@T+O*fY zm8}5)!z~O>+RG^FUWD;nNGSMnCc*&}5NSL@h?w~^cUX@!=H*K-B{tGM&^c_8cg7sr z%0mxe^ne_YiF;S7z!)d0;CFRED2$(uwOHHCguV$_w*+KG$ya8AUCCN5Pas)WUTFW6 zv-0vfJXg9cOX`{2u<#x;Gl+!~n3rSm8O)A2aq5uuMdc=!lkUV2G?S z9;#WaOIBKyaYJj~K!9Rny$u!0JN~GEt2a@}T^N7Vf=>~Bw;FmOrt!YI#M@CkBM&@K z8{!S&urq*@Bkgh(l7>QVQ)RHA#qu^zxVYeBHIpJuF-lvYV)tj%hr96ArLko!eaBcX zFGbas_Q%)PT-r`XcDt&)Hm;XhYr<+q z{yGWN(XW|ywIQ>n{FTuVuQ*&TJ4L6V=&Uk3rZ;NP5*Qzx((Vj|CpfH<$rZ&aRU=sxw@>i761UUwq!(DX~cn^5t>>A!N~TuCIOHUxN@0 z=v9>PJI+S^F;ebpUGZvv8XKw9*S6L-R&(}h)mniH8R^$YO9eSc0hC69RhP`@N11=2 z_g8aAQeE}XW?W<7jW{s})yiFqf*sCuSXJUqP$1{QdL3uN{S*DjO-dk=a-ydKCbW&IEu@LnOw!~Jrv~~#h%&-A88XDhlt7IN8v4#;znN=@m zOIFTpL~6N59v=(!20_knKY50=>V`RJ+oJ^}+? zN%(9e40GtQdgVf8@@(4n!|qK7<;CgbIfb^JMEG9o)~yy$NwkdS+L!!zX#=!1>WoL= zMT}ec1-rg|2$!saE9RNsiVfE;*~|lu;!Ybv9Hg6CHQX z@Jbl3bE(7VxQ_*?IJ|3Dt4lf1Qx#qGl?gX~OlpX$QkOaLWpYCFpqcqLaEvcHP-1F* z5++iL&PZ#~CBD+PEF-%adA*Xq6mfa#SFjA` zBv+t$gr3qM7}aHh)ElamGEs-5tQS3-$eFFs{>p3g{U?~Y+{V&gkR;mU^;;@GO3x1t z3=S3IbciYVU|zP6$xsX3EV$yhOWk#Ji64+lTb*&EI{9uvPHyMXjX4s4HfjY*NGi+p z1=~?&MCNI5eIyE~;ma}VbsHVvl@|H`|<}_G=8WSyZ@N0bAl3~l`<;_aJrXI5-udkF%Q!!U|^!}}&;XJeA zjPfX>PjuSDGXSrXa=im3uBWWdSEyNsq-I^Tb&nJVU`M@?bk7Uas2f7M2&m}shV)l< zj`_k~`Jzm=E}!?|r>54e$^`^}HcZeIRm}(CtfDT-t&c{EpS%7frD3}yziViup)P!2 zmS3cl*Qb`QxZN3TRW8?oVkqMLx;$MuQR914Z6?&1OBtkLxN$3wbPA8~E2*XSYLirB zda6^)FqVeMxy2G_)RiM>F*{$>XRw}il^JRgye42!va8FA9ECqgyx*_rqY_tPI4D3z zekMXk-#5Sf@G)h<>LOwY;+o_aQhsCsQeTz$(p_xmR&HY(^7ETPBfq$7W@ZVwo5ONK zwQ1ve`Jr~r+jDdPBaL)>FuO14A*aGPwKPFx6{>EwS+9W%&143=!KLb+9FA{R(H=CG zkxuEL+qd>uJWJ5D4-J4>SBCEHte;QccD@rPzrf`OXyA&kGFy9NRGoC6sE7LYpp$za ze}47;-O--a>GghnderN^K7G9hz1$mg2ff~#pR7G7VJ-7~?e%)s*Vo0_7pa+BQJfD+wb1`JT^0j8Uu{2W=;(lp=!qkPJ#vr(f{{+wQR|(o*?DhAA z4y(9;lSase!Nn6dc!V_*>xxRpdi`j+Ap-dJ22@^zx215=fg(=pg)pgT+Hi%jQiVWq z%^sz82c6ROLiBhWIMgD=J;%7GT3j(NrOet4sUlCvhcc0|Ni?PrBZGUh6fZORju9FrS*EE^t0WJ$0XE-m!ajOZ{ZGM=@lag zbFITU%VsZ*=<;&DcMT{1-dn!je`GKQvG$@>$ljy;XR$>^7a4tWW}fQ6=RE0s^BK!N z1nHN}S_w>K`X{!KrnxEyRm^Kcj-xSaJ+bPdr-6zFiiwJ*CSg&q>TrgucLg~!F4bW% z44r`821ou*GrTWQQq!RIeyXP)UEzXExEZu8`KY>>Wqix}V~{U1H&QgXqNCi6-**>& zB;^&G!^LQWPFxporbLs?)Fne5^|rjrecBWr?@-EQIs3lf85|t!FG*7J{%~}{J#OH86bUw->5bRc@9cKUHW>>qouCa1hnnsG zi=HT7zy$8y5^!PUSuSF+N^kFp<<4E}$w*5_8@9bo8rhJBR?U#?6zMzonyST8k6w_e z^yJA|en`#tfzdU_8!MXz1noeIJ!1t)Y3!_?k7{fd!n*>g7 z>i4C=ps}=B@x*m{n2l0gRv+CL!0}fhk+qv-)g(Rn!JJY@s$T3lf?@)$L#HTluV#|c zkLRK|_~135+=ttg>#_Cq)@haL!ZN-I5uDXFRL>-GYqgO&%~KfMUS2pyp-<#o>?fLJ ztT%LF(RBG3#5{2TF+L%~MI}-Dtz#4t){KR~ty8MP#Jhztrf^wNm|&9U3TZ+t+=OX| zv~K3;7UrN2R3r5pv{M~jql8i9TeubeChd1ZGTy=QqGbrq8Aq@D?Neheb!$w0Y)zf5 zZTyK43Qi%a+@_lW&wiSqh|b`TjpyvKxOkwRuw?bZn_P>)bY$c$B=(Ej40I@{-mph+ z2PteI=!!5NQrXlMkG!AS#Mv@jpdUf9Cf_R;$eRk}PR&)z%P3NhsVX7G&b>f&zS9IY zaY<|K-#PyNh#eMl0665aQ$UdL=<$mutR6pjTzXvi>j2g4E8Yxh#;?vu>BFRM4wf_r zfxpy726K=e1`3zbt4RUk(X6ETAWy~Eaq$JJjI5ut&Y&_`ae4UYbaTe+#06CDh&gMj zJ=bgJSr(A?6T2q0vv-&c6&8r|d1&6XhI8l9(=SzMD(yB1O1LxY)MrX@1Q?9YU=+WA zx$Sh+3rBhJdQgV)BAs1U3MBEAJW+<3yq%n5)-b*&b1AC1EGcqk*wvW7W3tMQWzt5!bX$%T8p31y-w%%uG-&`SJv#CK07#2=zXnL# z0HlX?LmRc*|Nj8nwhp$a_;H%l3t1n#42+h+eQ5gWG0}CBHNMnCcioz>y~%{z`rDzj zd*h~pw(@F*E)8zNd}{+6?Ra~)ds2ceWe$eSm@gbK+`AVR+Fa&!R*Qw{m8(P)$l9X9 z{iBNjSsL+2#U5QmILP4CIB9j%m2+?3eE4|!`J65!p4?sy7u7QIlFAv$edRQtC8bih^ZsiSMCdu#%hPS)ZNBhw zVv)Hg%2scnF^BXkU9gk4vmWQRO~bQT<&10D}CCOn&?g3hqHJVM)z;2^4@DO)>gVWcS@-6Z~idWEl( z>$qC%d<`spkTM`gU#Gz}`Sy}$_bgb$mSQ3v<$!ic9Sl!uQT>PHs_wPCd+Lx=UDZ-7 zuR&v@KO16AMJm!1y^QBC=W}WiVZ1WVnggvyVc~|}@*c_dxj}=V!RO*}Usf8B>UWou zOr(H;Y7Wp1S*UI$j0c$|v{nabyh$q6SWEa!x6lx%k2D`DtMM0RK^wQygnI05Dj|yM z<%qN?;Df|#j?|19Oh!HQ?ZI@%4;HO^t~|GFL(g)DZWGWC1%LYX6osV? zPysYzSOXgPx(7f9{%ldxwkF4b=NMp)k@OM#Vb5|!VM~5)@v}0MkDfkR^?#vDXHjp+ zE2a74zr2z9vBbQmF^vT#@-SC`Vb=}~Cz}^()9{oRS=pEO)xMB7bL9fEm5|HXhF966EpEL}sW*~p%_|#4Vx1n1`JXdB$7ug=~ zB3gw|Fx)9ueS&QbQ|QXqQZ#}=XnsMXO4?|Y4Ju&2P8zi_)j^djyjeYv()$mjQ78|a zP&;f=I+*aVAun^}P!8?1$UF z1utaNU{%y=bFF8E!0)B*YDtB!2b>Dnh>0gMZ_on*53@ZER#cl)lj4;PB;#E=L#gSzDbYV0iRt5}q}jy?+_q&e3i;-+Dv%OoToBKz;raq#@dw zK~zcuI2Nxy><`>zorfzx)BF;By%t`p9*@5>?D)}g6MuOGd#Yvr_hT^trxR7bZHlEI zx(kXMXplD(MSy8_UchYh9=N< zZ=su_>`6MS?ouE+nE$+3*?BVC;Dw>6S6&}VPYCqtYW0Rtsl@Vm43$5oHgnV34G+;e z6P6MahWc~zUzz_(4gM=t{1;iP6(f8r23T`htv{DxlyQ__bgSqfs`!_DI6rap#u~4~ zE0Sl^$39XGne z3Cm$NSN?VfDvDh6lC4w`N2P;^mxbS#G?G%CnqvU+TFiv{h7l;0fx1rgByq1TVvf{Z zdVucg-97pvx|zR*|z1%>pl=Vqd`)V5wdUl`a01YI!eju7TlOqK(4QCe5%c zQiv8Q{+KaB`#?sDAdv0=g5q*XrjawpWe@^#OT`S=B+aC=5P~UBp#F}Ewp`fy%$76_*Mc| z1mCAi$hu6Txs<;r(nH1v7H_Zw((s?~>^X|U*%yo{190^cZ?;KOqYF8>;^2{_ zdIHw^t914ybZm^B@pIuh%+~kPn=8osKFo3kb7>~kI(F06(K!9JQ~uyU$C^bv_cATd z0mI?(Y?;7mDs-vnq%nmnuDF{?;=0_9W}DP>(W|k{)u4Dng;U zR7x9s?-b5b_-Xq(OmpSl&j2P7Y3v5+MzGOaP{CN1noxGff7$U*EkxMLF99!enl#E# z3Kp-T99VXQqmZ5STWL&;j6`|0Ld^I2bZMB8zSJ)w9{i}Z%Nxc~!3Mx~a?FOZ4xmNw zB>T~}xvjRHl>>F%s^J8coDcNOZf_pZHvd!l4;45sk5 z6j%-_*C>>t6!NGn1TL^tf{HM`6C-qj_wVaEdv}^&70D5LK{wvfA6dI7bT1QJluc7! zn`KR9SyQL1sVqy?nkeCq%B+H*`8u63Y$C|W(Tbe%H9YMcZL~q9V@#-uK*r?;9m*6V zLTzZcz(o1B6%SI^!QD{BCn?Zo6)81Yn#dN{(dfh7s0M0w1AjN$SZ{F5$5s)dFp`cm zpSEwx3YL9H@CR}QncN!HJh0z(LQe&sZ%7Y^q<{2xouJ+L=c*F39*zuG!IBxXCF1-RGcViUf<=dgFa zz^NHHk!-ikFQE~F%R(8Oz09rU>@IU<79hibJ)XdjGMhD$4_hIBrY#axe0Y-iK}hb@ zNkuNv&biObWp?x#cO}b(Bakdtfz*!Agm(Njv_xvCi|@m# z=r9r^eozSxa-O#)e>fTr#f%Zz8=3uLkL>Sc_G#cKtc$t1Wogs;rkhY|M2Gce z>>hp*xfyI9L+w-Y$smf9a-L_P!#plfq*NN0M9%!fBvKKw#luO!)I8>OFsk8Tr!QE< zf`-c-(k-_sw%j7razUR-(NfjFJIZap)>VIVl+%TZyrCjhL2)^S>TcN`=8IuzLE0GD zYc7bMrW}UkU#_V>F0WZ;O*+b8ezNC4q0BGjt%s^3n(!J8V@)}c)<26oMyM3ckFi+g zVyiUdEVFIwA5}#zB_I3^{iKog58BqeNOR|Ai2jz(m4&w#N6a{9S{)*BHqR6!CXSTR zH)5oyH)vb(q{8_d2CH)Z3*JH_$Nvu1`YRd(*g%Rn^`@F~Di|KL_LL`QiDATc(k6y1 zXR3m53j&%iF7NMCV%FiaXQwbqs^PpAI%uRo3?-DBd>H6!Q38IE%nW^jQtY7!IKlgF zyiDXK+UEs>yXwjem<&fp!+4$y$G|ha8t`jC7VZcq=~RM)#~n)5J{+qyPSMf&+0k&8 zl<*5bX{>Tf-;{H9LurLibvQb@ttTj1hT52MSROWq^Ef-JW(gGD%zz`PlUg>_NLkB7 z_2KexJ|l@c#O*>0>zYYLQpuS_b z9G7fixLPF`P&n@>pO0Bxw#Uy8T|i4KWBlInI=+k-YF))wIKgfbJ&`4G z#j|G;!cyDNQl17d1_A5@3=p&6B?;>RQruCBca&m^DHdW^xJ(9k@Gf?INoY_6^HAK; zp{v;@Ix2CC6aP&Z5Zi+34Pscx{^y!FTYD%ehd6_W%Oa5H2u57 zwIF?-AsMrRpp6WgK0^{PO=Jp~q;pt+G8SG}F?_`NNix8{G8xR?ON2+lxD~~%WE>uX z3yKS}U)SkswLwM(7&|yWs!1_{70&N#J#T*E%Q$o(7EOZ9?gaPuz$I50tycl;6f5*4 zc$EMPx{OAbRGpaucNCQ(g}vs%B=LjQP(6?e-o=E_3-BxMJAAw~e7+Lx68bPt>C?W0 zG1hNW7-BAm3qeXkqDK0UhqhexGIHp$AlcEBc*`ey0^E zbh}%r59?cDuNB$h8|b_`e9Gn>`nwppBP(ud#!VTTR1ctwW~oa# z84xMM%(ftR9Racu>Pp_fEoLUgDwU2If0Tr&22nM4sv4v?9nrFq6KiQeTLf*?GZnG` zp@*TjCNG1bb_dNCv*9huiTgL{0s$nSRb$<^%oqXkzOE>BGm;tv(Z`3GAy`M1EbMWZ zS<-j&4Ti_)U}g-&rmHgU{l=(lDk|HUl})Y6rlPU}+Zny8C)70j+e_*ZDvLg<6 zoMb~uHk@R`NjAvhwST#l6VZR!12k1<7 z;^?q60@X$L{rwzH9-^Y=S-uL>XY&YHn@bKtkMorX8!JjIJ-UoeR+BWj92sG22%~nc zBi%R>C%^ z^oaCmG7wKwe##mevv7b5)4C<>(pa)D7)ecu1Q&QggI^gatB{!uG+tEJ_LdHaa?xNTweyq9if2EaIV7mDDOd zW?gD8`_-A0TjLInG`#udZdV&Dg&5;Hx>1({roJ1n$0=Q?`jrE39`PSkBq^8_Eo9jG{IY+VA< zaznSv<}_}p{L$TMI~dgv^7^XG|<(cK(FuDwm zsr1AUY)_u(<``j}u!k_3F>WRS5ea;Eiu*44u3TS;-2yWb^gxHE27%ufJJ)4yp=?U! zC$Y3y!3;tA82C+cgs6GtC|3BOmUd`ZH1RG4jt=>g(`3ct-IR0oO ziCi(1LhjK}4RwVMy?o6dGOmGfsiot}bG{E^;;{yPrItP`Wek~9L96R7 zrI?z;oOoxELSGRpaw1JZrSaZyI}$;aFx^RIR3(9ifgERrphIawM2bQ1CVVR^AJ&E* zYKO|3?G|^ATEE|?*O{`4c=q4*q3M7cUZ2GXywIKik~i}q(CzScZIuxR^eQSt1VCv6 ztbFU@Z?Sl@%vTFf0ZI?Iym`PGcHEuW?@HU3RO=mjR)oiic3X4aW7c8#J>EH{?c~HC zHBFUYtQ$ByXmSLG5%nHA3( zO4D_u8mAT4xAufXD@^?zRgKaPTau%~hZ}p3H^H>8wBI+5ybZd|$896N=Br0dJ?eO;{8i>j}yzbjhHZhKyKK745{6RNfy6lwzftl6yoZslOe?a&A zgBUjC^?Z56Y8AmKD9VDmE*gaHw59!5zTbGzqOcch+kFem6zUrNt4j9+@|_N=Q_YMQ zd-$q-i$2KAY!CPrww5(Z1Wn$hQ}mD;iG;d2$y7N!Amg@%rIuMAxVVf*22L$mB9J5s z&C*O@zDY%GyFRoic4`~2GwP0}cj@Ih`gi2mn`!x65UC5%5HgxJDO#tpumw5m^`&eS z)UT?V9rZc&(aN=l=h2I`wOXCF zco!?Bai?M{qwS^A5<87)L|}lMs@%x$;&f7Q)4S?uoym43A3c-cBgb+!`Dc<8o9#1^ zA0hK^ECcf)tA4yU<@&HQCv-yqgDpGM~MY{Sn#<{yOiX?$$XQjwE$G{4=PRqzogzey2+9@o8H-aHrWliRxM$oqy z$x*&97i2S_-y{>)RjR{T*_CK2nFonxTGt}&{_ZWl6gf;F@u zFd^aNodf4GJaVIb*l!nmz1Z(_XC8XbEL?u@c#kig!IvKY+jgr#c2Wci@?a1|fx65> z{S3Tpw(tzj(wPqt0fHmR!RGZ_vG&?o(d{vOE4}Y%r%Pdy_*#^#l|EYnWgNcvwb`=ncCxTt`)qDj+`MNUd{WAwZOCQKd zHdiX!m+9Z|gM1l`{UY&%8Cmd#(PCFD z&m;Tp<@qD_@*R0P_wpTiI`;A%Id<&j{#-lua({-0_i}%}oqPGtOr0aQd&lNE;NP@4 z?veZUj?BBZ?j6}acK6;<)b0&@N5%*Da5WOHS`4LzXhl$qbdu@wL{UyE6UV5lK#VgA z!B?G8&s2}t(28f)QZJxR@u?+D=DXldwHI4T+7?4IW{;!pA_Q8xHD5X46{7uGr;EUT zJQ_HbrVrP*vpHO6Yf5#Ed@G^x8Cr4ro6v0QDw86Oa_C*>Rg z2QM3Div{`+_SdSsNv~2qDNqJg(ZczXt;zme4c}Hhw=ZtmtlP&yK+EhB8 zq#YmA8c*WR&)i+~jt}!uQ{lH{D?f&ZQe9RP!Ia&N>#TX3U*ldF8YEd3Ry*cNWlxfA z{9-U5Bl#`_b=L1oSF7?pi&*AWxmpoIx4WdaaLRax`z;A zH1Lx5f;vRlxhJ{SM1=IH-Wol9`s7K-canJxjWwbm1Kwxz&lAL!;jTHTZE91-k;tLX zLb=OT+NYcTJLOQv)qtFt8nvkwskPOb_ zY?6&6*<-|Yp-X5!LfzJTK2bEv9w6SD%88e;9jb6=pkCTa8w5m+KW0#!J+SLhV1IAQwPddGFz`%SC>fTiOYRVu6Z{ghNBKDgFaq z?n*yMQ$%0zRIvqJ*5*yy+T2^dH*|_dMGDQ&pG^b$`3i_xVK>Q0#T>S}1U)@@i!xWa zQwl4X*z~Nm&v}U3_O2;WDLbyHJ>I`o`OVu>xte9jX9zPdOD|7r?(4vr6xYaNjmnMBZ+8(iq-;oy!=5M5?bwvYLQL;KS>qi^E) z?ds1@S~0?DC7ue#>EGg8d!%3@3qUdHjQ zw-ODVEZ4ek7U%;b@>31nv_Wgt2&eZ?{F`kj&=?W`V=w8HurrauPY+ZE!VAR+#gSP0 z`tu?eQoNuT=B*egbX02{I~p)5mfQ{CvD=}Nz(>CYK}ZhTB`NUqX)VPW=d3?uTrcb6 z+>6>q37~=}9XH=_thAye5iR@Ts>;|{iEO*AAlRjeN>vAqF)}jn$-cs75WG!AE+2 z$nHitpat+Ri;7l`k!L%UTo zr4(j4U5!KY3_?z(@e;V6WeZ2`|4+nBeBLP)5G>}$ZtpFkKyL4$@Ad)Pj{*>sQOZYU zc^=tnOxB7RSCcUJ9||$!@g?Xcy6R_lF(L24>jqyprtUeM)vyPT{1Zm(_R5w{k!YjP zd-U$)yLM3{2KQxrkS9K&NXghd#!f9CA%rU`=P7eRD(@)J~oQ0AVw?nk;VWv$|ws4v?4O1U4&pL ztrFfjMHqlZ*oru~3-&2y`cN^O2a6$CS*H|*p4izIhCDP2X*IOj;p~*@<=eDF=&X4|j{?mK&IWmsTpX)r23r-$mJ1@L&OO%aQzin5tQ8youX(Ja`@4Wd@w|c z0_{S5ML*5FK}q4ZAIME!WJx@5!xhm?3V2&Si%>G_;s{x=X`!fHjwE+hY@)BlAV1W8 zD|x~N3BWOVb6_q>G;CKWZxNnC-V!>pN(?LKaPk0sFbAS(R|~1a;kqr?LwMUamQYxR z=OQr@Mo0_YU22OLiHCqk4haf*Qkg*S$iD0iGc8qn4aXOpUi77iO;TL;5RRlL12Jkw z>Xt1$f-9ijYZLi~2muh8wOCkna^{HL-Qe22ZX^o%lN{xJKZ?VHy7F-!!I#SR_Y?_4 zcTdY&{bOdDZ05;>KuG@o7=bDJ!}HGv&tAOLLrhp$MKAde_?kV^n2swCCOPcp5cLO? zN{9@{kl_!>e+bEn)NMU0X4192E1hMZkvV+4M7ocBj2f*e26%)aq|eU)%uSpBle<~_ z5=+=oW|4b)q$KfDkg)&N*f>PaJ}2jHEkczR1a7ZFVt>BASs)K<6rdM_usL@lE$h2K z3q5-`i1>0T{>I&>RnbTE2nANAM<+(17y3EKeE&p+6CK{RH5?M82i`@7HrS8HWCe&! z&DFRZd*08R>^g)IWWc5zRXnZg%?k{}LQ8oQR-p839+!K}^V);n-lfga=C;8XPS!Jd0_cmi1viXLmpNh9NpJV#!(Q zUBw?5&Vm*e(R2nwn=M5DI(4n) zZANr8+GW1FQ4+t@J|TOS?a{_Oa*ThHPrNOtGexsq#4C)}No=&3O|el!Bw zS;libW?=S8S8((}^TLX?@t>BSusI(ZtrZ+A&v@|)4wkX@eFfjKb-C{GVZE0tINw^q z4Q!{mpM+Xa)_c+!t#K`DUDvzJpohGYTj9s426T}yyS>0R<(Fxb{`BLw_`&`Q2>-kR z%Ku>+$12XCbX0lvSHK$vbONj7wb<+wd7B&LlF>2PuUz^4{SZm_{xyt8ezVHaHN+5I zObDNK_=9Lp?5z&|;){S+F|eKlsEP)B+Sl0J>#vTX% zb8|)F2Rb0(ExQs%-Y{<_xc$ri1o?G(l|4gUlAQF9JTaOV+Q$3MQd`?rm-&HL;;4!B ziW_CISdAna5*y27w}e%hE>IYNHLkL{{?F4NzTeq6nE?}u_-$+k`ut-xN^__t7wiVe z#{~1Bxq6M%^T^YY`Kl~5WlcA8VPxF!+IvSy<^=zW8qT1S*zjuWbrw^GL3f*)=gn$i{D7lsj%g@V`?&bU+~J9#D8 zkUw15-u=+&v8YMCJB>Gz$oDN@(=={B5lqTVitjp!5gS<=1>7U~p-jjCw*u7cGAqD$ zr$9k4b`JZ)US;bO2sJp}$XQe(mmTP7mxlAFfVi zl2ZnA;5OGeDcr+O*|SgRd$a}t^+Di_x4MU66LSqZ%L%19rd51#*31&(Gje=FbyWCN zIFaduI73JFLC?YL!_`^*)2NEOk6)NJ|nNAy6PV=QVlZb+Ar(|GWt_BSK?@{E2u( zHiZO0ZAynQi&}I8-6$|7Zuxb7mo4a$*S{0dr7t7Av%9Ic<&W%u3P}H~i%Bz}*#mM3 zfgI(x`7haOgYY{rM|c-NX{>mZ)d)aOLP5>?Z_4ZIviL58iMgnOSpx!TBrXX9ou5p2!I4G-Jc>6=r27d}v+xC`xpU=&nW7il;g9LK|#&*S5lFXKV~k1wM@ zBvPpMTn0C!J11rojU@zpPHALibjhHiapfSlip+MZ3j^f3$;IxXs|RXAhz!~Q>Luq7 zYb?Dei@#@88N^qs@*-Wqw+M~2m*qykT7dhY7as~atFxDb199e-)j*mjRMbj(Q08IQU zJYb7A>%t7fDl>o$jz%vAaT~H6zi?j6SL;P4%$j~qSL=)l=8c%!ZMpu$OqQ2V8KCC~ zzl&+~&Ushq_06(MA)G}z?^CA)bp3`w*&Q{VE_Ls4TcRaRI|t(QV!_K;YD}&Ox))Ov zC4B_(K8P221zP|{WZ9zrrm25;U#P^C9qm1VK*?cbaOXL|E$4tXoCDr&4tTTSpXmW@ zH1v0RAa*eEJ3VkF#sSZ}17kKHICJ^Hn#KqA{5^2z?E&p%2V!SCz@>R0*XKdksyyJC ze!w67Kuo>^XLTOX=6Jx0EBzX193Tn~VD~2|WOIog+m3?j? zP{Yys5Y-l&nOGo{w90AWSW7%Cx(Bg(#TV&DkQP>TSQK$fq}hO~kA;RPQO%ueFR|Xy zN29#f$eQmBn1Gfu%g%bv^ZLgOHpNtxIe{U|Zu5CYo8phS4)7dFqzmW6=CA&A(Ix4s7ez@aH%R5hV)3SQz zbklD~V0{3Ojxei2jV)EGreCjMbl{MGsa=R|E#FcdpI=;7GDaXUsZB$a3OYdz;Me|8*K&yIa-gg<{+#1djg zw@_ASG*4DU-2|Rhy-br@fzXPL#G~Zu*<}cY?9b>CmNZ|<(N;_wY|xQ{_rW;eUn|uc z*x%VW!wmgv+Q6P!bQi7@xMgoOq2uGh1s35G{bDEv-vH;Ht4|3%lI4=`umbO zGXkf~ofQIq6|b66&I^27Aw?ZG7$WXAgo6M^_mAWbDuTr(0^!7fh>P~sO3V#>?8_cb z+Cg$E&=ePZ1dkIv%VVBioN}B%S&~=_CLbc2Y6M|>UEahu(nXHfCR zYWCqplX5Fn4z55*X0Vd=BVkbO| zJz`u9qG5!?^eN2_FG4QrbE2Ld;TlU2X?PintG_em6Aoz2&XBTd`8jOLQz?`~ABT_` z$efSQh)p2G2@>@qcrr`-IUqL!jCP_b5{^2T)CRc@{{2MAY=fTgT0~>k3tk0;V{g&w z9i+e5EHdM5s!XitShw{c>7Z}(0psRS(dTido~HtC_=DJ?8o4E9;yTf!O*EW?wh(A6 z(*WfYp)%BwVEw?Jm~%JlK2rFk#@s=sU%4w3WTZnv#Y1k>1M~nm$j5UCOczCSwDC7Z3L@yk%C|<4gCdY+LrtXg2|LK%0OkJ z{h-Ka)Mjg?DNUzHDX%H;OI%%Hu2|zwY)ahfdy6SnW{YBB4~arRZ?zH3B?&0NR+D}1xx?Wz%F5CU<7JASz#@#h zNb?iMM|v+Me&E@$8N@<^XUC}jVth*%P~?f+)qQd}?P^q>r}R-AFdb_yxTrd0x4WH^Sk8F_%4h z!-8G)I72tMPL2c~(2SC7Ax9$n=f)CC*z~Uz+h-;)m_eVDb;%@uo8M-Wc97W0Eml_8 z=IJ%+gE&PFzwLlt@b8eh#+#MFD2SWz$r7praB6UfOP-1b^6A`tE)V1uZXCyoFc(wc zi8+_j%S&8arWD$xCgL{JrVb*}O;)O|oxDwIsY8#?j1P@v@6 zIU1{zLWX_JigHKi&2eI_@c^W&cy-xtXsf-c%BOMl0=stEn7aPs`chEboyC*;e&!q8X+I=(RVRPhQ};c&@^ z$b{JymNSL&al^4GK?!TsV#_!K+gaP@cSc!B32hKA7Dptt*hR3Wf0ZKGBDh43I zDal)H>v(hL317a)V#3OMcTtFkv}olQ663g;Sn}N_l0e5a4OeBgPcs@rph~xQ9;I;; z4u_dp4@h^sV zp=~TF>}ly^8@i*NpV~~TXeOdQrbxr>jVuID zp%RwA0M>E$#6)uPnzJ-eeR-oa4Wc~;kDRV(8FOwhXD z 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 0; - if (len === 0) { - return -1; - } - var n = 0; - if (arguments.length > 0) { - n = Number(arguments[1]); - if (n !== n) { - n = 0; - } else if (n !== 0 && n !== Number.POSITIVE_INFINITY && n !== Number.NEGATIVE_INFINITY) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - } - if (n >= len) { - return -1; - } - var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); - for (;k < len; k++) { - if (k in t && t[k] === searchElement) { - return k; - } - } - return -1; - }; - } - if (!Array.prototype.forEach) { - Array.prototype.forEach = function(fn, context) { - for (var i = 0, len = this.length >>> 0; i < len; i++) { - if (i in this) { - fn.call(context, this[i], i, this); - } - } - }; - } - if (!Array.prototype.map) { - Array.prototype.map = function(fn, context) { - var result = []; - for (var i = 0, len = this.length >>> 0; i < len; i++) { - if (i in this) { - result[i] = fn.call(context, this[i], i, this); - } - } - return result; - }; - } - if (!Array.prototype.every) { - Array.prototype.every = function(fn, context) { - for (var i = 0, len = this.length >>> 0; i < len; i++) { - if (i in this && !fn.call(context, this[i], i, this)) { - return false; - } - } - return true; - }; - } - if (!Array.prototype.some) { - Array.prototype.some = function(fn, context) { - for (var i = 0, len = this.length >>> 0; i < len; i++) { - if (i in this && fn.call(context, this[i], i, this)) { - return true; - } - } - return false; - }; - } - if (!Array.prototype.filter) { - Array.prototype.filter = function(fn, context) { - var result = [], val; - for (var i = 0, len = this.length >>> 0; i < len; i++) { - if (i in this) { - val = this[i]; - if (fn.call(context, val, i, this)) { - result.push(val); - } - } - } - return result; - }; - } - if (!Array.prototype.reduce) { - Array.prototype.reduce = function(fn) { - var len = this.length >>> 0, i = 0, rv; - if (arguments.length > 1) { - rv = arguments[1]; - } else { - do { - if (i in this) { - rv = this[i++]; - break; - } - if (++i >= len) { - throw new TypeError(); - } - } while (true); - } - for (;i < len; i++) { - if (i in this) { - rv = fn.call(null, rv, this[i], i, this); - } - } - return rv; - }; - } function invoke(array, method) { var args = slice.call(arguments, 2), result = []; for (var i = 0, len = array.length; i < len; i++) { @@ -907,11 +796,6 @@ fabric.CommonMethods = { })(); (function() { - if (!String.prototype.trim) { - String.prototype.trim = function() { - return this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""); - }; - } function camelize(string) { return string.replace(/-+(.)?/g, function(match, character) { return character ? character.toUpperCase() : ""; @@ -930,27 +814,6 @@ fabric.CommonMethods = { }; })(); -(function() { - var slice = Array.prototype.slice, apply = Function.prototype.apply, Dummy = function() {}; - if (!Function.prototype.bind) { - Function.prototype.bind = function(thisArg) { - var _this = this, args = slice.call(arguments, 1), bound; - if (args.length) { - bound = function() { - return apply.call(_this, this instanceof Dummy ? this : thisArg, args.concat(slice.call(arguments))); - }; - } else { - bound = function() { - return apply.call(_this, this instanceof Dummy ? this : thisArg, arguments); - }; - } - Dummy.prototype = this.prototype; - bound.prototype = new Dummy(); - return bound; - }; - } -})(); - (function() { var slice = Array.prototype.slice, emptyFunction = function() {}, IS_DONTENUM_BUGGY = function() { for (var p in { @@ -1142,9 +1005,9 @@ fabric.CommonMethods = { }; } var pointerX = function(event) { - return typeof event.clientX !== unknown ? event.clientX : 0; + return event.clientX; }, pointerY = function(event) { - return typeof event.clientY !== unknown ? event.clientY : 0; + return event.clientY; }; function _getPointer(event, pageProp, clientProp) { var touchProp = event.type === "touchend" ? "changedTouches" : "touches"; @@ -1760,7 +1623,8 @@ if (typeof console !== "undefined") { "stroke-opacity": "strokeOpacity", "stroke-width": "strokeWidth", "text-decoration": "textDecoration", - "text-anchor": "originX" + "text-anchor": "originX", + opacity: "opacity" }, colorAttributes = { stroke: "strokeOpacity", fill: "fillOpacity" @@ -1796,6 +1660,11 @@ if (typeof console !== "undefined") { if (parentAttributes && parentAttributes.visible === false) { value = false; } + } else if (attr === "opacity") { + value = parseFloat(value); + if (parentAttributes && typeof parentAttributes.opacity !== "undefined") { + value *= parentAttributes.opacity; + } } else if (attr === "originX") { value = value === "start" ? "left" : value === "end" ? "right" : "center"; } else { @@ -1910,8 +1779,8 @@ if (typeof console !== "undefined") { var attr, value; style.replace(/;\s*$/, "").split(";").forEach(function(chunk) { var pair = chunk.split(":"); - attr = normalizeAttr(pair[0].trim().toLowerCase()); - value = normalizeValue(attr, pair[1].trim()); + attr = pair[0].trim().toLowerCase(); + value = pair[1].trim(); oStyle[attr] = value; }); } @@ -1921,8 +1790,8 @@ if (typeof console !== "undefined") { if (typeof style[prop] === "undefined") { continue; } - attr = normalizeAttr(prop.toLowerCase()); - value = normalizeValue(attr, style[prop]); + attr = prop.toLowerCase(); + value = style[prop]; oStyle[attr] = value; } } @@ -2174,17 +2043,22 @@ if (typeof console !== "undefined") { var ownAttributes = attributes.reduce(function(memo, attr) { value = element.getAttribute(attr); if (value) { - attr = normalizeAttr(attr); - value = normalizeValue(attr, value, parentAttributes, fontSize); memo[attr] = value; } return memo; }, {}); ownAttributes = extend(ownAttributes, extend(getGlobalStylesForElement(element, svgUid), fabric.parseStyleAttribute(element))); - if (ownAttributes.font) { - fabric.parseFontDeclaration(ownAttributes.font, ownAttributes); + var normalizedAttr, normalizedValue, normalizedStyle = {}; + for (var attr in ownAttributes) { + normalizedAttr = normalizeAttr(attr); + normalizedValue = normalizeValue(normalizedAttr, ownAttributes[attr], parentAttributes, fontSize); + normalizedStyle[normalizedAttr] = normalizedValue; } - return _setStrokeFillOpacity(extend(parentAttributes, ownAttributes)); + if (normalizedStyle && normalizedStyle.font) { + fabric.parseFontDeclaration(normalizedStyle.font, normalizedStyle); + } + var mergedAttrs = extend(parentAttributes, normalizedStyle); + return reAllowedParents.test(element.nodeName) ? mergedAttrs : _setStrokeFillOpacity(mergedAttrs); }, parseElements: function(elements, callback, options, reviver) { new fabric.ElementsParser(elements, callback, options, reviver).parse(); @@ -2233,7 +2107,7 @@ if (typeof console !== "undefined") { rules.forEach(function(rule) { var match = rule.match(/([\s\S]*?)\s*\{([^}]*)\}/), ruleObj = {}, declaration = match[2].trim(), propertyValuePairs = declaration.replace(/;$/, "").split(/\s*;\s*/); for (var i = 0, len = propertyValuePairs.length; i < len; i++) { - var pair = propertyValuePairs[i].split(/\s*:\s*/), property = normalizeAttr(pair[0]), value = normalizeValue(property, pair[1], pair[0]); + var pair = propertyValuePairs[i].split(/\s*:\s*/), property = pair[0], value = pair[1]; ruleObj[property] = value; } rule = match[1]; @@ -5234,6 +5108,13 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { target && target.fire("mouseout", { e: e }); + if (this._iTextInstances) { + this._iTextInstances.forEach(function(obj) { + if (obj.isEditing) { + obj.hiddenTextarea.focus(); + } + }); + } }, _onMouseEnter: function(e) { if (!this.findTarget(e)) { @@ -5430,9 +5311,15 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this._beforeTransform(e, target); this._setupCurrentTransform(e, target); } - if (target !== this.getActiveGroup() && target !== this.getActiveObject()) { + var activeObject = this.getActiveObject(); + if (target !== this.getActiveGroup() && target !== activeObject) { this.deactivateAll(); - target.selectable && this.setActiveObject(target, e); + if (target.selectable) { + activeObject && activeObject.fire("deselected", { + e: e + }); + this.setActiveObject(target, e); + } } } this._handleEvent(e, "down", target ? target : null); @@ -5986,8 +5873,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { _getCacheCanvasDimensions: function() { var zoom = this.canvas && this.canvas.getZoom() || 1, objectScale = this.getObjectScaling(), dim = this._getNonTransformedDimensions(), retina = this.canvas && this.canvas._isRetinaScaling() ? fabric.devicePixelRatio : 1, zoomX = objectScale.scaleX * zoom * retina, zoomY = objectScale.scaleY * zoom * retina, width = dim.x * zoomX, height = dim.y * zoomY; return { - width: Math.ceil(width) + 2, - height: Math.ceil(height) + 2, + width: width + 2, + height: height + 2, zoomX: zoomX, zoomY: zoomY }; @@ -6001,8 +5888,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { } var dims = this._getCacheCanvasDimensions(), width = dims.width, height = dims.height, zoomX = dims.zoomX, zoomY = dims.zoomY; if (width !== this.cacheWidth || height !== this.cacheHeight) { - this._cacheCanvas.width = width; - this._cacheCanvas.height = height; + this._cacheCanvas.width = Math.ceil(width); + this._cacheCanvas.height = Math.ceil(height); this._cacheContext.translate(width / 2, height / 2); this._cacheContext.scale(zoomX, zoomY); this.cacheWidth = width; @@ -6474,8 +6361,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { object = clone(object, true); if (forceAsync) { fabric.util.enlivenPatterns([ object.fill, object.stroke ], function(patterns) { - object.fill = patterns[0]; - object.stroke = patterns[1]; + if (typeof patterns[0] !== "undefined") { + object.fill = patterns[0]; + } + if (typeof patterns[1] !== "undefined") { + object.stroke = patterns[1]; + } var instance = extraParam ? new klass(object[extraParam], object) : new klass(object); callback && callback(instance); }); @@ -7006,9 +6897,7 @@ fabric.util.object.extend(fabric.Object.prototype, { })(); (function() { - var degreesToRadians = fabric.util.degreesToRadians, isVML = function() { - return typeof G_vmlCanvasManager !== "undefined"; - }; + var degreesToRadians = fabric.util.degreesToRadians; fabric.util.object.extend(fabric.Object.prototype, { _controlsVisibility: null, _findTargetCorner: function(pointer) { @@ -7153,7 +7042,7 @@ fabric.util.object.extend(fabric.Object.prototype, { break; default: - isVML() || this.transparentCorners || ctx.clearRect(left, top, size, size); + this.transparentCorners || ctx.clearRect(left, top, size, size); ctx[methodName + "Rect"](left, top, size, size); if (stroke) { ctx.strokeRect(left, top, size, size); @@ -7394,8 +7283,8 @@ fabric.util.object.extend(fabric.Object.prototype, { _render: function(ctx, noTransform) { ctx.beginPath(); if (noTransform) { - var cp = this.getCenterPoint(); - ctx.translate(cp.x - this.strokeWidth / 2, cp.y - this.strokeWidth / 2); + var cp = this.getCenterPoint(), offset = this.strokeWidth / 2; + ctx.translate(cp.x - (this.strokeLineCap === "butt" && this.height === 0 ? 0 : offset), cp.y - (this.strokeLineCap === "butt" && this.width === 0 ? 0 : offset)); } if (!this.strokeDashArray || this.strokeDashArray && supportsLineDash) { var p = this.calcLinePoints(); @@ -7420,10 +7309,10 @@ fabric.util.object.extend(fabric.Object.prototype, { _getNonTransformedDimensions: function() { var dim = this.callSuper("_getNonTransformedDimensions"); if (this.strokeLineCap === "butt") { - if (dim.x === 0) { + if (this.width === 0) { dim.y -= this.strokeWidth; } - if (dim.y === 0) { + if (this.height === 0) { dim.x -= this.strokeWidth; } } @@ -8427,19 +8316,7 @@ fabric.util.object.extend(fabric.Object.prototype, { } }); fabric.Path.fromObject = function(object, callback, forceAsync) { - var path; - if (typeof object.path === "string") { - fabric.loadSVGFromURL(object.path, function(elements) { - var pathUrl = object.path; - path = elements[0]; - delete object.path; - fabric.util.object.extend(path, object); - path.setSourcePath(pathUrl); - callback && callback(path); - }); - } else { - return fabric.Object._fromObject("Path", object, callback, forceAsync, "path"); - } + return fabric.Object._fromObject("Path", object, callback, forceAsync, "path"); }; fabric.Path.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat([ "d" ]); fabric.Path.fromElement = function(element, callback, options) { @@ -8601,7 +8478,7 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.PathGroup.fromObject = function(object, callback) { var originalPaths = object.paths; delete object.paths; - if (typeof orignalPaths === "string") { + if (typeof originalPaths === "string") { fabric.loadSVGFromURL(originalPaths, function(elements) { var pathUrl = originalPaths; var pathGroup = fabric.util.groupSVGElements(elements, object, pathUrl); @@ -9111,20 +8988,13 @@ fabric.util.object.extend(fabric.Object.prototype, { }); replacement.width = canvasEl.width; replacement.height = canvasEl.height; - if (fabric.isLikelyNode) { - replacement.src = canvasEl.toBuffer(undefined, fabric.Image.pngCompression); + replacement.onload = function() { _this._element = replacement; !forResizing && (_this._filteredEl = replacement); callback && callback(_this); - } else { - replacement.onload = function() { - _this._element = replacement; - !forResizing && (_this._filteredEl = replacement); - callback && callback(_this); - replacement.onload = canvasEl = null; - }; - replacement.src = canvasEl.toDataURL("image/png"); - } + replacement.onload = canvasEl = null; + }; + replacement.src = canvasEl.toDataURL("image/png"); return canvasEl; }, _render: function(ctx, noTransform) { @@ -10160,6 +10030,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this.callSuper("initialize", options); this.__skipDimension = false; this._initDimensions(); + this.setCoords(); this.setupState({ propertySet: "_dimensionAffectingProps" }); @@ -10182,9 +10053,9 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { }, _getCacheCanvasDimensions: function() { var dim = this.callSuper("_getCacheCanvasDimensions"); - var fontSize = Math.ceil(this.fontSize) * 2; - dim.width += fontSize; - dim.height += fontSize; + var fontSize = this.fontSize * 2; + dim.width += fontSize * dim.zoomX; + dim.height += fontSize * dim.zoomY; return dim; }, _render: function(ctx) { @@ -10806,7 +10677,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { return this.cursorOffsetCache; }, renderCursor: function(boundaries, ctx) { - var cursorLocation = this.get2DCursorLocation(), lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), leftOffset = lineIndex === 0 && charIndex === 0 ? this._getLineLeftOffset(this._getLineWidth(ctx, lineIndex)) : boundaries.leftOffset, multiplier = this.scaleX * this.canvas.getZoom(), cursorWidth = this.cursorWidth / multiplier; + var cursorLocation = this.get2DCursorLocation(), lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), leftOffset = boundaries.leftOffset, multiplier = this.scaleX * this.canvas.getZoom(), cursorWidth = this.cursorWidth / multiplier; ctx.fillStyle = this.getCurrentCharColor(lineIndex, charIndex); ctx.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity; ctx.fillRect(boundaries.left + leftOffset - cursorWidth / 2, boundaries.top + boundaries.topOffset, cursorWidth, charHeight); @@ -11447,7 +11318,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { y: 1 }; } - var chars = this.text.split(""), boundaries = this._getCursorBoundaries(chars, "cursor"), cursorLocation = this.get2DCursorLocation(), lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), leftOffset = lineIndex === 0 && charIndex === 0 ? this._getLineLeftOffset(this._getLineWidth(this.ctx, lineIndex)) : boundaries.leftOffset, m = this.calcTransformMatrix(), p = { + var chars = this.text.split(""), boundaries = this._getCursorBoundaries(chars, "cursor"), cursorLocation = this.get2DCursorLocation(), lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), leftOffset = boundaries.leftOffset, m = this.calcTransformMatrix(), p = { x: boundaries.left + leftOffset, y: boundaries.top + boundaries.topOffset + charHeight }, upperCanvas = this.canvas.upperCanvasEl, maxWidth = upperCanvas.width - charHeight, maxHeight = upperCanvas.height - charHeight; @@ -11591,24 +11462,24 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { }, insertNewlineStyleObject: function(lineIndex, charIndex, isEndOfLine) { this.shiftLineStyles(lineIndex, +1); - if (!this.styles[lineIndex + 1]) { - this.styles[lineIndex + 1] = {}; - } var currentCharStyle = {}, newLineStyles = {}; if (this.styles[lineIndex] && this.styles[lineIndex][charIndex - 1]) { currentCharStyle = this.styles[lineIndex][charIndex - 1]; } - if (isEndOfLine) { + if (isEndOfLine && currentCharStyle) { newLineStyles[0] = clone(currentCharStyle); this.styles[lineIndex + 1] = newLineStyles; } else { + var somethingAdded = false; for (var index in this.styles[lineIndex]) { - if (parseInt(index, 10) >= charIndex) { - newLineStyles[parseInt(index, 10) - charIndex] = this.styles[lineIndex][index]; + var numIndex = parseInt(index, 10); + if (numIndex >= charIndex) { + somethingAdded = true; + newLineStyles[numIndex - charIndex] = this.styles[lineIndex][index]; delete this.styles[lineIndex][index]; } } - this.styles[lineIndex + 1] = newLineStyles; + somethingAdded && (this.styles[lineIndex + 1] = newLineStyles); } this._forceClearCache = true; }, @@ -11626,7 +11497,8 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { } } } - this.styles[lineIndex][charIndex] = style || clone(currentLineStyles[charIndex - 1]); + var newStyle = style || currentLineStyles[charIndex - 1]; + newStyle && (this.styles[lineIndex][charIndex] = newStyle); this._forceClearCache = true; }, insertStyleObjects: function(_chars, isEndOfLine, styleObject) { @@ -12531,7 +12403,6 @@ fabric.util.object.extend(fabric.IText.prototype, { } } }; - var clone = fabric.util.object.clone; fabric.util.object.extend(fabric.Textbox.prototype, { _removeExtraneousStyles: function() { for (var prop in this._styleMap) { @@ -12553,17 +12424,9 @@ fabric.util.object.extend(fabric.IText.prototype, { fabric.IText.prototype.insertNewlineStyleObject.apply(this, [ lineIndex, charIndex, isEndOfLine ]); }, shiftLineStyles: function(lineIndex, offset) { - var clonedStyles = clone(this.styles), map = this._styleMap[lineIndex]; + var map = this._styleMap[lineIndex]; lineIndex = map.line; - for (var line in this.styles) { - var numericLine = parseInt(line, 10); - if (numericLine > lineIndex) { - this.styles[numericLine + offset] = clonedStyles[numericLine]; - if (!clonedStyles[numericLine - offset]) { - delete this.styles[numericLine]; - } - } - } + fabric.IText.prototype.shiftLineStyles.call(this, lineIndex, offset); }, _getTextOnPreviousLine: function(lIndex) { var textOnPreviousLine = this._textLines[lIndex - 1]; @@ -12698,7 +12561,6 @@ fabric.util.object.extend(fabric.IText.prototype, { fabric.createCanvasForNode = function(width, height, options, nodeCanvasOptions) { nodeCanvasOptions = nodeCanvasOptions || options; var canvasEl = fabric.document.createElement("canvas"), nodeCanvas = new Canvas(width || 600, height || 600, nodeCanvasOptions), nodeCacheCanvas = new Canvas(width || 600, height || 600, nodeCanvasOptions); - canvasEl.style = {}; canvasEl.width = nodeCanvas.width; canvasEl.height = nodeCanvas.height; options = options || {}; diff --git a/src/mixins/canvas_events.mixin.js b/src/mixins/canvas_events.mixin.js index 0936be158f1..46e509958b3 100644 --- a/src/mixins/canvas_events.mixin.js +++ b/src/mixins/canvas_events.mixin.js @@ -140,6 +140,13 @@ this.fire('mouse:out', { target: target, e: e }); this._hoveredTarget = null; target && target.fire('mouseout', { e: e }); + if (this._iTextInstances) { + this._iTextInstances.forEach(function(obj) { + if (obj.isEditing) { + obj.hiddenTextarea.focus(); + } + }); + } }, /** From 6bcdcb69dfa677b1d559c4537c4ad2a79ca1d100 Mon Sep 17 00:00:00 2001 From: Asturur Date: Fri, 3 Mar 2017 12:02:12 +0100 Subject: [PATCH 2/2] fix mouse out lost focus --- dist/fabric.js | 441 ++++++++++++++++++++++++++++++++--------- dist/fabric.min.js | 17 +- dist/fabric.min.js.gz | Bin 69099 -> 69708 bytes dist/fabric.require.js | 308 ++++++++++++++++++++-------- 4 files changed, 580 insertions(+), 186 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 2a02912bd62..8cef518b47c 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.6' }; +var fabric = fabric || { version: "1.7.6" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -14,22 +14,23 @@ if (typeof document !== 'undefined' && typeof window !== 'undefined') { } else { // assume we're running under node.js when document/window are not present - fabric.document = require('jsdom') + 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'), - { features: { - FetchExternalResources: ['img'] - } - }); + decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E") + ); - fabric.window = fabric.document.defaultView; + if (fabric.document.createWindow) { + fabric.window = fabric.document.createWindow(); + } else { + fabric.window = fabric.document.parentWindow; + } } /** * True when in environment that supports touch events * @type boolean */ -fabric.isTouchSupported = 'ontouchstart' in fabric.document.documentElement; +fabric.isTouchSupported = "ontouchstart" in fabric.document.documentElement; /** * True when in environment that's probably Node.js @@ -946,6 +947,11 @@ fabric.CommonMethods = { */ createCanvasElement: function(canvasEl) { canvasEl || (canvasEl = fabric.document.createElement('canvas')); + /* eslint-disable camelcase */ + if (!canvasEl.getContext && typeof G_vmlCanvasManager !== 'undefined') { + G_vmlCanvasManager.initElement(canvasEl); + } + /* eslint-enable camelcase */ return canvasEl; }, @@ -956,7 +962,9 @@ fabric.CommonMethods = { * @return {HTMLImageElement} HTML image element */ createImage: function() { - return fabric.document.createElement('img'); + return fabric.isLikelyNode + ? new (require('canvas').Image)() + : fabric.document.createElement('img'); }, /** @@ -1430,6 +1438,172 @@ fabric.CommonMethods = { var slice = Array.prototype.slice; + /* _ES5_COMPAT_START_ */ + + if (!Array.prototype.indexOf) { + /** + * Finds index of an element in an array + * @param {*} searchElement + * @return {Number} + */ + Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { + if (this === void 0 || this === null) { + throw new TypeError(); + } + var t = Object(this), len = t.length >>> 0; + if (len === 0) { + return -1; + } + var n = 0; + if (arguments.length > 0) { + n = Number(arguments[1]); + if (n !== n) { // shortcut for verifying if it's NaN + n = 0; + } + else if (n !== 0 && n !== Number.POSITIVE_INFINITY && n !== Number.NEGATIVE_INFINITY) { + n = (n > 0 || -1) * Math.floor(Math.abs(n)); + } + } + if (n >= len) { + return -1; + } + var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); + for (; k < len; k++) { + if (k in t && t[k] === searchElement) { + return k; + } + } + return -1; + }; + } + + if (!Array.prototype.forEach) { + /** + * Iterates an array, invoking callback for each element + * @param {Function} fn Callback to invoke for each element + * @param {Object} [context] Context to invoke callback in + * @return {Array} + */ + Array.prototype.forEach = function(fn, context) { + for (var i = 0, len = this.length >>> 0; i < len; i++) { + if (i in this) { + fn.call(context, this[i], i, this); + } + } + }; + } + + if (!Array.prototype.map) { + /** + * Returns a result of iterating over an array, invoking callback for each element + * @param {Function} fn Callback to invoke for each element + * @param {Object} [context] Context to invoke callback in + * @return {Array} + */ + Array.prototype.map = function(fn, context) { + var result = []; + for (var i = 0, len = this.length >>> 0; i < len; i++) { + if (i in this) { + result[i] = fn.call(context, this[i], i, this); + } + } + return result; + }; + } + + if (!Array.prototype.every) { + /** + * Returns true if a callback returns truthy value for all elements in an array + * @param {Function} fn Callback to invoke for each element + * @param {Object} [context] Context to invoke callback in + * @return {Boolean} + */ + Array.prototype.every = function(fn, context) { + for (var i = 0, len = this.length >>> 0; i < len; i++) { + if (i in this && !fn.call(context, this[i], i, this)) { + return false; + } + } + return true; + }; + } + + if (!Array.prototype.some) { + /** + * Returns true if a callback returns truthy value for at least one element in an array + * @param {Function} fn Callback to invoke for each element + * @param {Object} [context] Context to invoke callback in + * @return {Boolean} + */ + Array.prototype.some = function(fn, context) { + for (var i = 0, len = this.length >>> 0; i < len; i++) { + if (i in this && fn.call(context, this[i], i, this)) { + return true; + } + } + return false; + }; + } + + if (!Array.prototype.filter) { + /** + * Returns the result of iterating over elements in an array + * @param {Function} fn Callback to invoke for each element + * @param {Object} [context] Context to invoke callback in + * @return {Array} + */ + Array.prototype.filter = function(fn, context) { + var result = [], val; + for (var i = 0, len = this.length >>> 0; i < len; i++) { + if (i in this) { + val = this[i]; // in case fn mutates this + if (fn.call(context, val, i, this)) { + result.push(val); + } + } + } + return result; + }; + } + + if (!Array.prototype.reduce) { + /** + * Returns "folded" (reduced) result of iterating over elements in an array + * @param {Function} fn Callback to invoke for each element + * @return {*} + */ + Array.prototype.reduce = function(fn /*, initial*/) { + var len = this.length >>> 0, + i = 0, + rv; + + if (arguments.length > 1) { + rv = arguments[1]; + } + else { + do { + if (i in this) { + rv = this[i++]; + break; + } + // if array contains no values, no initial value to return + if (++i >= len) { + throw new TypeError(); + } + } + while (true); + } + for (; i < len; i++) { + if (i in this) { + rv = fn.call(null, rv, this[i], i, this); + } + } + return rv; + }; + } + + /* _ES5_COMPAT_END_ */ + /** * Invokes method on all items in a given array * @memberOf fabric.util.array @@ -1588,6 +1762,20 @@ fabric.CommonMethods = { (function() { + /* _ES5_COMPAT_START_ */ + if (!String.prototype.trim) { + /** + * Trims a string (removing whitespace from the beginning and the end) + * @function external:String#trim + * @see String#trim on MDN + */ + String.prototype.trim = function () { + // this trim is not fully ES3 or ES5 compliant, but it should cover most cases for now + return this.replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, ''); + }; + } + /* _ES5_COMPAT_END_ */ + /** * Camelizes a string * @memberOf fabric.util.string @@ -1640,6 +1828,45 @@ fabric.CommonMethods = { })(); +/* _ES5_COMPAT_START_ */ +(function() { + + var slice = Array.prototype.slice, + apply = Function.prototype.apply, + Dummy = function() { }; + + if (!Function.prototype.bind) { + /** + * Cross-browser approximation of ES5 Function.prototype.bind (not fully spec conforming) + * @see Function#bind on MDN + * @param {Object} thisArg Object to bind function to + * @param {Any[]} Values to pass to a bound function + * @return {Function} + */ + Function.prototype.bind = function(thisArg) { + var _this = this, args = slice.call(arguments, 1), bound; + if (args.length) { + bound = function() { + return apply.call(_this, this instanceof Dummy ? this : thisArg, args.concat(slice.call(arguments))); + }; + } + else { + /** @ignore */ + bound = function() { + return apply.call(_this, this instanceof Dummy ? this : thisArg, arguments); + }; + } + Dummy.prototype = this.prototype; + bound.prototype = new Dummy(); + + return bound; + }; + } + +})(); +/* _ES5_COMPAT_END_ */ + + (function() { var slice = Array.prototype.slice, emptyFunction = function() { }, @@ -1933,11 +2160,14 @@ fabric.CommonMethods = { } var pointerX = function(event) { - return event.clientX; + // looks like in IE (<9) clientX at certain point (apparently when mouseup fires on VML element) + // is represented as COM object, with all the consequences, like "unknown" type and error on [[Get]] + // need to investigate later + return (typeof event.clientX !== unknown ? event.clientX : 0); }, pointerY = function(event) { - return event.clientY; + return (typeof event.clientY !== unknown ? event.clientY : 0); }; function _getPointer(event, pageProp, clientProp) { @@ -3012,8 +3242,7 @@ if (typeof console !== 'undefined') { 'stroke-opacity': 'strokeOpacity', 'stroke-width': 'strokeWidth', 'text-decoration': 'textDecoration', - 'text-anchor': 'originX', - opacity: 'opacity' + 'text-anchor': 'originX' }, colorAttributes = { @@ -3065,12 +3294,6 @@ if (typeof console !== 'undefined') { value = false; } } - else if (attr === 'opacity') { - value = parseFloat(value); - if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') { - value *= parentAttributes.opacity; - } - } else if (attr === 'originX' /* text-anchor */) { value = value === 'start' ? 'left' : value === 'end' ? 'right' : 'center'; } @@ -3289,8 +3512,8 @@ if (typeof console !== 'undefined') { style.replace(/;\s*$/, '').split(';').forEach(function (chunk) { var pair = chunk.split(':'); - attr = pair[0].trim().toLowerCase(); - value = pair[1].trim(); + attr = normalizeAttr(pair[0].trim().toLowerCase()); + value = normalizeValue(attr, pair[1].trim()); oStyle[attr] = value; }); @@ -3306,8 +3529,8 @@ if (typeof console !== 'undefined') { continue; } - attr = prop.toLowerCase(); - value = style[prop]; + attr = normalizeAttr(prop.toLowerCase()); + value = normalizeValue(attr, style[prop]); oStyle[attr] = value; } @@ -3736,27 +3959,23 @@ if (typeof console !== 'undefined') { var ownAttributes = attributes.reduce(function(memo, attr) { value = element.getAttribute(attr); - if (value) { // eslint-disable-line + if (value) { + attr = normalizeAttr(attr); + value = normalizeValue(attr, value, parentAttributes, fontSize); + memo[attr] = value; } return memo; }, { }); + // add values parsed from style, which take precedence over attributes // (see: http://www.w3.org/TR/SVG/styling.html#UsingPresentationAttributes) ownAttributes = extend(ownAttributes, extend(getGlobalStylesForElement(element, svgUid), fabric.parseStyleAttribute(element))); - - var normalizedAttr, normalizedValue, normalizedStyle = {}; - for (var attr in ownAttributes) { - normalizedAttr = normalizeAttr(attr); - normalizedValue = normalizeValue(normalizedAttr, ownAttributes[attr], parentAttributes, fontSize); - normalizedStyle[normalizedAttr] = normalizedValue; - } - if (normalizedStyle && normalizedStyle.font) { - fabric.parseFontDeclaration(normalizedStyle.font, normalizedStyle); + if (ownAttributes.font) { + fabric.parseFontDeclaration(ownAttributes.font, ownAttributes); } - var mergedAttrs = extend(parentAttributes, normalizedStyle); - return reAllowedParents.test(element.nodeName) ? mergedAttrs : _setStrokeFillOpacity(mergedAttrs); + return _setStrokeFillOpacity(extend(parentAttributes, ownAttributes)); }, /** @@ -3866,8 +4085,8 @@ if (typeof console !== 'undefined') { for (var i = 0, len = propertyValuePairs.length; i < len; i++) { var pair = propertyValuePairs[i].split(/\s*:\s*/), - property = pair[0], - value = pair[1]; + property = normalizeAttr(pair[0]), + value = normalizeValue(property, pair[1], pair[0]); ruleObj[property] = value; } rule = match[1]; @@ -10102,13 +10321,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this.fire('mouse:out', { target: target, e: e }); this._hoveredTarget = null; target && target.fire('mouseout', { e: e }); - if (this._iTextInstances) { - this._iTextInstances.forEach(function(obj) { - if (obj.isEditing) { - obj.hiddenTextarea.focus(); - } - }); - } }, /** @@ -10466,13 +10678,10 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this._beforeTransform(e, target); this._setupCurrentTransform(e, target); } - var activeObject = this.getActiveObject(); - if (target !== this.getActiveGroup() && target !== activeObject) { + + if (target !== this.getActiveGroup() && target !== this.getActiveObject()) { this.deactivateAll(); - if (target.selectable) { - activeObject && activeObject.fire('deselected', { e: e }); - this.setActiveObject(target, e); - } + target.selectable && this.setActiveObject(target, e); } } this._handleEvent(e, 'down', target ? target : null); @@ -12205,8 +12414,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati width = dim.x * zoomX, height = dim.y * zoomY; return { - width: width + 2, - height: height + 2, + width: Math.ceil(width) + 2, + height: Math.ceil(height) + 2, zoomX: zoomX, zoomY: zoomY }; @@ -12230,8 +12439,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati zoomX = dims.zoomX, zoomY = dims.zoomY; if (width !== this.cacheWidth || height !== this.cacheHeight) { - this._cacheCanvas.width = Math.ceil(width); - this._cacheCanvas.height = Math.ceil(height); + this._cacheCanvas.width = width; + this._cacheCanvas.height = height; this._cacheContext.translate(width / 2, height / 2); this._cacheContext.scale(zoomX, zoomY); this.cacheWidth = width; @@ -13147,12 +13356,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati object = clone(object, true); if (forceAsync) { fabric.util.enlivenPatterns([object.fill, object.stroke], function(patterns) { - if (typeof patterns[0] !== 'undefined') { - object.fill = patterns[0]; - } - if (typeof patterns[1] !== 'undefined') { - object.stroke = patterns[1]; - } + object.fill = patterns[0]; + object.stroke = patterns[1]; var instance = extraParam ? new klass(object[extraParam], object) : new klass(object); callback && callback(instance); }); @@ -14313,8 +14518,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot (function() { - var degreesToRadians = fabric.util.degreesToRadians; - + var degreesToRadians = fabric.util.degreesToRadians, + /* eslint-disable camelcase */ + isVML = function() { return typeof G_vmlCanvasManager !== 'undefined'; }; + /* eslint-enable camelcase */ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ { /** @@ -14623,7 +14830,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } break; default: - this.transparentCorners || ctx.clearRect(left, top, size, size); + isVML() || this.transparentCorners || ctx.clearRect(left, top, size, size); ctx[methodName + 'Rect'](left, top, size, size); if (stroke) { ctx.strokeRect(left, top, size, size); @@ -15098,11 +15305,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot // Line coords are distances from left-top of canvas to origin of line. // To render line in a path-group, we need to translate them to // distances from center of path-group to center of line. - var cp = this.getCenterPoint(), - offset = this.strokeWidth / 2; + var cp = this.getCenterPoint(); ctx.translate( - cp.x - (this.strokeLineCap === 'butt' && this.height === 0 ? 0 : offset), - cp.y - (this.strokeLineCap === 'butt' && this.width === 0 ? 0 : offset) + cp.x - this.strokeWidth / 2, + cp.y - this.strokeWidth / 2 ); } @@ -15154,10 +15360,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot _getNonTransformedDimensions: function() { var dim = this.callSuper('_getNonTransformedDimensions'); if (this.strokeLineCap === 'butt') { - if (this.width === 0) { + if (dim.x === 0) { dim.y -= this.strokeWidth; } - if (this.height === 0) { + if (dim.y === 0) { dim.x -= this.strokeWidth; } } @@ -17376,7 +17582,23 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @param {Boolean} [forceAsync] Force an async behaviour trying to create pattern first */ fabric.Path.fromObject = function(object, callback, forceAsync) { - return fabric.Object._fromObject('Path', object, callback, forceAsync, 'path'); + // remove this pattern rom 2.0, accept just object. + var path; + if (typeof object.path === 'string') { + fabric.loadSVGFromURL(object.path, function (elements) { + var pathUrl = object.path; + path = elements[0]; + delete object.path; + + fabric.util.object.extend(path, object); + path.setSourcePath(pathUrl); + + callback && callback(path); + }); + } + else { + return fabric.Object._fromObject('Path', object, callback, forceAsync, 'path'); + } }; /* _FROM_SVG_START_ */ @@ -17675,7 +17897,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot var originalPaths = object.paths; delete object.paths; // remove this pattern from 2.0 accepts only object - if (typeof originalPaths === 'string') { + if (typeof orignalPaths === 'string') { fabric.loadSVGFromURL(originalPaths, function (elements) { var pathUrl = originalPaths; var pathGroup = fabric.util.groupSVGElements(elements, object, pathUrl); @@ -18711,13 +18933,22 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot /** @ignore */ replacement.width = canvasEl.width; replacement.height = canvasEl.height; - replacement.onload = function() { + if (fabric.isLikelyNode) { + replacement.src = canvasEl.toBuffer(undefined, fabric.Image.pngCompression); + // onload doesn't fire in some node versions, so we invoke callback manually _this._element = replacement; !forResizing && (_this._filteredEl = replacement); callback && callback(_this); - replacement.onload = canvasEl = null; - }; - replacement.src = canvasEl.toDataURL('image/png'); + } + else { + replacement.onload = function() { + _this._element = replacement; + !forResizing && (_this._filteredEl = replacement); + callback && callback(_this); + replacement.onload = canvasEl = null; + }; + replacement.src = canvasEl.toDataURL('image/png'); + } return canvasEl; }, @@ -21505,7 +21736,6 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this.callSuper('initialize', options); this.__skipDimension = false; this._initDimensions(); - this.setCoords(); this.setupState({ propertySet: '_dimensionAffectingProps' }); }, @@ -21551,9 +21781,9 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { */ _getCacheCanvasDimensions: function() { var dim = this.callSuper('_getCacheCanvasDimensions'); - var fontSize = this.fontSize * 2; - dim.width += fontSize * dim.zoomX; - dim.height += fontSize * dim.zoomY; + var fontSize = Math.ceil(this.fontSize) * 2; + dim.width += fontSize; + dim.height += fontSize; return dim; }, @@ -22908,7 +23138,9 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), - leftOffset = boundaries.leftOffset, + leftOffset = (lineIndex === 0 && charIndex === 0) + ? this._getLineLeftOffset(this._getLineWidth(ctx, lineIndex)) + : boundaries.leftOffset, multiplier = this.scaleX * this.canvas.getZoom(), cursorWidth = this.cursorWidth / multiplier; @@ -24029,7 +24261,9 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), - leftOffset = boundaries.leftOffset, + leftOffset = (lineIndex === 0 && charIndex === 0) + ? this._getLineLeftOffset(this._getLineWidth(this.ctx, lineIndex)) + : boundaries.leftOffset, m = this.calcTransformMatrix(), p = { x: boundaries.left + leftOffset, @@ -24233,6 +24467,10 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this.shiftLineStyles(lineIndex, +1); + if (!this.styles[lineIndex + 1]) { + this.styles[lineIndex + 1] = {}; + } + var currentCharStyle = {}, newLineStyles = {}; @@ -24242,24 +24480,21 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { // if there's nothing after cursor, // we clone current char style onto the next (otherwise empty) line - if (isEndOfLine && currentCharStyle) { + if (isEndOfLine) { newLineStyles[0] = clone(currentCharStyle); this.styles[lineIndex + 1] = newLineStyles; } // otherwise we clone styles of all chars // after cursor onto the next line, from the beginning else { - var somethingAdded = false; for (var index in this.styles[lineIndex]) { - var numIndex = parseInt(index, 10); - if (numIndex >= charIndex) { - somethingAdded = true; - newLineStyles[numIndex - charIndex] = this.styles[lineIndex][index]; + if (parseInt(index, 10) >= charIndex) { + newLineStyles[parseInt(index, 10) - charIndex] = this.styles[lineIndex][index]; // remove lines from the previous line since they're on a new line now delete this.styles[lineIndex][index]; } } - somethingAdded && (this.styles[lineIndex + 1] = newLineStyles); + this.styles[lineIndex + 1] = newLineStyles; } this._forceClearCache = true; }, @@ -24293,8 +24528,9 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { } } } - var newStyle = style || currentLineStyles[charIndex - 1]; - newStyle && (this.styles[lineIndex][charIndex] = newStyle); + + this.styles[lineIndex][charIndex] = + style || clone(currentLineStyles[charIndex - 1]); this._forceClearCache = true; }, @@ -25989,6 +26225,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } }; + var clone = fabric.util.object.clone; + fabric.util.object.extend(fabric.Textbox.prototype, /** @lends fabric.IText.prototype */ { /** * @private @@ -26040,10 +26278,24 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot */ shiftLineStyles: function(lineIndex, offset) { // shift all line styles by 1 upward - var map = this._styleMap[lineIndex]; + var clonedStyles = clone(this.styles), + map = this._styleMap[lineIndex]; + // adjust line index lineIndex = map.line; - fabric.IText.prototype.shiftLineStyles.call(this, lineIndex, offset); + + for (var line in this.styles) { + var numericLine = parseInt(line, 10); + + if (numericLine > lineIndex) { + this.styles[numericLine + offset] = clonedStyles[numericLine]; + + if (!clonedStyles[numericLine - offset]) { + delete this.styles[numericLine]; + } + } + } + //TODO: evaluate if delete old style lines with offset -1 }, /** @@ -26269,6 +26521,9 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot nodeCanvas = new Canvas(width || 600, height || 600, nodeCanvasOptions), nodeCacheCanvas = new Canvas(width || 600, height || 600, nodeCanvasOptions); + // jsdom doesn't create style on canvas element, so here be temp. workaround + canvasEl.style = { }; + canvasEl.width = nodeCanvas.width; canvasEl.height = nodeCanvas.height; options = options || { }; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 43dff80c00f..26439d5980b 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,8 +1,9 @@ -var fabric=fabric||{version:"1.7.6"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]}}),fabric.window=fabric.document.defaultView),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},createImage:function(){return 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?A-=2*f:1===c&&A<0&&(A+=2*f);for(var E=Math.ceil(Math.abs(A/f*2)),I=[],L=A/E,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=D+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,_=Math.sqrt,y=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/g,">")}fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),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 y;if((f||d)&&(x=" translate("+_(f)+" "+_(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),y}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,_=p.util.parseUnit,y=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){if(t){f(t);var r=p.Object.__uid++,n=d(t),s=p.util.toArray(t.getElementsByTagName("*"));if(n.svgUid=r,0===s.length&&p.isLikelyNode){s=t.selectNodes('//*[name(.)!="svg"]');for(var o=[],a=0,h=s.length;a/i,""))),r&&r.documentElement||e&&e(null),p.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:r})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));p.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(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:{},_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),"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||(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; -return!1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(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 _=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),y=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(y.x+a*this.rotatingPointOffset,y.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=_,g.mt=y,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"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,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);_[s]=e,_[s+1]=i,_[s+2]=r,_[s+3]=n+y*(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,D,A,E;for(T.x=(t+.5)*_,j.x=r(T.x),h=0;h=e)){A=r(1e3*s(c-T.x)),O[A]||(O[A]={});for(var I=j.y-w;I<=j.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[A][E]||(O[A][E]=m(n(i(A*x,2)+i(E*C,2))/1e3)),u=O[A][E],u>0&&(d=4*(I*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],P+=u*v[d+2],D+=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]=D/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[y]=w/C,b[y+1]=O/C,b[y+2]=T/C,b[y+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._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,_=0,y=g.length;_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||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 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="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),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.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.6"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(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,_=Math.sqrt,y=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 y;if((f||d)&&(x=" translate("+_(f)+" "+_(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),y}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,_=p.util.parseUnit,y=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"},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){if(t){f(t);var r=p.Object.__uid++,n=d(t),s=p.util.toArray(t.getElementsByTagName("*"));if(n.svgUid=r,0===s.length&&p.isLikelyNode){s=t.selectNodes('//*[name(.)!="svg"]');for(var o=[],a=0,h=s.length;a/i,""))),r&&r.documentElement||e&&e(null),p.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:r})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));p.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(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:{},_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:Math.ceil(a)+2,height:Math.ceil(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=i,this._cacheCanvas.height=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),"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||(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){i.fill=t[0],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;return!1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(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 _=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),y=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(y.x+a*this.rotatingPointOffset,y.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=_,g.mt=y,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"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,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 orignalPaths?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);_[s]=e,_[s+1]=i,_[s+2]=r,_[s+3]=n+y*(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)*_,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[y]=w/C,b[y+1]=O/C,b[y+2]=T/C,b[y+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*Math.ceil(this.fontSize);return t.width+=e,t.height+=e,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._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=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(e,r)):t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,_=0,y=g.length;_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=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(this.ctx,r)):e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&(this.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&&(s[parseInt(o,10)-i]=this.styles[e][o],delete this.styles[e][o]);this.styles[e+1]=s}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}this.styles[e][i]=r||t(n[i-1]),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.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="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),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())};var e=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,i){var r=e(this.styles),n=this._styleMap[t];t=n.line;for(var s in this.styles){var o=parseInt(s,10);o>t&&(this.styles[o+i]=r[o],r[o-i]||delete this.styles[o])}},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font, +h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index d9b69229fc92cb6d938d4164ef68ea1021f61f6b..3f3b841f3fd2b1f29b7202a3821c1a6403d7d8b9 100644 GIT binary patch literal 69708 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

g%B~4h=l@{y9V+C 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 z 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 VjOz;~6C$fP{{P!wXT+=J0|0@r4!!^Y diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 1971be5e75f..dcd8afddf22 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -11,12 +11,12 @@ if (typeof document !== "undefined" && typeof window !== "undefined") { fabric.window = window; window.fabric = fabric; } else { - 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"), { - features: { - FetchExternalResources: [ "img" ] - } - }); - fabric.window = fabric.document.defaultView; + 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")); + if (fabric.document.createWindow) { + fabric.window = fabric.document.createWindow(); + } else { + fabric.window = fabric.document.parentWindow; + } } fabric.isTouchSupported = "ontouchstart" in fabric.document.documentElement; @@ -446,10 +446,13 @@ fabric.CommonMethods = { }, createCanvasElement: function(canvasEl) { canvasEl || (canvasEl = fabric.document.createElement("canvas")); + if (!canvasEl.getContext && typeof G_vmlCanvasManager !== "undefined") { + G_vmlCanvasManager.initElement(canvasEl); + } return canvasEl; }, createImage: function() { - return fabric.document.createElement("img"); + return fabric.isLikelyNode ? new (require("canvas").Image)() : fabric.document.createElement("img"); }, createAccessors: function(klass) { var proto = klass.prototype, i, propName, capitalizedPropName, setterName, getterName; @@ -708,6 +711,114 @@ fabric.CommonMethods = { (function() { var slice = Array.prototype.slice; + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function(searchElement) { + if (this === void 0 || this === null) { + throw new TypeError(); + } + var t = Object(this), len = t.length >>> 0; + if (len === 0) { + return -1; + } + var n = 0; + if (arguments.length > 0) { + n = Number(arguments[1]); + if (n !== n) { + n = 0; + } else if (n !== 0 && n !== Number.POSITIVE_INFINITY && n !== Number.NEGATIVE_INFINITY) { + n = (n > 0 || -1) * Math.floor(Math.abs(n)); + } + } + if (n >= len) { + return -1; + } + var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); + for (;k < len; k++) { + if (k in t && t[k] === searchElement) { + return k; + } + } + return -1; + }; + } + if (!Array.prototype.forEach) { + Array.prototype.forEach = function(fn, context) { + for (var i = 0, len = this.length >>> 0; i < len; i++) { + if (i in this) { + fn.call(context, this[i], i, this); + } + } + }; + } + if (!Array.prototype.map) { + Array.prototype.map = function(fn, context) { + var result = []; + for (var i = 0, len = this.length >>> 0; i < len; i++) { + if (i in this) { + result[i] = fn.call(context, this[i], i, this); + } + } + return result; + }; + } + if (!Array.prototype.every) { + Array.prototype.every = function(fn, context) { + for (var i = 0, len = this.length >>> 0; i < len; i++) { + if (i in this && !fn.call(context, this[i], i, this)) { + return false; + } + } + return true; + }; + } + if (!Array.prototype.some) { + Array.prototype.some = function(fn, context) { + for (var i = 0, len = this.length >>> 0; i < len; i++) { + if (i in this && fn.call(context, this[i], i, this)) { + return true; + } + } + return false; + }; + } + if (!Array.prototype.filter) { + Array.prototype.filter = function(fn, context) { + var result = [], val; + for (var i = 0, len = this.length >>> 0; i < len; i++) { + if (i in this) { + val = this[i]; + if (fn.call(context, val, i, this)) { + result.push(val); + } + } + } + return result; + }; + } + if (!Array.prototype.reduce) { + Array.prototype.reduce = function(fn) { + var len = this.length >>> 0, i = 0, rv; + if (arguments.length > 1) { + rv = arguments[1]; + } else { + do { + if (i in this) { + rv = this[i++]; + break; + } + if (++i >= len) { + throw new TypeError(); + } + } while (true); + } + for (;i < len; i++) { + if (i in this) { + rv = fn.call(null, rv, this[i], i, this); + } + } + return rv; + }; + } function invoke(array, method) { var args = slice.call(arguments, 2), result = []; for (var i = 0, len = array.length; i < len; i++) { @@ -796,6 +907,11 @@ fabric.CommonMethods = { })(); (function() { + if (!String.prototype.trim) { + String.prototype.trim = function() { + return this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""); + }; + } function camelize(string) { return string.replace(/-+(.)?/g, function(match, character) { return character ? character.toUpperCase() : ""; @@ -814,6 +930,27 @@ fabric.CommonMethods = { }; })(); +(function() { + var slice = Array.prototype.slice, apply = Function.prototype.apply, Dummy = function() {}; + if (!Function.prototype.bind) { + Function.prototype.bind = function(thisArg) { + var _this = this, args = slice.call(arguments, 1), bound; + if (args.length) { + bound = function() { + return apply.call(_this, this instanceof Dummy ? this : thisArg, args.concat(slice.call(arguments))); + }; + } else { + bound = function() { + return apply.call(_this, this instanceof Dummy ? this : thisArg, arguments); + }; + } + Dummy.prototype = this.prototype; + bound.prototype = new Dummy(); + return bound; + }; + } +})(); + (function() { var slice = Array.prototype.slice, emptyFunction = function() {}, IS_DONTENUM_BUGGY = function() { for (var p in { @@ -1005,9 +1142,9 @@ fabric.CommonMethods = { }; } var pointerX = function(event) { - return event.clientX; + return typeof event.clientX !== unknown ? event.clientX : 0; }, pointerY = function(event) { - return event.clientY; + return typeof event.clientY !== unknown ? event.clientY : 0; }; function _getPointer(event, pageProp, clientProp) { var touchProp = event.type === "touchend" ? "changedTouches" : "touches"; @@ -1623,8 +1760,7 @@ if (typeof console !== "undefined") { "stroke-opacity": "strokeOpacity", "stroke-width": "strokeWidth", "text-decoration": "textDecoration", - "text-anchor": "originX", - opacity: "opacity" + "text-anchor": "originX" }, colorAttributes = { stroke: "strokeOpacity", fill: "fillOpacity" @@ -1660,11 +1796,6 @@ if (typeof console !== "undefined") { if (parentAttributes && parentAttributes.visible === false) { value = false; } - } else if (attr === "opacity") { - value = parseFloat(value); - if (parentAttributes && typeof parentAttributes.opacity !== "undefined") { - value *= parentAttributes.opacity; - } } else if (attr === "originX") { value = value === "start" ? "left" : value === "end" ? "right" : "center"; } else { @@ -1779,8 +1910,8 @@ if (typeof console !== "undefined") { var attr, value; style.replace(/;\s*$/, "").split(";").forEach(function(chunk) { var pair = chunk.split(":"); - attr = pair[0].trim().toLowerCase(); - value = pair[1].trim(); + attr = normalizeAttr(pair[0].trim().toLowerCase()); + value = normalizeValue(attr, pair[1].trim()); oStyle[attr] = value; }); } @@ -1790,8 +1921,8 @@ if (typeof console !== "undefined") { if (typeof style[prop] === "undefined") { continue; } - attr = prop.toLowerCase(); - value = style[prop]; + attr = normalizeAttr(prop.toLowerCase()); + value = normalizeValue(attr, style[prop]); oStyle[attr] = value; } } @@ -2043,22 +2174,17 @@ if (typeof console !== "undefined") { var ownAttributes = attributes.reduce(function(memo, attr) { value = element.getAttribute(attr); if (value) { + attr = normalizeAttr(attr); + value = normalizeValue(attr, value, parentAttributes, fontSize); memo[attr] = value; } return memo; }, {}); ownAttributes = extend(ownAttributes, extend(getGlobalStylesForElement(element, svgUid), fabric.parseStyleAttribute(element))); - var normalizedAttr, normalizedValue, normalizedStyle = {}; - for (var attr in ownAttributes) { - normalizedAttr = normalizeAttr(attr); - normalizedValue = normalizeValue(normalizedAttr, ownAttributes[attr], parentAttributes, fontSize); - normalizedStyle[normalizedAttr] = normalizedValue; + if (ownAttributes.font) { + fabric.parseFontDeclaration(ownAttributes.font, ownAttributes); } - if (normalizedStyle && normalizedStyle.font) { - fabric.parseFontDeclaration(normalizedStyle.font, normalizedStyle); - } - var mergedAttrs = extend(parentAttributes, normalizedStyle); - return reAllowedParents.test(element.nodeName) ? mergedAttrs : _setStrokeFillOpacity(mergedAttrs); + return _setStrokeFillOpacity(extend(parentAttributes, ownAttributes)); }, parseElements: function(elements, callback, options, reviver) { new fabric.ElementsParser(elements, callback, options, reviver).parse(); @@ -2107,7 +2233,7 @@ if (typeof console !== "undefined") { rules.forEach(function(rule) { var match = rule.match(/([\s\S]*?)\s*\{([^}]*)\}/), ruleObj = {}, declaration = match[2].trim(), propertyValuePairs = declaration.replace(/;$/, "").split(/\s*;\s*/); for (var i = 0, len = propertyValuePairs.length; i < len; i++) { - var pair = propertyValuePairs[i].split(/\s*:\s*/), property = pair[0], value = pair[1]; + var pair = propertyValuePairs[i].split(/\s*:\s*/), property = normalizeAttr(pair[0]), value = normalizeValue(property, pair[1], pair[0]); ruleObj[property] = value; } rule = match[1]; @@ -5108,13 +5234,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { target && target.fire("mouseout", { e: e }); - if (this._iTextInstances) { - this._iTextInstances.forEach(function(obj) { - if (obj.isEditing) { - obj.hiddenTextarea.focus(); - } - }); - } }, _onMouseEnter: function(e) { if (!this.findTarget(e)) { @@ -5311,15 +5430,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this._beforeTransform(e, target); this._setupCurrentTransform(e, target); } - var activeObject = this.getActiveObject(); - if (target !== this.getActiveGroup() && target !== activeObject) { + if (target !== this.getActiveGroup() && target !== this.getActiveObject()) { this.deactivateAll(); - if (target.selectable) { - activeObject && activeObject.fire("deselected", { - e: e - }); - this.setActiveObject(target, e); - } + target.selectable && this.setActiveObject(target, e); } } this._handleEvent(e, "down", target ? target : null); @@ -5873,8 +5986,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { _getCacheCanvasDimensions: function() { var zoom = this.canvas && this.canvas.getZoom() || 1, objectScale = this.getObjectScaling(), dim = this._getNonTransformedDimensions(), retina = this.canvas && this.canvas._isRetinaScaling() ? fabric.devicePixelRatio : 1, zoomX = objectScale.scaleX * zoom * retina, zoomY = objectScale.scaleY * zoom * retina, width = dim.x * zoomX, height = dim.y * zoomY; return { - width: width + 2, - height: height + 2, + width: Math.ceil(width) + 2, + height: Math.ceil(height) + 2, zoomX: zoomX, zoomY: zoomY }; @@ -5888,8 +6001,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { } var dims = this._getCacheCanvasDimensions(), width = dims.width, height = dims.height, zoomX = dims.zoomX, zoomY = dims.zoomY; if (width !== this.cacheWidth || height !== this.cacheHeight) { - this._cacheCanvas.width = Math.ceil(width); - this._cacheCanvas.height = Math.ceil(height); + this._cacheCanvas.width = width; + this._cacheCanvas.height = height; this._cacheContext.translate(width / 2, height / 2); this._cacheContext.scale(zoomX, zoomY); this.cacheWidth = width; @@ -6361,12 +6474,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { object = clone(object, true); if (forceAsync) { fabric.util.enlivenPatterns([ object.fill, object.stroke ], function(patterns) { - if (typeof patterns[0] !== "undefined") { - object.fill = patterns[0]; - } - if (typeof patterns[1] !== "undefined") { - object.stroke = patterns[1]; - } + object.fill = patterns[0]; + object.stroke = patterns[1]; var instance = extraParam ? new klass(object[extraParam], object) : new klass(object); callback && callback(instance); }); @@ -6897,7 +7006,9 @@ fabric.util.object.extend(fabric.Object.prototype, { })(); (function() { - var degreesToRadians = fabric.util.degreesToRadians; + var degreesToRadians = fabric.util.degreesToRadians, isVML = function() { + return typeof G_vmlCanvasManager !== "undefined"; + }; fabric.util.object.extend(fabric.Object.prototype, { _controlsVisibility: null, _findTargetCorner: function(pointer) { @@ -7042,7 +7153,7 @@ fabric.util.object.extend(fabric.Object.prototype, { break; default: - this.transparentCorners || ctx.clearRect(left, top, size, size); + isVML() || this.transparentCorners || ctx.clearRect(left, top, size, size); ctx[methodName + "Rect"](left, top, size, size); if (stroke) { ctx.strokeRect(left, top, size, size); @@ -7283,8 +7394,8 @@ fabric.util.object.extend(fabric.Object.prototype, { _render: function(ctx, noTransform) { ctx.beginPath(); if (noTransform) { - var cp = this.getCenterPoint(), offset = this.strokeWidth / 2; - ctx.translate(cp.x - (this.strokeLineCap === "butt" && this.height === 0 ? 0 : offset), cp.y - (this.strokeLineCap === "butt" && this.width === 0 ? 0 : offset)); + var cp = this.getCenterPoint(); + ctx.translate(cp.x - this.strokeWidth / 2, cp.y - this.strokeWidth / 2); } if (!this.strokeDashArray || this.strokeDashArray && supportsLineDash) { var p = this.calcLinePoints(); @@ -7309,10 +7420,10 @@ fabric.util.object.extend(fabric.Object.prototype, { _getNonTransformedDimensions: function() { var dim = this.callSuper("_getNonTransformedDimensions"); if (this.strokeLineCap === "butt") { - if (this.width === 0) { + if (dim.x === 0) { dim.y -= this.strokeWidth; } - if (this.height === 0) { + if (dim.y === 0) { dim.x -= this.strokeWidth; } } @@ -8316,7 +8427,19 @@ fabric.util.object.extend(fabric.Object.prototype, { } }); fabric.Path.fromObject = function(object, callback, forceAsync) { - return fabric.Object._fromObject("Path", object, callback, forceAsync, "path"); + var path; + if (typeof object.path === "string") { + fabric.loadSVGFromURL(object.path, function(elements) { + var pathUrl = object.path; + path = elements[0]; + delete object.path; + fabric.util.object.extend(path, object); + path.setSourcePath(pathUrl); + callback && callback(path); + }); + } else { + return fabric.Object._fromObject("Path", object, callback, forceAsync, "path"); + } }; fabric.Path.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat([ "d" ]); fabric.Path.fromElement = function(element, callback, options) { @@ -8478,7 +8601,7 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.PathGroup.fromObject = function(object, callback) { var originalPaths = object.paths; delete object.paths; - if (typeof originalPaths === "string") { + if (typeof orignalPaths === "string") { fabric.loadSVGFromURL(originalPaths, function(elements) { var pathUrl = originalPaths; var pathGroup = fabric.util.groupSVGElements(elements, object, pathUrl); @@ -8988,13 +9111,20 @@ fabric.util.object.extend(fabric.Object.prototype, { }); replacement.width = canvasEl.width; replacement.height = canvasEl.height; - replacement.onload = function() { + if (fabric.isLikelyNode) { + replacement.src = canvasEl.toBuffer(undefined, fabric.Image.pngCompression); _this._element = replacement; !forResizing && (_this._filteredEl = replacement); callback && callback(_this); - replacement.onload = canvasEl = null; - }; - replacement.src = canvasEl.toDataURL("image/png"); + } else { + replacement.onload = function() { + _this._element = replacement; + !forResizing && (_this._filteredEl = replacement); + callback && callback(_this); + replacement.onload = canvasEl = null; + }; + replacement.src = canvasEl.toDataURL("image/png"); + } return canvasEl; }, _render: function(ctx, noTransform) { @@ -10030,7 +10160,6 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this.callSuper("initialize", options); this.__skipDimension = false; this._initDimensions(); - this.setCoords(); this.setupState({ propertySet: "_dimensionAffectingProps" }); @@ -10053,9 +10182,9 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { }, _getCacheCanvasDimensions: function() { var dim = this.callSuper("_getCacheCanvasDimensions"); - var fontSize = this.fontSize * 2; - dim.width += fontSize * dim.zoomX; - dim.height += fontSize * dim.zoomY; + var fontSize = Math.ceil(this.fontSize) * 2; + dim.width += fontSize; + dim.height += fontSize; return dim; }, _render: function(ctx) { @@ -10677,7 +10806,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { return this.cursorOffsetCache; }, renderCursor: function(boundaries, ctx) { - var cursorLocation = this.get2DCursorLocation(), lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), leftOffset = boundaries.leftOffset, multiplier = this.scaleX * this.canvas.getZoom(), cursorWidth = this.cursorWidth / multiplier; + var cursorLocation = this.get2DCursorLocation(), lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), leftOffset = lineIndex === 0 && charIndex === 0 ? this._getLineLeftOffset(this._getLineWidth(ctx, lineIndex)) : boundaries.leftOffset, multiplier = this.scaleX * this.canvas.getZoom(), cursorWidth = this.cursorWidth / multiplier; ctx.fillStyle = this.getCurrentCharColor(lineIndex, charIndex); ctx.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity; ctx.fillRect(boundaries.left + leftOffset - cursorWidth / 2, boundaries.top + boundaries.topOffset, cursorWidth, charHeight); @@ -11318,7 +11447,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { y: 1 }; } - var chars = this.text.split(""), boundaries = this._getCursorBoundaries(chars, "cursor"), cursorLocation = this.get2DCursorLocation(), lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), leftOffset = boundaries.leftOffset, m = this.calcTransformMatrix(), p = { + var chars = this.text.split(""), boundaries = this._getCursorBoundaries(chars, "cursor"), cursorLocation = this.get2DCursorLocation(), lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex, charHeight = this.getCurrentCharFontSize(lineIndex, charIndex), leftOffset = lineIndex === 0 && charIndex === 0 ? this._getLineLeftOffset(this._getLineWidth(this.ctx, lineIndex)) : boundaries.leftOffset, m = this.calcTransformMatrix(), p = { x: boundaries.left + leftOffset, y: boundaries.top + boundaries.topOffset + charHeight }, upperCanvas = this.canvas.upperCanvasEl, maxWidth = upperCanvas.width - charHeight, maxHeight = upperCanvas.height - charHeight; @@ -11462,24 +11591,24 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { }, insertNewlineStyleObject: function(lineIndex, charIndex, isEndOfLine) { this.shiftLineStyles(lineIndex, +1); + if (!this.styles[lineIndex + 1]) { + this.styles[lineIndex + 1] = {}; + } var currentCharStyle = {}, newLineStyles = {}; if (this.styles[lineIndex] && this.styles[lineIndex][charIndex - 1]) { currentCharStyle = this.styles[lineIndex][charIndex - 1]; } - if (isEndOfLine && currentCharStyle) { + if (isEndOfLine) { newLineStyles[0] = clone(currentCharStyle); this.styles[lineIndex + 1] = newLineStyles; } else { - var somethingAdded = false; for (var index in this.styles[lineIndex]) { - var numIndex = parseInt(index, 10); - if (numIndex >= charIndex) { - somethingAdded = true; - newLineStyles[numIndex - charIndex] = this.styles[lineIndex][index]; + if (parseInt(index, 10) >= charIndex) { + newLineStyles[parseInt(index, 10) - charIndex] = this.styles[lineIndex][index]; delete this.styles[lineIndex][index]; } } - somethingAdded && (this.styles[lineIndex + 1] = newLineStyles); + this.styles[lineIndex + 1] = newLineStyles; } this._forceClearCache = true; }, @@ -11497,8 +11626,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { } } } - var newStyle = style || currentLineStyles[charIndex - 1]; - newStyle && (this.styles[lineIndex][charIndex] = newStyle); + this.styles[lineIndex][charIndex] = style || clone(currentLineStyles[charIndex - 1]); this._forceClearCache = true; }, insertStyleObjects: function(_chars, isEndOfLine, styleObject) { @@ -12403,6 +12531,7 @@ fabric.util.object.extend(fabric.IText.prototype, { } } }; + var clone = fabric.util.object.clone; fabric.util.object.extend(fabric.Textbox.prototype, { _removeExtraneousStyles: function() { for (var prop in this._styleMap) { @@ -12424,9 +12553,17 @@ fabric.util.object.extend(fabric.IText.prototype, { fabric.IText.prototype.insertNewlineStyleObject.apply(this, [ lineIndex, charIndex, isEndOfLine ]); }, shiftLineStyles: function(lineIndex, offset) { - var map = this._styleMap[lineIndex]; + var clonedStyles = clone(this.styles), map = this._styleMap[lineIndex]; lineIndex = map.line; - fabric.IText.prototype.shiftLineStyles.call(this, lineIndex, offset); + for (var line in this.styles) { + var numericLine = parseInt(line, 10); + if (numericLine > lineIndex) { + this.styles[numericLine + offset] = clonedStyles[numericLine]; + if (!clonedStyles[numericLine - offset]) { + delete this.styles[numericLine]; + } + } + } }, _getTextOnPreviousLine: function(lIndex) { var textOnPreviousLine = this._textLines[lIndex - 1]; @@ -12561,6 +12698,7 @@ fabric.util.object.extend(fabric.IText.prototype, { fabric.createCanvasForNode = function(width, height, options, nodeCanvasOptions) { nodeCanvasOptions = nodeCanvasOptions || options; var canvasEl = fabric.document.createElement("canvas"), nodeCanvas = new Canvas(width || 600, height || 600, nodeCanvasOptions), nodeCacheCanvas = new Canvas(width || 600, height || 600, nodeCanvasOptions); + canvasEl.style = {}; canvasEl.width = nodeCanvas.width; canvasEl.height = nodeCanvas.height; options = options || {};