From d7d88fe5c86a1e1fe7d8fbabdbc1832615605436 Mon Sep 17 00:00:00 2001 From: Asturur Date: Mon, 14 Aug 2017 09:57:47 +0200 Subject: [PATCH] updated to beta6 --- dist/fabric.js | 415 ++++++++++++++++++++++++----------------- dist/fabric.min.js | 18 +- dist/fabric.min.js.gz | Bin 77492 -> 77712 bytes dist/fabric.require.js | 241 ++++++++++++++---------- package.json | 2 +- 5 files changed, 394 insertions(+), 282 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 6e363f0f..a58291bd 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=json,gestures,accessors minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: '2.0.0-beta5' }; +var fabric = fabric || { version: '2.0.0-beta6' }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -122,10 +122,9 @@ fabric.devicePixelRatio = fabric.window.devicePixelRatio || 1; fabric.initFilterBackend = function() { - if (fabric.isWebglSupported && fabric.isWebglSupported(fabric.textureSize) && fabric.enableGLFiltering) { + if (fabric.enableGLFiltering && fabric.isWebglSupported && fabric.isWebglSupported(fabric.textureSize)) { console.log('max texture size: ' + fabric.maxTextureSize); return (new fabric.WebglFilterBackend({ tileSize: fabric.textureSize })); - } else if (fabric.Canvas2dFilterBackend) { return (new fabric.Canvas2dFilterBackend()); @@ -1002,16 +1001,13 @@ fabric.CommonMethods = { }, /** - * Creates canvas element and initializes it via excanvas if necessary + * Creates canvas element * @static * @memberOf fabric.util - * @param {CanvasElement} [canvasEl] optional canvas element to initialize; - * when not given, element is created implicitly * @return {CanvasElement} initialized canvas element */ - createCanvasElement: function(canvasEl) { - canvasEl || (canvasEl = fabric.document.createElement('canvas')); - return canvasEl; + createCanvasElement: function() { + return fabric.document.createElement('canvas'); }, /** @@ -1096,7 +1092,7 @@ fabric.CommonMethods = { target.skewY = 0; target.flipX = false; target.flipY = false; - target.setAngle(0); + target.rotate(0); }, /** @@ -1630,6 +1626,7 @@ fabric.CommonMethods = { /** * Creates an empty object and copies all enumerable properties of another object to it * @memberOf fabric.util.object + * TODO: this function return an empty object if you try to clone null * @param {Object} object Object to clone * @return {Object} */ @@ -2654,6 +2651,8 @@ if (typeof console !== 'undefined') { return fabric.window.setTimeout(callback, 1000 / 60); }; + var _cancelAnimFrame = fabric.window.cancelAnimationFrame || fabric.window.clearTimeout; + /** * requestAnimationFrame polyfill based on http://paulirish.com/2011/requestanimationframe-for-smart-animating/ * In order to get a precise start time, `requestAnimFrame` should be called as an entry into the method @@ -2665,9 +2664,13 @@ if (typeof console !== 'undefined') { return _requestAnimFrame.apply(fabric.window, arguments); } + function cancelAnimFrame() { + return _cancelAnimFrame.apply(fabric.window, arguments); + } + fabric.util.animate = animate; fabric.util.requestAnimFrame = requestAnimFrame; - + fabric.util.cancelAnimFrame = cancelAnimFrame; })(); @@ -3165,7 +3168,7 @@ if (typeof console !== 'undefined') { 'stroke-opacity': 'strokeOpacity', 'stroke-width': 'strokeWidth', 'text-decoration': 'textDecoration', - 'text-anchor': 'originX', + 'text-anchor': 'textAnchor', opacity: 'opacity' }, @@ -3224,7 +3227,7 @@ if (typeof console !== 'undefined') { value *= parentAttributes.opacity; } } - else if (attr === 'originX' /* text-anchor */) { + else if (attr === 'textAnchor' /* text-anchor */) { value = value === 'start' ? 'left' : value === 'end' ? 'right' : 'center'; } else { @@ -6635,14 +6638,14 @@ fabric.ElementsParser.prototype.checkIfDone = function() { /** * @private */ - _createCanvasElement: function(canvasEl) { - var element = fabric.util.createCanvasElement(canvasEl); - if (!element.style) { - element.style = { }; - } + _createCanvasElement: function() { + var element = fabric.util.createCanvasElement(); if (!element) { throw CANVAS_INIT_ERROR; } + if (!element.style) { + element.style = { }; + } if (typeof element.getContext === 'undefined') { throw CANVAS_INIT_ERROR; } @@ -6678,7 +6681,13 @@ fabric.ElementsParser.prototype.checkIfDone = function() { * @param {HTMLElement} [canvasEl] */ _createLowerCanvas: function (canvasEl) { - this.lowerCanvasEl = fabric.util.getById(canvasEl) || this._createCanvasElement(canvasEl); + // canvasEl === 'HTMLCanvasElement' does not work on jsdom/node + if (canvasEl && canvasEl.getContext) { + this.lowerCanvasEl = canvasEl; + } + else { + this.lowerCanvasEl = fabric.util.getById(canvasEl) || this._createCanvasElement(); + } fabric.util.addClass(this.lowerCanvasEl, 'lower-canvas'); @@ -6979,8 +6988,8 @@ fabric.ElementsParser.prototype.checkIfDone = function() { */ renderAll: function () { var canvasToDrawOn = this.contextContainer; - if (this.rendering) { - fabric.window.cancelAnimationFrame(this.rendering); + if (this.isRendering) { + fabric.util.cancelAnimFrame(this.isRendering); } this.renderCanvas(canvasToDrawOn, this._objects); return this; @@ -7224,7 +7233,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { */ _centerObject: function(object, center) { object.setPositionByOrigin(center, 'center', 'center'); - this.requestRenderAll(); + this.renderOnAddRemove && this.requestRenderAll(); return this; }, @@ -9650,7 +9659,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab target.scaleY = 1; target.skewX = 0; target.skewY = 0; - target.setAngle(0); + target.rotate(0); }, /** @@ -12729,7 +12738,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {CanvasRenderingContext2D} ctx Context to render on */ _setOpacity: function(ctx) { - if (this.group && !this.group.transformDone) { + if (this.group && !this.group._transformDone) { ctx.globalAlpha = this.getObjectOpacity(); } else { @@ -12853,8 +12862,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Object} filler fabric.Pattern or fabric.Gradient */ _applyPatternGradientTransform: function(ctx, filler) { - if (!filler.toLive) { - return; + if (!filler || !filler.toLive) { + return { offsetX: 0, offsetY: 0 }; } var transform = filler.gradientTransform || filler.patternTransform; var offsetX = -this.width / 2 + filler.offsetX || 0, @@ -12863,6 +12872,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati if (transform) { ctx.transform.apply(ctx, transform); } + return { offsetX: offsetX, offsetY: offsetY }; }, /** @@ -12912,15 +12922,13 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati }, /** - * This function is an helper for svg import. it removes the transform matrix - * and set to object properties that fabricjs can handle + * This function is an helper for svg import. it decoompose the transformMatrix + * and assign properties to object. * untransformed coordinates * @private * @chainable - * @return {thisArg} */ - _removeTransformMatrix: function() { - var center = this._findCenterFromElement(); + _assignTransformMatrixProps: function() { if (this.transformMatrix) { var options = fabric.util.qrDecompose(this.transformMatrix); this.flipX = false; @@ -12930,6 +12938,20 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati this.angle = options.angle; this.skewX = options.skewX; this.skewY = 0; + } + }, + + /** + * This function is an helper for svg import. it removes the transform matrix + * and set to object properties that fabricjs can handle + * @private + * @chainable + * @return {thisArg} + */ + _removeTransformMatrix: function() { + var center = this._findCenterFromElement(); + if (this.transformMatrix) { + this._assignTransformMatrixProps(); center = fabric.util.transformPoint(center, this.transformMatrix); } this.transformMatrix = null; @@ -13182,12 +13204,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati }, /** - * Sets "angle" of an instance + * Sets "angle" of an instance with centered rotation * @param {Number} angle Angle value (in degrees) * @return {fabric.Object} thisArg * @chainable */ - setAngle: function(angle) { + rotate: function(angle) { var shouldCenterOrigin = (this.originX !== 'center' || this.originY !== 'center') && this.centeredRotation; if (shouldCenterOrigin) { @@ -13269,16 +13291,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati return this; }, - /** - * Removes object from canvas to which it was added last - * @return {fabric.Object} thisArg - * @chainable - */ - remove: function() { - this.canvas && this.canvas.remove(this); - return this; - }, - /** * Returns coordinates of a pointer relative to an object * @param {Event} e Event to operate upon @@ -13313,13 +13325,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati fabric.util.createAccessors && fabric.util.createAccessors(fabric.Object); - /** - * Alias for {@link fabric.Object.prototype.setAngle} - * @alias rotate -> setAngle - * @memberOf fabric.Object - */ - fabric.Object.prototype.rotate = fabric.Object.prototype.setAngle; - extend(fabric.Object.prototype, fabric.Observable); /** @@ -15510,8 +15515,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot parsedAttributes.x2 || 0, parsedAttributes.y2 || 0 ]; - options.originX = 'left'; - options.originY = 'top'; callback(new fabric.Line(points, extend(parsedAttributes, options))); }; /* _FROM_SVG_END_ */ @@ -15765,8 +15768,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.radius; parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.radius; - parsedAttributes.originX = 'left'; - parsedAttributes.originY = 'top'; callback(new fabric.Circle(extend(parsedAttributes, options))); }; @@ -16088,8 +16089,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx; parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry; - parsedAttributes.originX = 'left'; - parsedAttributes.originY = 'top'; callback(new fabric.Ellipse(extend(parsedAttributes, options))); }; /* _FROM_SVG_END_ */ @@ -16309,8 +16308,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot parsedAttributes.left = parsedAttributes.left || 0; parsedAttributes.top = parsedAttributes.top || 0; - parsedAttributes.originX = 'left'; - parsedAttributes.originY = 'top'; var rect = new fabric.Rect(extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes)); rect.visible = rect.visible && rect.width > 0 && rect.height > 0; callback(rect); @@ -16372,20 +16369,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ points: null, - /** - * Minimum X from points values, necessary to offset points - * @type Number - * @default - */ - minX: 0, - - /** - * Minimum Y from points values, necessary to offset points - * @type Number - * @default - */ - minY: 0, - cacheProperties: cacheProperties, /** @@ -16411,34 +16394,47 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot options = options || {}; this.points = points || []; this.callSuper('initialize', options); - this._calcDimensions(); - if (!('top' in options)) { - this.top = this.minY; + var calcDim = this._calcDimensions(); + if (typeof options.left === 'undefined') { + this.left = calcDim.left; } - if (!('left' in options)) { - this.left = this.minX; + if (typeof options.top === 'undefined') { + this.top = calcDim.top; } + this.width = calcDim.width; + this.height = calcDim.height; this.pathOffset = { - x: this.minX + this.width / 2, - y: this.minY + this.height / 2 + x: calcDim.left + this.width / 2, + y: calcDim.top + this.height / 2 }; }, /** + * Calculate the polygon min and max point from points array, + * returning an object with left, top, widht, height to measure the + * polygon size + * @return {Object} object.left X coordinate of the polygon leftmost point + * @return {Object} object.top Y coordinate of the polygon topmost point + * @return {Object} object.width distance between X coordinates of the polygon leftmost and rightmost point + * @return {Object} object.height distance between Y coordinates of the polygon topmost and bottommost point * @private */ _calcDimensions: function() { var points = this.points, - minX = min(points, 'x'), - minY = min(points, 'y'), - maxX = max(points, 'x'), - maxY = max(points, 'y'); + minX = min(points, 'x') || 0, + minY = min(points, 'y') || 0, + maxX = max(points, 'x') || 0, + maxY = max(points, 'y') || 0, + width = (maxX - minX), + height = (maxY - minY); - this.width = (maxX - minX) || 0; - this.height = (maxY - minY) || 0; - this.minX = minX || 0; - this.minY = minY || 0; + return { + left: minX, + top: minY, + width: width, + height: height + }; }, /** @@ -16740,20 +16736,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ path: null, - /** - * Minimum X from points values, necessary to offset points - * @type Number - * @default - */ - minX: 0, - - /** - * Minimum Y from points values, necessary to offset points - * @type Number - * @default - */ - minY: 0, - cacheProperties: cacheProperties, stateProperties: stateProperties, @@ -16797,30 +16779,20 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot _setPositionDimensions: function(options) { var calcDim = this._parseDimensions(); - this.minX = calcDim.left; - this.minY = calcDim.top; this.width = calcDim.width; this.height = calcDim.height; if (typeof options.left === 'undefined') { - this.left = calcDim.left + (this.originX === 'center' - ? this.width / 2 - : this.originX === 'right' - ? this.width - : 0); + this.left = calcDim.left; } if (typeof options.top === 'undefined') { - this.top = calcDim.top + (this.originY === 'center' - ? this.height / 2 - : this.originY === 'bottom' - ? this.height - : 0); + this.top = calcDim.top; } this.pathOffset = this.pathOffset || { - x: this.minX + this.width / 2, - y: this.minY + this.height / 2 + x: calcDim.left + this.width / 2, + y: calcDim.top + this.height / 2 }; }, @@ -17627,8 +17599,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ fabric.Path.fromElement = function(element, callback, options) { var parsedAttributes = fabric.parseAttributes(element, fabric.Path.ATTRIBUTE_NAMES); - parsedAttributes.originX = 'left'; - parsedAttributes.originY = 'top'; callback(new fabric.Path(parsedAttributes.d, extend(parsedAttributes, options))); }; /* _FROM_SVG_END_ */ @@ -19069,7 +19039,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @chainable */ straighten: function() { - this.setAngle(this._getAngleValueForStraighten()); + this.rotate(this._getAngleValueForStraighten()); return this; }, @@ -19094,7 +19064,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot endValue: this._getAngleValueForStraighten(), duration: this.FX_DURATION, onChange: function(value) { - _this.setAngle(value); + _this.rotate(value); onChange(); }, onComplete: function() { @@ -22926,6 +22896,104 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { })(typeof exports !== 'undefined' ? exports : this); +(function(global) { + + 'use strict'; + + var fabric = global.fabric || (global.fabric = { }), + filters = fabric.Image.filters, + createClass = fabric.util.createClass; + + /** + * HueRotation filter class + * @class fabric.Image.filters.HueRotation + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter + * @see {@link fabric.Image.filters.HueRotation#initialize} for constructor definition + * @see {@link http://fabricjs.com/image-filters|ImageFilters demo} + * @example + * var filter = new fabric.Image.filters.HueRotation({ + * rotation: -0.5 + * }); + * object.filters.push(filter); + * object.applyFilters(); + */ + filters.HueRotation = createClass(filters.ColorMatrix, /** @lends fabric.Image.filters.HueRotation.prototype */ { + + /** + * Filter type + * @param {String} type + * @default + */ + type: 'HueRotation', + + /** + * HueRotation value, from -1 to 1. + * the unit is radians + * @param {Number} myParameter + * @default + */ + rotation: 0, + + /** + * Describe the property that is the filter parameter + * @param {String} m + * @default + */ + mainParameter: 'rotation', + + calculateMatrix: function() { + var rad = this.rotation * Math.PI, cos = Math.cos(rad), sin = Math.sin(rad), + aThird = 1 / 3, aThirdSqtSin = Math.sqrt(aThird) * sin, OneMinusCos = 1 - cos; + this.matrix = [ + 1, 0, 0, 0, 0, + 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, + 0, 0, 0, 1, 0 + ]; + this.matrix[0] = cos + OneMinusCos / 3; + this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin; + this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin; + this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin; + this.matrix[6] = cos + aThird * OneMinusCos; + this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin; + this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin; + this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin; + this.matrix[12] = cos + aThird * OneMinusCos; + }, + + /** + * Apply this filter to the input image data provided. + * + * Determines whether to use WebGL or Canvas2D based on the options.webgl flag. + * + * @param {Object} options + * @param {Number} options.passes The number of filters remaining to be executed + * @param {Boolean} options.webgl Whether to use webgl to render the filter. + * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered. + * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn. + * @param {WebGLRenderingContext} options.context The GL context used for rendering. + * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type. + */ + applyTo: function(options) { + this.calculateMatrix(); + fabric.Image.filters.BaseFilter.prototype.applyTo.call(this, options); + }, + + }); + + /** + * Returns filter instance from an object representation + * @static + * @param {Object} object Object to create an instance from + * @param {function} [callback] to be invoked after filter creation + * @return {fabric.Image.filters.HueRotation} Instance of fabric.Image.filters.HueRotation + */ + fabric.Image.filters.HueRotation.fromObject = fabric.Image.filters.BaseFilter.fromObject; + +})(typeof exports !== 'undefined' ? exports : this); + + (function(global) { 'use strict'; @@ -23195,7 +23263,8 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { 'fontStyle', 'underline', 'overline', - 'linethrough' + 'linethrough', + 'textBackgroundColor', ], /** @@ -23905,9 +23974,9 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { * @param {String} method Method name ("fillText" or "strokeText") */ _renderTextCommon: function(ctx, method) { - - var lineHeights = 0, left = this._getLeftOffset(), top = this._getTopOffset(); - + ctx.save(); + var lineHeights = 0, left = this._getLeftOffset(), top = this._getTopOffset(), + offsets = this._applyPatternGradientTransform(ctx, method === 'fillText' ? this.fill : this.stroke); for (var i = 0, len = this._textLines.length; i < len; i++) { var heightOfLine = this.getHeightOfLine(i), maxHeight = heightOfLine / this.lineHeight, @@ -23916,12 +23985,13 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { method, ctx, this._textLines[i], - left + leftOffset, - top + lineHeights + maxHeight, + left + leftOffset - offsets.offsetX, + top + lineHeights + maxHeight - offsets.offsetY, i ); lineHeights += heightOfLine; } + ctx.restore(); }, /** @@ -24338,7 +24408,8 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { return callback(null); } - var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES); + var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES), + parsedAnchor = parsedAttributes.textAnchor || 'left'; options = fabric.util.object.extend((options ? clone(options) : { }), parsedAttributes); options.top = options.top || 0; @@ -24366,10 +24437,6 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { options.fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE; } - if (!options.originX) { - options.originX = 'left'; - } - var textContent = ''; // The XML is not properly parsed in IE9 so a workaround to get @@ -24399,18 +24466,16 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { x/y attributes in SVG correspond to the bottom-left corner of text bounding box fabric output by default at top, left. */ - if (text.originX === 'center') { + if (parsedAnchor === 'center') { offX = text.getScaledWidth() / 2; } - if (text.originX === 'right') { + if (parsedAnchor === 'right') { offX = text.getScaledWidth(); } text.set({ left: text.left - offX, top: text.top - (textHeight - text.fontSize * (0.18 + text._fontSizeFraction)) / text.lineHeight }); - text.originX = 'left'; - text.originY = 'top'; callback(text); }; /* _FROM_SVG_END_ */ @@ -24660,20 +24725,22 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { * Gets style of a current selection/cursor (at the start position) * @param {Number} [startIndex] Start index to get styles at * @param {Number} [endIndex] End index to get styles at + * @param {Boolean} [endIndex] End index to get styles at * @return {Object} styles Style object at a specified (or current) index */ - getSelectionStyles: function(startIndex, endIndex) { + getSelectionStyles: function(startIndex, endIndex, complete) { - if (arguments.length === 2) { + if (endIndex && startIndex !== endIndex) { var styles = []; for (var i = startIndex; i < endIndex; i++) { - styles.push(this.getSelectionStyles(i)); + styles.push(this.getSelectionStyles(i, i, complete)); } return styles; } var loc = this.get2DCursorLocation(startIndex), - style = this._getStyleDeclaration(loc.lineIndex, loc.charIndex); + style = complete ? this.getCompleteStyleDeclaration(loc.lineIndex, loc.charIndex) : + this._getStyleDeclaration(loc.lineIndex, loc.charIndex); return style || {}; }, @@ -25182,12 +25249,15 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { /** * Selects entire text + * @return {fabric.IText} thisArg + * @chainable */ selectAll: function() { this.selectionStart = 0; this.selectionEnd = this._text.length; this._fireSelectionChanged(); this._updateTextarea(); + return this; }, /** @@ -25316,6 +25386,8 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { /** * Selects a line based on the index * @param {Number} selectionStart Index of a character + * @return {fabric.IText} thisArg + * @chainable */ selectLine: function(selectionStart) { selectionStart = selectionStart || this.selectionStart; @@ -25326,6 +25398,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this.selectionEnd = newSelectionEnd; this._fireSelectionChanged(); this._updateTextarea(); + return this; }, /** @@ -25671,15 +25744,15 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { // remove and shift left on the same line if (this.styles[lineStart]) { styleObj = this.styles[lineStart]; - var diff = charEnd - charStart; + var diff = charEnd - charStart, numericChar, _char; for (i = charStart; i < charEnd; i++) { delete styleObj[i]; } - for (i = charEnd; i < this._textLines[lineStart].length; i++) { - //shifting - if (styleObj[i]) { - styleObj[i - diff] = styleObj[i]; - delete styleObj[i]; + for (_char in this.styles[lineStart]) { + numericChar = parseInt(_char, 10); + if (numericChar >= charEnd) { + styleObj[numericChar - diff] = styleObj[_char]; + delete styleObj[_char]; } } } @@ -25692,7 +25765,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { * @param {Number} offset Can any number? */ shiftLineStyles: function(lineIndex, offset) { - // shift all line styles by 1 upward + // shift all line styles by offset upward or downward // do not clone deep. we need new array, not new style objects var clonedStyles = clone(this.styles); for (var line in this.styles) { @@ -25704,7 +25777,6 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { } } } - //TODO: evaluate if delete old style lines with offset -1 }, restartCursorIfNeeded: function() { @@ -25729,12 +25801,12 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { qty || (qty = 1); this.shiftLineStyles(lineIndex, qty); - if (this.styles[lineIndex] && this.styles[lineIndex][charIndex - 1]) { - currentCharStyle = this.styles[lineIndex][charIndex - 1]; + if (this.styles[lineIndex]) { + currentCharStyle = this.styles[lineIndex][charIndex === 0 ? charIndex : charIndex - 1]; } // we clone styles of all chars - // after cursor onto the last line + // after cursor onto the current line for (var index in this.styles[lineIndex]) { var numIndex = parseInt(index, 10); if (numIndex >= charIndex) { @@ -25754,7 +25826,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { // we clone current char style onto the next (otherwise empty) line while (qty > 1) { qty--; - if (copiedStyle[qty]) { + if (copiedStyle && copiedStyle[qty]) { this.styles[lineIndex + qty] = { 0: clone(copiedStyle[qty]) }; } else if (currentCharStyle) { @@ -25779,7 +25851,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this.styles = {}; } var currentLineStyles = this.styles[lineIndex], - currentLineStylesCloned = clone(currentLineStyles); + currentLineStylesCloned = currentLineStyles ? clone(currentLineStyles) : {}; quantity || (quantity = 1); // shift all char styles by quantity forward @@ -25797,6 +25869,12 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this._forceClearCache = true; if (copiedStyle) { while (quantity--) { + if (!Object.keys(copiedStyle[quantity]).length) { + continue; + } + if (!this.styles[lineIndex]) { + this.styles[lineIndex] = {}; + } this.styles[lineIndex][charIndex + quantity] = clone(copiedStyle[quantity]); } return; @@ -25813,32 +25891,31 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { /** * Inserts style object(s) * @param {Array} insertedText Characters at the location where style is inserted - * @param {Number} start True if it's end of line + * @param {Number} start cursor index for inserting style + * @param {Array} [copiedStyle] array of style objects to insert. */ insertNewStyleBlock: function(insertedText, start, copiedStyle) { var cursorLoc = this.get2DCursorLocation(start, true), - addingNewLines = 0, addingChars = 0; + addedLines = [0], linesLenght = 0; for (var i = 0; i < insertedText.length; i++) { if (insertedText[i] === '\n') { - if (addingChars) { - this.insertCharStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addingChars, copiedStyle); - copiedStyle = copiedStyle && copiedStyle.slice(addingChars); - addingChars = 0; - } - addingNewLines++; + linesLenght++; + addedLines[linesLenght] = 0; } else { - if (addingNewLines) { - this.insertNewlineStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addingNewLines, copiedStyle); - copiedStyle = copiedStyle && copiedStyle.slice(addingNewLines); - addingNewLines = 0; - } - addingChars++; + addedLines[linesLenght]++; } } - addingChars && this.insertCharStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addingChars, copiedStyle); - addingNewLines && this.insertNewlineStyleObject( - cursorLoc.lineIndex, cursorLoc.charIndex, addingNewLines, copiedStyle); + if (addedLines[0] > 0) { + this.insertCharStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addedLines[0], copiedStyle); + copiedStyle = copiedStyle && copiedStyle.slice(addedLines[0] + 1); + } + linesLenght && this.insertNewlineStyleObject( + cursorLoc.lineIndex, cursorLoc.charIndex + addedLines[0], linesLenght); + for (var i = 1; i <= linesLenght; i++) { + this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle); + copiedStyle = copiedStyle && copiedStyle.slice(addedLines[i] + 1); + } }, /** @@ -26345,7 +26422,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } fabric.copiedText = this.getSelectedText(); - fabric.copiedTextStyle = this.getSelectionStyles(this.selectionStart, this.selectionEnd); + fabric.copiedTextStyle = this.getSelectionStyles(this.selectionStart, this.selectionEnd, true); this._copyDone = true; }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 4f5b817a..43c52053 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,9 +1,9 @@ -function copyGLTo2DDrawImage(t,e){var i=t.canvas,r=e.getContext("2d");r.translate(0,e.height),r.scale(1,-1);var n=i.height-e.height;r.drawImage(i,0,n,e.width,e.height,0,0,e.width,e.height)}function copyGLTo2DPutImageData(t,e){var i=e.getContext("2d"),r=e.width,n=e.height,s=r*n*4,o=new Uint8Array(this.imageBuffer,0,s),a=new Uint8ClampedArray(this.imageBuffer,0,s);t.readPixels(0,0,r,n,t.RGBA,t.UNSIGNED_BYTE,o);var h=new ImageData(a,r);i.putImageData(h,0,0)}var fabric=fabric||{version:"2.0.0-beta5"};"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.canvasModule="canvas",fabric.perfLimitSizeTotal=2097152,fabric.maxCacheSideLimit=4096,fabric.minCacheSideLimit=256,fabric.charWidthsCache={},fabric.textureSize=2048,fabric.enableGLFiltering=!0,fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,fabric.initFilterBackend=function(){return fabric.isWebglSupported&&fabric.isWebglSupported(fabric.textureSize)&&fabric.enableGLFiltering?(console.log("max texture size: "+fabric.maxTextureSize),new fabric.WebglFilterBackend({tileSize:fabric.textureSize})):fabric.Canvas2dFilterBackend?new fabric.Canvas2dFilterBackend:void 0},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")},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?P-=2*f:1===c&&P<0&&(P+=2*f);for(var M=Math.ceil(Math.abs(P/f*2)),F=[],L=P/M,I=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),R=A+L,B=0;B=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,m,b,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var T=0;T<2;++T)if(T>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,">")}function r(t){var e,i=0,r=[];for(i=0,e;i57343)return t.charAt(e);if(55296<=i&&i<=56319){if(t.length<=e+1)throw"High surrogate without following low surrogate";var r=t.charCodeAt(e+1);if(56320>r||r>57343)throw"High surrogate without following low surrogate";return t.charAt(e)+t.charAt(e+1)}if(0===e)throw"Low surrogate without preceding high surrogate";var n=t.charCodeAt(e-1);if(55296>n||n>56319)throw"Low surrogate without preceding high surrogate";return!1}fabric.util.string={camelize:t,capitalize:e,escapeXml:i,graphemeSplit:r}}(),function(){function t(){}function e(t){for(var e=null,i=this;i.constructor.superclass;){var n=i.constructor.superclass.prototype[t];if(i[t]!==n){e=n;break}i=i.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(){return!1}function e(e){i(function(r){e||(e={});var n,s=r||+new Date,o=e.duration||500,a=s+o,h=e.onChange||t,c=e.abort||t,l=e.onComplete||t,u=e.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},f="startValue"in e?e.startValue:0,d="endValue"in e?e.endValue:100,g=e.byValue||d-f;e.onStart&&e.onStart(),function t(r){if(c())return void l(d,1,1);n=r||+new Date;var p=n>a?o:n-s,v=p/o,m=u(p,f,g,o),b=Math.abs((m-f)/g);return h(m,b,v),n>a?void(e.onComplete&&e.onComplete()):void i(t)}(s)})}function i(){return r.apply(fabric.window,arguments)}var r=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){return fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=i}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return _;if((f||d)&&(x=" translate("+y(f)+" "+y(d)+") "),r=x+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),_}function g(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}var p=t.fabric||(t.fabric={}),v=p.util.object.extend,m=p.util.object.clone,b=p.util.toFixed,y=p.util.parseUnit,_=p.util.multiplyTransformMatrices,x=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,C=/^(symbol|image|marker|pattern|view|svg)$/i,S=/^(?:pattern|defs|symbol|metadata|clipPath|mask)$/i,w=/^(symbol|g|a|svg)$/i,T={ -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"},O={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*$",m=new RegExp(v),b=new RegExp(d,"g");return function(s){var o=n.concat(),a=[];if(!s||s&&!m.test(s))return o;s.replace(b,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 k=new RegExp("^\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*$");p.parseSVGDocument=function(t,e,i,r){if(t){f(t);var n,s,o=p.Object.__uid++,a=d(t),h=p.util.toArray(t.getElementsByTagName("*"));if(a.crossOrigin=r&&r.crossOrigin,a.svgUid=o,0===h.length&&p.isLikelyNode){h=t.selectNodes('//*[name(.)!="svg"]');var c=[];for(n=0,s=h.length;n/i,""))),n&&n.documentElement||e&&e(null),p.parseSVGDocument(n.documentElement,function(t,i,r,n){e&&e(t,i,r,n)},i,r)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:n})},loadSVGFromString:function(t,e,i,r){t=t.trim();var n;if("undefined"!=typeof DOMParser){var s=new DOMParser;s&&s.parseFromString&&(n=s.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t.replace(//i,"")));p.parseSVGDocument(n.documentElement,function(t,i,r,n){e(t,i,r,n)},i,r)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r,n){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0,this.parsingOptions=n},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){var n,s,o,a,h=new e,c=r.length;for(a=0;a0&&(h.status="Intersection"),h},i.Intersection.intersectPolygonPolygon=function(t,i){var r,n=new e,s=t.length;for(r=0;r0&&(n.status="Intersection"),n},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:o,s){var a=s.split(/\s*;\s*/);for(""===a[a.length-1]&&a.pop(),n=a.length;n--;){var h=a[n].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:o,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}var n=fabric.util.object.clone;fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,i,r,s,o=n(this.coords,!0),a=n(this.colorStops,!0),h=o.r1>o.r2;a.sort(function(t,e){return t.offset-e.offset});for(var c in o)"x1"===c||"x2"===c?o[c]+=this.offsetX-t.width/2:"y1"!==c&&"y2"!==c||(o[c]+=this.offsetY-t.height/2);if(s='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(s+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?r=["\n']:"radial"===this.type&&(r=["\n']),"radial"===this.type){if(h)for(a=a.concat(),a.reverse(),e=0,i=a.length;e0){var u=Math.max(o.r1,o.r2),f=l/u;for(e=0,i=a.length;e\n')}return r.push("linear"===this.type?"\n":"\n"),r.join("")},toLive:function(t){var e,i,r,n=fabric.util.object.clone(this.coords);if(this.type){for("linear"===this.type?e=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(e=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2)),i=0,r=this.colorStops.length;i\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.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,_initStatic:function(t,e){var i=this.requestRenderAllBound;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.requestRenderAll(),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,r,n=this._activeObject,s=!1,o=!0;for(this.viewportTransform=t,i=0,r=this._objects.length;i"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\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(){var t,e,i,r,n,s,o,a,h,c="",l={},u=fabric.fontPaths,f=this.getObjects();for(a=0,h=f.length;a',"\n",c,"","\n"].join("")),c},_setSVGObjects:function(t,e){var i,r,n,s=this.getObjects();for(r=0,n=s.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeObject;if(t===s&&"activeSelection"===t.type)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.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeObject;if(t===s&&"activeSelection"===t.type)for(n=s._objects,e=0;e0+c&&(o=s-1,i(this._objects,n),this._objects.splice(o,0,n)),c++;else s=this._objects.indexOf(t),0!==s&&(o=this._findNewLowerIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(t,e,i){var r,n;if(i)for(r=e,n=e-1;n>=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._activeObject,c=0;if(t===h&&"activeSelection"===t.type)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s"}}),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,e,i=this.canvas.contextTop,r=this.canvas.viewportTransform,n=this._points[0],s=this._points[1];for(i.save(),i.transform(r[0],r[1],r[2],r[3],r[4],r[5]),i.beginPath(),2===this._points.length&&n.x===s.x&&n.y===s.y&&(n.x-=.5,s.x+=.5),i.moveTo(n.x,n.y),t=1,e=this._points.length;t0&&!this.preserveObjectStacking){e=[],i=[];for(var n=0,s=this._objects.length;n1&&(this._activeObject._objects=i),e.push.apply(e,i)}else e=this._objects;return e},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1);var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this},renderTop:function(){var t=this.contextTop;return this.clearContext(t),this.selection&&this._groupSelector&&this._drawSelection(t),this.fire("after:render"),this.contextTopDirty=!0,this},_resetCurrentTransform:function(){var t=this._currentTransform;t.target.set({scaleX:t.original.scaleX,scaleY:t.original.scaleY,skewX:t.original.skewX,skewY:t.original.skewY,left:t.original.left,top:t.original.top}),this._shouldCenterTransform(t.target)?"rotate"===t.action?this._setOriginToCenter(t.target):("center"!==t.originX&&("right"===t.originX?t.mouseXSign=-1:t.mouseXSign=1),"center"!==t.originY&&("bottom"===t.originY?t.mouseYSign=-1:t.mouseYSign=1),t.originX="center",t.originY="center"):(t.originX=t.original.originX,t.originY=t.original.originY)},containsPoint:function(t,e,i){var r,n=!0,s=i||this.getPointer(t,n);return r=e.group&&e.group===this._activeObject&&"activeSelection"===e.group.type?this._normalizePointer(e.group,s):{x:s.x,y:s.y},e.containsPoint(r)||e._findTargetCorner(s)},_normalizePointer:function(t,e){var i=t.calcTransformMatrix(),r=fabric.util.invertTransform(i),n=this.restorePointerVpt(e);return fabric.util.transformPoint(n,r)},isTargetTransparent:function(t,e,i){var r=t.hasBorders,n=t.transparentCorners,s=this.contextCache,o=t.selectionBackgroundColor;t.hasBorders=t.transparentCorners=!1,t.selectionBackgroundColor="",s.save(),s.transform.apply(s,this.viewportTransform),t.render(s),s.restore(),t.active&&t._renderControls(s),t.hasBorders=r,t.transparentCorners=n,t.selectionBackgroundColor=o;var a=fabric.util.isTransparent(s,e,i,this.targetFindTolerance);return this.clearContext(s),a},_shouldClearSelection:function(t,e){var i=this.getActiveObjects(),r=this._activeObject;return!e||e&&r&&i.length>1&&i.indexOf(e)===-1&&r!==e&&!t[this.selectionKey]||e&&!e.evented||e&&!e.selectable&&r&&r!==e},_shouldCenterTransform:function(t){if(t){var e,i=this._currentTransform;return"scale"===i.action||"scaleX"===i.action||"scaleY"===i.action?e=this.centeredScaling||t.centeredScaling:"rotate"===i.action&&(e=this.centeredRotation||t.centeredRotation),e?!i.altKey:i.altKey}},_getOriginFromCorner:function(t,e){var i={x:t.originX,y:t.originY};return"ml"===e||"tl"===e||"bl"===e?i.x="right":"mr"!==e&&"tr"!==e&&"br"!==e||(i.x="left"),"tl"===e||"mt"===e||"tr"===e?i.y="bottom":"bl"!==e&&"mb"!==e&&"br"!==e||(i.y="top"),i},_getActionFromCorner:function(t,e,i){if(!e)return"drag";switch(e){case"mtr":return"rotate";case"ml":case"mr":return i[this.altActionKey]?"skewY":"scaleX";case"mt":case"mb":return i[this.altActionKey]?"skewX":"scaleY";default:return"scale"}},_setupCurrentTransform:function(t,i){if(i){var r=this.getPointer(t),n=i._findTargetCorner(this.getPointer(t,!0)),s=this._getActionFromCorner(i,n,t),o=this._getOriginFromCorner(i,n);this._currentTransform={target:i,action:s,corner:n,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:r.x-i.left,offsetY:r.y-i.top,originX:o.x,originY:o.y,ex:r.x,ey:r.y,lastX:r.x,lastY:r.y,left:i.left,top:i.top,theta:e(i.angle),width:i.width*i.scaleX,mouseXSign:1,mouseYSign:1,shiftKey:t.shiftKey,altKey:t[this.centeredKey]},this._currentTransform.original={left:i.left,top:i.top,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,originX:o.x,originY:o.y},this._resetCurrentTransform()}},_translateObject:function(t,e){var i=this._currentTransform,r=i.target,n=t-i.offsetX,s=e-i.offsetY,o=!r.get("lockMovementX")&&r.left!==n,a=!r.get("lockMovementY")&&r.top!==s;return o&&r.set("left",n),a&&r.set("top",s),o||a},_changeSkewTransformOrigin:function(t,e,i){var r="originX",n={0:"center"},s=e.target.skewX,o="left",a="right",h="mt"===e.corner||"ml"===e.corner?1:-1,c=1;t=t>0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this._activeObject,o=this.getActiveObjects();if(this.targets=[],o.length>1&&!e&&s===this._searchPossibleTargets([s],n))return this._fireOverOutEvents(s,t),s;if(1===o.length&&s._findTargetCorner(n))return this._fireOverOutEvents(s,t),s;if(1===o.length&&s===this._searchPossibleTargets([s],n)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(s,t),s;i=s}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){var i,r,n=this._hoveredTarget;n!==t&&(i={e:e,target:t,previousTarget:this._hoveredTarget},r={e:e,target:this._hoveredTarget,nextTarget:t},this._hoveredTarget=t),t?n!==t&&(n&&(this.fire("mouse:out",r),n.fire("mouseout",r)),this.fire("mouse:over",i),t.fire("mouseover",i)):n&&(this.fire("mouse:out",r),n.fire("mouseout",r))},_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.upperCanvasEl.className="":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.width+"px",height:this.height+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.width||t.width,i=this.height||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},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var t=this._activeObject;return t?"activeSelection"===t.type&&t._objects?t._objects:[t]:[]},_onObjectRemoved:function(t){t===this._activeObject&&(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)},setActiveObject:function(t,e){var i=this._activeObject;return t===i?this:(this._setActiveObject(t,e)&&(i&&i.fire("deselected",{e:e}),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this)},_setActiveObject:function(t,e){var i=this._activeObject;return i!==t&&!t.onSelect({e:e})&&(!!this._discardActiveObject(e)&&(this._activeObject=t,t.set("active",!0),!0))},_discardActiveObject:function(t){var e=this._activeObject;if(e&&e.onDeselect&&"function"==typeof e.onDeselect){if(e.onDeselect({e:t}))return!1;e.set("active",!1),this._activeObject=null}return!0},discardActiveObject:function(t){var e=this._activeObject;return e&&(this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(t)&&(this.fire("selection:cleared",{e:t}),e.fire("deselected",{e:t}))),this},dispose:function(){fabric.StaticCanvas.prototype.dispose.call(this);var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),delete this.upperCanvasEl,t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var e=this._activeObject;e&&e._renderControls(t)},_toObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(t),n=this.callSuper("_toObject",t,e,i);return this._unwindGroupTransformOnObject(t,r),n},_realizeGroupTransformOnObject:function(t){if(t.group&&"activeSelection"===t.group.type&&this._activeObject===t.group){var e=["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"],i={};return e.forEach(function(e){i[e]=t[e]}),this._activeObject.realizeTransform(t),i}return null},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},_setSVGObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(e);this.callSuper("_setSVGObject",t,e,i),this._unwindGroupTransformOnObject(e,r)}});for(var a in fabric.StaticCanvas)"prototype"!==a&&(fabric.Canvas[a]=fabric.StaticCanvas[a]);fabric.isTouchSupported&&(fabric.Canvas.prototype._setCursorFromEvent=function(){})}(),function(){function t(t,e){return"which"in t?t.which===e:t.button===e-1}var e={mt:0,tr:1,mr:2,br:3,mb:4,bl:5,ml:6,tl:7},i=fabric.util.addListener,r=fabric.util.removeListener,n=3,s=2,o=1;fabric.util.object.extend(fabric.Canvas.prototype,{cursorMap:["n-resize","ne-resize","e-resize","se-resize","s-resize","sw-resize","w-resize","nw-resize"],_initEventListeners:function(){this.removeListeners(),this._bindEvents(),i(fabric.window,"resize",this._onResize),i(this.upperCanvasEl,"mousedown",this._onMouseDown),i(this.upperCanvasEl,"dblclick",this._onDoubleClick),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"mouseout",this._onMouseOut),i(this.upperCanvasEl,"mouseenter",this._onMouseEnter),i(this.upperCanvasEl,"wheel",this._onMouseWheel),i(this.upperCanvasEl,"contextmenu",this._onContextMenu),i(this.upperCanvasEl,"touchstart",this._onMouseDown,{passive:!1}),i(this.upperCanvasEl,"touchmove",this._onMouseMove,{passive:!1}),"undefined"!=typeof eventjs&&"add"in eventjs&&(eventjs.add(this.upperCanvasEl,"gesture",this._onGesture),eventjs.add(this.upperCanvasEl,"drag",this._onDrag),eventjs.add(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.add(this.upperCanvasEl,"shake",this._onShake),eventjs.add(this.upperCanvasEl,"longpress",this._onLongPress))},_bindEvents:function(){this.eventsBinded||(this._onMouseDown=this._onMouseDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this.eventsBinded=!0)},removeListeners:function(){r(fabric.window,"resize",this._onResize),r(this.upperCanvasEl,"mousedown",this._onMouseDown),r(this.upperCanvasEl,"mousemove",this._onMouseMove),r(this.upperCanvasEl,"mouseout",this._onMouseOut),r(this.upperCanvasEl,"mouseenter",this._onMouseEnter),r(this.upperCanvasEl,"wheel",this._onMouseWheel),r(this.upperCanvasEl,"contextmenu",this._onContextMenu),r(this.upperCanvasEl,"doubleclick",this._onDoubleClick),r(this.upperCanvasEl,"touchstart",this._onMouseDown),r(this.upperCanvasEl,"touchmove",this._onMouseMove),"undefined"!=typeof eventjs&&"remove"in eventjs&&(eventjs.remove(this.upperCanvasEl,"gesture",this._onGesture),eventjs.remove(this.upperCanvasEl,"drag",this._onDrag),eventjs.remove(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.remove(this.upperCanvasEl,"shake",this._onShake),eventjs.remove(this.upperCanvasEl,"longpress",this._onLongPress))},_onGesture:function(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t){this.__onMouseWheel(t)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t}),this._iTextInstances&&this._iTextInstances.forEach(function(t){t.isEditing&&t.hiddenTextarea.focus()})},_onMouseEnter:function(t){this.findTarget(t)||(this.fire("mouse:over",{target:null,e:t}),this._hoveredTarget=null)},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e)},_onContextMenu:function(t){return this.stopContextMenu&&(t.stopPropagation(),t.preventDefault()),!1},_onDoubleClick:function(t){var e;this._handleEvent(t,"dblclick",e)},_onMouseDown:function(t){this.__onMouseDown(t),i(fabric.document,"touchend",this._onMouseUp,{passive:!1}),i(fabric.document,"touchmove",this._onMouseMove,{passive:!1}),r(this.upperCanvasEl,"mousemove",this._onMouseMove),r(this.upperCanvasEl,"touchmove",this._onMouseMove),"touchstart"===t.type?r(this.upperCanvasEl,"mousedown",this._onMouseDown):(i(fabric.document,"mouseup",this._onMouseUp),i(fabric.document,"mousemove",this._onMouseMove))},_onMouseUp:function(t){if(this.__onMouseUp(t),r(fabric.document,"mouseup",this._onMouseUp),r(fabric.document,"touchend",this._onMouseUp),r(fabric.document,"mousemove",this._onMouseMove),r(fabric.document,"touchmove",this._onMouseMove),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"touchmove",this._onMouseMove,{passive:!1}),"touchend"===t.type){var e=this;setTimeout(function(){i(e.upperCanvasEl,"mousedown",e._onMouseDown)},400)}},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t,e){var i=this._activeObject;return(!i||!i.isEditing||t!==i)&&!!(t&&(t.isMoving||t!==i)||!t&&i||!t&&!i&&!this._groupSelector||e&&this._previousPointer&&this.selection&&(e.x!==this._previousPointer.x||e.y!==this._previousPointer.y))},__onMouseUp:function(e){var i;if(t(e,n))return void(this.fireRightClick&&this._handleEvent(e,"up",i,n));if(t(e,s))return void(this.fireMiddleClick&&this._handleEvent(e,"up",i,s));if(this.isDrawingMode&&this._isCurrentlyDrawing)return void this._onMouseUpInDrawingMode(e);var r=!0,a=this._currentTransform,h=this._groupSelector,c=!h||0===h.left&&0===h.top;a&&(this._finalizeCurrentTransform(e),r=!a.actionPerformed),i=r?this.findTarget(e,!0):a.target;var l=this._shouldRender(i,this.getPointer(e));i||!c?this._maybeGroupObjects(e):(this._groupSelector=null,this._currentTransform=null),i&&(i.isMoving=!1),this._setCursorFromEvent(e,i),this._handleEvent(e,"up",i?i:null,o,c),i&&(i.__corner=0),l&&this.requestRenderAll()},_handleEvent:function(t,e,i,r,n){var s="undefined"==typeof i?this.findTarget(t):i,a=this.targets||[],h={e:t,target:s,subTargets:a,button:r||o,isClick:n||!1};this.fire("mouse:"+e,h),s&&s.fire("mouse"+e,h);for(var c=0;c1)){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.requestRenderAll()},_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 this._isUniscalePossible(t,e.target)?(e.currentAction="scale",this._scaleObject(i,r)):(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally"))},_isUniscalePossible:function(t,e){return(t[this.uniScaleKey]||this.uniScaleTransform)&&!e.get("lockUniScaling")},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this._activeObject&&"activeSelection"===this._activeObject.type?this._activeObject:null,n=(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this.setCursor(this.getCornerCursor(n,e,t)):this.setCursor(i)},getCornerCursor:function(t,i,r){return this.actionIsDisabled(t,i,r)?this.notAllowedCursor:t in e?this._getRotatedCornerCursor(t,i,r):"mtr"===t&&i.hasRotatingPoint?this.rotationCursor:this.defaultCursor},actionIsDisabled:function(t,e,i){return"mt"===t||"mb"===t?i[this.altActionKey]?e.lockSkewingX:e.lockScalingY:"ml"===t||"mr"===t?i[this.altActionKey]?e.lockSkewingY:e.lockScalingX:"mtr"===t?e.lockRotation:this._isUniscalePossible(i,e)?e.lockScalingX&&e.lockScalingY:e.lockScalingX||e.lockScalingY},_getRotatedCornerCursor:function(t,i,r){var n=Math.round(i.angle%360/45);return n<0&&(n+=8),n+=e[t],r[this.altActionKey]&&e[t]%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._activeObject;return i&&t[this.selectionKey]&&e&&e.selectable&&this.selection&&(i!==e||"activeSelection"===i.type)},_handleGrouping:function(t,e){var i=this._activeObject;i.__corner||(e!==i||(e=this.findTarget(t,!0)))&&(i&&"activeSelection"===i.type?this._updateActiveSelection(e,t):this._createActiveSelection(e,t))},_updateActiveSelection:function(t,e){var i=this._activeObject;if(i.contains(t)){if(i.removeWithUpdate(t),1===i.size())return void this.setActiveObject(i.item(0),e)}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e})},_createActiveSelection:function(t,e){var i=this._createGroup(t);this.setActiveObject(i,e),this.fire("selection:created",{target:i,e:e})},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.ActiveSelection(e.reverse(),{canvas:this}),this.setActiveObject(e,t),this.fire("selection:created",{target:e,e:t}),this.requestRenderAll())},_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))&&(r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t),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.width,s=this.height,o=(i.width||this.width)*r,a=(i.height||this.height)*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,p=this.skipOffscreen;this.viewportTransform=d,this.skipOffscreen=!1,this.interactive=!1,n===o&&s===a||this.setDimensions({width:o,height:a}),this.renderAll();var v=this.__toDataURL(t,e,i);return this.interactive=g,this.skipOffscreen=p,this.viewportTransform=l,this.setDimensions({width:n,height:s}),v},__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}})}(),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),n=this,s=this.renderOnAddRemove;return this.renderOnAddRemove=!1,this._enlivenObjects(r.objects,function(t){n.clear(),n._setBgOverlay(r,function(){t.forEach(function(t,e){n.insertAt(t,e)}),n.renderOnAddRemove=s,delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),n.renderAll(),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,r),this.__setBgOverlay("overlayImage",t.overlayImage,i,r),this.__setBgOverlay("backgroundColor",t.background,i,r),this.__setBgOverlay("overlayColor",t.overlay,i,r)},__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){return t&&0!==t.length?void fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,i):void(e&&e([]))},_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.width,e.height=this.height;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,c=2;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,__corner:0,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY fillRule".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height strokeLineCap strokeLineJoin strokeMiterLimit backgroundColor".split(" "),initialize:function(t){t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,r=e.cacheSideLimit,n=t.width,s=t.height,o=n/s,a=e.util.limitDimsByArea(o,i,r),h=e.util.capValue,c=e.maxCacheSideLimit,l=e.minCacheSideLimit,u=h(l,a.x,c),f=h(l,a.y,c);return n>u?(t.zoomX/=n/u,t.width=u):nf?(t.zoomY/=s/f,t.height=f):sg||s>p,m=(n<.9*g||s<.9*p)&&g>r&&p>r;d=v||m,v&&(u=.1*n&-2,f=.1*s&-2)}return!!l&&(d?(this._cacheCanvas.width=Math.max(Math.ceil(n)+u,r),this._cacheCanvas.height=Math.max(Math.ceil(s)+f,r),this.cacheTranslationX=(n+u)/2,this.cacheTranslationY=(s+f)/2):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,this._cacheCanvas.width,this._cacheCanvas.height)),this.cacheWidth=n,this.cacheHeight=s,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(o,a),this.zoomX=o,this.zoomY=a,!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.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.angle,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}},getObjectOpacity:function(){var t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.isOnACache()&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},onDeselect:function(){},onSelect:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||0===this.width&&0===this.height||!this.visible},render:function(t){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t,this),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache()?(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext),this.dirty=!1),this.drawCacheOnCanvas(t)):(this.dirty=!1,this.drawObject(t),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},needsItsOwnCache:function(){return!1},shouldCache:function(){return this.ownCaching=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawObject:function(t){this._renderBackground(t),this._setStrokeStyles(t,this),this._setFillStyles(t,this),this._render(t)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&!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){this.group&&!this.group.transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity},_setStrokeStyles:function(t,e){e.stroke&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,t.strokeStyle=e.stroke.toLive?e.stroke.toLive(t,this):e.stroke)},_setFillStyles:function(t,e){e.fill&&(t.fillStyle=e.fill.toLive?e.fill.toLive(t,this):e.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){var r,n,s,a=this.getViewportTransform(),h=this.calcTransformMatrix();i=i||{},n="undefined"!=typeof i.hasBorders?i.hasBorders:this.hasBorders,s="undefined"!=typeof i.hasControls?i.hasControls:this.hasControls,h=e.util.multiplyTransformMatrices(a,h),r=e.util.qrDecompose(h),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),i.forActiveSelection?(t.rotate(o(r.angle)),n&&this.drawBordersInGroup(t,r,i)):(t.rotate(o(this.angle)),n&&this.drawBorders(t,i)),s&&this.drawControls(t,i),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,r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n),i&&t.transform.apply(t,i)}},_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())},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_removeTransformMatrix:function(){var t=this._findCenterFromElement();if(this.transformMatrix){var i=e.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",i.scaleX),this.set("scaleY",i.scaleY),this.angle=i.angle,this.skewX=i.skewX,this.skewY=0,t=e.util.transformPoint(t,this.transformMatrix)}this.transformMatrix=null,this.setPositionByOrigin(t,"center","center")},clone:function(t,i){var r=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(r,t):e.Object._fromObject("Object",r,t)},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.active,left:this.left,top:this.top};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.width/2,n.height/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.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){var o=e[t];i=r(i,!0),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=s?new o(i[s],i):new o(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.getScaledWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")},onDeselect:function(){}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight: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),m=new fabric.Point(p.x-o*a,p.y+o*h),b=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+m.x)/2,(p.y+m.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((b.x+v.x)/2,(b.y+v.y)/2),C=new fabric.Point((b.x+m.x)/2,(b.y+m.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:b,bl:m};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return 6.123233995736766e-17!==i&&i!==-1.8369701987210297e-16||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e,r,n=this.getCenterPoint(),s=[1,0,0,1,n.x,n.y],o=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0);return r=this.group&&!t?i(this.group.calcTransformMatrix(),s):s,this.angle&&(e=this._calcRotateMatrix(),r=i(r,e)),r=i(r,o)},_calcDimensionsTransformMatrix:function(t,r,n){var s,o=this.scaleX*(n&&this.flipX?-1:1),a=this.scaleY*(n&&this.flipY?-1:1),h=[o,0,0,a,0,0];return t&&(s=[1,0,Math.tan(e(t)),1],h=i(h,s,!0)),r&&(s=[1,Math.tan(e(r)),0,1],h=i(h,s,!0)),h},_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')},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t}})}(),function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i,r){if(t===i)return!0;if(Array.isArray(t)){if(t.length!==i.length)return!1;for(var n=0,s=t.length;n\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,n){n=n||{};var s=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),o=[s.x1||0,s.y1||0,s.x2||0,s.y2||0];n.originX="left",n.originY="top",e(new i.Line(o,r(s,n)))},i.Line.fromObject=function(t,e){function r(t){delete t.points,e&&e(t)}var s=n(t,!0);s.points=[t.x1,t.y1,t.x2,t.y2],i.Object._fromObject("Line",s,r,"points")}}("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)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){t.beginPath(),t.arc(0,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,s){s||(s={});var o=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(o))throw new Error("value of `r` attribute is required and can not be negative");o.left=(o.left||0)-o.radius,o.top=(o.top||0)-o.radius,o.originX="left",o.originY="top",r(new i.Circle(n(o,s)))},i.Circle.fromObject=function(t,e){return i.Object._fromObject("Circle",t,e)}}("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){return e.Object._fromObject("Triangle",t,i)}))}("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 e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,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,n){n||(n={});var s=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);s.left=(s.left||0)-s.rx,s.top=(s.top||0)-s.ry,s.originX="left",s.originY="top",i(new e.Ellipse(r(s,n)))},e.Ellipse.fromObject=function(t,i){return e.Object._fromObject("Ellipse",t,i)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var e=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,n=this.height,s=-this.width/2,o=-this.height/2,a=0!==e||0!==i,h=.4477152502;t.beginPath(),t.moveTo(s+e,o),t.lineTo(s+r-e,o),a&&t.bezierCurveTo(s+r-h*e,o,s+r,o+h*i,s+r,o+i),t.lineTo(s+r,o+n-i),a&&t.bezierCurveTo(s+r,o+n-h*i,s+r-h*e,o+n,s+r-e,o+n),t.lineTo(s+e,o+n),a&&t.bezierCurveTo(s+h*e,o+n,s,o+n-h*i,s,o+n-i),t.lineTo(s,o+i),a&&t.bezierCurveTo(s,o+h*i,s+h*e,o,s+e,o),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.width/2,r=-this.height/2;return 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,n){if(!t)return r(null);n=n||{};var s=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);s.left=s.left||0,s.top=s.top||0,s.originX="left",s.originY="top";var o=new e.Rect(i(n?e.util.object.clone(n):{},s));o.visible=o.visible&&o.width>0&&o.height>0,r(o)},e.Rect.fromObject=function(t,i){return e.Object._fromObject("Rect",t,i)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed,o=e.Object.NUM_FRACTION_DIGITS;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var a=e.Object.prototype.cacheProperties.concat();a.push("points"), -e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:a,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){for(var e=[],i=this.pathOffset.x,r=this.pathOffset.y,n=this._createBaseSVGMarkup(),a=0,h=this.points.length;a\n'),t?t(n.join("")):n.join("")},commonRender:function(t){var e,i=this.points.length,r=this.pathOffset.x,n=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-r,this.points[0].y-n);for(var s=0;s"},toObject:function(t){var e=n(this.callSuper("toObject",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(["sourcePath"].concat(t));return e.sourcePath&&delete e.path,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 m=1,b=n.length;m"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this},_onObjectRemoved:function(t){this.dirty=!0,delete t.group},_set:function(t,e){var i=this._objects.length;if(this.useSetOnGroup)for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e,r=this.sourcePath;return e=r?r:this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r}),i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isOnACache());if(this.ownCaching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")}}),e.Group.fromObject=function(t,i){e.util.enlivenObjects(t.objects,function(r){var n=e.util.object.clone(t,!0);delete n.objects,i&&i(new e.Group(r,n,!0))})})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});e.ActiveSelection||(e.ActiveSelection=e.util.createClass(e.Group,{type:"activeSelection",initialize:function(t,i){i=i||{},this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;i.originX&&(this.originX=i.originX),i.originY&&(this.originY=i.originY),this._calcBounds(),this._updateObjectsCoords(),e.Object.prototype.initialize.call(this,i),this.setCoords()},toGroup:function(){var t=this._objects;this._objects=[];var i=this.toObject(),r=new e.Group([]);if(delete i.objects,r.set(i),r.type="group",t.forEach(function(t){t.group=r,t.canvas.remove(t)}),r._objects=t,!this.canvas)return r;var n=this.canvas;return n.add(r),n._activeObject=r,r.setCoords(),r},onDeselect:function(){return this.destroy(),!1},toString:function(){return"#"},_set:function(t,i){var r=this._objects.length;if("canvas"===t)for(;r--;)this._objects[r].set(t,i);if(this.useSetOnGroup)for(;r--;)this._objects[r].setOnGroup(t,i);e.Object.prototype._set.call(this,t,i)},shouldCache:function(){return!1},willDrawShadow:function(){if(this.shadow)return this.callSuper("willDrawShadow");for(var t=0,e=this._objects.length;t\n',"\t\n'),this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,e.push("\n'),this.fill=n}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){return fabric.util.loadImage(t,function(t){this.setElement(t,i),e(this)},this,i&&i.crossOrigin),this},toString:function(){return'#'},applyResizeFilters:function(){var t=this.resizeFilter,e=this.canvas?this.canvas.getRetinaScaling():1,i=this.minimumScaleTrigger,r=this.scaleX=1&&n>=1)return void(this._element=this._filteredEl);fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend());var s,o=this._filteredEl||this._originalElement;if(this._element===this._originalElement){var a=fabric.util.createCanvasElement();a.width=o.width,a.height=o.height,this._element=a}var h=this._element.getContext("2d");o.getContext?s=o.getContext("2d").getImageData(0,0,o.width,o.height):(h.drawImage(o,0,0),s=h.getImageData(0,0,o.width,o.height));var c={imageData:s,scaleX:r,scaleY:n};t.applyTo2d(c),this.width=this._element.width=c.imageData.width,this.height=this._element.height=c.imageData.height,h.putImageData(c.imageData,0,0)},applyFilters:function(t){if(t=t||this.filters||[],t=t.filter(function(t){return t}),0===t.length)return this._element=this._originalElement,this._filterScalingX=1,this._filterScalingY=1,this;var e=this._originalElement,i=e.naturalWidth||e.width,r=e.naturalHeight||e.height;if(this._element===this._originalElement){var n=fabric.util.createCanvasElement();n.width=e.width,n.height=e.height,this._element=n}else this._element.getContext("2d").clearRect(0,0,i,r);return fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend()),fabric.filterBackend.applyFilters(t,this._originalElement,i,r,this._element,this.cacheKey),this.width===this._element.width&&this.height===this._element.height||(this._filterScalingX=this._element.width/this.width,this._filterScalingY=this._element.height/this.height,this.width=this._element.width,this.height=this._element.height),this},_render:function(t){var e,i=-this.width/2,r=-this.height/2;this.isMoving===!1&&this.resizeFilter&&this._needsResize()&&(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,this.applyResizeFilters()),e=this._element,e&&t.drawImage(e,this.cropX,this.cropY,this.width,this.height,i,r,this.width,this.height),this._stroke(t),this._renderStroke(t)},_needsResize:function(){return this.scaleX!==this._lastScaleX||this.scaleY!==this._lastScaleY},_resetWidthHeight:function(){var t=this.getElement();this.set("width",t.width),this.set("height",t.height)},_initElement:function(t,e){this.setElement(fabric.util.getById(t),e),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(t,e){t&&t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){this.width="width"in t?t.width:this.getElement()?this.getElement().width||0:0,this.height="height"in t?t.height:this.getElement()?this.getElement().height||0:0},parsePreserveAspectRatioAttribute:function(){if(this.preserveAspectRatio){var t,e=fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio),i=this._element.width,r=this._element.height,n=this.width,s=this.height,o={width:n,height:s};!e||"none"===e.alignX&&"none"===e.alignY?(this.scaleX=n/i,this.scaleY=s/r):("meet"===e.meetOrSlice&&(this.width=i,this.height=r,this.scaleX=this.scaleY=t=fabric.util.findScaleToFit(this._element,o),"Mid"===e.alignX&&(this.left+=(n-i*t)/2),"Max"===e.alignX&&(this.left+=n-i*t),"Mid"===e.alignY&&(this.top+=(s-r*t)/2),"Max"===e.alignY&&(this.top+=s-r*t)),"slice"===e.meetOrSlice&&(this.scaleX=this.scaleY=t=fabric.util.findScaleToCover(this._element,o),this.width=n/t,this.height=s/t,"Mid"===e.alignX&&(this.cropX=(i-this.width)/2),"Max"===e.alignX&&(this.cropX=i-this.width),"Mid"===e.alignY&&(this.cropY=(r-this.height)/2),"Max"===e.alignY&&(this.cropY=r-this.height)))}}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(t,e){fabric.util.loadImage(t.src,function(i,r){return r?void(e&&e(null,r)):void fabric.Image.prototype._initFilters.call(t,t.filters,function(r){t.filters=r||[],fabric.Image.prototype._initFilters.call(t,[t.resizeFilter],function(r){t.resizeFilter=r[0];var n=new fabric.Image(i,t);e(n)})})},null,t.crossOrigin)},fabric.Image.fromURL=function(t,e,i){fabric.util.loadImage(t,function(t){e&&e(new fabric.Image(t,i))},null,i&&i.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin".split(" ")),fabric.Image.fromElement=function(t,i,r){var n=fabric.parseAttributes(t,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(n["xlink:href"],i,e(r?fabric.util.object.clone(r):{},n))}}("undefined"!=typeof exports?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.angle%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.requestRenderAllBound}),this}}),function(){"use strict";function t(t){t&&t.tileSize&&(this.tileSize=t.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}fabric.isWebglSupported=function(t){if(fabric.isLikelyNode)return!1;t=t||fabric.WebglFilterBackend.prototype.tileSize;var e=document.createElement("canvas"),i=e.getContext("webgl")||e.getContext("experimental-webgl"),r=!1;return i&&(fabric.maxTextureSize=i.getParameter(i.MAX_TEXTURE_SIZE),r=fabric.maxTextureSize>=t),this.isSupported=r,r},fabric.WebglFilterBackend=t,t.prototype={tileSize:2048,resources:{},setupGLContext:function(t,e){this.dispose(),this.createWebGLCanvas(t,e),this.squareVertices=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(t,e)},chooseFastestCopyGLTo2DMethod:function(t,e){var i,r="undefined"!=typeof window.performance;try{new ImageData(1,1),i=!0}catch(t){i=!1}var n="undefined"!=typeof ArrayBuffer,s="undefined"!=typeof Uint8ClampedArray;if(r&&i&&n&&s){var o,a,h,c=fabric.util.createCanvasElement(),l=new ArrayBuffer(t*e*4),u={imageBuffer:l};c.width=t,c.height=e,o=window.performance.now(),copyGLTo2DDrawImage.call(u,this.gl,c),a=window.performance.now()-o,o=window.performance.now(),copyGLTo2DPutImageData.call(u,this.gl,c),h=window.performance.now()-o,a>h?(this.imageBuffer=l,this.copyGLTo2D=copyGLTo2DPutImageData):this.copyGLTo2D=copyGLTo2DDrawImage}},createWebGLCanvas:function(t,e){var i=fabric.util.createCanvasElement();i.width=t,i.height=e;var r={premultipliedAlpha:!1},n=i.getContext("webgl",r);n||(n=i.getContext("experimental-webgl",r)),n&&(n.clearColor(0,0,0,0),this.canvas=i,this.gl=n)},applyFilters:function(t,e,i,r,n,s){var o,a=this.gl;s&&(o=this.getCachedTexture(s,e));var h={originalWidth:e.width||e.originalWidth,originalHeight:e.height||e.originalHeight,sourceWidth:i,sourceHeight:r,context:a,sourceTexture:this.createTexture(a,i,r,!o&&e),targetTexture:this.createTexture(a,i,r),originalTexture:o||this.createTexture(a,i,r,!o&&e),passes:t.length,webgl:!0,squareVertices:this.squareVertices,programCache:this.programCache,pass:0,filterBackend:this},c=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,c),t.forEach(function(t){t&&t.applyTo(h)}),this.copyGLTo2D(a,n),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(h.sourceTexture),a.deleteTexture(h.targetTexture),a.deleteFramebuffer(c),n.getContext("2d").setTransform(1,0,0,1,0,0),h},applyFiltersDebug:function(t,e,i,r,n,s){var o=this.gl,a=this.applyFilters(t,e,i,r,n,s),h=o.getError();if(h!==o.NO_ERROR){var c=this.glErrorToString(o,h),l=new Error("WebGL Error "+c);throw l.glErrorCode=h,l}return a},glErrorToString:function(t,e){if(!t)return"Context undefined for error code: "+e;if("number"!=typeof e)return"Error code is not a number";switch(e){case t.NO_ERROR:return"NO_ERROR";case t.INVALID_ENUM:return"INVALID_ENUM";case t.INVALID_VALUE:return"INVALID_VALUE";case t.INVALID_OPERATION:return"INVALID_OPERATION";case t.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case t.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case t.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return"UNKNOWN_ERROR"}},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(t,e,i,r){var n=t.createTexture();return t.bindTexture(t.TEXTURE_2D,n),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),r?t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r):t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,i,0,t.RGBA,t.UNSIGNED_BYTE,null),n},getCachedTexture:function(t,e){if(this.textureCache[t])return this.textureCache[t];var i=this.createTexture(this.gl,e.width,e.height,e);return this.textureCache[t]=i,i},evictCachesForKey:function(t){this.textureCache[t]&&(this.gl.deleteTexture(this.textureCache[t]),delete this.textureCache[t])},copyGLTo2D:copyGLTo2DDrawImage,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var t=this.gl,e=t.getExtension("WEBGL_debug_renderer_info"),i={renderer:"",vendor:""};if(e){var r=t.getParameter(e.UNMASKED_RENDERER_WEBGL),n=t.getParameter(e.UNMASKED_VENDOR_WEBGL);r&&(i.renderer=r.toLowerCase()),n&&(i.vendor=n.toLowerCase())}return this.gpuInfo=i,i}}}(),function(){"use strict";function t(){}var e=function(){};fabric.Canvas2dFilterBackend=t,t.prototype={evictCachesForKey:e,dispose:e,clearWebGLCaches:e,resources:{},applyFilters:function(t,e,i,r,n){var s=n.getContext("2d");s.drawImage(e,0,0,i,r);var o=s.getImageData(0,0,i,r),a=s.getImageData(0,0,i,r),h={sourceWidth:i,sourceHeight:r,imageData:o,originalEl:e,originalImageData:a,canvasEl:n,ctx:s,filterBackend:this};return t.forEach(function(t){t.applyTo(h)}),h.imageData.width===i&&h.imageData.height===r||(n.width=h.imageData.width,n.height=h.imageData.height),s.putImageData(h.imageData,0,0),h}}}(),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nattribute vec2 aTexCoord;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aTexCoord;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},createProgram:function(t,e,i){if(this.vertexSource&&this.fragmentSource){var r=t.createShader(t.VERTEX_SHADER);if(t.shaderSource(r,i||this.vertexSource),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS))throw new Error('Vertex shader compile error for "${this.type}": '+t.getShaderInfoLog(r));var n=t.createShader(t.FRAGMENT_SHADER);if(t.shaderSource(n,e||this.fragmentSource),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error('Fragment shader compile error for "${this.type}": '+t.getShaderInfoLog(n));var s=t.createProgram();if(t.attachShader(s,r),t.attachShader(s,n),t.linkProgram(s),!t.getProgramParameter(s,t.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+t.getProgramInfoLog(s));var o=this.getAttributeLocations(t,s),a=this.getUniformLocations(t,s)||{};return a.uStepW=t.getUniformLocation(s,"uStepW"),a.uStepH=t.getUniformLocation(s,"uStepH"),{program:s,attributeLocations:o,uniformLocations:a}}},getAttributeLocations:function(t,e){return{aPosition:t.getAttribLocation(e,"aPosition"),aTexCoord:t.getAttribLocation(e,"aTexCoord")}},getUniformLocations:function(){},sendAttributeData:function(t,e,i){ -["aPosition","aTexCoord"].forEach(function(r){var n=e[r],s=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,s),t.enableVertexAttribArray(n),t.vertexAttribPointer(n,2,t.FLOAT,!1,0,0),t.bufferData(t.ARRAY_BUFFER,i,t.STATIC_DRAW)})},_setupFrameBuffer:function(t){var e=t.context;t.passes>1?e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t.targetTexture,0):(e.bindFramebuffer(e.FRAMEBUFFER,null),e.finish())},_swapTextures:function(t){t.passes--,t.pass++;var e=t.targetTexture;t.targetTexture=t.sourceTexture,t.sourceTexture=e},isNeutralState:function(){return!1},applyTo:function(t){if(t.webgl){if(t.passes>1&&this.isNeutralState(t))return;this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t)}else this.applyTo2d(t)},retrieveShader:function(t){return t.programCache.hasOwnProperty(this.type)||(t.programCache[this.type]=this.createProgram(t.context)),t.programCache[this.type]},applyToWebGL:function(t){var e=t.context,i=this.retrieveShader(t);0===t.pass&&t.originalTexture?e.bindTexture(e.TEXTURE_2D,t.originalTexture):e.bindTexture(e.TEXTURE_2D,t.sourceTexture),e.useProgram(i.program),this.sendAttributeData(e,i.attributeLocations,t.squareVertices),e.uniform1f(i.uniformLocations.uStepW,1/t.sourceWidth),e.uniform1f(i.uniformLocations.uStepH,1/t.sourceHeight),this.sendUniformData(e,i.uniformLocations),e.viewport(0,0,t.sourceWidth,t.sourceHeight),e.drawArrays(e.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(t,e,i){t.activeTexture(i),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE0)},unbindAdditionalTexture:function(t,e){t.activeTexture(e),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(t){this[this.mainParameter]=t},sendUniformData:function(){},createHelpLayer:function(t){if(!t.helpLayer){var e=document.createElement("canvas");e.width=t.sourceWidth,e.height=t.sourceHeight,t.helpLayer=e}},toObject:function(){var t={type:this.type},e=this.mainParameter;return e&&(t[e]=this[e]),t},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.Image.filters,r=e.util.createClass;i.ColorMatrix=r(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(t){this.callSuper("initialize",t),this.matrix=this.matrix.slice(0)},applyTo2d:function(t){var e,i,r,n,s,o=t.imageData,a=o.data,h=a.length,c=this.matrix,l=this.colorsOnly;for(s=0;s_||o<0||o>y||(h=4*(a*y+o),c=v[d*m+f],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,S||(n+=p[h+3]*c));C[s]=e,C[s+1]=i,C[s+2]=r,S?C[s+3]=p[s+3]:C[s+3]=n}t.imageData=x},getUniformLocations:function(t,e){return{uMatrix:t.getUniformLocation(e,"uMatrix"),uOpaque:t.getUniformLocation(e,"uOpaque"),uHalfSize:t.getUniformLocation(e,"uHalfSize"),uSize:t.getUniformLocation(e,"uSize")}},sendUniformData:function(t,e){t.uniform1fv(e.uMatrix,this.matrix)},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.Image.filters,r=e.util.createClass;i.Grayscale=r(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(t){var e,i,r=t.imageData,n=r.data,s=n.length,o=this.mode;for(e=0;el[0]&&n>l[1]&&s>l[2]&&rt)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return a(e)*a(i)/e/i}}function f(t){var a,h,u,O,k,D,E,j,A,P,M;for(w.x=(t+.5)*m,T.x=r(w.x),a=0;a=e)){P=r(1e3*s(h-w.x)),S[P]||(S[P]={});for(var F=T.y-C;F<=T.y+C;F++)F<0||F>=o||(M=r(1e3*s(F-w.y)),S[P][M]||(S[P][M]=v(n(i(P*y,2)+i(M*_,2))/1e3)),u=S[P][M],u>0&&(O=4*(F*e+h),k+=u,D+=u*d[O],E+=u*d[O+1],j+=u*d[O+2],A+=u*d[O+3]))}O=4*(a*c+t),p[O]=D/k,p[O+1]=E/k,p[O+2]=j/k,p[O+3]=A/k}return++t1&&F<-1||(_=2*F*F*F-3*F*F+1,_>0&&(M=4*(P+D*e),O+=_*g[M+3],C+=_,g[M+3]<255&&(_=_*g[M+3]/250),S+=_*g[M],w+=_*g[M+1],T+=_*g[M+2],x+=_))}v[y]=S/x,v[y+1]=w/x,v[y+2]=T/x,v[y+3]=O/C}return p},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.Image.filters,r=e.util.createClass;i.Contrast=r(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(0!==this.contrast){var e,i,r=t.imageData,n=r.data,i=n.length,s=Math.floor(255*this.contrast),o=259*(s+255)/(255*(259-s));for(e=0;e1&&(e=1/this.aspectRatio):this.aspectRatio<1&&(e=this.aspectRatio),t=e*this.blur*.12,this.horizontal?i[0]=t:i[1]=t,i}}),i.Blur.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Gamma=r(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",applyTo2d:function(t){var e,i=t.imageData,r=i.data,n=this.gamma,s=r.length,o=1/n[0],a=1/n[1],h=1/n[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),e=0,s=256;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t,e,i){t.textBaseline="alphabetic",t.font=this._getFontDeclaration(e,i)},calcTextWidth:function(){for(var t=this.getLineWidth(0),e=1,i=this._textLines.length;et&&(t=r)}return t},_renderTextLine:function(t,e,i,r,n,s){this._renderChars(t,e,i,r,n,s)},_renderTextLinesBackground:function(t){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var e,i,r,n,s,o,a=0,h=t.fillStyle,c=this._getLeftOffset(),l=this._getTopOffset(),u=0,f=0,d=0,g=this._textLines.length;ds)){var v=h-s;c[t]=h,c[f]+=v,s=h}return{width:s*g,kernedWidth:h*g}},getHeightOfChar:function(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")},measureLine:function(t){var e=this._measureLine(t);return 0!==this.charSpacing&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e},_measureLine:function(t){var e,i,r,n,s=0,o=this._textLines[t],a=0,h=new Array(o.length);for(this.__charBounds[t]=h,e=0;e0&&!n){var u=this.__charBounds[e][i-1];l.left=u.left+u.width+a.kernedWidth-a.width}return l},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var e=this._textLines[t],i=this.getHeightOfChar(t,0),r=1,n=e.length;ri&&(i=s)}return this.__lineHeights[t]=i*this.lineHeight*this._fontSizeMult,this.__lineHeights[t]},calcTextHeight:function(){for(var t,e=0,i=0,r=this._textLines.length;i0?(t.fillStyle=f,s&&f&&t.fillRect(d+r+o,g+l*(1-this._fontSizeFraction)+this.offsets[e]*this.fontSize,a,this.fontSize/15),o=h.left,a=h.width,s=c,f=u):a+=h.kernedWidth;t.fillStyle=u,c&&u&&t.fillRect(d+r+o,g+l*(1-this._fontSizeFraction)+this.offsets[e]*this.fontSize,a,this.fontSize/15),g+=i}else g+=i;this._removeShadow(t)}},_getFontDeclaration:function(t,i){var r=t||this;return[e.isLikelyNode?r.fontWeight:r.fontStyle,e.isLikelyNode?r.fontStyle:r.fontWeight,i?n+"px":r.fontSize+"px",e.isLikelyNode?'"'+r.fontFamily+'"':r.fontFamily].join(" ")},render:function(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t)))},_splitTextIntoLines:function(t){for(var i=t.split(this._reNewline),r=new Array(i.length),n=["\n"],s=[],o=0;o-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,r,n){if(!t)return r(null);var s=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);if(n=e.util.object.extend(n?i(n):{},s),n.top=n.top||0,n.left=n.left||0,s.textDecoration){var o=s.textDecoration;o.indexOf("underline")!==-1&&(n.underline=!0),o.indexOf("overline")!==-1&&(n.overline=!0),o.indexOf("line-through")!==-1&&(n.linethrough=!0),delete n.textDecoration}"dx"in s&&(n.left+=s.dx),"dy"in s&&(n.top+=s.dy),"fontSize"in n||(n.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),n.originX||(n.originX="left");var a="";"textContent"in t?a=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(a=t.firstChild.data),a=a.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var h=new e.Text(a,n),c=h.getScaledHeight()/h.height,l=(h.height+h.strokeWidth)*h.lineHeight-h.height,u=l*c,f=h.getScaledHeight()+u,d=0;"center"===h.originX&&(d=h.getScaledWidth()/2),"right"===h.originX&&(d=h.getScaledWidth()),h.set({left:h.left-d,top:h.top-(f-h.fontSize*(.18+h._fontSizeFraction))/h.lineHeight}),h.originX="left",h.originY="top",r(h)},e.Text.fromObject=function(t,i){return e.Object._fromObject("Text",t,i,"text")},e.util.createAccessors&&e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){function t(t){t.textDecoration&&(t.textDecoration.indexOf("underline")>-1&&(t.underline=!0),t.textDecoration.indexOf("line-through")>-1&&(t.linethrough=!0),t.textDecoration.indexOf("overline")>-1&&(t.overline=!0),delete t.textDecoration)}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,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(t,e){this.callSuper("initialize",t,e),this.initBehavior()},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?o:0)},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,s=this.getValueOfPropertyAt(r,n,"fontSize"),o=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/o,h=t.topOffset;h+=(1-this._fontSizeFraction)*this.getHeightOfLine(r)/this.lineHeight-s*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(t,e),e.fillStyle=this.getValueOfPropertyAt(r,n,"fill"),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+t.leftOffset-a/2,h+t.top,a,s)},renderSelection:function(t,e){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,r=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,n=this.get2DCursorLocation(i),s=this.get2DCursorLocation(r),o=n.lineIndex,a=s.lineIndex,h=n.charIndex<0?0:n.charIndex,c=s.charIndex<0?0:s.charIndex,l=o;l<=a;l++){var u=this._getLineLeftOffset(l)||0,f=this.getHeightOfLine(l),d=0,g=0,p=0;l===o&&(g=this.__charBounds[o][h].left),l>=o&&l1)&&(f/=this.lineHeight),this.inCompositionMode?(e.fillStyle=this.compositionColor||"black",e.fillRect(t.left+u+g,t.top+t.topOffset+f,p-g,1)):(e.fillStyle=this.selectionColor,e.fillRect(t.left+u+g,t.top+t.topOffset,p-g,f)),t.topOffset+=d}},getCurrentCharFontSize:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fontSize")},getCurrentCharColor:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fill")},_getCurrentCharIndex:function(){var t=this.get2DCursorLocation(this.selectionStart,!0),e=t.charIndex>0?t.charIndex-1:0;return{l:t.lineIndex,c:e}}}),fabric.IText.fromObject=function(e,i){if(t(e),e.styles)for(var r in e.styles)for(var n in e.styles[r])t(e.styles[r][n]);fabric.Object._fromObject("IText",e,i,"text")}}(),function(){var t=fabric.util.object.clone;fabric.util.object.extend(fabric.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(t){this.isEditing&&this.exitEditing(),this.selected=!1,fabric.Object.prototype.onDeselect.call(this,t)},initAddedHandler:function(){var t=this;this.on("added",function(){var e=t.canvas;e&&(e._hasITextHandlers||(e._hasITextHandlers=!0,t._initCanvasHandlers(e)),e._iTextInstances=e._iTextInstances||[],e._iTextInstances.push(t))})},initRemovedHandler:function(){var t=this;this.on("removed",function(){var e=t.canvas;e&&(e._iTextInstances=e._iTextInstances||[],fabric.util.removeFromArray(e._iTextInstances,t),0===e._iTextInstances.length&&(e._hasITextHandlers=!1,t._removeCanvasHandlers(e)))})},_initCanvasHandlers:function(t){t._mouseUpITextHandler=function(){t._iTextInstances&&t._iTextInstances.forEach(function(t){t.__isMousedown=!1})}.bind(this),t.on("mouse:up",t._mouseUpITextHandler)},_removeCanvasHandlers:function(t){t.off("mouse:up",t._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(t,e,i,r){var n;return n={isAborted:!1,abort:function(){this.isAborted=!0}},t.animate("_currentCursorOpacity",e,{duration:i,onComplete:function(){n.isAborted||t[r]()},onChange:function(){t.canvas&&t.selectionStart===t.selectionEnd&&t.renderCursorOrSelection()},abort:function(){return n.isAborted}}),n},_onTickComplete:function(){var t=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){t._currentTickCompleteState=t._animateCursor(t,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(t){var e=this,i=t?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout(function(){e._tick()},i)},abortCursorAnimation:function(){var t=this._currentTickState||this._currentTickCompleteState;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,t&&this.canvas&&this.canvas.clearContext(this.canvas.contextTop||this.ctx)},selectAll:function(){this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea()},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(t){var e=0,i=t-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i--;for(;/\S/.test(this._text[i])&&i>-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i++;for(;/\S/.test(this._text[i])&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this._text[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},fromStringToGraphemeSelection:function(t,e,i){var r=i.slice(0,t),n=fabric.util.string.graphemeSplit(r).length;if(t===e)return{selectionStart:n,selectionEnd:n};var s=i.slice(t,e),o=fabric.util.string.graphemeSplit(s).length;return{selectionStart:n,selectionEnd:n+o}},fromGraphemeToStringSelection:function(t,e,i){var r=i.slice(0,t),n=r.join("").length;if(t===e)return{selectionStart:n,selectionEnd:n};var s=i.slice(t,e),o=s.join("").length;return{selectionStart:n,selectionEnd:n+o}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var t=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=t.selectionStart,this.hiddenTextarea.selectionEnd=t.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value;var t=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=t.selectionEnd,this.inCompositionMode||(this.selectionStart=t.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.inCompositionMode?this.compositionStart:this.selectionStart,e=this._getCursorBoundaries(t),i=this.get2DCursorLocation(t),r=i.lineIndex,n=i.charIndex,s=this.getValueOfPropertyAt(r,n,"fontSize")*this.lineHeight,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+"px",charHeight: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]},removeStyleFromTo:function(t,e){var i,r,n=this.get2DCursorLocation(t,!0),s=this.get2DCursorLocation(e,!0),o=n.lineIndex,a=n.charIndex,h=s.lineIndex,c=s.charIndex;if(o!==h){if(this.styles[o])for(i=a;ie&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},restartCursorIfNeeded:function(){this._currentTickState&&!this._currentTickState.isAborted&&this._currentTickCompleteState&&!this._currentTickCompleteState.isAborted||this.initDelayedCursor()},insertNewlineStyleObject:function(e,i,r,n){var s,o={},a=!1;r||(r=1),this.shiftLineStyles(e,r),this.styles[e]&&this.styles[e][i-1]&&(s=this.styles[e][i-1]);for(var h in this.styles[e]){var c=parseInt(h,10);c>=i&&(a=!0,o[c-i]=this.styles[e][h],delete this.styles[e][h])}for(a?this.styles[e+r]=o:delete this.styles[e+r];r>1;)r--,n[r]?this.styles[e+r]={0:t(n[r])}:s?this.styles[e+r]={0:t(s)}:delete this.styles[e+r];this._forceClearCache=!0},insertCharStyleObject:function(e,i,r,n){this.styles||(this.styles={});var s=this.styles[e],o=t(s);r||(r=1);for(var a in o){var h=parseInt(a,10);h>=i&&(s[h+r]=o[h],o[h-r]||delete s[h])}if(this._forceClearCache=!0,n)for(;r--;)this.styles[e][i+r]=t(n[r]);else if(s)for(var c=s[i?i-1:1];c&&r--;)this.styles[e][i+r]=t(c)},insertNewStyleBlock:function(t,e,i){for(var r=this.get2DCursorLocation(e,!0),n=0,s=0,o=0;ot&&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,t.e)&&(this.fire("tripleclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},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("mousedblclick",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&&(!t.e.button||1===t.e.button)){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)||t.e.button&&1!==t.e.button||(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=0,l=this._textLines.length;c0&&(a+=this._textLines[c-1].length+1);e=this._getLineLeftOffset(h),s=e*this.scaleX,i=this._textLines[h];for(var u=0,f=i.length;us?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"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; line-height: 1px; paddingï½°top: "+t.fontSize+";",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.copy.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:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing&&!this.inCompositionMode){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.requestRenderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone||this.inCompositionMode?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.requestRenderAll()))},onInput:function(t){var e=this.fromPaste;if(this.fromPaste=!1,t&&t.stopPropagation(),this.isEditing){var i,r,n=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,s=this._text.length,o=n.length,a=o-s;""===this.hiddenTextarea.value&&(this.styles={},this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())),this.selectionStart!==this.selectionEnd?(i=this._text.slice(this.selectionStart,this.selectionEnd),a+=this.selectionEnd-this.selectionStart):oh.selectionStart?this.removeStyleFromTo(this.selectionEnd-i.length,this.selectionEnd):this.removeStyleFromTo(this.selectionEnd,this.selectionEnd+i.length)),r.length&&(e&&r.join("")===fabric.copiedText?this.insertNewStyleBlock(r,this.selectionStart,fabric.copiedTextStyle):this.insertNewStyleBlock(r,this.selectionStart)),this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())}},onCompositionStart:function(){this.inCompositionMode=!0},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){this.compositionStart=t.target.selectionStart,this.compositionEnd=t.target.selectionEnd,this.updateTextareaPosition()},copy:function(){this.selectionStart!==this.selectionEnd&&(fabric.copiedText=this.getSelectedText(),fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),this._copyDone=!0)},paste:function(){this.fromPaste=!0},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){var i,r=this._getLineLeftOffset(t);return e>0&&(i=this.__charBounds[t][e-1],r+=i.left+i.width),r},getDownCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(n===this._textLines.length-1||t.metaKey||34===t.keyCode)return this._text.length-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n+1,o),h=this._textLines[n].slice(s);return h.length+a+2},_getSelectionForOffset:function(t,e){return t.shiftKey&&this.selectionStart!==this.selectionEnd&&e?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||t.metaKey||33===t.keyCode)return-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n-1,o),h=this._textLines[n].slice(0,s);return-this._textLines[n-1].length+a-h.length},_getIndexOnLine:function(t,e){for(var i,r,n=this._textLines[t],s=this._getLineLeftOffset(t),o=s,a=0,h=0,c=n.length;he){r=!0;var l=o-i,u=o,f=Math.abs(l-e),d=Math.abs(u-e);a=d=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.requestRenderAll(),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.Text.prototype,{toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this._getSVGLeftTopOffsets(),r=this._getSVGTextAndBg(i.textTop,i.textLeft);return this._wrapSVGTextAndBg(e,r),t?t(e.join("")):e.join("")},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_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=[],s=t;this._setSVGBg(n);for(var o=0,a=this._textLines.length;o",fabric.util.string.escapeXml(i),"\n"].join("")},_setSVGTextLineText:function(t,e,i,r){var n,s,o,a,h,c=this.getHeightOfLine(e),l="",u=0,f=this._textLines[e];r+=c*(1-this._fontSizeFraction)/this.lineHeight;for(var d=0,g=f.length-1;d<=g;d++)h=d===g||this.charSpacing,l+=f[d],o=this.__charBounds[e][d],0===u&&(i+=o.kernedWidth-o.width),u+=o.kernedWidth,"justify"!==this.textAlign||h||this._reSpaceAndTab.test(f[d])&&(h=!0),h||(n=n||this.getCompleteStyleDeclaration(e,d),s=this.getCompleteStyleDeclaration(e,d+1),h=this._hasStyleChanged(n,s)),h&&(a=this._getStyleDeclaration(e,d)||{},t.push(this._createTextCharSpan(l,a,i,r)),l="",n=s,i+=u,u=0)},_pushTextBgRect:function(i,r,n,s,o,a){i.push("\t\t\n')},_setSVGTextLineBg:function(t,e,i,r){for(var n,s,o=this._textLines[e],a=this.getHeightOfLine(e)/this.lineHeight,h=0,c=0,l=this.getValueOfPropertyAt(e,0,"textBackgroundColor"),u=0,f=o.length;uthis.width&&this._set("width",this.dynamicMinWidth),"justify"===this.textAlign&&this.enlargeSpaces(),this.height=this.calcTextHeight()}},_generateStyleMap:function(t){for(var e=0,i=0,r=0,n={},s=0;s0?(i=0,r++,e++):this._reSpaceAndTab.test(t.graphemeText[r])&&s>0&&(i++,r++),n[s]={line:e,offset:i},r+=t.graphemeLines[s].length,i+=t.graphemeLines[s].length;return n},styleHas:function(t,i){if(this._styleMap&&!this.isWrapping){var r=this._styleMap[i];r&&(i=r.line)}return e.Text.prototype.styleHas.call(this,t,i)},_getStyleDeclaration:function(t,e){if(this._styleMap&&!this.isWrapping){var i=this._styleMap[t];if(!i)return null;t=i.line,e=i.offset+e}return this.callSuper("_getStyleDeclaration",t,e)},_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=[];for(this.isWrapping=!0,i=0;i=r&&!g&&(s.push(o),o=[],n=u,g=!0),g||o.push(l),o=o.concat(h),f=this._measureWord([l],i,c),c++,g=!1,u>d&&(d=u);return v&&s.push(o),d>this.dynamicMinWidth&&(this.dynamicMinWidth=d-p),s},_splitTextIntoLines:function(t){for(var i=e.Text.prototype._splitTextIntoLines.call(this,t),r=this._wrapText(i.lines,this.width),n=new Array(r.length),s=0;s=h.getMinWidth()?(h.set("width",l),!0):void 0},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]}})}(),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(fabric.canvasModule),Image=require(fabric.canvasModule).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 +function copyGLTo2DDrawImage(t,e){var i=t.canvas,r=e.getContext("2d");r.translate(0,e.height),r.scale(1,-1);var n=i.height-e.height;r.drawImage(i,0,n,e.width,e.height,0,0,e.width,e.height)}function copyGLTo2DPutImageData(t,e){var i=e.getContext("2d"),r=e.width,n=e.height,s=r*n*4,o=new Uint8Array(this.imageBuffer,0,s),a=new Uint8ClampedArray(this.imageBuffer,0,s);t.readPixels(0,0,r,n,t.RGBA,t.UNSIGNED_BYTE,o);var h=new ImageData(a,r);i.putImageData(h,0,0)}var fabric=fabric||{version:"2.0.0-beta6"};"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.canvasModule="canvas",fabric.perfLimitSizeTotal=2097152,fabric.maxCacheSideLimit=4096,fabric.minCacheSideLimit=256,fabric.charWidthsCache={},fabric.textureSize=2048,fabric.enableGLFiltering=!0,fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,fabric.initFilterBackend=function(){return fabric.enableGLFiltering&&fabric.isWebglSupported&&fabric.isWebglSupported(fabric.textureSize)?(console.log("max texture size: "+fabric.maxTextureSize),new fabric.WebglFilterBackend({tileSize:fabric.textureSize})):fabric.Canvas2dFilterBackend?new fabric.Canvas2dFilterBackend:void 0},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(){return fabric.document.createElement("canvas")},createImage:function(){return fabric.document.createElement("img")},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.rotate(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?M-=2*f:1===c&&M<0&&(M+=2*f);for(var P=Math.ceil(Math.abs(M/f*2)),F=[],L=M/P,I=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),R=A+L,B=0;B=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,m,b,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var T=0;T<2;++T)if(T>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,">")}function r(t){var e,i=0,r=[];for(i=0,e;i57343)return t.charAt(e);if(55296<=i&&i<=56319){if(t.length<=e+1)throw"High surrogate without following low surrogate";var r=t.charCodeAt(e+1);if(56320>r||r>57343)throw"High surrogate without following low surrogate";return t.charAt(e)+t.charAt(e+1)}if(0===e)throw"Low surrogate without preceding high surrogate";var n=t.charCodeAt(e-1);if(55296>n||n>56319)throw"Low surrogate without preceding high surrogate";return!1}fabric.util.string={camelize:t,capitalize:e,escapeXml:i,graphemeSplit:r}}(),function(){function t(){}function e(t){for(var e=null,i=this;i.constructor.superclass;){var n=i.constructor.superclass.prototype[t];if(i[t]!==n){e=n;break}i=i.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(){return!1}function e(e){i(function(r){e||(e={});var n,s=r||+new Date,o=e.duration||500,a=s+o,h=e.onChange||t,c=e.abort||t,l=e.onComplete||t,u=e.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},f="startValue"in e?e.startValue:0,d="endValue"in e?e.endValue:100,g=e.byValue||d-f;e.onStart&&e.onStart(),function t(r){if(c())return void l(d,1,1);n=r||+new Date;var p=n>a?o:n-s,v=p/o,m=u(p,f,g,o),b=Math.abs((m-f)/g);return h(m,b,v),n>a?void(e.onComplete&&e.onComplete()):void i(t)}(s)})}function i(){return n.apply(fabric.window,arguments)}function r(){return s.apply(fabric.window,arguments)}var n=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){return fabric.window.setTimeout(t,1e3/60)},s=fabric.window.cancelAnimationFrame||fabric.window.clearTimeout;fabric.util.animate=e,fabric.util.requestAnimFrame=i,fabric.util.cancelAnimFrame=r}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return _;if((f||d)&&(x=" translate("+y(f)+" "+y(d)+") "),r=x+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),_}function g(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0; +return!1}var p=t.fabric||(t.fabric={}),v=p.util.object.extend,m=p.util.object.clone,b=p.util.toFixed,y=p.util.parseUnit,_=p.util.multiplyTransformMatrices,x=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,C=/^(symbol|image|marker|pattern|view|svg)$/i,S=/^(?:pattern|defs|symbol|metadata|clipPath|mask)$/i,w=/^(symbol|g|a|svg)$/i,T={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":"textAnchor",opacity:"opacity"},O={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*$",m=new RegExp(v),b=new RegExp(d,"g");return function(s){var o=n.concat(),a=[];if(!s||s&&!m.test(s))return o;s.replace(b,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 k=new RegExp("^\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*$");p.parseSVGDocument=function(t,e,i,r){if(t){f(t);var n,s,o=p.Object.__uid++,a=d(t),h=p.util.toArray(t.getElementsByTagName("*"));if(a.crossOrigin=r&&r.crossOrigin,a.svgUid=o,0===h.length&&p.isLikelyNode){h=t.selectNodes('//*[name(.)!="svg"]');var c=[];for(n=0,s=h.length;n/i,""))),n&&n.documentElement||e&&e(null),p.parseSVGDocument(n.documentElement,function(t,i,r,n){e&&e(t,i,r,n)},i,r)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:n})},loadSVGFromString:function(t,e,i,r){t=t.trim();var n;if("undefined"!=typeof DOMParser){var s=new DOMParser;s&&s.parseFromString&&(n=s.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t.replace(//i,"")));p.parseSVGDocument(n.documentElement,function(t,i,r,n){e(t,i,r,n)},i,r)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r,n){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0,this.parsingOptions=n},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){var n,s,o,a,h=new e,c=r.length;for(a=0;a0&&(h.status="Intersection"),h},i.Intersection.intersectPolygonPolygon=function(t,i){var r,n=new e,s=t.length;for(r=0;r0&&(n.status="Intersection"),n},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:o,s){var a=s.split(/\s*;\s*/);for(""===a[a.length-1]&&a.pop(),n=a.length;n--;){var h=a[n].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:o,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}var n=fabric.util.object.clone;fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,i,r,s,o=n(this.coords,!0),a=n(this.colorStops,!0),h=o.r1>o.r2;a.sort(function(t,e){return t.offset-e.offset});for(var c in o)"x1"===c||"x2"===c?o[c]+=this.offsetX-t.width/2:"y1"!==c&&"y2"!==c||(o[c]+=this.offsetY-t.height/2);if(s='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(s+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?r=["\n']:"radial"===this.type&&(r=["\n']),"radial"===this.type){if(h)for(a=a.concat(),a.reverse(),e=0,i=a.length;e0){var u=Math.max(o.r1,o.r2),f=l/u;for(e=0,i=a.length;e\n')}return r.push("linear"===this.type?"\n":"\n"),r.join("")},toLive:function(t){var e,i,r,n=fabric.util.object.clone(this.coords);if(this.type){for("linear"===this.type?e=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(e=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2)),i=0,r=this.colorStops.length;i\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.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,_initStatic:function(t,e){var i=this.requestRenderAllBound;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(){var t=fabric.util.createCanvasElement();if(!t)throw o;if(t.style||(t.style={}),"undefined"==typeof t.getContext)throw o;return t},_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){t&&t.getContext?this.lowerCanvasEl=t:this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(),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.requestRenderAll(),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,r,n=this._activeObject,s=!1,o=!0;for(this.viewportTransform=t,i=0,r=this._objects.length;i"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\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(){var t,e,i,r,n,s,o,a,h,c="",l={},u=fabric.fontPaths,f=this.getObjects();for(a=0,h=f.length;a',"\n",c,"","\n"].join("")),c},_setSVGObjects:function(t,e){var i,r,n,s=this.getObjects();for(r=0,n=s.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeObject;if(t===s&&"activeSelection"===t.type)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.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeObject;if(t===s&&"activeSelection"===t.type)for(n=s._objects,e=0;e0+c&&(o=s-1,i(this._objects,n),this._objects.splice(o,0,n)),c++;else s=this._objects.indexOf(t),0!==s&&(o=this._findNewLowerIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(t,e,i){var r,n;if(i)for(r=e,n=e-1;n>=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._activeObject,c=0;if(t===h&&"activeSelection"===t.type)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s"}}),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,e,i=this.canvas.contextTop,r=this.canvas.viewportTransform,n=this._points[0],s=this._points[1];for(i.save(),i.transform(r[0],r[1],r[2],r[3],r[4],r[5]),i.beginPath(),2===this._points.length&&n.x===s.x&&n.y===s.y&&(n.x-=.5,s.x+=.5),i.moveTo(n.x,n.y),t=1,e=this._points.length;t0&&!this.preserveObjectStacking){e=[],i=[];for(var n=0,s=this._objects.length;n1&&(this._activeObject._objects=i),e.push.apply(e,i)}else e=this._objects;return e},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1);var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this},renderTop:function(){var t=this.contextTop;return this.clearContext(t),this.selection&&this._groupSelector&&this._drawSelection(t),this.fire("after:render"),this.contextTopDirty=!0,this},_resetCurrentTransform:function(){var t=this._currentTransform;t.target.set({scaleX:t.original.scaleX,scaleY:t.original.scaleY,skewX:t.original.skewX,skewY:t.original.skewY,left:t.original.left,top:t.original.top}),this._shouldCenterTransform(t.target)?"rotate"===t.action?this._setOriginToCenter(t.target):("center"!==t.originX&&("right"===t.originX?t.mouseXSign=-1:t.mouseXSign=1),"center"!==t.originY&&("bottom"===t.originY?t.mouseYSign=-1:t.mouseYSign=1),t.originX="center",t.originY="center"):(t.originX=t.original.originX,t.originY=t.original.originY)},containsPoint:function(t,e,i){var r,n=!0,s=i||this.getPointer(t,n);return r=e.group&&e.group===this._activeObject&&"activeSelection"===e.group.type?this._normalizePointer(e.group,s):{x:s.x,y:s.y},e.containsPoint(r)||e._findTargetCorner(s)},_normalizePointer:function(t,e){var i=t.calcTransformMatrix(),r=fabric.util.invertTransform(i),n=this.restorePointerVpt(e);return fabric.util.transformPoint(n,r)},isTargetTransparent:function(t,e,i){var r=t.hasBorders,n=t.transparentCorners,s=this.contextCache,o=t.selectionBackgroundColor;t.hasBorders=t.transparentCorners=!1,t.selectionBackgroundColor="",s.save(),s.transform.apply(s,this.viewportTransform),t.render(s),s.restore(),t.active&&t._renderControls(s),t.hasBorders=r,t.transparentCorners=n,t.selectionBackgroundColor=o;var a=fabric.util.isTransparent(s,e,i,this.targetFindTolerance);return this.clearContext(s),a},_shouldClearSelection:function(t,e){var i=this.getActiveObjects(),r=this._activeObject;return!e||e&&r&&i.length>1&&i.indexOf(e)===-1&&r!==e&&!t[this.selectionKey]||e&&!e.evented||e&&!e.selectable&&r&&r!==e},_shouldCenterTransform:function(t){if(t){var e,i=this._currentTransform;return"scale"===i.action||"scaleX"===i.action||"scaleY"===i.action?e=this.centeredScaling||t.centeredScaling:"rotate"===i.action&&(e=this.centeredRotation||t.centeredRotation),e?!i.altKey:i.altKey}},_getOriginFromCorner:function(t,e){var i={x:t.originX,y:t.originY};return"ml"===e||"tl"===e||"bl"===e?i.x="right":"mr"!==e&&"tr"!==e&&"br"!==e||(i.x="left"),"tl"===e||"mt"===e||"tr"===e?i.y="bottom":"bl"!==e&&"mb"!==e&&"br"!==e||(i.y="top"),i},_getActionFromCorner:function(t,e,i){if(!e)return"drag";switch(e){case"mtr":return"rotate";case"ml":case"mr":return i[this.altActionKey]?"skewY":"scaleX";case"mt":case"mb":return i[this.altActionKey]?"skewX":"scaleY";default:return"scale"}},_setupCurrentTransform:function(t,i){if(i){var r=this.getPointer(t),n=i._findTargetCorner(this.getPointer(t,!0)),s=this._getActionFromCorner(i,n,t),o=this._getOriginFromCorner(i,n);this._currentTransform={target:i,action:s,corner:n,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:r.x-i.left,offsetY:r.y-i.top,originX:o.x,originY:o.y,ex:r.x,ey:r.y,lastX:r.x,lastY:r.y,left:i.left,top:i.top,theta:e(i.angle),width:i.width*i.scaleX,mouseXSign:1,mouseYSign:1,shiftKey:t.shiftKey,altKey:t[this.centeredKey]},this._currentTransform.original={left:i.left,top:i.top,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,originX:o.x,originY:o.y},this._resetCurrentTransform()}},_translateObject:function(t,e){var i=this._currentTransform,r=i.target,n=t-i.offsetX,s=e-i.offsetY,o=!r.get("lockMovementX")&&r.left!==n,a=!r.get("lockMovementY")&&r.top!==s;return o&&r.set("left",n),a&&r.set("top",s),o||a},_changeSkewTransformOrigin:function(t,e,i){var r="originX",n={0:"center"},s=e.target.skewX,o="left",a="right",h="mt"===e.corner||"ml"===e.corner?1:-1,c=1;t=t>0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this._activeObject,o=this.getActiveObjects();if(this.targets=[],o.length>1&&!e&&s===this._searchPossibleTargets([s],n))return this._fireOverOutEvents(s,t),s;if(1===o.length&&s._findTargetCorner(n))return this._fireOverOutEvents(s,t),s;if(1===o.length&&s===this._searchPossibleTargets([s],n)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(s,t),s;i=s}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){var i,r,n=this._hoveredTarget;n!==t&&(i={e:e,target:t,previousTarget:this._hoveredTarget},r={e:e,target:this._hoveredTarget,nextTarget:t},this._hoveredTarget=t),t?n!==t&&(n&&(this.fire("mouse:out",r),n.fire("mouseout",r)),this.fire("mouse:over",i),t.fire("mouseover",i)):n&&(this.fire("mouse:out",r),n.fire("mouseout",r))},_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.upperCanvasEl.className="":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.width+"px",height:this.height+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl); +},_applyCanvasStyle:function(t){var e=this.width||t.width,i=this.height||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},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var t=this._activeObject;return t?"activeSelection"===t.type&&t._objects?t._objects:[t]:[]},_onObjectRemoved:function(t){t===this._activeObject&&(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)},setActiveObject:function(t,e){var i=this._activeObject;return t===i?this:(this._setActiveObject(t,e)&&(i&&i.fire("deselected",{e:e}),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this)},_setActiveObject:function(t,e){var i=this._activeObject;return i!==t&&!t.onSelect({e:e})&&(!!this._discardActiveObject(e)&&(this._activeObject=t,t.set("active",!0),!0))},_discardActiveObject:function(t){var e=this._activeObject;if(e&&e.onDeselect&&"function"==typeof e.onDeselect){if(e.onDeselect({e:t}))return!1;e.set("active",!1),this._activeObject=null}return!0},discardActiveObject:function(t){var e=this._activeObject;return e&&(this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(t)&&(this.fire("selection:cleared",{e:t}),e.fire("deselected",{e:t}))),this},dispose:function(){fabric.StaticCanvas.prototype.dispose.call(this);var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),delete this.upperCanvasEl,t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var e=this._activeObject;e&&e._renderControls(t)},_toObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(t),n=this.callSuper("_toObject",t,e,i);return this._unwindGroupTransformOnObject(t,r),n},_realizeGroupTransformOnObject:function(t){if(t.group&&"activeSelection"===t.group.type&&this._activeObject===t.group){var e=["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"],i={};return e.forEach(function(e){i[e]=t[e]}),this._activeObject.realizeTransform(t),i}return null},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},_setSVGObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(e);this.callSuper("_setSVGObject",t,e,i),this._unwindGroupTransformOnObject(e,r)}});for(var a in fabric.StaticCanvas)"prototype"!==a&&(fabric.Canvas[a]=fabric.StaticCanvas[a]);fabric.isTouchSupported&&(fabric.Canvas.prototype._setCursorFromEvent=function(){})}(),function(){function t(t,e){return"which"in t?t.which===e:t.button===e-1}var e={mt:0,tr:1,mr:2,br:3,mb:4,bl:5,ml:6,tl:7},i=fabric.util.addListener,r=fabric.util.removeListener,n=3,s=2,o=1;fabric.util.object.extend(fabric.Canvas.prototype,{cursorMap:["n-resize","ne-resize","e-resize","se-resize","s-resize","sw-resize","w-resize","nw-resize"],_initEventListeners:function(){this.removeListeners(),this._bindEvents(),i(fabric.window,"resize",this._onResize),i(this.upperCanvasEl,"mousedown",this._onMouseDown),i(this.upperCanvasEl,"dblclick",this._onDoubleClick),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"mouseout",this._onMouseOut),i(this.upperCanvasEl,"mouseenter",this._onMouseEnter),i(this.upperCanvasEl,"wheel",this._onMouseWheel),i(this.upperCanvasEl,"contextmenu",this._onContextMenu),i(this.upperCanvasEl,"touchstart",this._onMouseDown,{passive:!1}),i(this.upperCanvasEl,"touchmove",this._onMouseMove,{passive:!1}),"undefined"!=typeof eventjs&&"add"in eventjs&&(eventjs.add(this.upperCanvasEl,"gesture",this._onGesture),eventjs.add(this.upperCanvasEl,"drag",this._onDrag),eventjs.add(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.add(this.upperCanvasEl,"shake",this._onShake),eventjs.add(this.upperCanvasEl,"longpress",this._onLongPress))},_bindEvents:function(){this.eventsBinded||(this._onMouseDown=this._onMouseDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this.eventsBinded=!0)},removeListeners:function(){r(fabric.window,"resize",this._onResize),r(this.upperCanvasEl,"mousedown",this._onMouseDown),r(this.upperCanvasEl,"mousemove",this._onMouseMove),r(this.upperCanvasEl,"mouseout",this._onMouseOut),r(this.upperCanvasEl,"mouseenter",this._onMouseEnter),r(this.upperCanvasEl,"wheel",this._onMouseWheel),r(this.upperCanvasEl,"contextmenu",this._onContextMenu),r(this.upperCanvasEl,"doubleclick",this._onDoubleClick),r(this.upperCanvasEl,"touchstart",this._onMouseDown),r(this.upperCanvasEl,"touchmove",this._onMouseMove),"undefined"!=typeof eventjs&&"remove"in eventjs&&(eventjs.remove(this.upperCanvasEl,"gesture",this._onGesture),eventjs.remove(this.upperCanvasEl,"drag",this._onDrag),eventjs.remove(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.remove(this.upperCanvasEl,"shake",this._onShake),eventjs.remove(this.upperCanvasEl,"longpress",this._onLongPress))},_onGesture:function(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t){this.__onMouseWheel(t)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t}),this._iTextInstances&&this._iTextInstances.forEach(function(t){t.isEditing&&t.hiddenTextarea.focus()})},_onMouseEnter:function(t){this.findTarget(t)||(this.fire("mouse:over",{target:null,e:t}),this._hoveredTarget=null)},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e)},_onContextMenu:function(t){return this.stopContextMenu&&(t.stopPropagation(),t.preventDefault()),!1},_onDoubleClick:function(t){var e;this._handleEvent(t,"dblclick",e)},_onMouseDown:function(t){this.__onMouseDown(t),i(fabric.document,"touchend",this._onMouseUp,{passive:!1}),i(fabric.document,"touchmove",this._onMouseMove,{passive:!1}),r(this.upperCanvasEl,"mousemove",this._onMouseMove),r(this.upperCanvasEl,"touchmove",this._onMouseMove),"touchstart"===t.type?r(this.upperCanvasEl,"mousedown",this._onMouseDown):(i(fabric.document,"mouseup",this._onMouseUp),i(fabric.document,"mousemove",this._onMouseMove))},_onMouseUp:function(t){if(this.__onMouseUp(t),r(fabric.document,"mouseup",this._onMouseUp),r(fabric.document,"touchend",this._onMouseUp),r(fabric.document,"mousemove",this._onMouseMove),r(fabric.document,"touchmove",this._onMouseMove),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"touchmove",this._onMouseMove,{passive:!1}),"touchend"===t.type){var e=this;setTimeout(function(){i(e.upperCanvasEl,"mousedown",e._onMouseDown)},400)}},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t,e){var i=this._activeObject;return(!i||!i.isEditing||t!==i)&&!!(t&&(t.isMoving||t!==i)||!t&&i||!t&&!i&&!this._groupSelector||e&&this._previousPointer&&this.selection&&(e.x!==this._previousPointer.x||e.y!==this._previousPointer.y))},__onMouseUp:function(e){var i;if(t(e,n))return void(this.fireRightClick&&this._handleEvent(e,"up",i,n));if(t(e,s))return void(this.fireMiddleClick&&this._handleEvent(e,"up",i,s));if(this.isDrawingMode&&this._isCurrentlyDrawing)return void this._onMouseUpInDrawingMode(e);var r=!0,a=this._currentTransform,h=this._groupSelector,c=!h||0===h.left&&0===h.top;a&&(this._finalizeCurrentTransform(e),r=!a.actionPerformed),i=r?this.findTarget(e,!0):a.target;var l=this._shouldRender(i,this.getPointer(e));i||!c?this._maybeGroupObjects(e):(this._groupSelector=null,this._currentTransform=null),i&&(i.isMoving=!1),this._setCursorFromEvent(e,i),this._handleEvent(e,"up",i?i:null,o,c),i&&(i.__corner=0),l&&this.requestRenderAll()},_handleEvent:function(t,e,i,r,n){var s="undefined"==typeof i?this.findTarget(t):i,a=this.targets||[],h={e:t,target:s,subTargets:a,button:r||o,isClick:n||!1};this.fire("mouse:"+e,h),s&&s.fire("mouse"+e,h);for(var c=0;c1)){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.requestRenderAll()},_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 this._isUniscalePossible(t,e.target)?(e.currentAction="scale",this._scaleObject(i,r)):(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally"))},_isUniscalePossible:function(t,e){return(t[this.uniScaleKey]||this.uniScaleTransform)&&!e.get("lockUniScaling")},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this._activeObject&&"activeSelection"===this._activeObject.type?this._activeObject:null,n=(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this.setCursor(this.getCornerCursor(n,e,t)):this.setCursor(i)},getCornerCursor:function(t,i,r){return this.actionIsDisabled(t,i,r)?this.notAllowedCursor:t in e?this._getRotatedCornerCursor(t,i,r):"mtr"===t&&i.hasRotatingPoint?this.rotationCursor:this.defaultCursor},actionIsDisabled:function(t,e,i){return"mt"===t||"mb"===t?i[this.altActionKey]?e.lockSkewingX:e.lockScalingY:"ml"===t||"mr"===t?i[this.altActionKey]?e.lockSkewingY:e.lockScalingX:"mtr"===t?e.lockRotation:this._isUniscalePossible(i,e)?e.lockScalingX&&e.lockScalingY:e.lockScalingX||e.lockScalingY},_getRotatedCornerCursor:function(t,i,r){var n=Math.round(i.angle%360/45);return n<0&&(n+=8),n+=e[t],r[this.altActionKey]&&e[t]%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._activeObject;return i&&t[this.selectionKey]&&e&&e.selectable&&this.selection&&(i!==e||"activeSelection"===i.type)},_handleGrouping:function(t,e){var i=this._activeObject;i.__corner||(e!==i||(e=this.findTarget(t,!0)))&&(i&&"activeSelection"===i.type?this._updateActiveSelection(e,t):this._createActiveSelection(e,t))},_updateActiveSelection:function(t,e){var i=this._activeObject;if(i.contains(t)){if(i.removeWithUpdate(t),1===i.size())return void this.setActiveObject(i.item(0),e)}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e})},_createActiveSelection:function(t,e){var i=this._createGroup(t);this.setActiveObject(i,e),this.fire("selection:created",{target:i,e:e})},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.ActiveSelection(e.reverse(),{canvas:this}),this.setActiveObject(e,t),this.fire("selection:created",{target:e,e:t}),this.requestRenderAll())},_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))&&(r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t),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.width,s=this.height,o=(i.width||this.width)*r,a=(i.height||this.height)*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,p=this.skipOffscreen;this.viewportTransform=d,this.skipOffscreen=!1,this.interactive=!1,n===o&&s===a||this.setDimensions({width:o,height:a}),this.renderAll();var v=this.__toDataURL(t,e,i);return this.interactive=g,this.skipOffscreen=p,this.viewportTransform=l,this.setDimensions({width:n,height:s}),v},__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}})}(),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),n=this,s=this.renderOnAddRemove;return this.renderOnAddRemove=!1,this._enlivenObjects(r.objects,function(t){n.clear(),n._setBgOverlay(r,function(){t.forEach(function(t,e){n.insertAt(t,e)}),n.renderOnAddRemove=s,delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),n.renderAll(),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,r),this.__setBgOverlay("overlayImage",t.overlayImage,i,r),this.__setBgOverlay("backgroundColor",t.background,i,r),this.__setBgOverlay("overlayColor",t.overlay,i,r)},__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){return t&&0!==t.length?void fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,i):void(e&&e([]))},_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.width,e.height=this.height;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,c=2;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,__corner:0,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY fillRule".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height strokeLineCap strokeLineJoin strokeMiterLimit backgroundColor".split(" "),initialize:function(t){t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,r=e.cacheSideLimit,n=t.width,s=t.height,o=n/s,a=e.util.limitDimsByArea(o,i,r),h=e.util.capValue,c=e.maxCacheSideLimit,l=e.minCacheSideLimit,u=h(l,a.x,c),f=h(l,a.y,c);return n>u?(t.zoomX/=n/u,t.width=u):nf?(t.zoomY/=s/f,t.height=f):sg||s>p,m=(n<.9*g||s<.9*p)&&g>r&&p>r;d=v||m,v&&(u=.1*n&-2,f=.1*s&-2)}return!!l&&(d?(this._cacheCanvas.width=Math.max(Math.ceil(n)+u,r),this._cacheCanvas.height=Math.max(Math.ceil(s)+f,r),this.cacheTranslationX=(n+u)/2,this.cacheTranslationY=(s+f)/2):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,this._cacheCanvas.width,this._cacheCanvas.height)),this.cacheWidth=n,this.cacheHeight=s,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(o,a),this.zoomX=o,this.zoomY=a,!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.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.angle,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}},getObjectOpacity:function(){var t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.isOnACache()&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},onDeselect:function(){},onSelect:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||0===this.width&&0===this.height||!this.visible},render:function(t){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t,this),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache()?(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext),this.dirty=!1),this.drawCacheOnCanvas(t)):(this.dirty=!1,this.drawObject(t),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},needsItsOwnCache:function(){return!1},shouldCache:function(){return this.ownCaching=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawObject:function(t){this._renderBackground(t),this._setStrokeStyles(t,this),this._setFillStyles(t,this),this._render(t)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&!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){this.group&&!this.group._transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity},_setStrokeStyles:function(t,e){e.stroke&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,t.strokeStyle=e.stroke.toLive?e.stroke.toLive(t,this):e.stroke)},_setFillStyles:function(t,e){e.fill&&(t.fillStyle=e.fill.toLive?e.fill.toLive(t,this):e.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){var r,n,s,a=this.getViewportTransform(),h=this.calcTransformMatrix();i=i||{},n="undefined"!=typeof i.hasBorders?i.hasBorders:this.hasBorders,s="undefined"!=typeof i.hasControls?i.hasControls:this.hasControls,h=e.util.multiplyTransformMatrices(a,h),r=e.util.qrDecompose(h),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),i.forActiveSelection?(t.rotate(o(r.angle)),n&&this.drawBordersInGroup(t,r,i)):(t.rotate(o(this.angle)),n&&this.drawBorders(t,i)),s&&this.drawControls(t,i),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||!e.toLive)return{offsetX:0,offsetY:0};var i=e.gradientTransform||e.patternTransform,r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;return t.translate(r,n),i&&t.transform.apply(t,i),{offsetX:r,offsetY: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())},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var t=e.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",t.scaleX),this.set("scaleY",t.scaleY), +this.angle=t.angle,this.skewX=t.skewX,this.skewY=0}},_removeTransformMatrix:function(){var t=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),t=e.util.transformPoint(t,this.transformMatrix)),this.transformMatrix=null,this.setPositionByOrigin(t,"center","center")},clone:function(t,i){var r=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(r,t):e.Object._fromObject("Object",r,t)},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.active,left:this.left,top:this.top};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.width/2,n.height/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},rotate: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},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.util.createAccessors(e.Object),i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s){var o=e[t];i=r(i,!0),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=s?new o(i[s],i):new o(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.getScaledWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")},onDeselect:function(){}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight: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),m=new fabric.Point(p.x-o*a,p.y+o*h),b=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+m.x)/2,(p.y+m.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((b.x+v.x)/2,(b.y+v.y)/2),C=new fabric.Point((b.x+m.x)/2,(b.y+m.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:b,bl:m};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return 6.123233995736766e-17!==i&&i!==-1.8369701987210297e-16||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e,r,n=this.getCenterPoint(),s=[1,0,0,1,n.x,n.y],o=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0);return r=this.group&&!t?i(this.group.calcTransformMatrix(),s):s,this.angle&&(e=this._calcRotateMatrix(),r=i(r,e)),r=i(r,o)},_calcDimensionsTransformMatrix:function(t,r,n){var s,o=this.scaleX*(n&&this.flipX?-1:1),a=this.scaleY*(n&&this.flipY?-1:1),h=[o,0,0,a,0,0];return t&&(s=[1,0,Math.tan(e(t)),1],h=i(h,s,!0)),r&&(s=[1,Math.tan(e(r)),0,1],h=i(h,s,!0)),h},_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')},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t}})}(),function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i,r){if(t===i)return!0;if(Array.isArray(t)){if(t.length!==i.length)return!1;for(var n=0,s=t.length;n\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,n){n=n||{};var s=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),o=[s.x1||0,s.y1||0,s.x2||0,s.y2||0];e(new i.Line(o,r(s,n)))},i.Line.fromObject=function(t,e){function r(t){delete t.points,e&&e(t)}var s=n(t,!0);s.points=[t.x1,t.y1,t.x2,t.y2],i.Object._fromObject("Line",s,r,"points")}}("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)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){t.beginPath(),t.arc(0,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,s){s||(s={});var o=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(o))throw new Error("value of `r` attribute is required and can not be negative");o.left=(o.left||0)-o.radius,o.top=(o.top||0)-o.radius,r(new i.Circle(n(o,s)))},i.Circle.fromObject=function(t,e){return i.Object._fromObject("Circle",t,e)}}("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){return e.Object._fromObject("Triangle",t,i)}))}("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 e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,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,n){n||(n={});var s=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);s.left=(s.left||0)-s.rx,s.top=(s.top||0)-s.ry,i(new e.Ellipse(r(s,n)))},e.Ellipse.fromObject=function(t,i){return e.Object._fromObject("Ellipse",t,i)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var e=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,n=this.height,s=-this.width/2,o=-this.height/2,a=0!==e||0!==i,h=.4477152502;t.beginPath(),t.moveTo(s+e,o),t.lineTo(s+r-e,o),a&&t.bezierCurveTo(s+r-h*e,o,s+r,o+h*i,s+r,o+i),t.lineTo(s+r,o+n-i),a&&t.bezierCurveTo(s+r,o+n-h*i,s+r-h*e,o+n,s+r-e,o+n),t.lineTo(s+e,o+n),a&&t.bezierCurveTo(s+h*e,o+n,s,o+n-h*i,s,o+n-i),t.lineTo(s,o+i),a&&t.bezierCurveTo(s,o+h*i,s+h*e,o,s+e,o),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.width/2,r=-this.height/2;return 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,n){if(!t)return r(null);n=n||{};var s=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);s.left=s.left||0,s.top=s.top||0;var o=new e.Rect(i(n?e.util.object.clone(n):{},s));o.visible=o.visible&&o.width>0&&o.height>0,r(o)},e.Rect.fromObject=function(t,i){return e.Object._fromObject("Rect",t,i)}}("undefined"!=typeof exports?exports:this), +function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed,o=e.Object.NUM_FRACTION_DIGITS;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var a=e.Object.prototype.cacheProperties.concat();a.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,cacheProperties:a,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e);var i=this._calcDimensions();"undefined"==typeof e.left&&(this.left=i.left),"undefined"==typeof e.top&&(this.top=i.top),this.width=i.width,this.height=i.height,this.pathOffset={x:i.left+this.width/2,y:i.top+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x")||0,i=r(t,"y")||0,s=n(t,"x")||0,o=n(t,"y")||0,a=s-e,h=o-i;return{left:e,top:i,width:a,height:h}},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){for(var e=[],i=this.pathOffset.x,r=this.pathOffset.y,n=this._createBaseSVGMarkup(),a=0,h=this.points.length;a\n'),t?t(n.join("")):n.join("")},commonRender:function(t){var e,i=this.points.length,r=this.pathOffset.x,n=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-r,this.points[0].y-n);for(var s=0;s"},toObject:function(t){var e=n(this.callSuper("toObject",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(["sourcePath"].concat(t));return e.sourcePath&&delete e.path,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 m=1,b=n.length;m"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this},_onObjectRemoved:function(t){this.dirty=!0,delete t.group},_set:function(t,e){var i=this._objects.length;if(this.useSetOnGroup)for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e,r=this.sourcePath;return e=r?r:this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r}),i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isOnACache());if(this.ownCaching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")}}),e.Group.fromObject=function(t,i){e.util.enlivenObjects(t.objects,function(r){var n=e.util.object.clone(t,!0);delete n.objects,i&&i(new e.Group(r,n,!0))})})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});e.ActiveSelection||(e.ActiveSelection=e.util.createClass(e.Group,{type:"activeSelection",initialize:function(t,i){i=i||{},this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;i.originX&&(this.originX=i.originX),i.originY&&(this.originY=i.originY),this._calcBounds(),this._updateObjectsCoords(),e.Object.prototype.initialize.call(this,i),this.setCoords()},toGroup:function(){var t=this._objects;this._objects=[];var i=this.toObject(),r=new e.Group([]);if(delete i.objects,r.set(i),r.type="group",t.forEach(function(t){t.group=r,t.canvas.remove(t)}),r._objects=t,!this.canvas)return r;var n=this.canvas;return n.add(r),n._activeObject=r,r.setCoords(),r},onDeselect:function(){return this.destroy(),!1},toString:function(){return"#"},_set:function(t,i){var r=this._objects.length;if("canvas"===t)for(;r--;)this._objects[r].set(t,i);if(this.useSetOnGroup)for(;r--;)this._objects[r].setOnGroup(t,i);e.Object.prototype._set.call(this,t,i)},shouldCache:function(){return!1},willDrawShadow:function(){if(this.shadow)return this.callSuper("willDrawShadow");for(var t=0,e=this._objects.length;t\n',"\t\n'),this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,e.push("\n'),this.fill=n}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){return fabric.util.loadImage(t,function(t){this.setElement(t,i),e(this)},this,i&&i.crossOrigin),this},toString:function(){return'#'},applyResizeFilters:function(){var t=this.resizeFilter,e=this.canvas?this.canvas.getRetinaScaling():1,i=this.minimumScaleTrigger,r=this.scaleX=1&&n>=1)return void(this._element=this._filteredEl);fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend());var s,o=this._filteredEl||this._originalElement;if(this._element===this._originalElement){var a=fabric.util.createCanvasElement();a.width=o.width,a.height=o.height,this._element=a}var h=this._element.getContext("2d");o.getContext?s=o.getContext("2d").getImageData(0,0,o.width,o.height):(h.drawImage(o,0,0),s=h.getImageData(0,0,o.width,o.height));var c={imageData:s,scaleX:r,scaleY:n};t.applyTo2d(c),this.width=this._element.width=c.imageData.width,this.height=this._element.height=c.imageData.height,h.putImageData(c.imageData,0,0)},applyFilters:function(t){if(t=t||this.filters||[],t=t.filter(function(t){return t}),0===t.length)return this._element=this._originalElement,this._filterScalingX=1,this._filterScalingY=1,this;var e=this._originalElement,i=e.naturalWidth||e.width,r=e.naturalHeight||e.height;if(this._element===this._originalElement){var n=fabric.util.createCanvasElement();n.width=e.width,n.height=e.height,this._element=n}else this._element.getContext("2d").clearRect(0,0,i,r);return fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend()),fabric.filterBackend.applyFilters(t,this._originalElement,i,r,this._element,this.cacheKey),this.width===this._element.width&&this.height===this._element.height||(this._filterScalingX=this._element.width/this.width,this._filterScalingY=this._element.height/this.height,this.width=this._element.width,this.height=this._element.height),this},_render:function(t){var e,i=-this.width/2,r=-this.height/2;this.isMoving===!1&&this.resizeFilter&&this._needsResize()&&(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,this.applyResizeFilters()),e=this._element,e&&t.drawImage(e,this.cropX,this.cropY,this.width,this.height,i,r,this.width,this.height),this._stroke(t),this._renderStroke(t)},_needsResize:function(){return this.scaleX!==this._lastScaleX||this.scaleY!==this._lastScaleY},_resetWidthHeight:function(){var t=this.getElement();this.set("width",t.width),this.set("height",t.height)},_initElement:function(t,e){this.setElement(fabric.util.getById(t),e),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(t,e){t&&t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){this.width="width"in t?t.width:this.getElement()?this.getElement().width||0:0,this.height="height"in t?t.height:this.getElement()?this.getElement().height||0:0},parsePreserveAspectRatioAttribute:function(){if(this.preserveAspectRatio){var t,e=fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio),i=this._element.width,r=this._element.height,n=this.width,s=this.height,o={width:n,height:s};!e||"none"===e.alignX&&"none"===e.alignY?(this.scaleX=n/i,this.scaleY=s/r):("meet"===e.meetOrSlice&&(this.width=i,this.height=r,this.scaleX=this.scaleY=t=fabric.util.findScaleToFit(this._element,o),"Mid"===e.alignX&&(this.left+=(n-i*t)/2),"Max"===e.alignX&&(this.left+=n-i*t),"Mid"===e.alignY&&(this.top+=(s-r*t)/2),"Max"===e.alignY&&(this.top+=s-r*t)),"slice"===e.meetOrSlice&&(this.scaleX=this.scaleY=t=fabric.util.findScaleToCover(this._element,o),this.width=n/t,this.height=s/t,"Mid"===e.alignX&&(this.cropX=(i-this.width)/2),"Max"===e.alignX&&(this.cropX=i-this.width),"Mid"===e.alignY&&(this.cropY=(r-this.height)/2),"Max"===e.alignY&&(this.cropY=r-this.height)))}}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(t,e){fabric.util.loadImage(t.src,function(i,r){return r?void(e&&e(null,r)):void fabric.Image.prototype._initFilters.call(t,t.filters,function(r){t.filters=r||[],fabric.Image.prototype._initFilters.call(t,[t.resizeFilter],function(r){t.resizeFilter=r[0];var n=new fabric.Image(i,t);e(n)})})},null,t.crossOrigin)},fabric.Image.fromURL=function(t,e,i){fabric.util.loadImage(t,function(t){e&&e(new fabric.Image(t,i))},null,i&&i.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin".split(" ")),fabric.Image.fromElement=function(t,i,r){var n=fabric.parseAttributes(t,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(n["xlink:href"],i,e(r?fabric.util.object.clone(r):{},n))}}("undefined"!=typeof exports?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.angle%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.rotate(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.rotate(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.requestRenderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.requestRenderAllBound}),this}}),function(){"use strict";function t(t){t&&t.tileSize&&(this.tileSize=t.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}fabric.isWebglSupported=function(t){if(fabric.isLikelyNode)return!1;t=t||fabric.WebglFilterBackend.prototype.tileSize;var e=document.createElement("canvas"),i=e.getContext("webgl")||e.getContext("experimental-webgl"),r=!1;return i&&(fabric.maxTextureSize=i.getParameter(i.MAX_TEXTURE_SIZE),r=fabric.maxTextureSize>=t),this.isSupported=r,r},fabric.WebglFilterBackend=t,t.prototype={tileSize:2048,resources:{},setupGLContext:function(t,e){this.dispose(),this.createWebGLCanvas(t,e),this.squareVertices=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(t,e)},chooseFastestCopyGLTo2DMethod:function(t,e){var i,r="undefined"!=typeof window.performance;try{new ImageData(1,1),i=!0}catch(t){i=!1}var n="undefined"!=typeof ArrayBuffer,s="undefined"!=typeof Uint8ClampedArray;if(r&&i&&n&&s){var o,a,h,c=fabric.util.createCanvasElement(),l=new ArrayBuffer(t*e*4),u={imageBuffer:l};c.width=t,c.height=e,o=window.performance.now(),copyGLTo2DDrawImage.call(u,this.gl,c),a=window.performance.now()-o,o=window.performance.now(),copyGLTo2DPutImageData.call(u,this.gl,c),h=window.performance.now()-o,a>h?(this.imageBuffer=l,this.copyGLTo2D=copyGLTo2DPutImageData):this.copyGLTo2D=copyGLTo2DDrawImage}},createWebGLCanvas:function(t,e){var i=fabric.util.createCanvasElement();i.width=t,i.height=e;var r={premultipliedAlpha:!1},n=i.getContext("webgl",r);n||(n=i.getContext("experimental-webgl",r)),n&&(n.clearColor(0,0,0,0),this.canvas=i,this.gl=n)},applyFilters:function(t,e,i,r,n,s){var o,a=this.gl;s&&(o=this.getCachedTexture(s,e));var h={originalWidth:e.width||e.originalWidth,originalHeight:e.height||e.originalHeight,sourceWidth:i,sourceHeight:r,context:a,sourceTexture:this.createTexture(a,i,r,!o&&e),targetTexture:this.createTexture(a,i,r),originalTexture:o||this.createTexture(a,i,r,!o&&e),passes:t.length,webgl:!0,squareVertices:this.squareVertices,programCache:this.programCache,pass:0,filterBackend:this},c=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,c),t.forEach(function(t){t&&t.applyTo(h)}),this.copyGLTo2D(a,n),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(h.sourceTexture),a.deleteTexture(h.targetTexture),a.deleteFramebuffer(c),n.getContext("2d").setTransform(1,0,0,1,0,0),h},applyFiltersDebug:function(t,e,i,r,n,s){var o=this.gl,a=this.applyFilters(t,e,i,r,n,s),h=o.getError();if(h!==o.NO_ERROR){var c=this.glErrorToString(o,h),l=new Error("WebGL Error "+c);throw l.glErrorCode=h,l}return a},glErrorToString:function(t,e){if(!t)return"Context undefined for error code: "+e;if("number"!=typeof e)return"Error code is not a number";switch(e){case t.NO_ERROR:return"NO_ERROR";case t.INVALID_ENUM:return"INVALID_ENUM";case t.INVALID_VALUE:return"INVALID_VALUE";case t.INVALID_OPERATION:return"INVALID_OPERATION";case t.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case t.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case t.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return"UNKNOWN_ERROR"}},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(t,e,i,r){var n=t.createTexture();return t.bindTexture(t.TEXTURE_2D,n),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),r?t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r):t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,i,0,t.RGBA,t.UNSIGNED_BYTE,null),n},getCachedTexture:function(t,e){if(this.textureCache[t])return this.textureCache[t];var i=this.createTexture(this.gl,e.width,e.height,e);return this.textureCache[t]=i,i},evictCachesForKey:function(t){this.textureCache[t]&&(this.gl.deleteTexture(this.textureCache[t]),delete this.textureCache[t])},copyGLTo2D:copyGLTo2DDrawImage,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var t=this.gl,e=t.getExtension("WEBGL_debug_renderer_info"),i={renderer:"",vendor:""};if(e){var r=t.getParameter(e.UNMASKED_RENDERER_WEBGL),n=t.getParameter(e.UNMASKED_VENDOR_WEBGL);r&&(i.renderer=r.toLowerCase()),n&&(i.vendor=n.toLowerCase())}return this.gpuInfo=i,i}}}(),function(){"use strict";function t(){}var e=function(){};fabric.Canvas2dFilterBackend=t,t.prototype={evictCachesForKey:e,dispose:e,clearWebGLCaches:e,resources:{},applyFilters:function(t,e,i,r,n){var s=n.getContext("2d");s.drawImage(e,0,0,i,r);var o=s.getImageData(0,0,i,r),a=s.getImageData(0,0,i,r),h={sourceWidth:i,sourceHeight:r,imageData:o,originalEl:e,originalImageData:a,canvasEl:n,ctx:s,filterBackend:this};return t.forEach(function(t){t.applyTo(h)}),h.imageData.width===i&&h.imageData.height===r||(n.width=h.imageData.width,n.height=h.imageData.height),s.putImageData(h.imageData,0,0),h}}}(),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nattribute vec2 aTexCoord;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aTexCoord;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},createProgram:function(t,e,i){if(this.vertexSource&&this.fragmentSource){var r=t.createShader(t.VERTEX_SHADER);if(t.shaderSource(r,i||this.vertexSource),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS))throw new Error('Vertex shader compile error for "${this.type}": '+t.getShaderInfoLog(r));var n=t.createShader(t.FRAGMENT_SHADER);if(t.shaderSource(n,e||this.fragmentSource),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error('Fragment shader compile error for "${this.type}": '+t.getShaderInfoLog(n));var s=t.createProgram();if(t.attachShader(s,r),t.attachShader(s,n),t.linkProgram(s),!t.getProgramParameter(s,t.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+t.getProgramInfoLog(s));var o=this.getAttributeLocations(t,s),a=this.getUniformLocations(t,s)||{};return a.uStepW=t.getUniformLocation(s,"uStepW"),a.uStepH=t.getUniformLocation(s,"uStepH"),{program:s,attributeLocations:o,uniformLocations:a}}},getAttributeLocations:function(t,e){return{aPosition:t.getAttribLocation(e,"aPosition"), +aTexCoord:t.getAttribLocation(e,"aTexCoord")}},getUniformLocations:function(){},sendAttributeData:function(t,e,i){["aPosition","aTexCoord"].forEach(function(r){var n=e[r],s=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,s),t.enableVertexAttribArray(n),t.vertexAttribPointer(n,2,t.FLOAT,!1,0,0),t.bufferData(t.ARRAY_BUFFER,i,t.STATIC_DRAW)})},_setupFrameBuffer:function(t){var e=t.context;t.passes>1?e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t.targetTexture,0):(e.bindFramebuffer(e.FRAMEBUFFER,null),e.finish())},_swapTextures:function(t){t.passes--,t.pass++;var e=t.targetTexture;t.targetTexture=t.sourceTexture,t.sourceTexture=e},isNeutralState:function(){return!1},applyTo:function(t){if(t.webgl){if(t.passes>1&&this.isNeutralState(t))return;this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t)}else this.applyTo2d(t)},retrieveShader:function(t){return t.programCache.hasOwnProperty(this.type)||(t.programCache[this.type]=this.createProgram(t.context)),t.programCache[this.type]},applyToWebGL:function(t){var e=t.context,i=this.retrieveShader(t);0===t.pass&&t.originalTexture?e.bindTexture(e.TEXTURE_2D,t.originalTexture):e.bindTexture(e.TEXTURE_2D,t.sourceTexture),e.useProgram(i.program),this.sendAttributeData(e,i.attributeLocations,t.squareVertices),e.uniform1f(i.uniformLocations.uStepW,1/t.sourceWidth),e.uniform1f(i.uniformLocations.uStepH,1/t.sourceHeight),this.sendUniformData(e,i.uniformLocations),e.viewport(0,0,t.sourceWidth,t.sourceHeight),e.drawArrays(e.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(t,e,i){t.activeTexture(i),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE0)},unbindAdditionalTexture:function(t,e){t.activeTexture(e),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(t){this[this.mainParameter]=t},sendUniformData:function(){},createHelpLayer:function(t){if(!t.helpLayer){var e=document.createElement("canvas");e.width=t.sourceWidth,e.height=t.sourceHeight,t.helpLayer=e}},toObject:function(){var t={type:this.type},e=this.mainParameter;return e&&(t[e]=this[e]),t},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.Image.filters,r=e.util.createClass;i.ColorMatrix=r(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(t){this.callSuper("initialize",t),this.matrix=this.matrix.slice(0)},applyTo2d:function(t){var e,i,r,n,s,o=t.imageData,a=o.data,h=a.length,c=this.matrix,l=this.colorsOnly;for(s=0;s_||o<0||o>y||(h=4*(a*y+o),c=v[d*m+f],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,S||(n+=p[h+3]*c));C[s]=e,C[s+1]=i,C[s+2]=r,S?C[s+3]=p[s+3]:C[s+3]=n}t.imageData=x},getUniformLocations:function(t,e){return{uMatrix:t.getUniformLocation(e,"uMatrix"),uOpaque:t.getUniformLocation(e,"uOpaque"),uHalfSize:t.getUniformLocation(e,"uHalfSize"),uSize:t.getUniformLocation(e,"uSize")}},sendUniformData:function(t,e){t.uniform1fv(e.uMatrix,this.matrix)},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.Image.filters,r=e.util.createClass;i.Grayscale=r(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(t){var e,i,r=t.imageData,n=r.data,s=n.length,o=this.mode;for(e=0;el[0]&&n>l[1]&&s>l[2]&&rt)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return a(e)*a(i)/e/i}}function f(t){var a,h,u,O,k,D,E,j,A,M,P;for(w.x=(t+.5)*m,T.x=r(w.x),a=0;a=e)){M=r(1e3*s(h-w.x)),S[M]||(S[M]={});for(var F=T.y-C;F<=T.y+C;F++)F<0||F>=o||(P=r(1e3*s(F-w.y)),S[M][P]||(S[M][P]=v(n(i(M*y,2)+i(P*_,2))/1e3)),u=S[M][P],u>0&&(O=4*(F*e+h),k+=u,D+=u*d[O],E+=u*d[O+1],j+=u*d[O+2],A+=u*d[O+3]))}O=4*(a*c+t),p[O]=D/k,p[O+1]=E/k,p[O+2]=j/k,p[O+3]=A/k}return++t1&&F<-1||(_=2*F*F*F-3*F*F+1,_>0&&(P=4*(M+D*e),O+=_*g[P+3],C+=_,g[P+3]<255&&(_=_*g[P+3]/250),S+=_*g[P],w+=_*g[P+1],T+=_*g[P+2],x+=_))}v[y]=S/x,v[y+1]=w/x,v[y+2]=T/x,v[y+3]=O/C}return p},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.Image.filters,r=e.util.createClass;i.Contrast=r(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(0!==this.contrast){var e,i,r=t.imageData,n=r.data,i=n.length,s=Math.floor(255*this.contrast),o=259*(s+255)/(255*(259-s));for(e=0;e1&&(e=1/this.aspectRatio):this.aspectRatio<1&&(e=this.aspectRatio),t=e*this.blur*.12,this.horizontal?i[0]=t:i[1]=t,i}}),i.Blur.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Gamma=r(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",applyTo2d:function(t){var e,i=t.imageData,r=i.data,n=this.gamma,s=r.length,o=1/n[0],a=1/n[1],h=1/n[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),e=0,s=256;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t,e,i){t.textBaseline="alphabetic",t.font=this._getFontDeclaration(e,i)},calcTextWidth:function(){for(var t=this.getLineWidth(0),e=1,i=this._textLines.length;et&&(t=r)}return t},_renderTextLine:function(t,e,i,r,n,s){this._renderChars(t,e,i,r,n,s)},_renderTextLinesBackground:function(t){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var e,i,r,n,s,o,a=0,h=t.fillStyle,c=this._getLeftOffset(),l=this._getTopOffset(),u=0,f=0,d=0,g=this._textLines.length;ds)){var v=h-s;c[t]=h,c[f]+=v,s=h}return{width:s*g,kernedWidth:h*g}},getHeightOfChar:function(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")},measureLine:function(t){var e=this._measureLine(t);return 0!==this.charSpacing&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e},_measureLine:function(t){var e,i,r,n,s=0,o=this._textLines[t],a=0,h=new Array(o.length);for(this.__charBounds[t]=h,e=0;e0&&!n){var u=this.__charBounds[e][i-1];l.left=u.left+u.width+a.kernedWidth-a.width}return l},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var e=this._textLines[t],i=this.getHeightOfChar(t,0),r=1,n=e.length;ri&&(i=s)}return this.__lineHeights[t]=i*this.lineHeight*this._fontSizeMult,this.__lineHeights[t]},calcTextHeight:function(){for(var t,e=0,i=0,r=this._textLines.length;i0?(t.fillStyle=f,s&&f&&t.fillRect(d+r+o,g+l*(1-this._fontSizeFraction)+this.offsets[e]*this.fontSize,a,this.fontSize/15),o=h.left,a=h.width,s=c,f=u):a+=h.kernedWidth;t.fillStyle=u,c&&u&&t.fillRect(d+r+o,g+l*(1-this._fontSizeFraction)+this.offsets[e]*this.fontSize,a,this.fontSize/15),g+=i}else g+=i;this._removeShadow(t)}},_getFontDeclaration:function(t,i){var r=t||this;return[e.isLikelyNode?r.fontWeight:r.fontStyle,e.isLikelyNode?r.fontStyle:r.fontWeight,i?n+"px":r.fontSize+"px",e.isLikelyNode?'"'+r.fontFamily+'"':r.fontFamily].join(" ")},render:function(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t)))},_splitTextIntoLines:function(t){for(var i=t.split(this._reNewline),r=new Array(i.length),n=["\n"],s=[],o=0;o-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,r,n){if(!t)return r(null);var s=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES),o=s.textAnchor||"left";if(n=e.util.object.extend(n?i(n):{},s),n.top=n.top||0,n.left=n.left||0,s.textDecoration){var a=s.textDecoration;a.indexOf("underline")!==-1&&(n.underline=!0),a.indexOf("overline")!==-1&&(n.overline=!0),a.indexOf("line-through")!==-1&&(n.linethrough=!0),delete n.textDecoration}"dx"in s&&(n.left+=s.dx),"dy"in s&&(n.top+=s.dy),"fontSize"in n||(n.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE);var h="";"textContent"in t?h=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(h=t.firstChild.data),h=h.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var c=new e.Text(h,n),l=c.getScaledHeight()/c.height,u=(c.height+c.strokeWidth)*c.lineHeight-c.height,f=u*l,d=c.getScaledHeight()+f,g=0;"center"===o&&(g=c.getScaledWidth()/2),"right"===o&&(g=c.getScaledWidth()),c.set({left:c.left-g,top:c.top-(d-c.fontSize*(.18+c._fontSizeFraction))/c.lineHeight}),r(c)},e.Text.fromObject=function(t,i){return e.Object._fromObject("Text",t,i,"text")},e.util.createAccessors&&e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){function t(t){t.textDecoration&&(t.textDecoration.indexOf("underline")>-1&&(t.underline=!0),t.textDecoration.indexOf("line-through")>-1&&(t.linethrough=!0),t.textDecoration.indexOf("overline")>-1&&(t.overline=!0),delete t.textDecoration)}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,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(t,e){this.callSuper("initialize",t,e),this.initBehavior()},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,i){if(e&&t!==e){for(var r=[],n=t;n0?o:0)},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,s=this.getValueOfPropertyAt(r,n,"fontSize"),o=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/o,h=t.topOffset;h+=(1-this._fontSizeFraction)*this.getHeightOfLine(r)/this.lineHeight-s*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(t,e),e.fillStyle=this.getValueOfPropertyAt(r,n,"fill"),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+t.leftOffset-a/2,h+t.top,a,s)},renderSelection:function(t,e){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,r=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,n=this.get2DCursorLocation(i),s=this.get2DCursorLocation(r),o=n.lineIndex,a=s.lineIndex,h=n.charIndex<0?0:n.charIndex,c=s.charIndex<0?0:s.charIndex,l=o;l<=a;l++){var u=this._getLineLeftOffset(l)||0,f=this.getHeightOfLine(l),d=0,g=0,p=0;l===o&&(g=this.__charBounds[o][h].left),l>=o&&l1)&&(f/=this.lineHeight),this.inCompositionMode?(e.fillStyle=this.compositionColor||"black",e.fillRect(t.left+u+g,t.top+t.topOffset+f,p-g,1)):(e.fillStyle=this.selectionColor,e.fillRect(t.left+u+g,t.top+t.topOffset,p-g,f)),t.topOffset+=d}},getCurrentCharFontSize:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fontSize")},getCurrentCharColor:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fill")},_getCurrentCharIndex:function(){var t=this.get2DCursorLocation(this.selectionStart,!0),e=t.charIndex>0?t.charIndex-1:0;return{l:t.lineIndex,c:e}}}),fabric.IText.fromObject=function(e,i){if(t(e),e.styles)for(var r in e.styles)for(var n in e.styles[r])t(e.styles[r][n]);fabric.Object._fromObject("IText",e,i,"text")}}(),function(){var t=fabric.util.object.clone;fabric.util.object.extend(fabric.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(t){this.isEditing&&this.exitEditing(),this.selected=!1,fabric.Object.prototype.onDeselect.call(this,t)},initAddedHandler:function(){var t=this;this.on("added",function(){var e=t.canvas;e&&(e._hasITextHandlers||(e._hasITextHandlers=!0,t._initCanvasHandlers(e)),e._iTextInstances=e._iTextInstances||[],e._iTextInstances.push(t))})},initRemovedHandler:function(){var t=this;this.on("removed",function(){var e=t.canvas;e&&(e._iTextInstances=e._iTextInstances||[],fabric.util.removeFromArray(e._iTextInstances,t),0===e._iTextInstances.length&&(e._hasITextHandlers=!1,t._removeCanvasHandlers(e)))})},_initCanvasHandlers:function(t){t._mouseUpITextHandler=function(){t._iTextInstances&&t._iTextInstances.forEach(function(t){t.__isMousedown=!1})}.bind(this),t.on("mouse:up",t._mouseUpITextHandler)},_removeCanvasHandlers:function(t){t.off("mouse:up",t._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(t,e,i,r){var n;return n={isAborted:!1,abort:function(){this.isAborted=!0}},t.animate("_currentCursorOpacity",e,{duration:i,onComplete:function(){n.isAborted||t[r]()},onChange:function(){t.canvas&&t.selectionStart===t.selectionEnd&&t.renderCursorOrSelection()},abort:function(){return n.isAborted}}),n},_onTickComplete:function(){var t=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){t._currentTickCompleteState=t._animateCursor(t,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(t){var e=this,i=t?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout(function(){e._tick()},i)},abortCursorAnimation:function(){var t=this._currentTickState||this._currentTickCompleteState;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,t&&this.canvas&&this.canvas.clearContext(this.canvas.contextTop||this.ctx)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(t){var e=0,i=t-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i--;for(;/\S/.test(this._text[i])&&i>-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i++;for(;/\S/.test(this._text[i])&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this._text[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},fromStringToGraphemeSelection:function(t,e,i){var r=i.slice(0,t),n=fabric.util.string.graphemeSplit(r).length;if(t===e)return{selectionStart:n,selectionEnd:n};var s=i.slice(t,e),o=fabric.util.string.graphemeSplit(s).length;return{selectionStart:n,selectionEnd:n+o}},fromGraphemeToStringSelection:function(t,e,i){var r=i.slice(0,t),n=r.join("").length;if(t===e)return{selectionStart:n,selectionEnd:n};var s=i.slice(t,e),o=s.join("").length;return{selectionStart:n,selectionEnd:n+o}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var t=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=t.selectionStart,this.hiddenTextarea.selectionEnd=t.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value;var t=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=t.selectionEnd,this.inCompositionMode||(this.selectionStart=t.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.inCompositionMode?this.compositionStart:this.selectionStart,e=this._getCursorBoundaries(t),i=this.get2DCursorLocation(t),r=i.lineIndex,n=i.charIndex,s=this.getValueOfPropertyAt(r,n,"fontSize")*this.lineHeight,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+"px",charHeight: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]},removeStyleFromTo:function(t,e){var i,r,n=this.get2DCursorLocation(t,!0),s=this.get2DCursorLocation(e,!0),o=n.lineIndex,a=n.charIndex,h=s.lineIndex,c=s.charIndex;if(o!==h){if(this.styles[o])for(i=a;i=c&&(r[l-f]=r[u],delete r[u])}},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])}},restartCursorIfNeeded:function(){this._currentTickState&&!this._currentTickState.isAborted&&this._currentTickCompleteState&&!this._currentTickCompleteState.isAborted||this.initDelayedCursor()},insertNewlineStyleObject:function(e,i,r,n){var s,o={},a=!1;r||(r=1),this.shiftLineStyles(e,r),this.styles[e]&&(s=this.styles[e][0===i?i:i-1]);for(var h in this.styles[e]){var c=parseInt(h,10);c>=i&&(a=!0,o[c-i]=this.styles[e][h],delete this.styles[e][h])}for(a?this.styles[e+r]=o:delete this.styles[e+r];r>1;)r--,n&&n[r]?this.styles[e+r]={0:t(n[r])}:s?this.styles[e+r]={0:t(s)}:delete this.styles[e+r];this._forceClearCache=!0},insertCharStyleObject:function(e,i,r,n){this.styles||(this.styles={});var s=this.styles[e],o=s?t(s):{};r||(r=1);for(var a in o){var h=parseInt(a,10);h>=i&&(s[h+r]=o[h],o[h-r]||delete s[h])}if(this._forceClearCache=!0,n)for(;r--;)Object.keys(n[r]).length&&(this.styles[e]||(this.styles[e]={}),this.styles[e][i+r]=t(n[r]));else if(s)for(var c=s[i?i-1:1];c&&r--;)this.styles[e][i+r]=t(c)},insertNewStyleBlock:function(t,e,i){for(var r=this.get2DCursorLocation(e,!0),n=[0],s=0,o=0;o0&&(this.insertCharStyleObject(r.lineIndex,r.charIndex,n[0],i),i=i&&i.slice(n[0]+1)),s&&this.insertNewlineStyleObject(r.lineIndex,r.charIndex+n[0],s);for(var o=1;o<=s;o++)this.insertCharStyleObject(r.lineIndex+o,0,n[o],i),i=i&&i.slice(n[o]+1)},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,t.e)&&(this.fire("tripleclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},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("mousedblclick",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&&(!t.e.button||1===t.e.button)){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)||t.e.button&&1!==t.e.button||(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=0,l=this._textLines.length;c0&&(a+=this._textLines[c-1].length+1);e=this._getLineLeftOffset(h),s=e*this.scaleX,i=this._textLines[h];for(var u=0,f=i.length;us?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"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; line-height: 1px; paddingï½°top: "+t.fontSize+";",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.copy.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:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing&&!this.inCompositionMode){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.requestRenderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone||this.inCompositionMode?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.requestRenderAll()))},onInput:function(t){var e=this.fromPaste;if(this.fromPaste=!1,t&&t.stopPropagation(),this.isEditing){var i,r,n=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,s=this._text.length,o=n.length,a=o-s;""===this.hiddenTextarea.value&&(this.styles={},this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())),this.selectionStart!==this.selectionEnd?(i=this._text.slice(this.selectionStart,this.selectionEnd),a+=this.selectionEnd-this.selectionStart):oh.selectionStart?this.removeStyleFromTo(this.selectionEnd-i.length,this.selectionEnd):this.removeStyleFromTo(this.selectionEnd,this.selectionEnd+i.length)),r.length&&(e&&r.join("")===fabric.copiedText?this.insertNewStyleBlock(r,this.selectionStart,fabric.copiedTextStyle):this.insertNewStyleBlock(r,this.selectionStart)),this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())}},onCompositionStart:function(){this.inCompositionMode=!0},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){this.compositionStart=t.target.selectionStart,this.compositionEnd=t.target.selectionEnd,this.updateTextareaPosition()},copy:function(){this.selectionStart!==this.selectionEnd&&(fabric.copiedText=this.getSelectedText(),fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0)},paste:function(){this.fromPaste=!0},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){var i,r=this._getLineLeftOffset(t);return e>0&&(i=this.__charBounds[t][e-1],r+=i.left+i.width),r},getDownCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(n===this._textLines.length-1||t.metaKey||34===t.keyCode)return this._text.length-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n+1,o),h=this._textLines[n].slice(s);return h.length+a+2},_getSelectionForOffset:function(t,e){return t.shiftKey&&this.selectionStart!==this.selectionEnd&&e?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||t.metaKey||33===t.keyCode)return-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n-1,o),h=this._textLines[n].slice(0,s);return-this._textLines[n-1].length+a-h.length},_getIndexOnLine:function(t,e){for(var i,r,n=this._textLines[t],s=this._getLineLeftOffset(t),o=s,a=0,h=0,c=n.length;he){r=!0;var l=o-i,u=o,f=Math.abs(l-e),d=Math.abs(u-e);a=d=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.requestRenderAll(),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.Text.prototype,{toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this._getSVGLeftTopOffsets(),r=this._getSVGTextAndBg(i.textTop,i.textLeft);return this._wrapSVGTextAndBg(e,r),t?t(e.join("")):e.join("")},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_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=[],s=t;this._setSVGBg(n);for(var o=0,a=this._textLines.length;o",fabric.util.string.escapeXml(i),"\n"].join("")},_setSVGTextLineText:function(t,e,i,r){var n,s,o,a,h,c=this.getHeightOfLine(e),l="",u=0,f=this._textLines[e];r+=c*(1-this._fontSizeFraction)/this.lineHeight;for(var d=0,g=f.length-1;d<=g;d++)h=d===g||this.charSpacing,l+=f[d],o=this.__charBounds[e][d],0===u&&(i+=o.kernedWidth-o.width),u+=o.kernedWidth,"justify"!==this.textAlign||h||this._reSpaceAndTab.test(f[d])&&(h=!0),h||(n=n||this.getCompleteStyleDeclaration(e,d),s=this.getCompleteStyleDeclaration(e,d+1),h=this._hasStyleChanged(n,s)),h&&(a=this._getStyleDeclaration(e,d)||{},t.push(this._createTextCharSpan(l,a,i,r)),l="",n=s,i+=u,u=0)},_pushTextBgRect:function(i,r,n,s,o,a){i.push("\t\t\n')},_setSVGTextLineBg:function(t,e,i,r){for(var n,s,o=this._textLines[e],a=this.getHeightOfLine(e)/this.lineHeight,h=0,c=0,l=this.getValueOfPropertyAt(e,0,"textBackgroundColor"),u=0,f=o.length;uthis.width&&this._set("width",this.dynamicMinWidth),"justify"===this.textAlign&&this.enlargeSpaces(),this.height=this.calcTextHeight()}},_generateStyleMap:function(t){for(var e=0,i=0,r=0,n={},s=0;s0?(i=0,r++,e++):this._reSpaceAndTab.test(t.graphemeText[r])&&s>0&&(i++,r++),n[s]={line:e,offset:i},r+=t.graphemeLines[s].length,i+=t.graphemeLines[s].length;return n},styleHas:function(t,i){if(this._styleMap&&!this.isWrapping){var r=this._styleMap[i];r&&(i=r.line)}return e.Text.prototype.styleHas.call(this,t,i)},_getStyleDeclaration:function(t,e){if(this._styleMap&&!this.isWrapping){var i=this._styleMap[t];if(!i)return null;t=i.line,e=i.offset+e}return this.callSuper("_getStyleDeclaration",t,e)},_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=[];for(this.isWrapping=!0,i=0;i=r&&!g&&(s.push(o),o=[],n=u,g=!0),g||o.push(l),o=o.concat(h),f=this._measureWord([l],i,c),c++,g=!1,u>d&&(d=u);return v&&s.push(o),d>this.dynamicMinWidth&&(this.dynamicMinWidth=d-p),s},_splitTextIntoLines:function(t){for(var i=e.Text.prototype._splitTextIntoLines.call(this,t),r=this._wrapText(i.lines,this.width),n=new Array(r.length),s=0;s=h.getMinWidth()?(h.set("width",l),!0):void 0},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]}})}(),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(fabric.canvasModule),Image=require(fabric.canvasModule).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 5b07c383c70f264ad6ab5dace9e623674e97e297..0cbc30ce590a05efda47c36e77b7e873825c5931 100644 GIT binary patch delta 77208 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 SWRUUT_x~?2Tw)rdRs;aq%KvNt delta 77030 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 0e28d48e..d0b75941 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,5 +1,5 @@ var fabric = fabric || { - version: "2.0.0-beta5" + version: "2.0.0-beta6" }; if (typeof exports !== "undefined") { @@ -50,7 +50,7 @@ fabric.enableGLFiltering = true; fabric.devicePixelRatio = fabric.window.devicePixelRatio || fabric.window.webkitDevicePixelRatio || fabric.window.mozDevicePixelRatio || 1; fabric.initFilterBackend = function() { - if (fabric.isWebglSupported && fabric.isWebglSupported(fabric.textureSize) && fabric.enableGLFiltering) { + if (fabric.enableGLFiltering && fabric.isWebglSupported && fabric.isWebglSupported(fabric.textureSize)) { console.log("max texture size: " + fabric.maxTextureSize); return new fabric.WebglFilterBackend({ tileSize: fabric.textureSize @@ -481,9 +481,8 @@ fabric.CommonMethods = { } ctx.restore(); }, - createCanvasElement: function(canvasEl) { - canvasEl || (canvasEl = fabric.document.createElement("canvas")); - return canvasEl; + createCanvasElement: function() { + return fabric.document.createElement("canvas"); }, createImage: function() { return fabric.document.createElement("img"); @@ -520,7 +519,7 @@ fabric.CommonMethods = { target.skewY = 0; target.flipX = false; target.flipY = false; - target.setAngle(0); + target.rotate(0); }, getFunctionBody: function(fn) { return (String(fn).match(/function[^{]*\{([\s\S]*)\}/) || {})[1]; @@ -1429,11 +1428,16 @@ if (typeof console !== "undefined") { var _requestAnimFrame = fabric.window.requestAnimationFrame || fabric.window.webkitRequestAnimationFrame || fabric.window.mozRequestAnimationFrame || fabric.window.oRequestAnimationFrame || fabric.window.msRequestAnimationFrame || function(callback) { return fabric.window.setTimeout(callback, 1e3 / 60); }; + var _cancelAnimFrame = fabric.window.cancelAnimationFrame || fabric.window.clearTimeout; function requestAnimFrame() { return _requestAnimFrame.apply(fabric.window, arguments); } + function cancelAnimFrame() { + return _cancelAnimFrame.apply(fabric.window, arguments); + } fabric.util.animate = animate; fabric.util.requestAnimFrame = requestAnimFrame; + fabric.util.cancelAnimFrame = cancelAnimFrame; })(); (function() { @@ -1719,7 +1723,7 @@ if (typeof console !== "undefined") { "stroke-opacity": "strokeOpacity", "stroke-width": "strokeWidth", "text-decoration": "textDecoration", - "text-anchor": "originX", + "text-anchor": "textAnchor", opacity: "opacity" }, colorAttributes = { stroke: "strokeOpacity", @@ -1761,7 +1765,7 @@ if (typeof console !== "undefined") { if (parentAttributes && typeof parentAttributes.opacity !== "undefined") { value *= parentAttributes.opacity; } - } else if (attr === "originX") { + } else if (attr === "textAnchor") { value = value === "start" ? "left" : value === "end" ? "right" : "center"; } else { parsed = isArray ? value.map(parseUnit) : parseUnit(value, fontSize); @@ -3416,14 +3420,14 @@ fabric.ElementsParser.prototype.checkIfDone = function() { this._initPattern(color, property, callback); return this; }, - _createCanvasElement: function(canvasEl) { - var element = fabric.util.createCanvasElement(canvasEl); - if (!element.style) { - element.style = {}; - } + _createCanvasElement: function() { + var element = fabric.util.createCanvasElement(); if (!element) { throw CANVAS_INIT_ERROR; } + if (!element.style) { + element.style = {}; + } if (typeof element.getContext === "undefined") { throw CANVAS_INIT_ERROR; } @@ -3443,7 +3447,11 @@ fabric.ElementsParser.prototype.checkIfDone = function() { this.viewportTransform = this.viewportTransform.slice(); }, _createLowerCanvas: function(canvasEl) { - this.lowerCanvasEl = fabric.util.getById(canvasEl) || this._createCanvasElement(canvasEl); + if (canvasEl && canvasEl.getContext) { + this.lowerCanvasEl = canvasEl; + } else { + this.lowerCanvasEl = fabric.util.getById(canvasEl) || this._createCanvasElement(); + } fabric.util.addClass(this.lowerCanvasEl, "lower-canvas"); if (this.interactive) { this._applyCanvasStyle(this.lowerCanvasEl); @@ -3592,8 +3600,8 @@ fabric.ElementsParser.prototype.checkIfDone = function() { }, renderAll: function() { var canvasToDrawOn = this.contextContainer; - if (this.rendering) { - fabric.window.cancelAnimationFrame(this.rendering); + if (this.isRendering) { + fabric.util.cancelAnimFrame(this.isRendering); } this.renderCanvas(canvasToDrawOn, this._objects); return this; @@ -3713,7 +3721,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { }, _centerObject: function(object, center) { object.setPositionByOrigin(center, "center", "center"); - this.requestRenderAll(); + this.renderOnAddRemove && this.requestRenderAll(); return this; }, toDatalessJSON: function(propertiesToInclude) { @@ -4868,7 +4876,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { target.scaleY = 1; target.skewX = 0; target.skewY = 0; - target.setAngle(0); + target.rotate(0); }, _drawSelection: function(ctx) { var groupSelector = this._groupSelector, left = groupSelector.left, top = groupSelector.top, aleft = abs(left), atop = abs(top); @@ -6374,7 +6382,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { this._removeShadow(ctx); }, _setOpacity: function(ctx) { - if (this.group && !this.group.transformDone) { + if (this.group && !this.group._transformDone) { ctx.globalAlpha = this.getObjectOpacity(); } else { ctx.globalAlpha *= this.opacity; @@ -6452,8 +6460,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0; }, _applyPatternGradientTransform: function(ctx, filler) { - if (!filler.toLive) { - return; + if (!filler || !filler.toLive) { + return { + offsetX: 0, + offsetY: 0 + }; } var transform = filler.gradientTransform || filler.patternTransform; var offsetX = -this.width / 2 + filler.offsetX || 0, offsetY = -this.height / 2 + filler.offsetY || 0; @@ -6461,6 +6472,10 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { if (transform) { ctx.transform.apply(ctx, transform); } + return { + offsetX: offsetX, + offsetY: offsetY + }; }, _renderFill: function(ctx) { if (!this.fill) { @@ -6494,8 +6509,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { y: this.top + this.height / 2 }; }, - _removeTransformMatrix: function() { - var center = this._findCenterFromElement(); + _assignTransformMatrixProps: function() { if (this.transformMatrix) { var options = fabric.util.qrDecompose(this.transformMatrix); this.flipX = false; @@ -6505,6 +6519,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { this.angle = options.angle; this.skewX = options.skewX; this.skewY = 0; + } + }, + _removeTransformMatrix: function() { + var center = this._findCenterFromElement(); + if (this.transformMatrix) { + this._assignTransformMatrixProps(); center = fabric.util.transformPoint(center, this.transformMatrix); } this.transformMatrix = null; @@ -6597,7 +6617,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { this.set("fill", color); return this; }, - setAngle: function(angle) { + rotate: function(angle) { var shouldCenterOrigin = (this.originX !== "center" || this.originY !== "center") && this.centeredRotation; if (shouldCenterOrigin) { this._setOriginToCenter(); @@ -6632,10 +6652,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { this.canvas && this.canvas.viewportCenterObject(this); return this; }, - remove: function() { - this.canvas && this.canvas.remove(this); - return this; - }, getLocalPointer: function(e, pointer) { pointer = pointer || this.canvas.getPointer(e); var pClicked = new fabric.Point(pointer.x, pointer.y), objectLeftTop = this._getLeftTopCoords(); @@ -6654,7 +6670,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { } }); fabric.util.createAccessors && fabric.util.createAccessors(fabric.Object); - fabric.Object.prototype.rotate = fabric.Object.prototype.setAngle; extend(fabric.Object.prototype, fabric.Observable); fabric.Object.NUM_FRACTION_DIGITS = 2; fabric.Object._fromObject = function(className, object, callback, extraParam) { @@ -7675,8 +7690,6 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.Line.fromElement = function(element, callback, options) { options = options || {}; var parsedAttributes = fabric.parseAttributes(element, fabric.Line.ATTRIBUTE_NAMES), points = [ parsedAttributes.x1 || 0, parsedAttributes.y1 || 0, parsedAttributes.x2 || 0, parsedAttributes.y2 || 0 ]; - options.originX = "left"; - options.originY = "top"; callback(new fabric.Line(points, extend(parsedAttributes, options))); }; fabric.Line.fromObject = function(object, callback) { @@ -7770,8 +7783,6 @@ fabric.util.object.extend(fabric.Object.prototype, { } parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.radius; parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.radius; - parsedAttributes.originX = "left"; - parsedAttributes.originY = "top"; callback(new fabric.Circle(extend(parsedAttributes, options))); }; function isValidRadius(attributes) { @@ -7888,8 +7899,6 @@ fabric.util.object.extend(fabric.Object.prototype, { var parsedAttributes = fabric.parseAttributes(element, fabric.Ellipse.ATTRIBUTE_NAMES); parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx; parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry; - parsedAttributes.originX = "left"; - parsedAttributes.originY = "top"; callback(new fabric.Ellipse(extend(parsedAttributes, options))); }; fabric.Ellipse.fromObject = function(object, callback) { @@ -7972,8 +7981,6 @@ fabric.util.object.extend(fabric.Object.prototype, { var parsedAttributes = fabric.parseAttributes(element, fabric.Rect.ATTRIBUTE_NAMES); parsedAttributes.left = parsedAttributes.left || 0; parsedAttributes.top = parsedAttributes.top || 0; - parsedAttributes.originX = "left"; - parsedAttributes.originY = "top"; var rect = new fabric.Rect(extend(options ? fabric.util.object.clone(options) : {}, parsedAttributes)); rect.visible = rect.visible && rect.width > 0 && rect.height > 0; callback(rect); @@ -7995,31 +8002,33 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.Polyline = fabric.util.createClass(fabric.Object, { type: "polyline", points: null, - minX: 0, - minY: 0, cacheProperties: cacheProperties, initialize: function(points, options) { options = options || {}; this.points = points || []; this.callSuper("initialize", options); - this._calcDimensions(); - if (!("top" in options)) { - this.top = this.minY; + var calcDim = this._calcDimensions(); + if (typeof options.left === "undefined") { + this.left = calcDim.left; } - if (!("left" in options)) { - this.left = this.minX; + if (typeof options.top === "undefined") { + this.top = calcDim.top; } + this.width = calcDim.width; + this.height = calcDim.height; this.pathOffset = { - x: this.minX + this.width / 2, - y: this.minY + this.height / 2 + x: calcDim.left + this.width / 2, + y: calcDim.top + this.height / 2 }; }, _calcDimensions: function() { - var points = this.points, minX = min(points, "x"), minY = min(points, "y"), maxX = max(points, "x"), maxY = max(points, "y"); - this.width = maxX - minX || 0; - this.height = maxY - minY || 0; - this.minX = minX || 0; - this.minY = minY || 0; + var points = this.points, minX = min(points, "x") || 0, minY = min(points, "y") || 0, maxX = max(points, "x") || 0, maxY = max(points, "y") || 0, width = maxX - minX, height = maxY - minY; + return { + left: minX, + top: minY, + width: width, + height: height + }; }, toObject: function(propertiesToInclude) { return extend(this.callSuper("toObject", propertiesToInclude), { @@ -8144,8 +8153,6 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.Path = fabric.util.createClass(fabric.Object, { type: "path", path: null, - minX: 0, - minY: 0, cacheProperties: cacheProperties, stateProperties: stateProperties, initialize: function(path, options) { @@ -8166,19 +8173,17 @@ fabric.util.object.extend(fabric.Object.prototype, { }, _setPositionDimensions: function(options) { var calcDim = this._parseDimensions(); - this.minX = calcDim.left; - this.minY = calcDim.top; this.width = calcDim.width; this.height = calcDim.height; if (typeof options.left === "undefined") { - this.left = calcDim.left + (this.originX === "center" ? this.width / 2 : this.originX === "right" ? this.width : 0); + this.left = calcDim.left; } if (typeof options.top === "undefined") { - this.top = calcDim.top + (this.originY === "center" ? this.height / 2 : this.originY === "bottom" ? this.height : 0); + this.top = calcDim.top; } this.pathOffset = this.pathOffset || { - x: this.minX + this.width / 2, - y: this.minY + this.height / 2 + x: calcDim.left + this.width / 2, + y: calcDim.top + this.height / 2 }; }, _renderPathCommands: function(ctx) { @@ -8628,8 +8633,6 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.Path.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat([ "d" ]); fabric.Path.fromElement = function(element, callback, options) { var parsedAttributes = fabric.parseAttributes(element, fabric.Path.ATTRIBUTE_NAMES); - parsedAttributes.originX = "left"; - parsedAttributes.originY = "top"; callback(new fabric.Path(parsedAttributes.d, extend(parsedAttributes, options))); }; })(typeof exports !== "undefined" ? exports : this); @@ -9376,7 +9379,7 @@ fabric.util.object.extend(fabric.Object.prototype, { return Math.round(angle / 90) * 90; }, straighten: function() { - this.setAngle(this._getAngleValueForStraighten()); + this.rotate(this._getAngleValueForStraighten()); return this; }, fxStraighten: function(callbacks) { @@ -9387,7 +9390,7 @@ fabric.util.object.extend(fabric.Object.prototype, { endValue: this._getAngleValueForStraighten(), duration: this.FX_DURATION, onChange: function(value) { - _this.setAngle(value); + _this.rotate(value); onChange(); }, onComplete: function() { @@ -10928,6 +10931,34 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { }; })(typeof exports !== "undefined" ? exports : this); +(function(global) { + "use strict"; + var fabric = global.fabric || (global.fabric = {}), filters = fabric.Image.filters, createClass = fabric.util.createClass; + filters.HueRotation = createClass(filters.ColorMatrix, { + type: "HueRotation", + rotation: 0, + mainParameter: "rotation", + calculateMatrix: function() { + var rad = this.rotation * Math.PI, cos = Math.cos(rad), sin = Math.sin(rad), aThird = 1 / 3, aThirdSqtSin = Math.sqrt(aThird) * sin, OneMinusCos = 1 - cos; + this.matrix = [ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 ]; + this.matrix[0] = cos + OneMinusCos / 3; + this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin; + this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin; + this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin; + this.matrix[6] = cos + aThird * OneMinusCos; + this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin; + this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin; + this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin; + this.matrix[12] = cos + aThird * OneMinusCos; + }, + applyTo: function(options) { + this.calculateMatrix(); + fabric.Image.filters.BaseFilter.prototype.applyTo.call(this, options); + } + }); + fabric.Image.filters.HueRotation.fromObject = fabric.Image.filters.BaseFilter.fromObject; +})(typeof exports !== "undefined" ? exports : this); + (function(global) { "use strict"; var fabric = global.fabric || (global.fabric = {}), clone = fabric.util.object.clone, MIN_TEXT_WIDTH = 2, CACHE_FONT_SIZE = 200; @@ -10970,7 +11001,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { charSpacing: 0, styles: null, _measuringContext: null, - _styleProperties: [ "stroke", "strokeWidth", "fill", "fontFamily", "fontSize", "fontWeight", "fontStyle", "underline", "overline", "linethrough" ], + _styleProperties: [ "stroke", "strokeWidth", "fill", "fontFamily", "fontSize", "fontWeight", "fontStyle", "underline", "overline", "linethrough", "textBackgroundColor" ], __charBounds: [], initialize: function(text, options) { this.styles = options ? options.styles || {} : {}; @@ -11375,12 +11406,14 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { return -this.height / 2; }, _renderTextCommon: function(ctx, method) { - var lineHeights = 0, left = this._getLeftOffset(), top = this._getTopOffset(); + ctx.save(); + var lineHeights = 0, left = this._getLeftOffset(), top = this._getTopOffset(), offsets = this._applyPatternGradientTransform(ctx, method === "fillText" ? this.fill : this.stroke); for (var i = 0, len = this._textLines.length; i < len; i++) { var heightOfLine = this.getHeightOfLine(i), maxHeight = heightOfLine / this.lineHeight, leftOffset = this._getLineLeftOffset(i); - this._renderTextLine(method, ctx, this._textLines[i], left + leftOffset, top + lineHeights + maxHeight, i); + this._renderTextLine(method, ctx, this._textLines[i], left + leftOffset - offsets.offsetX, top + lineHeights + maxHeight - offsets.offsetY, i); lineHeights += heightOfLine; } + ctx.restore(); }, _renderTextFill: function(ctx) { if (!this.fill && !this.styleHas("fill")) { @@ -11596,7 +11629,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { if (!element) { return callback(null); } - var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES); + var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES), parsedAnchor = parsedAttributes.textAnchor || "left"; options = fabric.util.object.extend(options ? clone(options) : {}, parsedAttributes); options.top = options.top || 0; options.left = options.left || 0; @@ -11622,9 +11655,6 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { if (!("fontSize" in options)) { options.fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE; } - if (!options.originX) { - options.originX = "left"; - } var textContent = ""; if (!("textContent" in element)) { if ("firstChild" in element && element.firstChild !== null) { @@ -11637,18 +11667,16 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { } textContent = textContent.replace(/^\s+|\s+$|\n+/g, "").replace(/\s+/g, " "); var text = new fabric.Text(textContent, options), textHeightScaleFactor = text.getScaledHeight() / text.height, lineHeightDiff = (text.height + text.strokeWidth) * text.lineHeight - text.height, scaledDiff = lineHeightDiff * textHeightScaleFactor, textHeight = text.getScaledHeight() + scaledDiff, offX = 0; - if (text.originX === "center") { + if (parsedAnchor === "center") { offX = text.getScaledWidth() / 2; } - if (text.originX === "right") { + if (parsedAnchor === "right") { offX = text.getScaledWidth(); } text.set({ left: text.left - offX, top: text.top - (textHeight - text.fontSize * (.18 + text._fontSizeFraction)) / text.lineHeight }); - text.originX = "left"; - text.originY = "top"; callback(text); }; fabric.Text.fromObject = function(object, callback) { @@ -11710,15 +11738,15 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { target: this }); }, - getSelectionStyles: function(startIndex, endIndex) { - if (arguments.length === 2) { + getSelectionStyles: function(startIndex, endIndex, complete) { + if (endIndex && startIndex !== endIndex) { var styles = []; for (var i = startIndex; i < endIndex; i++) { - styles.push(this.getSelectionStyles(i)); + styles.push(this.getSelectionStyles(i, i, complete)); } return styles; } - var loc = this.get2DCursorLocation(startIndex), style = this._getStyleDeclaration(loc.lineIndex, loc.charIndex); + var loc = this.get2DCursorLocation(startIndex), style = complete ? this.getCompleteStyleDeclaration(loc.lineIndex, loc.charIndex) : this._getStyleDeclaration(loc.lineIndex, loc.charIndex); return style || {}; }, setSelectionStyles: function(styles) { @@ -12024,6 +12052,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this.selectionEnd = this._text.length; this._fireSelectionChanged(); this._updateTextarea(); + return this; }, getSelectedText: function() { return this._text.slice(this.selectionStart, this.selectionEnd).join(""); @@ -12099,6 +12128,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this.selectionEnd = newSelectionEnd; this._fireSelectionChanged(); this._updateTextarea(); + return this; }, enterEditing: function(e) { if (this.isEditing || !this.editable) { @@ -12349,14 +12379,15 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { } else { if (this.styles[lineStart]) { styleObj = this.styles[lineStart]; - var diff = charEnd - charStart; + var diff = charEnd - charStart, numericChar, _char; for (i = charStart; i < charEnd; i++) { delete styleObj[i]; } - for (i = charEnd; i < this._textLines[lineStart].length; i++) { - if (styleObj[i]) { - styleObj[i - diff] = styleObj[i]; - delete styleObj[i]; + for (_char in this.styles[lineStart]) { + numericChar = parseInt(_char, 10); + if (numericChar >= charEnd) { + styleObj[numericChar - diff] = styleObj[_char]; + delete styleObj[_char]; } } } @@ -12383,8 +12414,8 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { var currentCharStyle, newLineStyles = {}, somethingAdded = false; qty || (qty = 1); this.shiftLineStyles(lineIndex, qty); - if (this.styles[lineIndex] && this.styles[lineIndex][charIndex - 1]) { - currentCharStyle = this.styles[lineIndex][charIndex - 1]; + if (this.styles[lineIndex]) { + currentCharStyle = this.styles[lineIndex][charIndex === 0 ? charIndex : charIndex - 1]; } for (var index in this.styles[lineIndex]) { var numIndex = parseInt(index, 10); @@ -12401,7 +12432,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { } while (qty > 1) { qty--; - if (copiedStyle[qty]) { + if (copiedStyle && copiedStyle[qty]) { this.styles[lineIndex + qty] = { 0: clone(copiedStyle[qty]) }; @@ -12419,7 +12450,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { if (!this.styles) { this.styles = {}; } - var currentLineStyles = this.styles[lineIndex], currentLineStylesCloned = clone(currentLineStyles); + var currentLineStyles = this.styles[lineIndex], currentLineStylesCloned = currentLineStyles ? clone(currentLineStyles) : {}; quantity || (quantity = 1); for (var index in currentLineStylesCloned) { var numericIndex = parseInt(index, 10); @@ -12433,6 +12464,12 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this._forceClearCache = true; if (copiedStyle) { while (quantity--) { + if (!Object.keys(copiedStyle[quantity]).length) { + continue; + } + if (!this.styles[lineIndex]) { + this.styles[lineIndex] = {}; + } this.styles[lineIndex][charIndex + quantity] = clone(copiedStyle[quantity]); } return; @@ -12446,26 +12483,24 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { } }, insertNewStyleBlock: function(insertedText, start, copiedStyle) { - var cursorLoc = this.get2DCursorLocation(start, true), addingNewLines = 0, addingChars = 0; + var cursorLoc = this.get2DCursorLocation(start, true), addedLines = [ 0 ], linesLenght = 0; for (var i = 0; i < insertedText.length; i++) { if (insertedText[i] === "\n") { - if (addingChars) { - this.insertCharStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addingChars, copiedStyle); - copiedStyle = copiedStyle && copiedStyle.slice(addingChars); - addingChars = 0; - } - addingNewLines++; + linesLenght++; + addedLines[linesLenght] = 0; } else { - if (addingNewLines) { - this.insertNewlineStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addingNewLines, copiedStyle); - copiedStyle = copiedStyle && copiedStyle.slice(addingNewLines); - addingNewLines = 0; - } - addingChars++; + addedLines[linesLenght]++; } } - addingChars && this.insertCharStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addingChars, copiedStyle); - addingNewLines && this.insertNewlineStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addingNewLines, copiedStyle); + if (addedLines[0] > 0) { + this.insertCharStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addedLines[0], copiedStyle); + copiedStyle = copiedStyle && copiedStyle.slice(addedLines[0] + 1); + } + linesLenght && this.insertNewlineStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex + addedLines[0], linesLenght); + for (var i = 1; i <= linesLenght; i++) { + this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle); + copiedStyle = copiedStyle && copiedStyle.slice(addedLines[i] + 1); + } }, setSelectionStartEndWithShift: function(start, end, newSelection) { if (newSelection <= start) { @@ -12792,7 +12827,7 @@ fabric.util.object.extend(fabric.IText.prototype, { return; } fabric.copiedText = this.getSelectedText(); - fabric.copiedTextStyle = this.getSelectionStyles(this.selectionStart, this.selectionEnd); + fabric.copiedTextStyle = this.getSelectionStyles(this.selectionStart, this.selectionEnd, true); this._copyDone = true; }, paste: function() { diff --git a/package.json b/package.json index e66e81ab..7ccd184a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", "homepage": "http://fabricjs.com/", - "version": "2.0.0-beta.5", + "version": "2.0.0-beta.6", "author": "Juriy Zaytsev ", "contributors": [ {