From e5f28c1915e536a97629a8d2eba880631457f412 Mon Sep 17 00:00:00 2001 From: Asturur Date: Sat, 23 Dec 2017 12:48:29 +0100 Subject: [PATCH] update to rc4 --- CHANGELOG.md | 11 +++ HEADER.js | 2 +- dist/fabric.js | 190 ++++++++++++++++++++++++++++------------- dist/fabric.min.js | 2 +- dist/fabric.min.js.gz | Bin 78638 -> 78789 bytes dist/fabric.require.js | 110 +++++++++++++++++------- package.json | 4 +- 7 files changed, 224 insertions(+), 95 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b43922da..a60e23db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,15 @@ **Version 2.0.0** + - rc3 and rc4 + - more fixes to transformMatrix memoization + - Canvas.selectionFullyContained allows you to select objects just when full grabbed by the selections. [#4508](https://github.com/kangax/fabric.js/pull/4508) + - Remove some ouput of blank spaces from svg in order to avoid extra colored areas [#4524](https://github.com/kangax/fabric.js/pull/4524) + - Reinserted a performance shortcut for when there is no style at all [#4519](https://github.com/kangax/fabric.js/pull/4519) + - Manage canvas resize during a freedrawing brush without wiping the brush [#4527](https://github.com/kangax/fabric.js/pull/4527) + - Removed an extra closePath that was creating wrong visual on IntelIntegrated cards [#4549](https://github.com/kangax/fabric.js/pull/4549) + - Added a method to insert and remove text from command line [#4541](https://github.com/kangax/fabric.js/pull/4541) + - Some fixes around text styles management + - nodejs support changes: removed specific node code in order to use standard fabricjs code in nodejs. + - added fabric.util.getNodeCanvas that passed a JSDOM element allows you to get the node-canvas instance behind it and do what you need. - rc2 - Fixed a transform matrix memoize missing width/height [#4491](https://github.com/kangax/fabric.js/pull/4491) - Fix pattern drawing a point [#4492](https://github.com/kangax/fabric.js/pull/4492) diff --git a/HEADER.js b/HEADER.js index e314a8fc..1289fae6 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: '2.0.0-rc.3' }; +var fabric = fabric || { version: '2.0.0-rc.4' }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/dist/fabric.js b/dist/fabric.js index 3cab4f01..2c4d261e 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,accessors minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: '2.0.0-rc.3' }; +var fabric = fabric || { version: '2.0.0-rc.4' }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -20,6 +20,7 @@ else { } }); fabric.jsdomImplForWrapper = require('jsdom/lib/jsdom/living/generated/utils').implForWrapper; + fabric.nodeCanvas = require('jsdom/lib/jsdom/utils').Canvas; fabric.window = fabric.document.defaultView; DOMParser = require('xmldom').DOMParser; } @@ -2395,8 +2396,7 @@ fabric.CommonMethods = { top += element.scrollTop || 0; } - if (element.nodeType === 1 && - fabric.util.getElementStyle(element, 'position') === 'fixed') { + if (element.nodeType === 1 && element.style.position === 'fixed') { break; } } @@ -2558,6 +2558,11 @@ fabric.CommonMethods = { fabric.util.getScript = getScript; })(); + function getNodeCanvas(element) { + var impl = fabric.jsdomImplForWrapper(element); + return impl._canvas || impl._image; + }; + fabric.util.getById = getById; fabric.util.toArray = toArray; fabric.util.makeElement = makeElement; @@ -2566,6 +2571,7 @@ fabric.CommonMethods = { fabric.util.getScrollLeftTop = getScrollLeftTop; fabric.util.getElementOffset = getElementOffset; fabric.util.getElementStyle = getElementStyle; + fabric.util.getNodeCanvas = getNodeCanvas; })(); @@ -6887,6 +6893,9 @@ fabric.ElementsParser.prototype.checkIfDone = function() { this._setCssDimension(prop, cssValue); } } + if (this._isCurrentlyDrawing) { + this.freeDrawingBrush && this.freeDrawingBrush._setBrushStyles(); + } this._initRetinaScaling(); this._setImageSmoothing(); this.calcOffset(); @@ -7264,7 +7273,6 @@ fabric.ElementsParser.prototype.checkIfDone = function() { /** * Centers object horizontally in the canvas - * You might need to call `setCoords` on an object after centering, to update controls area. * @param {fabric.Object} object Object to center horizontally * @return {fabric.Canvas} thisArg */ @@ -7274,7 +7282,6 @@ fabric.ElementsParser.prototype.checkIfDone = function() { /** * Centers object vertically in the canvas - * You might need to call `setCoords` on an object after centering, to update controls area. * @param {fabric.Object} object Object to center vertically * @return {fabric.Canvas} thisArg * @chainable @@ -7285,7 +7292,6 @@ fabric.ElementsParser.prototype.checkIfDone = function() { /** * Centers object vertically and horizontally in the canvas - * You might need to call `setCoords` on an object after centering, to update controls area. * @param {fabric.Object} object Object to center vertically and horizontally * @return {fabric.Canvas} thisArg * @chainable @@ -7298,7 +7304,6 @@ fabric.ElementsParser.prototype.checkIfDone = function() { /** * Centers object vertically and horizontally in the viewport - * You might need to call `setCoords` on an object after centering, to update controls area. * @param {fabric.Object} object Object to center vertically and horizontally * @return {fabric.Canvas} thisArg * @chainable @@ -7311,7 +7316,6 @@ fabric.ElementsParser.prototype.checkIfDone = function() { /** * Centers object horizontally in the viewport, object.top is unchanged - * You might need to call `setCoords` on an object after centering, to update controls area. * @param {fabric.Object} object Object to center vertically and horizontally * @return {fabric.Canvas} thisArg * @chainable @@ -7324,7 +7328,6 @@ fabric.ElementsParser.prototype.checkIfDone = function() { /** * Centers object Vertically in the viewport, object.top is unchanged - * You might need to call `setCoords` on an object after centering, to update controls area. * @param {fabric.Object} object Object to center vertically and horizontally * @return {fabric.Canvas} thisArg * @chainable @@ -7355,6 +7358,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { */ _centerObject: function(object, center) { object.setPositionByOrigin(center, 'center', 'center'); + object.setCoords(); this.renderOnAddRemove && this.requestRenderAll(); return this; }, @@ -7941,12 +7945,15 @@ fabric.ElementsParser.prototype.checkIfDone = function() { }, /** - * Clears a canvas element and removes all event listeners + * Clears a canvas element and dispose objects * @return {fabric.Canvas} thisArg * @chainable */ dispose: function () { - this._objects.length = 0; + this.forEachObject(function(object) { + object.dispose && object.dispose(); + }); + this._objects = []; this.backgroundImage = null; this.overlayImage = null; this._iTextInstances = null; @@ -8043,11 +8050,11 @@ fabric.ElementsParser.prototype.checkIfDone = function() { if (fabric.isLikelyNode) { fabric.StaticCanvas.prototype.createPNGStream = function() { - var impl = fabric.jsdomImplForWrapper(this.lowerCanvasEl); + var impl = fabric.util.getNodeCanvas(this.lowerCanvasEl); return impl && impl.createPNGStream(); }; fabric.StaticCanvas.prototype.createJPEGStream = function(opts) { - var impl = fabric.jsdomImplForWrapper(this.lowerCanvasEl); + var impl = fabric.util.getNodeCanvas(this.lowerCanvasEl); return impl && impl.createJPEGStream(opts); }; } @@ -8069,7 +8076,7 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype color: 'rgb(0, 0, 0)', /** - * Width of a brush + * Width of a brush, has to be a Number, no string literals * @type Number * @default */ @@ -8975,6 +8982,13 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ selectionLineWidth: 1, + /** + * Select only shapes that are fully contained in the dragged selection rectangle. + * @type Boolean + * @default + */ + selectionFullyContained: false, + /** * Default cursor value used when hovering over an object on canvas * @type String @@ -9164,6 +9178,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this.clearContext(this.contextTop); this.contextTopDirty = false; } + if (this.isDrawingMode && this._isCurrentlyDrawing) { + this.freeDrawingBrush && this.freeDrawingBrush._render(); + } var canvasToDrawOn = this.contextContainer; this.renderCanvas(canvasToDrawOn, this._chooseObjectsToRender()); return this; @@ -10669,8 +10686,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @param {Event} e Event object fired on mousedown */ _onDoubleClick: function (e) { - var target; - this._handleEvent(e, 'dblclick', target); + this._handleEvent(e, 'dblclick'); }, /** @@ -10951,19 +10967,19 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ __onMouseDown: function (e) { - var target = this.findTarget(e); + var target = this.findTarget(e) || null; // if right click just fire events if (checkClick(e, RIGHT_CLICK)) { if (this.fireRightClick) { - this._handleEvent(e, 'down', target ? target : null, RIGHT_CLICK); + this._handleEvent(e, 'down', target, RIGHT_CLICK); } return; } if (checkClick(e, MIDDLE_CLICK)) { if (this.fireMiddleClick) { - this._handleEvent(e, 'down', target ? target : null, MIDDLE_CLICK); + this._handleEvent(e, 'down', target, MIDDLE_CLICK); } return; } @@ -11010,7 +11026,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this._setupCurrentTransform(e, target); } } - this._handleEvent(e, 'down', target ? target : null); + this._handleEvent(e, 'down', target); // we must renderAll so that we update the visuals shouldRender && this.requestRenderAll(); }, @@ -11101,7 +11117,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this.renderTop(); } else if (!this._currentTransform) { - target = this.findTarget(e); + target = this.findTarget(e) || null; this._setCursorFromEvent(e, target); this._fireOverOutEvents(target, e); } @@ -11472,6 +11488,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab y2 = y1 + this._groupSelector.top, selectionX1Y1 = new fabric.Point(min(x1, x2), min(y1, y2)), selectionX2Y2 = new fabric.Point(max(x1, x2), max(y1, y2)), + allowIntersect = !this.selectionFullyContained, isClick = x1 === x2 && y1 === y2; // we iterate reverse order to collect top first in case of click. for (var i = this._objects.length; i--; ) { @@ -11481,10 +11498,10 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab continue; } - if (currentObject.intersectsWithRect(selectionX1Y1, selectionX2Y2) || + if ((allowIntersect && currentObject.intersectsWithRect(selectionX1Y1, selectionX2Y2)) || currentObject.isContainedWithinRect(selectionX1Y1, selectionX2Y2) || - currentObject.containsPoint(selectionX1Y1) || - currentObject.containsPoint(selectionX2Y2) + (allowIntersect && currentObject.containsPoint(selectionX1Y1)) || + (allowIntersect && currentObject.containsPoint(selectionX2Y2)) ) { group.push(currentObject); @@ -14355,8 +14372,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati prefix = this.group.transformMatrixKey(skipGroup) + sep; }; return prefix + this.top + sep + this.left + sep + this.scaleX + sep + this.scaleY + - sep + this.skewX + sep + this.skewY + sep + this.angle + sep + this.flipX + sep + this.flipY + - sep + this.width + sep + this.height; + sep + this.skewX + sep + this.skewY + sep + this.angle + + sep + this.width + sep + this.height + sep + this.strokeWidth + this.flipX + this.flipY; }, /** @@ -15055,7 +15072,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.beginPath(); ctx.moveTo(0, rotateHeight); ctx.lineTo(0, rotateHeight - rotatingPointOffset); - ctx.closePath(); ctx.stroke(); } @@ -15924,16 +15940,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot cacheProperties: fabric.Object.prototype.cacheProperties.concat('radius'), - /** - * Constructor - * @param {Object} [options] Options object - * @return {fabric.Circle} thisArg - */ - initialize: function(options) { - this.callSuper('initialize', options); - this.set('radius', options && options.radius || 0); - }, - /** * @private * @param {String} key @@ -16128,15 +16134,18 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot type: 'triangle', /** - * Constructor - * @param {Object} [options] Options object - * @return {Object} thisArg + * Width is set to 100 to compensate the old initialize code that was setting it to 100 + * @type Number + * @default */ - initialize: function(options) { - this.callSuper('initialize', options); - this.set('width', options && options.width || 100) - .set('height', options && options.height || 100); - }, + width: 100, + + /** + * Height is set to 100 to compensate the old initialize code that was setting it to 100 + * @type Number + * @default + */ + height: 100, /** * @private @@ -18792,9 +18801,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot initialize: function(element, options) { options || (options = { }); this.filters = []; + this.cacheKey = 'texture' + fabric.Object.__uid++; this.callSuper('initialize', options); this._initElement(element, options); - this.cacheKey = 'texture' + fabric.Object.__uid++; }, /** @@ -18832,6 +18841,21 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return this; }, + /** + * Delete cacheKey if we have a webGlBackend + * delete reference to image elements + */ + dispose: function() { + var backend = fabric.filterBackend; + if (backend && backend.evictCachesForKey) { + backend.evictCachesForKey(this.cacheKey); + backend.evictCachesForKey(this.cacheKey + '_filtered'); + } + this._originalElement = undefined; + this._element = undefined; + this._filteredEl = undefined; + }, + /** * Sets crossOrigin value (on an instance and corresponding image element) * @return {fabric.Image} thisArg @@ -21448,15 +21472,15 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { * @class fabric.Image.filters.RemoveColor * @memberOf fabric.Image.filters * @extends fabric.Image.filters.BaseFilter - * @see {@link fabric.Image.filters.RemoveWhite#initialize} for constructor definition + * @see {@link fabric.Image.filters.RemoveColor#initialize} for constructor definition * @see {@link http://fabricjs.com/image-filters|ImageFilters demo} * @example * var filter = new fabric.Image.filters.RemoveColor({ - * threshold: 40, - * distance: 140 + * threshold: 0.2, * }); * object.filters.push(filter); - * object.applyFilters(canvas.renderAll.bind(canvas)); + * object.applyFilters(); + * canvas.renderAll(); */ filters.RemoveColor = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.RemoveColor.prototype */ { @@ -21467,6 +21491,11 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { */ type: 'RemoveColor', + /** + * Color to remove, in any format understood by fabric.Color. + * @param {String} type + * @default + */ color: '#FFFFFF', /** @@ -24319,10 +24348,17 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { charsToRender = '', charBox, boxWidth = 0, - timeToRender; + timeToRender, + shortCut = !isJustify && this.isEmptyStyles(lineIndex); ctx.save(); top -= lineHeight * this._fontSizeFraction / this.lineHeight; + if (shortCut) { + // render all the line in one pass without checking + this._renderChar(method, ctx, lineIndex, 0, this.textLines[lineIndex], left, top, lineHeight); + ctx.restore(); + return; + } for (var i = 0, len = line.length - 1; i <= len; i++) { timeToRender = i === len || this.charSpacing; charsToRender += line[i]; @@ -26270,13 +26306,13 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { if (lineStart !== lineEnd) { // step1 remove the trailing of lineStart if (this.styles[lineStart]) { - for (i = charStart; i < this._textLines[lineStart].length; i++) { + for (i = charStart; i < this._unwrappedTextLines[lineStart].length; i++) { delete this.styles[lineStart][i]; } } // step2 move the trailing of lineEnd to lineStart if needed if (this.styles[lineEnd]) { - for (i = charEnd; i < this._textLines[lineEnd].length; i++) { + for (i = charEnd; i < this._unwrappedTextLines[lineEnd].length; i++) { styleObj = this.styles[lineEnd][i]; if (styleObj) { this.styles[lineStart] || (this.styles[lineStart] = { }); @@ -26464,7 +26500,12 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { 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); + if (addedLines[i] > 0) { + this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle); + } + else if (copiedStyle) { + this.styles[cursorLoc.lineIndex + i][0] = copiedStyle[0]; + } copiedStyle = copiedStyle && copiedStyle.slice(addedLines[i] + 1); } // we use i outside the loop to get it like linesLength @@ -27353,11 +27394,42 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this._text.splice(start, end - start); this.text = this._text.join(''); this.set('dirty', true); - this._removeExtraneousStyles(); if (this._shouldClearDimensionCache()) { this.initDimensions(); this.setCoords(); } + this._removeExtraneousStyles(); + }, + + /** + * insert characters at start position, before start position. + * start equal 1 it means the text get inserted between actual grapheme 0 and 1 + * if style array is provided, it must be as the same length of text in graphemes + * if end is provided and is bigger than start, old text is replaced. + * start/end ar per grapheme position in _text array. + * + * @param {String} text text to insert + * @param {Array} style array of style objects + * @param {Number} start + * @param {Number} end default to start + 1 + */ + insertChars: function(text, style, start, end) { + if (typeof end === 'undefined') { + end = start; + } + if (end > start) { + this.removeStyleFromTo(start, end); + } + var graphemes = fabric.util.string.graphemeSplit(text); + this.insertNewStyleBlock(graphemes, start, style); + this._text = [].concat(this._text.slice(0, start), graphemes, this._text.slice(end)); + this.text = this._text.join(''); + this.set('dirty', true); + if (this._shouldClearDimensionCache()) { + this.initDimensions(); + this.setCoords(); + } + this._removeExtraneousStyles(); }, }); @@ -27412,9 +27484,9 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot (this.fontStyle ? 'font-style="' + this.fontStyle + '" ' : ''), (this.fontWeight ? 'font-weight="' + this.fontWeight + '" ' : ''), (textDecoration ? 'text-decoration="' + textDecoration + '" ' : ''), - 'style="', this.getSvgStyles(noShadow), '"', this.addPaintOrder(), ' >\n', + 'style="', this.getSvgStyles(noShadow), '"', this.addPaintOrder(), ' >', textAndBg.textSpans.join(''), - '\t\t\n', + '\n', '\t\n' ); }, @@ -27456,11 +27528,11 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot fillStyles = styleProps ? 'style="' + styleProps + '"' : ''; return [ - '\t\t\t', fabric.util.string.escapeXml(_char), - '\n' + '' ].join(''); }, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index e121dce7..1a0bcd74 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1 +1 @@ -function resizeCanvasIfNeeded(t){var e=t.targetCanvas,i=e.width,r=e.height,n=t.destinationWidth,s=t.destinationHeight;i===n&&r===s||(e.width=n,e.height=s)}function copyGLTo2DDrawImage(t,e){var i=t.canvas,r=e.targetCanvas,n=r.getContext("2d");n.translate(0,r.height),n.scale(1,-1);var s=i.height-r.height;n.drawImage(i,0,s,r.width,r.height,0,0,r.width,r.height)}function copyGLTo2DPutImageData(t,e){var i=e.targetCanvas.getContext("2d"),r=e.destinationWidth,n=e.destinationHeight,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,n);i.putImageData(h,0,0)}var fabric=fabric||{version:"2.0.0-rc.3"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window):(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.jsdomImplForWrapper=require("jsdom/lib/jsdom/living/generated/utils").implForWrapper,fabric.window=fabric.document.defaultView,DOMParser=require("xmldom").DOMParser),fabric.isTouchSupported="ontouchstart"in fabric.window,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","paint-order","instantiated_by_use"],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.browserShadowBlurConstant=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},"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=fabric),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);void 0!==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-1!==i&&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);return{x:t.x*r-t.y*i,y:t.x*i+t.y*r}},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)-i,n=[t[0].y,t[1].y,t[2].y,t[3].y],s=fabric.util.array.min(n);return{left:i,top:s,width:r,height:fabric.util.array.max(n)-s}},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]},getSvgAttributes:function(t){var e=["instantiated_by_use","style","id","class"];switch(t){case"linearGradient":e=e.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);break;case"radialGradient":e=e.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);break;case"stop":e=e.concat(["offset","stop-color","stop-opacity"])}return e},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])>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?P-=2*f:1===c&&P<0&&(P+=2*f);for(var M=Math.ceil(Math.abs(P/f*2)),F=[],I=P/M,L=8/3*Math.sin(I/4)*Math.sin(I/4)/Math.sin(I/2),R=A+I,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,_=Math.sqrt,y=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var 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;0<(g=-d/f)&&g<1&&S.push(g)}else(m=f*f-4*d*u)<0||(0<(p=(-f+(b=_(m)))/(2*u))&&p<1&&S.push(p),0<(v=(-f-b)/(2*u))&&v<1&&S.push(v));for(var O,k,D,j=S.length,E=j;j--;)O=(D=1-(g=S[j]))*D*D*t+3*D*D*g*i+3*D*g*g*n+g*g*g*h,w[0][j]=O,k=D*D*D*e+3*D*D*g*r+3*D*g*g*s+g*g*g*c,w[1][j]=k;w[0][E]=t,w[1][E]=e,w[0][E+1]=h,w[1][E+1]=c;var A=[{x:y.apply(null,w[0]),y:y.apply(null,w[1])},{x:x.apply(null,w[0]),y:x.apply(null,w[1])}];return o[l]=A,A}var n={},s={},o={},a=Array.prototype.join;fabric.util.drawArc=function(e,i,r,n){for(var s=n[0],o=n[1],a=n[2],h=n[3],c=n[4],l=[[],[],[],[]],u=t(n[5]-i,n[6]-r,s,o,h,c,a),f=0,d=u.length;f=e})}}}(),function(){function t(e,i,r){if(r)if(!fabric.isLikelyNode&&i instanceof Element)e=i;else if(i instanceof Array){e=[];for(var n=0,s=i.length;n57343)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:function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},capitalize:function(t,e){return t.charAt(0).toUpperCase()+(e?t.slice(1):t.slice(1).toLowerCase())},escapeXml:function(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")},graphemeSplit:function(e){var i,r=0,n=[];for(r=0,i;r1?e.apply(this,i.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}var i=Array.prototype.slice,r=function(){},n=function(){for(var t in{toString:1})if("toString"===t)return!1;return!0}(),s=function(t,e,i){for(var r in e)r in t.prototype&&"function"==typeof t.prototype[r]&&(e[r]+"").indexOf("callSuper")>-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],n&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=function(){function n(){this.initialize.apply(this,arguments)}var o=null,a=i.call(arguments,0);"function"==typeof a[0]&&(o=a.shift()),n.superclass=o,n.subclasses=[],o&&(t.prototype=o.prototype,n.prototype=new t,o.subclasses.push(n));for(var h=0,c=a.length;h=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(r,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=function(t,e){var i=t.style;if(!i)return t;if("string"==typeof e)return t.style.cssText+=";"+e,e.indexOf("opacity")>-1?n(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)"opacity"===r?n(t,e[r]):i["float"===r||"cssFloat"===r?void 0===i.styleFloat?"cssFloat":"styleFloat":r]=e[r];return t}}(),function(){function t(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 e(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)===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}}var i,r=Array.prototype.slice,n=function(t){return r.call(t,0)};try{i=n(fabric.document.childNodes)instanceof Array}catch(t){}i||(n=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var s;s=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(){var t=fabric.document.documentElement.style,e="userSelect"in t?"userSelect":"MozUserSelect"in t?"MozUserSelect":"WebkitUserSelect"in t?"WebkitUserSelect":"KhtmlUserSelect"in t?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),e?t.style[e]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t},fabric.util.makeElementSelectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=null),e?t.style[e]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}}(),function(){fabric.util.getScript=function(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.getById=function(t){return"string"==typeof t?fabric.document.getElementById(t):t},fabric.util.toArray=n,fabric.util.makeElement=t,fabric.util.addClass=function(t,e){t&&-1===(" "+t.className+" ").indexOf(" "+e+" ")&&(t.className+=(t.className?" ":"")+e)},fabric.util.wrapElement=function(e,i,r){return"string"==typeof i&&(i=t(i,r)),e.parentNode&&e.parentNode.replaceChild(i,e),i.appendChild(e),i},fabric.util.getScrollLeftTop=e,fabric.util.getElementOffset=function(t){var i,r,n=t&&t.ownerDocument,o={left:0,top:0},a={left:0,top:0},h={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return a;for(var c in h)a[h[c]]+=parseInt(s(t,c),10)||0;return i=n.documentElement,void 0!==t.getBoundingClientRect&&(o=t.getBoundingClientRect()),r=e(t),{left:o.left+r.left-(i.clientLeft||0)+a.left,top:o.top+r.top-(i.clientTop||0)+a.top}},fabric.util.getElementStyle=s}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}var i=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{if(t[e]())return t[e]}catch(t){}}();fabric.util.request=function(r,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=i(),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&&(r=t(r,n.parameters))),a.open(s,r,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){void 0!==console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(){return!1}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){return fabric.window.setTimeout(t,1e3/60)},r=fabric.window.cancelAnimationFrame||fabric.window.clearTimeout;fabric.util.animate=function(i){e(function(r){i||(i={});var n,s=r||+new Date,o=i.duration||500,a=s+o,h=i.onChange||t,c=i.abort||t,l=i.onComplete||t,u=i.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},f="startValue"in i?i.startValue:0,d="endValue"in i?i.endValue:100,g=i.byValue||d-f;i.onStart&&i.onStart(),function t(r){if(c())l(d,1,1);else{var p=(n=r||+new Date)>a?o:n-s,v=p/o,m=u(p,f,g,o),b=Math.abs((m-f)/g);h(m,b,v),n>a?i.onComplete&&i.onComplete():e(t)}}(s)})},fabric.util.requestAnimFrame=e,fabric.util.cancelAnimFrame=function(){return r.apply(fabric.window,arguments)}}(),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+=")"}fabric.util.animateColor=function(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){return t(i,r,n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2)))}}))}}(),function(){function t(t,e,i,r){return t-1&&a>-1&&a-1&&(e="stroke")}else n=s?e.map(y):y(e,r);else e="";return!s&&isNaN(n)?e:n}function r(t){return new RegExp("^("+t.join("|")+")\\b","i")}function n(t){for(var e in k)if(void 0!==t[k[e]]&&""!==t[e]){if(void 0===t[e]){if(!v.Object.prototype[e])continue;t[e]=v.Object.prototype[e]}if(0!==t[e].indexOf("url(")){var i=new v.Color(t[e]);t[e]=i.setAlpha(_(i.getAlpha()*t[k[e]],2)).toRgba()}}return t}function s(t,e){var i,r,n,s,o=[];for(n=0,s=e.length;na?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 r=(n=t).getAttribute("transform")+r;return n.setAttribute("transform",r),_}function p(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 v=t.fabric||(t.fabric={}),m=v.util.object.extend,b=v.util.object.clone,_=v.util.toFixed,y=v.util.parseUnit,x=v.util.multiplyTransformMatrices,C=["path","circle","polygon","polyline","ellipse","rect","line","image","text","linearGradient","radialGradient","stop"],S=["symbol","image","marker","pattern","view","svg"],w=["pattern","defs","symbol","metadata","clipPath","mask","desc"],T=["symbol","g","a","svg"],O={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","paint-order":"paintFirst","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"},k={stroke:"strokeOpacity",fill:"fillOpacity"};v.svgValidTagNamesRegEx=r(C),v.svgViewBoxElementsRegEx=r(S),v.svgInvalidAncestorsRegEx=r(w),v.svgValidParentsRegEx=r(T),v.cssRules={},v.gradientDefs={},v.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(v.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=v.reNum,o="(?:\\s+,?\\s*|,\\s*)",a="(?:"+("(?:(matrix)\\s*\\(\\s*("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")\\s*\\))")+"|"+("(?:(translate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))")+"|"+("(?:(scale)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))")+"|"+("(?:(rotate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+")"+o+"("+s+"))?\\s*\\))")+"|"+("(?:(skewX)\\s*\\(\\s*("+s+")\\s*\\))")+"|"+("(?:(skewY)\\s*\\(\\s*("+s+")\\s*\\))")+")",h="^\\s*(?:"+("(?:"+a+"(?:"+o+"*"+a+")*)")+"?)\\s*$",c=new RegExp(h),l=new RegExp(a,"g");return function(s){var o=n.concat(),h=[];if(!s||s&&!c.test(s))return o;s.replace(l,function(s){var c=new RegExp(a).exec(s).filter(function(t){return!!t}),l=c[1],u=c.slice(2).map(parseFloat);switch(l){case"translate":r(o,u);break;case"rotate":u[0]=v.util.degreesToRadians(u[0]),t(o,u);break;case"scale":e(o,u);break;case"skewX":i(o,u,2);break;case"skewY":i(o,u,1);break;case"matrix":o=u}h.push(o.concat()),o=n.concat()});for(var u=h[0];h.length>1;)h.shift(),u=v.util.multiplyTransformMatrices(u,h[0]);return u}}();var D=new RegExp("^\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*$");v.parseSVGDocument=function(t,e,i,r){if(t){d(t);var n,s,o=v.Object.__uid++,a=g(t),h=v.util.toArray(t.getElementsByTagName("*"));if(a.crossOrigin=r&&r.crossOrigin,a.svgUid=o,0===h.length&&v.isLikelyNode){var c=[];for(n=0,s=(h=t.selectNodes('//*[name(.)!="svg"]')).length;n/i,""))),n&&n.documentElement||e&&e(null),v.parseSVGDocument(n.documentElement,function(t,i,r,n){e&&e(t,i,r,n)},i,r)}})},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 v.window.ActiveXObject&&((n=new ActiveXObject("Microsoft.XMLDOM")).async="false",n.loadXML(t.replace(//i,"")));v.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 void 0===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={});i.Intersection?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")).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},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={});r.Color?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,c=t.width/2,l=t.height/2;a.sort(function(t,e){return t.offset-e.offset}),"path"===t.type&&(c-=t.pathOffset.x,l-=t.pathOffset.y);for(var u in o)"x1"===u||"x2"===u?o[u]+=this.offsetX-c:"y1"!==u&&"y2"!==u||(o[u]+=this.offsetY-l);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()).reverse(),e=0,i=a.length;e0){var d=f/Math.max(o.r1,o.r2);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(void 0!==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;e.Shadow?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)||[];return{color:(i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").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));return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+20,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+20),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}}),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)fabric.warn("fabric.StaticCanvas is already defined.");else{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={}),void 0===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;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;return["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)}).join("")},createSVGFontFacesMarkup:function(){var t,e,i,r,n,s,o,a,h="",c={},l=fabric.fontPaths,u=this.getObjects();for(o=0,a=u.length;o',"\n",h,"","\n"].join("")),h},_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(e=(n=s._objects).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 0!==(s=this._objects.indexOf(t))&&(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)if(t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t)){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(r=(a=h._objects).length;r--;)n=a[r],(s=this._objects.indexOf(n))"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return void 0!==i.getImageData;case"setLineDash":return void 0!==i.setLineDash;case"toDataURL":return void 0!==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.isLikelyNode&&(fabric.StaticCanvas.prototype.createPNGStream=function(){var t=fabric.jsdomImplForWrapper(this.lowerCanvasEl);return t&&t.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){var e=fabric.jsdomImplForWrapper(this.lowerCanvasEl);return e&&e.createJPEGStream(t)})}}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,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.miterLimit=this.strokeMiterLimit,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}}),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.length>1&&t.eq(this._points[this._points.length-1])||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];if(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){var o=this.width/1e3;n=new fabric.Point(n.x,n.y),s=new fabric.Point(s.x,s.y),n.x-=o,s.x+=o}for(i.moveTo(n.x,n.y),t=1,e=this._points.length;t2;for(c&&(a=t[2].xt[e-2].x?1:n.x===t[e-2].x?0:-1,h=n.y>t[e-2].y?1:n.y===t[e-2].y?0:-1),i.push("L ",n.x+a*r," ",n.y+h*r),i},createPath:function(t){var e=new fabric.Path(t,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeMiterLimit:this.strokeMiterLimit,strokeLineJoin:this.strokeLineJoin,strokeDashArray:this.strokeDashArray}),i=new fabric.Point(e.left+e.width/2,e.top+e.height/2);return i=e.translateToGivenOrigin(i,"center","center",e.originX,e.originY),e.top=i.y,e.left=i.x,this.shadow&&(this.shadow.affectStroke=!0,e.setShadow(this.shadow)),e},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath();var t=this.convertPointsToSVGPath(this._points).join("");if("M 0 0 Q 0 0 0 0 L 0 0"!==t){var e=this.createPath(t);this.canvas.clearContext(this.canvas.contextTop),this.canvas.add(e),this.canvas.renderAll(),e.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:e})}else this.canvas.requestRenderAll()}}),fabric.CircleBrush=fabric.util.createClass(fabric.BaseBrush,{width:10,initialize:function(t){this.canvas=t,this.points=[]},drawDot:function(t){var e=this.addPoint(t),i=this.canvas.contextTop,r=this.canvas.viewportTransform;i.save(),i.transform(r[0],r[1],r[2],r[3],r[4],r[5]),i.fillStyle=e.fill,i.beginPath(),i.arc(e.x,e.y,e.radius,0,2*Math.PI,!1),i.closePath(),i.fill(),i.restore()},onMouseDown:function(t){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(t)},onMouseMove:function(t){this.drawDot(t)},onMouseUp:function(){var t,e,i=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;var r=[];for(t=0,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=i||this.getPointer(t,!0);return r=e.group&&e.group===this._activeObject&&"activeSelection"===e.group.type?this._normalizePointer(e.group,n):{x:n.x,y:n.y},e.containsPoint(r)||e._findTargetCorner(n)},_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=this.contextCache,n=t.selectionBackgroundColor,s=this.viewportTransform;return t.selectionBackgroundColor="",this.clearContext(r),r.save(),r.transform(s[0],s[1],s[2],s[3],s[4],s[5]),t.render(r),r.restore(),t===this._activeObject&&t._renderControls(r,{hasBorders:!1,transparentCorners:!1},{hasBorders:!1}),t.selectionBackgroundColor=n,fabric.util.isTransparent(r,e,i,this.targetFindTolerance)},_isSelectionKeyPressed:function(t){return"[object Array]"===Object.prototype.toString.call(this.selectionKey)?!!this.selectionKey.find(function(e){return!0===t[e]}):t[this.selectionKey]},_shouldClearSelection:function(t,e){var i=this.getActiveObjects(),r=this._activeObject;return!e||e&&r&&i.length>1&&-1===i.indexOf(e)&&r!==e&&!this._isSelectionKeyPressed(t)||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])<=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),o,a)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var h=e.ex+.5-(i>0?0:o),c=e.ey+.5-(r>0?0:a);t.beginPath(),fabric.util.drawDashedLine(t,h,c,h+o,c,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c+a-1,h+o,c+a-1,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c,h,c+a,this.selectionDashArray),fabric.util.drawDashedLine(t,h+o-1,c,h+o-1,c+a,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+.5-(i>0?0:o),e.ey+.5-(r>0?0:a),o,a)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r,n=this.getPointer(t,!0),s=this._activeObject,o=this.getActiveObjects();if(this.targets=[],o.length>1&&!e&&s===this._searchPossibleTargets([s],n))return s;if(1===o.length&&s._findTargetCorner(n))return s;if(1===o.length&&s===this._searchPossibleTargets([s],n)){if(!this.preserveObjectStacking)return s;i=s,r=this.targets,this.targets=[]}var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i,this.targets=r),a}},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;if(!this.isTargetTransparent(e,t.x,t.y))return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){"group"===(i=t[s]).type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),(n=this._searchPossibleTargets(i._objects,r))&&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.slice(0):[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)},_fireSelectionEvents:function(t,e){var i=!1,r=this.getActiveObjects(),n=[],s=[],o={e:e};t.forEach(function(t){-1===r.indexOf(t)&&(i=!0,t.fire("deselected",o),s.push(t))}),r.forEach(function(e){-1===t.indexOf(e)&&(i=!0,e.fire("selected",o),n.push(e))}),t.length>0&&r.length>0?(o.selected=n,o.deselected=s,o.updated=n[0]||s[0],o.target=this._activeObject,i&&this.fire("selection:updated",o)):r.length>0?(1===r.length&&(o.target=n[0],this.fire("object:selected",o)),o.selected=n,o.target=this._activeObject,this.fire("selection:created",o)):t.length>0&&(o.deselected=s,this.fire("selection:cleared",o))},setActiveObject:function(t,e){var i=this.getActiveObjects();return this._setActiveObject(t,e),this._fireSelectionEvents(i,e),this},_setActiveObject:function(t,e){return this._activeObject!==t&&(!!this._discardActiveObject(e,t)&&(!t.onSelect({e:e})&&(this._activeObject=t,!0)))},_discardActiveObject:function(t,e){var i=this._activeObject;if(i){if(i.onDeselect({e:t,object:e}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var e=this.getActiveObjects();return e.length&&this.fire("before:selection:cleared",{target:e[0],e:t}),this._discardActiveObject(t),this._fireSelectionEvents(e,t),this},dispose:function(){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,fabric.StaticCanvas.prototype.dispose.call(this),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={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach(function(i){e[i]=t[i]}),this._activeObject.realizeTransform(t),e}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 o in fabric.StaticCanvas)"prototype"!==o&&(fabric.Canvas[o]=fabric.StaticCanvas[o]);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;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){this._handleEvent(t,"dblclick",void 0)},_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,r=!0,n=this._currentTransform,s=this._groupSelector,o=!s||0===s.left&&0===s.top;if(t(e,3))this.fireRightClick&&this._handleEvent(e,"up",i,3,o);else if(t(e,2))this.fireMiddleClick&&this._handleEvent(e,"up",i,2,o);else if(this.isDrawingMode&&this._isCurrentlyDrawing)this._onMouseUpInDrawingMode(e);else{n&&(this._finalizeCurrentTransform(e),r=!n.actionPerformed),i=r?this.findTarget(e,!0):n.target;var a=this._shouldRender(i,this.getPointer(e));i||!o?this._maybeGroupObjects(e):(this._groupSelector=null,this._currentTransform=null),i&&(i.isMoving=!1),this._setCursorFromEvent(e,i),this._handleEvent(e,"up",i||null,1,o),i&&(i.__corner=0),a&&this.requestRenderAll()}},_handleEvent:function(t,e,i,r,n){var s=void 0===i?this.findTarget(t):i,o=this.targets||[],a={e:t,target:s,subTargets:o,button:r||1,isClick:n||!1};this.fire("mouse:"+e,a),s&&s.fire("mouse"+e,a);for(var h=0;h1)){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._fireOverOutEvents(e,t)),this._handleEvent(t,"move",this._currentTransform?null:e)}},_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))},__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))&&(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&&this._isSelectionKeyPressed(t)&&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,r=i._objects.slice(0);i.contains(t)?(i.removeWithUpdate(t),this._hoveredTarget=t,1===i.size()&&this._setActiveObject(i.item(0),e)):(i.addWithUpdate(t),this._hoveredTarget=i),this._fireSelectionEvents(r,e)},_createActiveSelection:function(t,e){var i=this.getActiveObjects(),r=this._createGroup(t);this._hoveredTarget=r,this._setActiveObject(r,e),this._fireSelectionEvents(i,e)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(e,t))},_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.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()*r,c=this.viewportTransform,l=[h,0,0,h,(c[4]-i.left)*r,(c[5]-i.top)*r],u=this.interactive,f=this.skipOffscreen,d=n!==o||s!==a;this.viewportTransform=l,this.skipOffscreen=!1,this.interactive=!1,d&&this.setDimensions({width:o,height:a},{backstoreOnly:!0}),this.renderAll();var g=this.__toDataURL(t,e,i);return this.interactive=u,this.skipOffscreen=f,this.viewportTransform=c,d&&this.setDimensions({width:n,height:s},{backstoreOnly:!0}),this.renderAll(),g},__toDataURL:function(e,i){var r=this.contextContainer.canvas;return"jpg"===e&&(e="jpeg"),t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e)}})}(),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){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)}else e&&e()},__setBgOverlay:function(t,e,i,r){var n=this;if(!e)return i[t]=!0,void(r&&r());"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()})},_enlivenObjects:function(t,e,i){t&&0!==t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,i):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;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:0,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,paintFirst:"fill",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 paintFirst".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst 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=t.width,n=t.height,s=e.maxCacheSideLimit,o=e.minCacheSideLimit;if(r<=s&&n<=s&&r*n<=i)return rl&&(t.zoomX/=r/l,t.width=l,t.capped=!0),n>u&&(t.zoomY/=n/u,t.height=u,t.capped=!0),t},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,n=this._getNonTransformedDimensions(),s=i.scaleX*t*r,o=i.scaleY*t*r;return{width:n.x*s+2,height:n.y*o+2,zoomX:s,zoomY:o,x:n.x,y:n.y}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.target,i=this.canvas._currentTransform.action;if(this===t&&i.slice&&"scale"===i.slice(0,5))return!1}var r,n,s=this._cacheCanvas,o=this._limitCacheSize(this._getCacheCanvasDimensions()),a=e.minCacheSideLimit,h=o.width,c=o.height,l=o.zoomX,u=o.zoomY,f=h!==this.cacheWidth||c!==this.cacheHeight,d=this.zoomX!==l||this.zoomY!==u,g=f||d,p=0,v=0,m=!1;if(f){var b=this._cacheCanvas.width,_=this._cacheCanvas.height,y=h>b||c>_,x=(h<.9*b||c<.9*_)&&b>a&&_>a;m=y||x,y&&!o.capped&&(h>a||c>a)&&(p=.1*h,v=.1*c)}return!!g&&(m?(s.width=Math.ceil(h+p),s.height=Math.ceil(c+v)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,s.width,s.height)),r=o.x*l/2,n=o.y*u/2,this.cacheTranslationX=Math.round(s.width/2-r)+r,this.cacheTranslationY=Math.round(s.height/2-n)+n,this.cacheWidth=h,this.cacheHeight=c,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(l,u),this.zoomX=l,this.zoomY=u,!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){var e;e=this.group&&!this.group._transformDone?this.calcTransformMatrix():this.calcOwnMatrix(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,version:e.version,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,paintFirst:this.paintFirst,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;return i.stateProperties.forEach(function(e){t[e]===i[e]&&delete t[e],"[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e])&&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,n=this[t]!==i,s=!1;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,n&&(s=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(t)>-1?(this.dirty=!0,s&&this.group.set("dirty",!0)):s&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0)),this},setOnGroup: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._removeCacheCanvas(),this.dirty=!1,this.drawObject(t),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},_removeCacheCanvas:function(){this._cacheCanvas=null,this.cacheWidth=0,this.cacheHeight=0},needsItsOwnCache:function(){return"stroke"===this.paintFirst&&"object"==typeof this.shadow},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();n=void 0!==(i=i||{}).hasBorders?i.hasBorders:this.hasBorders,s=void 0!==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*e.browserShadowBlurConstant*(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(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:n}},_renderPaintInOrder:function(t){"stroke"===this.paintFirst?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))},_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(t){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=e.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,t&&(this.scaleX*=t.scaleX,this.scaleY*=t.scaleY,this.cropX=t.cropX,this.cropY=t.cropY,i.x+=t.offsetLeft,i.y+=t.offsetTop,this.width=t.width,this.height=t.height),this.setPositionByOrigin(i,"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={left:this.left,top:this.top};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){void 0!==t[0]&&(i.fill=t[0]),void 0!==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=void 0!==i&&void 0!==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,ownMatrixCache:null,matrixCache: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);return"Intersection"===fabric.Intersection.intersectPolygonRectangle(n,t,e).status},intersectsWithObject:function(t,e,i){return"Intersection"===fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i)).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]).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=0;for(var a in e)if(!((s=e[a]).o.y=t.y&&s.d.y>=t.y||(s.o.x===s.d.x&&s.o.x>=t.x?n=s.o.x:(i=0,r=(s.d.y-s.o.y)/(s.d.x-s.o.x),n=-(t.y-i*t.x-(s.o.y-r*s.o.x))/(i-r)),n>=t.x&&(o+=1),2!==o)))break;return o},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 _=new fabric.Point((p.x+m.x)/2,(p.y+m.y)/2),y=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(y.x+a*this.rotatingPointOffset,y.y-h*this.rotatingPointOffset);g={tl:p,tr:v,br:b,bl:m};return t||(g.ml=_,g.mt=y,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return 6.123233995736766e-17!==i&&-1.8369701987210297e-16!==i||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},transformMatrixKey:function(t){var e="";return!t&&this.group&&(e=this.group.transformMatrixKey(t)+"_"),e+this.top+"_"+this.left+"_"+this.scaleX+"_"+this.scaleY+"_"+this.skewX+"_"+this.skewY+"_"+this.angle+"_"+this.flipX+"_"+this.flipY+"_"+this.width+"_"+this.height},calcTransformMatrix:function(t){if(t)return this.calcOwnMatrix();var e=this.transformMatrixKey(),r=this.matrixCache||(this.matrixCache={});if(r.key===e)return r.value;var n=this.calcOwnMatrix();return this.group&&(n=i(this.group.calcTransformMatrix(),n)),r.key=e,r.value=n,n},calcOwnMatrix:function(){var t=this.transformMatrixKey(!0),e=this.ownMatrixCache||(this.ownMatrixCache={});if(e.key===t)return e.value;var r,n=this.getCenterPoint(),s=[1,0,0,1,n.x,n.y],o=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0);return this.angle&&(r=this._calcRotateMatrix(),s=i(s,r)),s=i(s,o),e.key=t,e.value=s,s},_calcDimensionsTransformMatrix:function(t,r,n){var s,o=[this.scaleX*(n&&this.flipX?-1:1),0,0,this.scaleY*(n&&this.flipY?-1:1),0,0];return t&&(s=[1,0,Math.tan(e(t)),1],o=i(o,s,!0)),r&&(s=[1,Math.tan(e(r)),0,1],o=i(o,s,!0)),o},_getNonTransformedDimensions:function(){var t=this.strokeWidth;return{x:this.width+t,y:this.height+t}},_getTransformedDimensions:function(t,e){void 0===t&&(t=this.skewX),void 0===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},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){function t(t,e,r){var n={};r.forEach(function(e){n[e]=t[e]}),i(t[e],n,!0)}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){var r=n(t,!0);r.points=[t.x1,t.y1,t.x2,t.y2],i.Object._fromObject("Line",r,function(t){delete t.points,e&&e(t)},"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;i.Circle?i.warn("fabric.Circle is already defined."):(i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:i.Object.prototype.cacheProperties.concat("radius"),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=(this.endAngle-this.startAngle)%(2*r);if(0===i)e.push("\n");else{var n=Math.cos(this.startAngle)*this.radius,s=Math.sin(this.startAngle)*this.radius,o=Math.cos(this.endAngle)*this.radius,a=Math.sin(this.endAngle)*this.radius,h=i>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._renderPaintInOrder(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={});e.Triangle?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._renderPaintInOrder(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("")}}),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;e.Ellipse?e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),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();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._renderPaintInOrder(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;e.Rect?e.warn("fabric.Rect is already defined"):(e.Rect=e.util.createClass(e.Object,{stateProperties:e.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),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){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._renderPaintInOrder(t)}else t.fillRect(-.5,-.5,1,1)},_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;e.Polyline?e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,cacheProperties:e.Object.prototype.cacheProperties.concat("points"),initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e);var i=this._calcDimensions();void 0===e.left&&(this.left=i.left),void 0===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;return{left:e,top:i,width:(n(t,"x")||0)-e,height:(n(t,"y")||0)-i}},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){return n(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left})},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,t._set("canvas",this.canvas)},_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);if("canvas"===t)for(i=this._objects.length;i--;)this._objects[i]._set(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||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');var n=["\t\n'];if("fill"===this.paintFirst&&Array.prototype.push.apply(e,n),this.stroke||this.strokeDashArray){var s=this.fill;this.fill=null,e.push("\t\n'),this.fill=s}return"fill"!==this.paintFirst&&Array.prototype.push.apply(e,n),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():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*e,n=this.scaleY*e,s=this._filteredEl||this._originalElement;if(!t||r>i&&n>i)return this._element=s,this._filterScalingX=1,void(this._filterScalingY=1);fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend());var o=fabric.util.createCanvasElement(),a=this._filteredEl?this.cacheKey:this.cacheKey+"_filtered",h=s.width,c=s.height;o.width=h,o.height=c,this._element=o,t.scaleX=r,t.scaleY=n,fabric.filterBackend.applyFilters([t],s,h,c,this._element,a),this._filterScalingX=o.width/this._originalElement.width,this._filterScalingY=o.height/this._originalElement.height},applyFilters:function(t){if(t=t||this.filters||[],0===(t=t.filter(function(t){return t})).length)return this._element=this._originalElement,this._filteredEl=null,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=i,n.height=r,this._element=n,this._filteredEl=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._originalElement.width===this._element.width&&this._originalElement.height===this._element.height||(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(t){!1===this.isMoving&&this.resizeFilter&&this._needsResize()&&(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,this.applyResizeFilters()),this._stroke(t),this._renderPaintInOrder(t)},_renderFill:function(t){var e=this.width,i=this.height,r=e*this._filterScalingX,n=i*this._filterScalingY,s=-e/2,o=-i/2,a=this._element;a&&t.drawImage(a,this.cropX*this._filterScalingX,this.cropY*this._filterScalingY,r,n,s,o,e,i)},_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(){var t,e=fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,n=1,s=1,o=0,a=0,h=0,c=0,l=this.width,u=this.height,f={width:l,height:u};return!e||"none"===e.alignX&&"none"===e.alignY?(n=l/i,s=u/r):("meet"===e.meetOrSlice&&(t=(l-i*(n=s=fabric.util.findScaleToFit(this._element,f)))/2,"Min"===e.alignX&&(o=-t),"Max"===e.alignX&&(o=t),t=(u-r*s)/2,"Min"===e.alignY&&(a=-t),"Max"===e.alignY&&(a=t)),"slice"===e.meetOrSlice&&(t=i-l/(n=s=fabric.util.findScaleToCover(this._element,f)),"Mid"===e.alignX&&(h=t/2),"Max"===e.alignX&&(h=t),t=r-u/s,"Mid"===e.alignY&&(c=t/2),"Max"===e.alignY&&(c=t),i=l/n,r=u/s)),{width:i,height:r,scaleX:n,scaleY:s,offsetLeft:o,offsetTop:a,cropX:h,cropY:c}}}),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){r?e&&e(null,r):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){var e=function(){},i=(t=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()}}),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,e){var i="precision "+e+" float;\nvoid main(){}",r=t.createShader(t.FRAGMENT_SHADER);return t.shaderSource(r,i),t.compileShader(r),!!t.getShaderParameter(r,t.COMPILE_STATUS)}function e(t){t&&t.tileSize&&(this.tileSize=t.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}fabric.isWebglSupported=function(e){if(fabric.isLikelyNode)return!1;e=e||fabric.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),r=i.getContext("webgl")||i.getContext("experimental-webgl"),n=!1;if(r){fabric.maxTextureSize=r.getParameter(r.MAX_TEXTURE_SIZE),n=fabric.maxTextureSize>=e;for(var s=["highp","mediump","lowp"],o=0;o<3;o++)if(t(r,s[o])){fabric.webGlPrecision=s[o];break}}return this.isSupported=n,n},fabric.WebglFilterBackend=e,e.prototype={tileSize:2048,resources:{},setupGLContext:function(t,e){this.dispose(),this.createWebGLCanvas(t,e),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(t,e)},chooseFastestCopyGLTo2DMethod:function(t,e){var i,r=void 0!==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=fabric.util.createCanvasElement(),c=new ArrayBuffer(t*e*4),l={imageBuffer:c,destinationWidth:t,destinationHeight:e,targetCanvas:h};h.width=t,h.height=e,o=window.performance.now(),copyGLTo2DDrawImage.call(l,this.gl,l),a=window.performance.now()-o,o=window.performance.now(),copyGLTo2DPutImageData.call(l,this.gl,l),a>window.performance.now()-o?(this.imageBuffer=c,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,destinationWidth:i,destinationHeight: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,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:n},c=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,c),t.forEach(function(t){t&&t.applyTo(h)}),resizeCanvasIfNeeded(h),this.copyGLTo2D(a,h),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.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),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={sourceWidth:i,sourceHeight:r,imageData:s.getImageData(0,0,i,r),originalEl:e,originalImageData:s.getImageData(0,0,i,r),canvasEl:n,ctx:s,filterBackend:this};return t.forEach(function(t){t.applyTo(o)}),o.imageData.width===i&&o.imageData.height===r||(n.width=o.imageData.width,n.height=o.imageData.height),s.putImageData(o.imageData,0,0),o}}}(),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\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){e=e||this.fragmentSource,i=i||this.vertexSource,"highp"!==fabric.webGlPrecision&&(e=e.replace(/precision highp float/g,"precision "+fabric.webGlPrecision+" float"));var r=t.createShader(t.VERTEX_SHADER);if(t.shaderSource(r,i),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),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")}},getUniformLocations:function(){return{}},sendAttributeData:function(t,e,i){var r=e.aPostion,n=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,n),t.enableVertexAttribArray(r),t.vertexAttribPointer(r,2,t.FLOAT,!1,0,0),t.bufferData(t.ARRAY_BUFFER,i,t.STATIC_DRAW)},_setupFrameBuffer:function(t){var e,i,r=t.context;t.passes>1?(e=t.destinationWidth,i=t.destinationHeight,t.sourceWidth===e&&t.sourceHeight===i||(r.deleteTexture(t.targetTexture),t.targetTexture=t.filterBackend.createTexture(r,e,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.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.isNeutralState()||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.aPosition),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.destinationWidth,t.destinationHeight),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)},isNeutralState:function(){for(var t=i.ColorMatrix,e=20;e--;)if(this.matrix[e]!==t.prototype.matrix[e])return!1;return!0},applyTo2d:function(t){var e,i,r,n,s,o=t.imageData.data,a=o.length,h=this.matrix,c=this.colorsOnly;for(s=0;sy||o<0||o>_||(h=4*(a*_+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,C[s+3]=S?p[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.data,n=r.length,s=this.mode;for(e=0;ec[0]&&n>c[1]&&s>c[2]&&r1&&this.isNeutralState(t))return;t.passes++,this.width=t.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=t.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),t.destinationWidth=this.dW,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceWidth=t.destinationWidth,this.height=t.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),t.destinationHeight=this.dH,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceHeight=t.destinationHeight}else this.isNeutralState(t)||this.applyTo2d(t)},isNeutralState:function(t){var e=t.scaleX||this.scaleX,i=t.scaleY||this.scaleY;return 1===e&&1===i},lanczosCreate:function(t){return function(e){if(e>=t||e<=-t)return 0;if(e<1.1920929e-7&&e>-1.1920929e-7)return 1;var i=(e*=Math.PI)/t;return a(e)/e*a(i)/i}},applyTo2d:function(t){var e=t.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var n,s=e.width,a=e.height,h=o(s*i),c=o(a*r);"sliceHack"===this.resizeType?n=this.sliceByTwo(t,s,a,h,c):"hermite"===this.resizeType?n=this.hermiteFastResize(t,s,a,h,c):"bilinear"===this.resizeType?n=this.bilinearFiltering(t,s,a,h,c):"lanczos"===this.resizeType&&(n=this.lanczosResize(t,s,a,h,c)),t.imageData=n},sliceByTwo:function(t,i,n,s,o){var a,h,c=t.imageData,l=!1,u=!1,f=.5*i,d=.5*n,g=e.filterBackend.resources,p=0,v=0,m=i,b=0;for(g.sliceByTwo||(g.sliceByTwo=document.createElement("canvas")),((a=g.sliceByTwo).width<1.5*i||a.height=e)){P=r(1e3*s(w-C.x)),x[P]||(x[P]={});for(var F=S.y-y;F<=S.y+y;F++)F<0||F>=o||(M=r(1e3*s(F-C.y)),x[P][M]||(x[P][M]=g(n(i(P*m,2)+i(M*b,2))/1e3)),(T=x[P][M])>0&&(k+=T,D+=T*u[O=4*(F*e+w)],j+=T*u[O+1],E+=T*u[O+2],A+=T*u[O+3]))}d[O=4*(h*a+t)]=D/k,d[O+1]=j/k,d[O+2]=E/k,d[O+3]=A/k}return++t1&&M<-1||(_=2*M*M*M-3*M*M+1)>0&&(T+=_*d[(P=4*(A+k*e))+3],x+=_,d[P+3]<255&&(_=_*d[P+3]/250),C+=_*d[P],S+=_*d[P+1],w+=_*d[P+2],y+=_)}p[b]=C/y,p[b+1]=S/y,p[b+2]=w/y,p[b+3]=T/x}return g},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=t.imageData.data,r=i.length,n=Math.floor(255*this.contrast),s=259*(n+255)/(255*(259-n));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.data,r=this.gamma,n=i.length,s=1/r[0],o=1/r[1],a=1/r[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),e=0,n=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){"stroke"===this.paintFirst?(this._renderTextStroke(t),this._renderTextFill(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;dn)){var d=a-n;h[t]=a,h[c]+=d,n=a}return{width:n*u,kernedWidth:a*u}},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=new Array(o.length);for(this.__charBounds[t]=a,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?"200px":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&&(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})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(t){this.clearContextTop(),this.callSuper("render",t),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(t){this.callSuper("_render",t)},clearContextTop:function(t){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this.canvas.contextTop,i=this.canvas.viewportTransform;e.save(),e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(e),this.transformMatrix&&e.transform.apply(e,this.transformMatrix),this._clearTextArea(e),t||e.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas){var t,e=this._getCursorBoundaries();this.canvas&&this.canvas.contextTop?(t=this.canvas.contextTop,this.clearContextTop(!0)):(t=this.canvas.contextContainer).save(),this.selectionStart===this.selectionEnd?this.renderCursor(e,t):this.renderSelection(e,t),t.restore()}},_clearTextArea:function(t){var e=this.width+4,i=this.height+4;t.clearRect(-e/2,-i/2,e,i)},_getCursorBoundaries:function(t){void 0===t&&(t=this.selectionStart);var e=this._getLeftOffset(),i=this._getTopOffset(),r=this._getCursorBoundariesOffsets(t);return{left:e,top:i,leftOffset:r.left,topOffset:r.top}},_getCursorBoundariesOffsets:function(t){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;for(var e,i,r=0,n=0,s=this.get2DCursorLocation(t),o=0;o0?n: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=-1!==this.textAlign.indexOf("justify"),s=this.get2DCursorLocation(i),o=this.get2DCursorLocation(r),a=s.lineIndex,h=o.lineIndex,c=s.charIndex<0?0:s.charIndex,l=o.charIndex<0?0:o.charIndex,u=a;u<=h;u++){var f=this._getLineLeftOffset(u)||0,d=this.getHeightOfLine(u),g=0,p=0,v=0;u===a&&(p=this.__charBounds[a][c].left),u>=a&&u1)&&(d/=this.lineHeight),this.inCompositionMode?(e.fillStyle=this.compositionColor||"black",e.fillRect(t.left+f+p,t.top+t.topOffset+d,v-p,1)):(e.fillStyle=this.selectionColor,e.fillRect(t.left+f+p,t.top+t.topOffset,v-p,d)),t.topOffset+=g}},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,e=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,t&&e&&e.clearContext(e.contextTop||e.contextContainer)},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);return{selectionStart:n,selectionEnd:n+fabric.util.string.graphemeSplit(s).length}},fromGraphemeToStringSelection:function(t,e,i){var r=i.slice(0,t).join("").length;return t===e?{selectionStart:r,selectionEnd:r}:{selectionStart:r,selectionEnd:r+i.slice(t,e).join("").length}},_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,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());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)).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.hoverCursor,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._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),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(o=1;o0&&this.insertCharStyleObject(r.lineIndex+o,0,n[o],i)},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=this.getLocalPointer(t),r=0,n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;h0&&(o+=this._textLines[h-1].length+1);n=this._getLineLeftOffset(a)*this.scaleX;for(var l=0,u=(e=this._textLines[a]).length;ls||o<0?0:1);return this.flipX&&(a=n-a),a>this._text.length&&(a=this._text.length),a}}),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){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1: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;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var h=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),c=this.selectionStart>h.selectionStart;this.selectionStart!==this.selectionEnd?(i=this._text.slice(this.selectionStart,this.selectionEnd),a+=this.selectionEnd-this.selectionStart):o0&&(r+=(i=this.__charBounds[t][e-1]).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);return this._textLines[n].slice(s).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=0,a=0,h=n.length;ae){r=!0;var c=s-i,l=s,u=Math.abs(c-e);o=Math.abs(l-e)=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=this["get"+t+"CursorOffset"](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(i):this.moveCursorWithoutShift(i),0!==i&&(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,e.shiftKey?i+="Shift":i+="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,e){void 0===e&&(e=t+1),this.removeStyleFromTo(t,e),this._text.splice(t,e-t),this.text=this._text.join(""),this.set("dirty",!0),this._removeExtraneousStyles(),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords())}}),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=this.getSvgFilter(),r=""===i?"":' style="'+i+'"',n=this.getSvgTextDecoration(this);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=-1!==this.textAlign.indexOf("justify"),u="",f=0,d=this._textLines[e];r+=c*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,p=d.length-1;g<=p;g++)h=g===p||this.charSpacing,u+=d[g],o=this.__charBounds[e][g],0===f?(i+=o.kernedWidth-o.width,f+=o.width):f+=o.kernedWidth,l&&!h&&this._reSpaceAndTab.test(d[g])&&(h=!0),h||(n=n||this.getCompleteStyleDeclaration(e,g),s=this.getCompleteStyleDeclaration(e,g+1),h=this._hasStyleChangedForSvg(n,s)),h&&(a=this._getStyleDeclaration(e,g)||{},t.push(this._createTextCharSpan(u,a,i,r)),u="",n=s,i+=f,f=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),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_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&&!d&&(s.push(o),o=[],n=l,d=!0),d||o.push(" "),o=o.concat(h),u=this._measureWord([" "],i,c),c++,d=!1,l>f&&(f=l);return p&&s.push(o),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),s},isEndOfWrapping:function(t){return!this._styleMap[t+1]||this._styleMap[t+1].line!==this._styleMap[t].line},_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]}})}(); \ No newline at end of file +function resizeCanvasIfNeeded(t){var e=t.targetCanvas,i=e.width,r=e.height,n=t.destinationWidth,s=t.destinationHeight;i===n&&r===s||(e.width=n,e.height=s)}function copyGLTo2DDrawImage(t,e){var i=t.canvas,r=e.targetCanvas,n=r.getContext("2d");n.translate(0,r.height),n.scale(1,-1);var s=i.height-r.height;n.drawImage(i,0,s,r.width,r.height,0,0,r.width,r.height)}function copyGLTo2DPutImageData(t,e){var i=e.targetCanvas.getContext("2d"),r=e.destinationWidth,n=e.destinationHeight,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,n);i.putImageData(h,0,0)}var fabric=fabric||{version:"2.0.0-rc.4"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window):(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.jsdomImplForWrapper=require("jsdom/lib/jsdom/living/generated/utils").implForWrapper,fabric.nodeCanvas=require("jsdom/lib/jsdom/utils").Canvas,fabric.window=fabric.document.defaultView,DOMParser=require("xmldom").DOMParser),fabric.isTouchSupported="ontouchstart"in fabric.window,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","paint-order","instantiated_by_use"],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.browserShadowBlurConstant=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},"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=fabric),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);void 0!==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-1!==i&&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);return{x:t.x*r-t.y*i,y:t.x*i+t.y*r}},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)-i,n=[t[0].y,t[1].y,t[2].y,t[3].y],s=fabric.util.array.min(n);return{left:i,top:s,width:r,height:fabric.util.array.max(n)-s}},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]},getSvgAttributes:function(t){var e=["instantiated_by_use","style","id","class"];switch(t){case"linearGradient":e=e.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);break;case"radialGradient":e=e.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);break;case"stop":e=e.concat(["offset","stop-color","stop-opacity"])}return e},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])>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?P-=2*f:1===c&&P<0&&(P+=2*f);for(var M=Math.ceil(Math.abs(P/f*2)),F=[],I=P/M,L=8/3*Math.sin(I/4)*Math.sin(I/4)/Math.sin(I/2),B=A+I,R=0;R=n?s-n:2*Math.PI-(n-s)}function i(t,e,i,r,n,a,h,c){var l=o.call(arguments);if(s[l])return s[l];var u,f,d,g,p,v,m,b,_=Math.sqrt,y=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var T=0;T<2;++T)if(T>0&&(f=6*e-12*r+6*a,u=-3*e+9*r-9*a+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;0<(g=-d/f)&&g<1&&S.push(g)}else(m=f*f-4*d*u)<0||(0<(p=(-f+(b=_(m)))/(2*u))&&p<1&&S.push(p),0<(v=(-f-b)/(2*u))&&v<1&&S.push(v));for(var O,k,D,j=S.length,E=j;j--;)O=(D=1-(g=S[j]))*D*D*t+3*D*D*g*i+3*D*g*g*n+g*g*g*h,w[0][j]=O,k=D*D*D*e+3*D*D*g*r+3*D*g*g*a+g*g*g*c,w[1][j]=k;w[0][E]=t,w[1][E]=e,w[0][E+1]=h,w[1][E+1]=c;var A=[{x:y.apply(null,w[0]),y:y.apply(null,w[1])},{x:x.apply(null,w[0]),y:x.apply(null,w[1])}];return s[l]=A,A}var r={},n={},s={},o=Array.prototype.join;fabric.util.drawArc=function(e,i,r,n){for(var s=n[0],o=n[1],a=n[2],h=n[3],c=n[4],l=[[],[],[],[]],u=t(n[5]-i,n[6]-r,s,o,h,c,a),f=0,d=u.length;f=e})}}}(),function(){function t(e,i,r){if(r)if(!fabric.isLikelyNode&&i instanceof Element)e=i;else if(i instanceof Array){e=[];for(var n=0,s=i.length;n/g,">")},graphemeSplit:function(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}(t,i))&&r.push(e);return r}}}(),function(){function t(){}function e(t){for(var e=null,r=this;r.constructor.superclass;){var n=r.constructor.superclass.prototype[t];if(r[t]!==n){e=n;break}r=r.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,i.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}var i=Array.prototype.slice,r=function(){},n=function(){for(var t in{toString:1})if("toString"===t)return!1;return!0}(),s=function(t,e,i){for(var r in e)r in t.prototype&&"function"==typeof t.prototype[r]&&(e[r]+"").indexOf("callSuper")>-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],n&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=function(){function n(){this.initialize.apply(this,arguments)}var o=null,a=i.call(arguments,0);"function"==typeof a[0]&&(o=a.shift()),n.superclass=o,n.subclasses=[],o&&(t.prototype=o.prototype,n.prototype=new t,o.subclasses.push(n));for(var h=0,c=a.length;h=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(r,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=function(t,e){var i=t.style;if(!i)return t;if("string"==typeof e)return t.style.cssText+=";"+e,e.indexOf("opacity")>-1?n(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)"opacity"===r?n(t,e[r]):i["float"===r||"cssFloat"===r?void 0===i.styleFloat?"cssFloat":"styleFloat":r]=e[r];return t}}(),function(){function t(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 e(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)===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"!==t.style.position););return{left:e,top:i}}var i,r=Array.prototype.slice,n=function(t){return r.call(t,0)};try{i=n(fabric.document.childNodes)instanceof Array}catch(t){}i||(n=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var s;s=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(){var t=fabric.document.documentElement.style,e="userSelect"in t?"userSelect":"MozUserSelect"in t?"MozUserSelect":"WebkitUserSelect"in t?"WebkitUserSelect":"KhtmlUserSelect"in t?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),e?t.style[e]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t},fabric.util.makeElementSelectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=null),e?t.style[e]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}}(),function(){fabric.util.getScript=function(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.getById=function(t){return"string"==typeof t?fabric.document.getElementById(t):t},fabric.util.toArray=n,fabric.util.makeElement=t,fabric.util.addClass=function(t,e){t&&-1===(" "+t.className+" ").indexOf(" "+e+" ")&&(t.className+=(t.className?" ":"")+e)},fabric.util.wrapElement=function(e,i,r){return"string"==typeof i&&(i=t(i,r)),e.parentNode&&e.parentNode.replaceChild(i,e),i.appendChild(e),i},fabric.util.getScrollLeftTop=e,fabric.util.getElementOffset=function(t){var i,r,n=t&&t.ownerDocument,o={left:0,top:0},a={left:0,top:0},h={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return a;for(var c in h)a[h[c]]+=parseInt(s(t,c),10)||0;return i=n.documentElement,void 0!==t.getBoundingClientRect&&(o=t.getBoundingClientRect()),r=e(t),{left:o.left+r.left-(i.clientLeft||0)+a.left,top:o.top+r.top-(i.clientTop||0)+a.top}},fabric.util.getElementStyle=s,fabric.util.getNodeCanvas=function(t){var e=fabric.jsdomImplForWrapper(t);return e._canvas||e._image}}(),function(){function t(){}var e=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{if(t[e]())return t[e]}catch(t){}}();fabric.util.request=function(i,r){r||(r={});var n=r.method?r.method.toUpperCase():"GET",s=r.onComplete||function(){},o=e(),a=r.body||r.parameters;return o.onreadystatechange=function(){4===o.readyState&&(s(o),o.onreadystatechange=t)},"GET"===n&&(a=null,"string"==typeof r.parameters&&(i=function(t,e){return t+(/\?/.test(t)?"&":"?")+e}(i,r.parameters))),o.open(n,i,!0),"POST"!==n&&"PUT"!==n||o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.send(a),o}}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){void 0!==console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(){return!1}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){return fabric.window.setTimeout(t,1e3/60)},r=fabric.window.cancelAnimationFrame||fabric.window.clearTimeout;fabric.util.animate=function(i){e(function(r){i||(i={});var n,s=r||+new Date,o=i.duration||500,a=s+o,h=i.onChange||t,c=i.abort||t,l=i.onComplete||t,u=i.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},f="startValue"in i?i.startValue:0,d="endValue"in i?i.endValue:100,g=i.byValue||d-f;i.onStart&&i.onStart(),function t(r){if(c())l(d,1,1);else{var p=(n=r||+new Date)>a?o:n-s,v=p/o,m=u(p,f,g,o),b=Math.abs((m-f)/g);h(m,b,v),n>a?i.onComplete&&i.onComplete():e(t)}}(s)})},fabric.util.requestAnimFrame=e,fabric.util.cancelAnimFrame=function(){return r.apply(fabric.window,arguments)}}(),function(){fabric.util.animateColor=function(t,e,i,r){var n=new fabric.Color(t).getSource(),s=new fabric.Color(e).getSource();r=r||{},fabric.util.animate(fabric.util.object.extend(r,{duration:i||500,startValue:n,endValue:s,byValue:s,easing:function(t,e,i,n){return function(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+=")"}(e,i,r.colorEasing?r.colorEasing(t,n):1-Math.cos(t/n*(Math.PI/2)))}}))}}(),function(){function t(t,e,i,r){return t-1&&a>-1&&a-1&&(e="stroke")}else n=s?e.map(d):d(e,r);else e="";return!s&&isNaN(n)?e:n}function r(t){return new RegExp("^("+t.join("|")+")\\b","i")}function n(t,e){var i,r,n,s,o=[];for(n=0,s=e.length;na?a:o),1===o&&1===a&&0===h&&0===l&&0===g&&0===p)return x;if((g||p)&&(C=" translate("+d(g)+" "+d(p)+") "),r=C+" matrix("+o+" 0 0 "+a+" "+h*o+" "+l*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else r=(n=t).getAttribute("transform")+r;return n.setAttribute("transform",r),x}var c=t.fabric||(t.fabric={}),l=c.util.object.extend,u=c.util.object.clone,f=c.util.toFixed,d=c.util.parseUnit,g=c.util.multiplyTransformMatrices,p={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","paint-order":"paintFirst","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"},v={stroke:"strokeOpacity",fill:"fillOpacity"};c.svgValidTagNamesRegEx=r(["path","circle","polygon","polyline","ellipse","rect","line","image","text","linearGradient","radialGradient","stop"]),c.svgViewBoxElementsRegEx=r(["symbol","image","marker","pattern","view","svg"]),c.svgInvalidAncestorsRegEx=r(["pattern","defs","symbol","metadata","clipPath","mask","desc"]),c.svgValidParentsRegEx=r(["symbol","g","a","svg"]),c.cssRules={},c.gradientDefs={},c.parseTransformAttribute=function(){function t(t,e,i){t[i]=Math.tan(c.util.degreesToRadians(e[0]))}var e=[1,0,0,1,0,0],i=c.reNum,r="(?:\\s+,?\\s*|,\\s*)",n="(?:"+("(?:(matrix)\\s*\\(\\s*("+i+")"+r+"("+i+")"+r+"("+i+")"+r+"("+i+")"+r+"("+i+")"+r+"("+i+")\\s*\\))")+"|"+("(?:(translate)\\s*\\(\\s*("+i+")(?:"+r+"("+i+"))?\\s*\\))")+"|"+("(?:(scale)\\s*\\(\\s*("+i+")(?:"+r+"("+i+"))?\\s*\\))")+"|"+("(?:(rotate)\\s*\\(\\s*("+i+")(?:"+r+"("+i+")"+r+"("+i+"))?\\s*\\))")+"|"+("(?:(skewX)\\s*\\(\\s*("+i+")\\s*\\))")+"|"+("(?:(skewY)\\s*\\(\\s*("+i+")\\s*\\))")+")",s="^\\s*(?:"+("(?:"+n+"(?:"+r+"*"+n+")*)")+"?)\\s*$",o=new RegExp(s),a=new RegExp(n,"g");return function(i){var r=e.concat(),s=[];if(!i||i&&!o.test(i))return r;i.replace(a,function(i){var o=new RegExp(n).exec(i).filter(function(t){return!!t}),a=o[1],h=o.slice(2).map(parseFloat);switch(a){case"translate":!function(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}(r,h);break;case"rotate":h[0]=c.util.degreesToRadians(h[0]),function(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)}(r,h);break;case"scale":!function(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}(r,h);break;case"skewX":t(r,h,2);break;case"skewY":t(r,h,1);break;case"matrix":r=h}s.push(r.concat()),r=e.concat()});for(var h=s[0];s.length>1;)s.shift(),h=c.util.multiplyTransformMatrices(h,s[0]);return h}}();var m=new RegExp("^\\s*("+c.reNum+"+)\\s*,?\\s*("+c.reNum+"+)\\s*,?\\s*("+c.reNum+"+)\\s*,?\\s*("+c.reNum+"+)\\s*$");c.parseSVGDocument=function(t,e,i,r){if(t){!function(t){for(var e=n(t,["use","svg:use"]),i=0;e.length&&i/i,""))),n&&n.documentElement||e&&e(null),c.parseSVGDocument(n.documentElement,function(t,i,r,n){e&&e(t,i,r,n)},i,r)}})},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 c.window.ActiveXObject&&((n=new ActiveXObject("Microsoft.XMLDOM")).async="false",n.loadXML(t.replace(//i,"")));c.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 void 0===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={});i.Intersection?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")).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},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={});r.Color?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,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 i=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,r,n,s,o=i(this.coords,!0),a=i(this.colorStops,!0),h=o.r1>o.r2,c=t.width/2,l=t.height/2;a.sort(function(t,e){return t.offset-e.offset}),"path"===t.type&&(c-=t.pathOffset.x,l-=t.pathOffset.y);for(var u in o)"x1"===u||"x2"===u?o[u]+=this.offsetX-c:"y1"!==u&&"y2"!==u||(o[u]+=this.offsetY-l);if(s='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(s+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?n=["\n']:"radial"===this.type&&(n=["\n']),"radial"===this.type){if(h)for((a=a.concat()).reverse(),e=0,r=a.length;e0){var d=f/Math.max(o.r1,o.r2);for(e=0,r=a.length;e\n')}return n.push("linear"===this.type?"\n":"\n"),n.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(void 0!==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;e.Shadow?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)||[];return{color:(i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").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));return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+20,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+20),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}}),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)fabric.warn("fabric.StaticCanvas is already defined.");else{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={}),void 0===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._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(),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;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;return["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)}).join("")},createSVGFontFacesMarkup:function(){var t,e,i,r,n,s,o,a,h="",c={},l=fabric.fontPaths,u=this.getObjects();for(o=0,a=u.length;o',"\n",h,"","\n"].join("")),h},_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(e=(n=s._objects).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 0!==(s=this._objects.indexOf(t))&&(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){if(t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t)){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(r=(a=h._objects).length;r--;)n=a[r],(s=this._objects.indexOf(n))"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return void 0!==i.getImageData;case"setLineDash":return void 0!==i.setLineDash;case"toDataURL":return void 0!==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.isLikelyNode&&(fabric.StaticCanvas.prototype.createPNGStream=function(){var t=fabric.util.getNodeCanvas(this.lowerCanvasEl);return t&&t.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){var e=fabric.util.getNodeCanvas(this.lowerCanvasEl);return e&&e.createJPEGStream(t)})}}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,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.miterLimit=this.strokeMiterLimit,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}}),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.length>1&&t.eq(this._points[this._points.length-1])||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];if(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){var o=this.width/1e3;n=new fabric.Point(n.x,n.y),s=new fabric.Point(s.x,s.y),n.x-=o,s.x+=o}for(i.moveTo(n.x,n.y),t=1,e=this._points.length;t2;for(c&&(a=t[2].xt[e-2].x?1:n.x===t[e-2].x?0:-1,h=n.y>t[e-2].y?1:n.y===t[e-2].y?0:-1),i.push("L ",n.x+a*r," ",n.y+h*r),i},createPath:function(t){var e=new fabric.Path(t,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeMiterLimit:this.strokeMiterLimit,strokeLineJoin:this.strokeLineJoin,strokeDashArray:this.strokeDashArray}),i=new fabric.Point(e.left+e.width/2,e.top+e.height/2);return i=e.translateToGivenOrigin(i,"center","center",e.originX,e.originY),e.top=i.y,e.left=i.x,this.shadow&&(this.shadow.affectStroke=!0,e.setShadow(this.shadow)),e},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath();var t=this.convertPointsToSVGPath(this._points).join("");if("M 0 0 Q 0 0 0 0 L 0 0"!==t){var e=this.createPath(t);this.canvas.clearContext(this.canvas.contextTop),this.canvas.add(e),this.canvas.renderAll(),e.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:e})}else this.canvas.requestRenderAll()}}),fabric.CircleBrush=fabric.util.createClass(fabric.BaseBrush,{width:10,initialize:function(t){this.canvas=t,this.points=[]},drawDot:function(t){var e=this.addPoint(t),i=this.canvas.contextTop,r=this.canvas.viewportTransform;i.save(),i.transform(r[0],r[1],r[2],r[3],r[4],r[5]),i.fillStyle=e.fill,i.beginPath(),i.arc(e.x,e.y,e.radius,0,2*Math.PI,!1),i.closePath(),i.fill(),i.restore()},onMouseDown:function(t){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(t)},onMouseMove:function(t){this.drawDot(t)},onMouseUp:function(){var t,e,i=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;var r=[];for(t=0,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),this.isDrawingMode&&this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._render();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=i||this.getPointer(t,!0);return r=e.group&&e.group===this._activeObject&&"activeSelection"===e.group.type?this._normalizePointer(e.group,n):{x:n.x,y:n.y},e.containsPoint(r)||e._findTargetCorner(n)},_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=this.contextCache,n=t.selectionBackgroundColor,s=this.viewportTransform;t.selectionBackgroundColor="",this.clearContext(r),r.save(),r.transform(s[0],s[1],s[2],s[3],s[4],s[5]),t.render(r),r.restore(),t===this._activeObject&&t._renderControls(r,{hasBorders:!1,transparentCorners:!1},{hasBorders:!1}),t.selectionBackgroundColor=n;return fabric.util.isTransparent(r,e,i,this.targetFindTolerance)},_isSelectionKeyPressed:function(t){return"[object Array]"===Object.prototype.toString.call(this.selectionKey)?!!this.selectionKey.find(function(e){return!0===t[e]}):t[this.selectionKey]},_shouldClearSelection:function(t,e){var i=this.getActiveObjects(),r=this._activeObject;return!e||e&&r&&i.length>1&&-1===i.indexOf(e)&&r!==e&&!this._isSelectionKeyPressed(t)||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])<=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),o,a)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var h=e.ex+.5-(i>0?0:o),c=e.ey+.5-(r>0?0:a);t.beginPath(),fabric.util.drawDashedLine(t,h,c,h+o,c,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c+a-1,h+o,c+a-1,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c,h,c+a,this.selectionDashArray),fabric.util.drawDashedLine(t,h+o-1,c,h+o-1,c+a,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+.5-(i>0?0:o),e.ey+.5-(r>0?0:a),o,a)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r,n=this.getPointer(t,!0),s=this._activeObject,o=this.getActiveObjects();if(this.targets=[],o.length>1&&!e&&s===this._searchPossibleTargets([s],n))return s;if(1===o.length&&s._findTargetCorner(n))return s;if(1===o.length&&s===this._searchPossibleTargets([s],n)){if(!this.preserveObjectStacking)return s;i=s,r=this.targets,this.targets=[]}var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i,this.targets=r),a}},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;if(!this.isTargetTransparent(e,t.x,t.y))return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){"group"===(i=t[s]).type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),(n=this._searchPossibleTargets(i._objects,r))&&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.slice(0):[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)},_fireSelectionEvents:function(t,e){var i=!1,r=this.getActiveObjects(),n=[],s=[],o={e:e};t.forEach(function(t){-1===r.indexOf(t)&&(i=!0,t.fire("deselected",o),s.push(t))}),r.forEach(function(e){-1===t.indexOf(e)&&(i=!0,e.fire("selected",o),n.push(e))}),t.length>0&&r.length>0?(o.selected=n,o.deselected=s,o.updated=n[0]||s[0],o.target=this._activeObject,i&&this.fire("selection:updated",o)):r.length>0?(1===r.length&&(o.target=n[0],this.fire("object:selected",o)),o.selected=n,o.target=this._activeObject,this.fire("selection:created",o)):t.length>0&&(o.deselected=s,this.fire("selection:cleared",o))},setActiveObject:function(t,e){var i=this.getActiveObjects();return this._setActiveObject(t,e),this._fireSelectionEvents(i,e),this},_setActiveObject:function(t,e){return this._activeObject!==t&&(!!this._discardActiveObject(e,t)&&(!t.onSelect({e:e})&&(this._activeObject=t,!0)))},_discardActiveObject:function(t,e){var i=this._activeObject;if(i){if(i.onDeselect({e:t,object:e}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var e=this.getActiveObjects();return e.length&&this.fire("before:selection:cleared",{target:e[0],e:t}),this._discardActiveObject(t),this._fireSelectionEvents(e,t),this},dispose:function(){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,fabric.StaticCanvas.prototype.dispose.call(this),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={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach(function(i){e[i]=t[i]}),this._activeObject.realizeTransform(t),e}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 o in fabric.StaticCanvas)"prototype"!==o&&(fabric.Canvas[o]=fabric.StaticCanvas[o]);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;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){this._handleEvent(t,"dblclick")},_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,r=!0,n=this._currentTransform,s=this._groupSelector,o=!s||0===s.left&&0===s.top;if(t(e,3))this.fireRightClick&&this._handleEvent(e,"up",i,3,o);else if(t(e,2))this.fireMiddleClick&&this._handleEvent(e,"up",i,2,o);else if(this.isDrawingMode&&this._isCurrentlyDrawing)this._onMouseUpInDrawingMode(e);else{n&&(this._finalizeCurrentTransform(e),r=!n.actionPerformed),i=r?this.findTarget(e,!0):n.target;var a=this._shouldRender(i,this.getPointer(e));i||!o?this._maybeGroupObjects(e):(this._groupSelector=null,this._currentTransform=null),i&&(i.isMoving=!1),this._setCursorFromEvent(e,i),this._handleEvent(e,"up",i||null,1,o),i&&(i.__corner=0),a&&this.requestRenderAll()}},_handleEvent:function(t,e,i,r,n){var s=void 0===i?this.findTarget(t):i,o=this.targets||[],a={e:t,target:s,subTargets:o,button:r||1,isClick:n||!1};this.fire("mouse:"+e,a),s&&s.fire("mouse"+e,a);for(var h=0;h1)){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)||null,this._setCursorFromEvent(t,e),this._fireOverOutEvents(e,t)),this._handleEvent(t,"move",this._currentTransform?null:e)}},_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))},__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))&&(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&&this._isSelectionKeyPressed(t)&&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,r=i._objects.slice(0);i.contains(t)?(i.removeWithUpdate(t),this._hoveredTarget=t,1===i.size()&&this._setActiveObject(i.item(0),e)):(i.addWithUpdate(t),this._hoveredTarget=i),this._fireSelectionEvents(r,e)},_createActiveSelection:function(t,e){var i=this.getActiveObjects(),r=this._createGroup(t);this._hoveredTarget=r,this._setActiveObject(r,e),this._fireSelectionEvents(i,e)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(e,t))},_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=!this.selectionFullyContained,u=n===o&&s===a,f=this._objects.length;f--&&!((i=this._objects[f])&&i.selectable&&i.visible&&(l&&i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||l&&i.containsPoint(h)||l&&i.containsPoint(c))&&(r.push(i),u)););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()*r,c=this.viewportTransform,l=[h,0,0,h,(c[4]-i.left)*r,(c[5]-i.top)*r],u=this.interactive,f=this.skipOffscreen,d=n!==o||s!==a;this.viewportTransform=l,this.skipOffscreen=!1,this.interactive=!1,d&&this.setDimensions({width:o,height:a},{backstoreOnly:!0}),this.renderAll();var g=this.__toDataURL(t,e,i);return this.interactive=u,this.skipOffscreen=f,this.viewportTransform=c,d&&this.setDimensions({width:n,height:s},{backstoreOnly:!0}),this.renderAll(),g},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");return t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e)}})}(),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){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)}else e&&e()},__setBgOverlay:function(t,e,i,r){var n=this;if(!e)return i[t]=!0,void(r&&r());"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()})},_enlivenObjects:function(t,e,i){t&&0!==t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,i):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;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:0,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,paintFirst:"fill",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 paintFirst".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst 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=t.width,n=t.height,s=e.maxCacheSideLimit,o=e.minCacheSideLimit;if(r<=s&&n<=s&&r*n<=i)return rl&&(t.zoomX/=r/l,t.width=l,t.capped=!0),n>u&&(t.zoomY/=n/u,t.height=u,t.capped=!0),t},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,n=this._getNonTransformedDimensions(),s=i.scaleX*t*r,o=i.scaleY*t*r;return{width:n.x*s+2,height:n.y*o+2,zoomX:s,zoomY:o,x:n.x,y:n.y}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.target,i=this.canvas._currentTransform.action;if(this===t&&i.slice&&"scale"===i.slice(0,5))return!1}var r,n,s=this._cacheCanvas,o=this._limitCacheSize(this._getCacheCanvasDimensions()),a=e.minCacheSideLimit,h=o.width,c=o.height,l=o.zoomX,u=o.zoomY,f=h!==this.cacheWidth||c!==this.cacheHeight,d=this.zoomX!==l||this.zoomY!==u,g=f||d,p=0,v=0,m=!1;if(f){var b=this._cacheCanvas.width,_=this._cacheCanvas.height,y=h>b||c>_;m=y||(h<.9*b||c<.9*_)&&b>a&&_>a,y&&!o.capped&&(h>a||c>a)&&(p=.1*h,v=.1*c)}return!!g&&(m?(s.width=Math.ceil(h+p),s.height=Math.ceil(c+v)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,s.width,s.height)),r=o.x*l/2,n=o.y*u/2,this.cacheTranslationX=Math.round(s.width/2-r)+r,this.cacheTranslationY=Math.round(s.height/2-n)+n,this.cacheWidth=h,this.cacheHeight=c,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(l,u),this.zoomX=l,this.zoomY=u,!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){var e;e=this.group&&!this.group._transformDone?this.calcTransformMatrix():this.calcOwnMatrix(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,version:e.version,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,paintFirst:this.paintFirst,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;return i.stateProperties.forEach(function(e){t[e]===i[e]&&delete t[e];"[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e])&&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,n=this[t]!==i,s=!1;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,n&&(s=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(t)>-1?(this.dirty=!0,s&&this.group.set("dirty",!0)):s&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0)),this},setOnGroup: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._removeCacheCanvas(),this.dirty=!1,this.drawObject(t),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},_removeCacheCanvas:function(){this._cacheCanvas=null,this.cacheWidth=0,this.cacheHeight=0},needsItsOwnCache:function(){return"stroke"===this.paintFirst&&"object"==typeof this.shadow},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();n=void 0!==(i=i||{}).hasBorders?i.hasBorders:this.hasBorders,s=void 0!==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*e.browserShadowBlurConstant*(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(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:n}},_renderPaintInOrder:function(t){"stroke"===this.paintFirst?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))},_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(t){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=e.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,t&&(this.scaleX*=t.scaleX,this.scaleY*=t.scaleY,this.cropX=t.cropX,this.cropY=t.cropY,i.x+=t.offsetLeft,i.y+=t.offsetTop,this.width=t.width,this.height=t.height),this.setPositionByOrigin(i,"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={left:this.left,top:this.top};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){void 0!==t[0]&&(i.fill=t[0]),void 0!==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=void 0!==i&&void 0!==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(){var t=fabric.util.degreesToRadians,e=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,ownMatrixCache:null,matrixCache:null,getCoords:function(t,e){this.oCoords||this.setCoords();var i=t?this.aCoords:this.oCoords;return function(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)]}(e?this.calcCoords(t):i)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r);return"Intersection"===fabric.Intersection.intersectPolygonRectangle(n,t,e).status},intersectsWithObject:function(t,e,i){return"Intersection"===fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i)).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]).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=0;for(var a in e)if(!((s=e[a]).o.y=t.y&&s.d.y>=t.y||(s.o.x===s.d.x&&s.o.x>=t.x?n=s.o.x:(i=0,r=(s.d.y-s.o.y)/(s.d.x-s.o.x),n=-(t.y-i*t.x-(s.o.y-r*s.o.x))/(i-r)),n>=t.x&&(o+=1),2!==o)))break;return o},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=e?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(!e)var _=new fabric.Point((p.x+m.x)/2,(p.y+m.y)/2),y=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(y.x+a*this.rotatingPointOffset,y.y-h*this.rotatingPointOffset);g={tl:p,tr:v,br:b,bl:m};return e||(g.ml=_,g.mt=y,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var e=t(this.angle),i=Math.cos(e),r=Math.sin(e);return 6.123233995736766e-17!==i&&-1.8369701987210297e-16!==i||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},transformMatrixKey:function(t){var e="";return!t&&this.group&&(e=this.group.transformMatrixKey(t)+"_"),e+this.top+"_"+this.left+"_"+this.scaleX+"_"+this.scaleY+"_"+this.skewX+"_"+this.skewY+"_"+this.angle+"_"+this.width+"_"+this.height+"_"+this.strokeWidth+this.flipX+this.flipY},calcTransformMatrix:function(t){if(t)return this.calcOwnMatrix();var i=this.transformMatrixKey(),r=this.matrixCache||(this.matrixCache={});if(r.key===i)return r.value;var n=this.calcOwnMatrix();return this.group&&(n=e(this.group.calcTransformMatrix(),n)),r.key=i,r.value=n,n},calcOwnMatrix:function(){var t=this.transformMatrixKey(!0),i=this.ownMatrixCache||(this.ownMatrixCache={});if(i.key===t)return i.value;var r,n=this.getCenterPoint(),s=[1,0,0,1,n.x,n.y],o=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0);return this.angle&&(r=this._calcRotateMatrix(),s=e(s,r)),s=e(s,o),i.key=t,i.value=s,s},_calcDimensionsTransformMatrix:function(i,r,n){var s,o=[this.scaleX*(n&&this.flipX?-1:1),0,0,this.scaleY*(n&&this.flipY?-1:1),0,0];return i&&(s=[1,0,Math.tan(t(i)),1],o=e(o,s,!0)),r&&(s=[1,Math.tan(t(r)),0,1],o=e(o,s,!0)),o},_getNonTransformedDimensions:function(){var t=this.strokeWidth;return{x:this.width+t,y:this.height+t}},_getTransformedDimensions:function(t,e){void 0===t&&(t=this.skewX),void 0===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},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){function t(t,e,r){var n={};r.forEach(function(e){n[e]=t[e]}),i(t[e],n,!0)}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){var r=n(t,!0);r.points=[t.x1,t.y1,t.x2,t.y2],i.Object._fromObject("Line",r,function(t){delete t.points,e&&e(t)},"points")})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=Math.PI,r=e.util.object.extend;e.Circle?e.warn("fabric.Circle is already defined."):(e.Circle=e.util.createClass(e.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*i,cacheProperties:e.Object.prototype.cacheProperties.concat("radius"),_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(),r=(this.endAngle-this.startAngle)%(2*i);if(0===r)e.push("\n");else{var n=Math.cos(this.startAngle)*this.radius,s=Math.sin(this.startAngle)*this.radius,o=Math.cos(this.endAngle)*this.radius,a=Math.sin(this.endAngle)*this.radius,h=r>i?"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._renderPaintInOrder(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)}}),e.Circle.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),e.Circle.fromElement=function(t,i,n){n||(n={});var s=e.parseAttributes(t,e.Circle.ATTRIBUTE_NAMES);if(!function(t){return"radius"in t&&t.radius>=0}(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=(s.left||0)-s.radius,s.top=(s.top||0)-s.radius,i(new e.Circle(r(s,n)))},e.Circle.fromObject=function(t,i){return e.Object._fromObject("Circle",t,i)})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Triangle?e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",width:100,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._renderPaintInOrder(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("")}}),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;e.Ellipse?e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),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();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._renderPaintInOrder(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;e.Rect?e.warn("fabric.Rect is already defined"):(e.Rect=e.util.createClass(e.Object,{stateProperties:e.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),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){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._renderPaintInOrder(t)}else t.fillRect(-.5,-.5,1,1)},_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;e.Polyline?e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,cacheProperties:e.Object.prototype.cacheProperties.concat("points"),initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e);var i=this._calcDimensions();void 0===e.left&&(this.left=i.left),void 0===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;return{left:e,top:i,width:(n(t,"x")||0)-e,height:(n(t,"y")||0)-i}},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){return n(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left})},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,t._set("canvas",this.canvas)},_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);if("canvas"===t)for(i=this._objects.length;i--;)this._objects[i]._set(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||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');var n=["\t\n'];if("fill"===this.paintFirst&&Array.prototype.push.apply(e,n),this.stroke||this.strokeDashArray){var s=this.fill;this.fill=null,e.push("\t\n'),this.fill=s}return"fill"!==this.paintFirst&&Array.prototype.push.apply(e,n),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():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*e,n=this.scaleY*e,s=this._filteredEl||this._originalElement;if(!t||r>i&&n>i)return this._element=s,this._filterScalingX=1,void(this._filterScalingY=1);fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend());var o=fabric.util.createCanvasElement(),a=this._filteredEl?this.cacheKey:this.cacheKey+"_filtered",h=s.width,c=s.height;o.width=h,o.height=c,this._element=o,t.scaleX=r,t.scaleY=n,fabric.filterBackend.applyFilters([t],s,h,c,this._element,a),this._filterScalingX=o.width/this._originalElement.width,this._filterScalingY=o.height/this._originalElement.height},applyFilters:function(t){if(t=t||this.filters||[],0===(t=t.filter(function(t){return t})).length)return this._element=this._originalElement,this._filteredEl=null,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=i,n.height=r,this._element=n,this._filteredEl=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._originalElement.width===this._element.width&&this._originalElement.height===this._element.height||(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(t){!1===this.isMoving&&this.resizeFilter&&this._needsResize()&&(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,this.applyResizeFilters()),this._stroke(t),this._renderPaintInOrder(t)},_renderFill:function(t){var e=this.width,i=this.height,r=e*this._filterScalingX,n=i*this._filterScalingY,s=-e/2,o=-i/2,a=this._element;a&&t.drawImage(a,this.cropX*this._filterScalingX,this.cropY*this._filterScalingY,r,n,s,o,e,i)},_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(){var t,e=fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,n=1,s=1,o=0,a=0,h=0,c=0,l=this.width,u=this.height,f={width:l,height:u};return!e||"none"===e.alignX&&"none"===e.alignY?(n=l/i,s=u/r):("meet"===e.meetOrSlice&&(t=(l-i*(n=s=fabric.util.findScaleToFit(this._element,f)))/2,"Min"===e.alignX&&(o=-t),"Max"===e.alignX&&(o=t),t=(u-r*s)/2,"Min"===e.alignY&&(a=-t),"Max"===e.alignY&&(a=t)),"slice"===e.meetOrSlice&&(t=i-l/(n=s=fabric.util.findScaleToCover(this._element,f)),"Mid"===e.alignX&&(h=t/2),"Max"===e.alignX&&(h=t),t=r-u/s,"Mid"===e.alignY&&(c=t/2),"Max"===e.alignY&&(c=t),i=l/n,r=u/s)),{width:i,height:r,scaleX:n,scaleY:s,offsetLeft:o,offsetTop:a,cropX:h,cropY:c}}}),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){r?e&&e(null,r):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){var e=function(){},i=(t=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()}}),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,e){var i="precision "+e+" float;\nvoid main(){}",r=t.createShader(t.FRAGMENT_SHADER);return t.shaderSource(r,i),t.compileShader(r),!!t.getShaderParameter(r,t.COMPILE_STATUS)}function e(t){t&&t.tileSize&&(this.tileSize=t.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}fabric.isWebglSupported=function(e){if(fabric.isLikelyNode)return!1;e=e||fabric.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),r=i.getContext("webgl")||i.getContext("experimental-webgl"),n=!1;if(r){fabric.maxTextureSize=r.getParameter(r.MAX_TEXTURE_SIZE),n=fabric.maxTextureSize>=e;for(var s=["highp","mediump","lowp"],o=0;o<3;o++)if(t(r,s[o])){fabric.webGlPrecision=s[o];break}}return this.isSupported=n,n},fabric.WebglFilterBackend=e,e.prototype={tileSize:2048,resources:{},setupGLContext:function(t,e){this.dispose(),this.createWebGLCanvas(t,e),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(t,e)},chooseFastestCopyGLTo2DMethod:function(t,e){var i,r=void 0!==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=fabric.util.createCanvasElement(),c=new ArrayBuffer(t*e*4),l={imageBuffer:c,destinationWidth:t,destinationHeight:e,targetCanvas:h};h.width=t,h.height=e,o=window.performance.now(),copyGLTo2DDrawImage.call(l,this.gl,l),a=window.performance.now()-o,o=window.performance.now(),copyGLTo2DPutImageData.call(l,this.gl,l),a>window.performance.now()-o?(this.imageBuffer=c,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,destinationWidth:i,destinationHeight: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,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:n},c=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,c),t.forEach(function(t){t&&t.applyTo(h)}),resizeCanvasIfNeeded(h),this.copyGLTo2D(a,h),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.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),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={sourceWidth:i,sourceHeight:r,imageData:s.getImageData(0,0,i,r),originalEl:e,originalImageData:s.getImageData(0,0,i,r),canvasEl:n,ctx:s,filterBackend:this};return t.forEach(function(t){t.applyTo(o)}),o.imageData.width===i&&o.imageData.height===r||(n.width=o.imageData.width,n.height=o.imageData.height),s.putImageData(o.imageData,0,0),o}}}(),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\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){e=e||this.fragmentSource,i=i||this.vertexSource,"highp"!==fabric.webGlPrecision&&(e=e.replace(/precision highp float/g,"precision "+fabric.webGlPrecision+" float"));var r=t.createShader(t.VERTEX_SHADER);if(t.shaderSource(r,i),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),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")}},getUniformLocations:function(){return{}},sendAttributeData:function(t,e,i){var r=e.aPostion,n=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,n),t.enableVertexAttribArray(r),t.vertexAttribPointer(r,2,t.FLOAT,!1,0,0),t.bufferData(t.ARRAY_BUFFER,i,t.STATIC_DRAW)},_setupFrameBuffer:function(t){var e,i,r=t.context;t.passes>1?(e=t.destinationWidth,i=t.destinationHeight,t.sourceWidth===e&&t.sourceHeight===i||(r.deleteTexture(t.targetTexture),t.targetTexture=t.filterBackend.createTexture(r,e,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.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.isNeutralState()||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.aPosition),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.destinationWidth,t.destinationHeight),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)},isNeutralState:function(){for(var t=i.ColorMatrix,e=20;e--;)if(this.matrix[e]!==t.prototype.matrix[e])return!1;return!0},applyTo2d:function(t){var e,i,r,n,s,o=t.imageData.data,a=o.length,h=this.matrix,c=this.colorsOnly;for(s=0;sy||o<0||o>_||(h=4*(a*_+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,C[s+3]=S?p[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.data,n=r.length,s=this.mode;for(e=0;ec[0]&&n>c[1]&&s>c[2]&&r1&&this.isNeutralState(t))return;t.passes++,this.width=t.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=t.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),t.destinationWidth=this.dW,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceWidth=t.destinationWidth,this.height=t.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),t.destinationHeight=this.dH,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceHeight=t.destinationHeight}else this.isNeutralState(t)||this.applyTo2d(t)},isNeutralState:function(t){var e=t.scaleX||this.scaleX,i=t.scaleY||this.scaleY;return 1===e&&1===i},lanczosCreate:function(t){return function(e){if(e>=t||e<=-t)return 0;if(e<1.1920929e-7&&e>-1.1920929e-7)return 1;var i=(e*=Math.PI)/t;return a(e)/e*a(i)/i}},applyTo2d:function(t){var e=t.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var n,s=e.width,a=e.height,h=o(s*i),c=o(a*r);"sliceHack"===this.resizeType?n=this.sliceByTwo(t,s,a,h,c):"hermite"===this.resizeType?n=this.hermiteFastResize(t,s,a,h,c):"bilinear"===this.resizeType?n=this.bilinearFiltering(t,s,a,h,c):"lanczos"===this.resizeType&&(n=this.lanczosResize(t,s,a,h,c)),t.imageData=n},sliceByTwo:function(t,i,n,s,o){var a,h,c=t.imageData,l=!1,u=!1,f=.5*i,d=.5*n,g=e.filterBackend.resources,p=0,v=0,m=i,b=0;for(g.sliceByTwo||(g.sliceByTwo=document.createElement("canvas")),((a=g.sliceByTwo).width<1.5*i||a.height=e)){P=r(1e3*s(w-C.x)),x[P]||(x[P]={});for(var F=S.y-y;F<=S.y+y;F++)F<0||F>=o||(M=r(1e3*s(F-C.y)),x[P][M]||(x[P][M]=g(n(i(P*m,2)+i(M*b,2))/1e3)),(T=x[P][M])>0&&(k+=T,D+=T*u[O=4*(F*e+w)],j+=T*u[O+1],E+=T*u[O+2],A+=T*u[O+3]))}d[O=4*(h*a+t)]=D/k,d[O+1]=j/k,d[O+2]=E/k,d[O+3]=A/k}return++t1&&M<-1||(_=2*M*M*M-3*M*M+1)>0&&(T+=_*d[(P=4*(A+k*e))+3],x+=_,d[P+3]<255&&(_=_*d[P+3]/250),C+=_*d[P],S+=_*d[P+1],w+=_*d[P+2],y+=_)}p[b]=C/y,p[b+1]=S/y,p[b+2]=w/y,p[b+3]=T/x}return g},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=t.imageData.data,r=i.length,n=Math.floor(255*this.contrast),s=259*(n+255)/(255*(259-n));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.data,r=this.gamma,n=i.length,s=1/r[0],o=1/r[1],a=1/r[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),e=0,n=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){"stroke"===this.paintFirst?(this._renderTextStroke(t),this._renderTextFill(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;dn)){var d=a-n;h[t]=a,h[c]+=d,n=a}return{width:n*u,kernedWidth:a*u}},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=new Array(o.length);for(this.__charBounds[t]=a,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?"200px":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&&(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})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(t){this.clearContextTop(),this.callSuper("render",t),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(t){this.callSuper("_render",t)},clearContextTop:function(t){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this.canvas.contextTop,i=this.canvas.viewportTransform;e.save(),e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(e),this.transformMatrix&&e.transform.apply(e,this.transformMatrix),this._clearTextArea(e),t||e.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas){var t,e=this._getCursorBoundaries();this.canvas&&this.canvas.contextTop?(t=this.canvas.contextTop,this.clearContextTop(!0)):(t=this.canvas.contextContainer).save(),this.selectionStart===this.selectionEnd?this.renderCursor(e,t):this.renderSelection(e,t),t.restore()}},_clearTextArea:function(t){var e=this.width+4,i=this.height+4;t.clearRect(-e/2,-i/2,e,i)},_getCursorBoundaries:function(t){void 0===t&&(t=this.selectionStart);var e=this._getLeftOffset(),i=this._getTopOffset(),r=this._getCursorBoundariesOffsets(t);return{left:e,top:i,leftOffset:r.left,topOffset:r.top}},_getCursorBoundariesOffsets:function(t){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;for(var e,i,r=0,n=0,s=this.get2DCursorLocation(t),o=0;o0?n: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=-1!==this.textAlign.indexOf("justify"),s=this.get2DCursorLocation(i),o=this.get2DCursorLocation(r),a=s.lineIndex,h=o.lineIndex,c=s.charIndex<0?0:s.charIndex,l=o.charIndex<0?0:o.charIndex,u=a;u<=h;u++){var f=this._getLineLeftOffset(u)||0,d=this.getHeightOfLine(u),g=0,p=0,v=0;u===a&&(p=this.__charBounds[a][c].left),u>=a&&u1)&&(d/=this.lineHeight),this.inCompositionMode?(e.fillStyle=this.compositionColor||"black",e.fillRect(t.left+f+p,t.top+t.topOffset+d,v-p,1)):(e.fillStyle=this.selectionColor,e.fillRect(t.left+f+p,t.top+t.topOffset,v-p,d)),t.topOffset+=g}},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,e=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,t&&e&&e.clearContext(e.contextTop||e.contextContainer)},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);return{selectionStart:n,selectionEnd:n+fabric.util.string.graphemeSplit(s).length}},fromGraphemeToStringSelection:function(t,e,i){var r=i.slice(0,t).join("").length;if(t===e)return{selectionStart:r,selectionEnd:r};return{selectionStart:r,selectionEnd:r+i.slice(t,e).join("").length}},_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,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());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)).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.hoverCursor,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._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),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(o=1;o0?this.insertCharStyleObject(r.lineIndex+o,0,n[o],i):i&&(this.styles[r.lineIndex+o][0]=i[0]),i=i&&i.slice(n[o]+1);n[o]>0&&this.insertCharStyleObject(r.lineIndex+o,0,n[o],i)},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=this.getLocalPointer(t),r=0,n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;h0&&(o+=this._textLines[h-1].length+1);n=this._getLineLeftOffset(a)*this.scaleX;for(var l=0,u=(e=this._textLines[a]).length;ls||o<0?0:1);return this.flipX&&(a=n-a),a>this._text.length&&(a=this._text.length),a}}),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){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1: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;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var h=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),c=this.selectionStart>h.selectionStart;this.selectionStart!==this.selectionEnd?(i=this._text.slice(this.selectionStart,this.selectionEnd),a+=this.selectionEnd-this.selectionStart):o0&&(r+=(i=this.__charBounds[t][e-1]).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);return this._textLines[n].slice(s).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=0,a=0,h=n.length;ae){r=!0;var c=s-i,l=s,u=Math.abs(c-e);o=Math.abs(l-e)=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=this["get"+t+"CursorOffset"](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(i):this.moveCursorWithoutShift(i),0!==i&&(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,e.shiftKey?i+="Shift":i+="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,e){void 0===e&&(e=t+1),this.removeStyleFromTo(t,e),this._text.splice(t,e-t),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(t,e,i,r){void 0===r&&(r=i),r>i&&this.removeStyleFromTo(i,r);var n=fabric.util.string.graphemeSplit(t);this.insertNewStyleBlock(n,i,e),this._text=[].concat(this._text.slice(0,i),n,this._text.slice(r)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),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=this.getSvgFilter(),r=""===i?"":' style="'+i+'"',n=this.getSvgTextDecoration(this);t.push("\t\n",e.textBgRects.join(""),'\t\t",e.textSpans.join(""),"\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),""].join("")},_setSVGTextLineText:function(t,e,i,r){var n,s,o,a,h,c=this.getHeightOfLine(e),l=-1!==this.textAlign.indexOf("justify"),u="",f=0,d=this._textLines[e];r+=c*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,p=d.length-1;g<=p;g++)h=g===p||this.charSpacing,u+=d[g],o=this.__charBounds[e][g],0===f?(i+=o.kernedWidth-o.width,f+=o.width):f+=o.kernedWidth,l&&!h&&this._reSpaceAndTab.test(d[g])&&(h=!0),h||(n=n||this.getCompleteStyleDeclaration(e,g),s=this.getCompleteStyleDeclaration(e,g+1),h=this._hasStyleChangedForSvg(n,s)),h&&(a=this._getStyleDeclaration(e,g)||{},t.push(this._createTextCharSpan(u,a,i,r)),u="",n=s,i+=f,f=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),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_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&&!d&&(s.push(o),o=[],n=l,d=!0),d||o.push(" "),o=o.concat(h),u=this._measureWord([" "],i,c),c++,d=!1,l>f&&(f=l);return p&&s.push(o),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),s},isEndOfWrapping:function(t){return!this._styleMap[t+1]||this._styleMap[t+1].line!==this._styleMap[t].line},_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]}})}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index b28af96eab017b10bb953a6fa8a636f70fd114f7..23e47d7678ce4e8900b25de81e7d039f14686985 100644 GIT binary patch delta 76885 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

avZZ(T|WOwqb?>*`CXoU|{ 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 delta 76819 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 =m&1;U0C}Z!Oip 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 3bca0131..f696f1b6 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,5 +1,5 @@ var fabric = fabric || { - version: "2.0.0-rc.3" + version: "2.0.0-rc.4" }; if (typeof exports !== "undefined") { @@ -16,6 +16,7 @@ if (typeof document !== "undefined" && typeof window !== "undefined") { } }); fabric.jsdomImplForWrapper = require("jsdom/lib/jsdom/living/generated/utils").implForWrapper; + fabric.nodeCanvas = require("jsdom/lib/jsdom/utils").Canvas; fabric.window = fabric.document.defaultView; DOMParser = require("xmldom").DOMParser; } @@ -1269,7 +1270,7 @@ fabric.CommonMethods = { left += element.scrollLeft || 0; top += element.scrollTop || 0; } - if (element.nodeType === 1 && fabric.util.getElementStyle(element, "position") === "fixed") { + if (element.nodeType === 1 && element.style.position === "fixed") { break; } } @@ -1367,6 +1368,10 @@ fabric.CommonMethods = { } fabric.util.getScript = getScript; })(); + function getNodeCanvas(element) { + var impl = fabric.jsdomImplForWrapper(element); + return impl._canvas || impl._image; + } fabric.util.getById = getById; fabric.util.toArray = toArray; fabric.util.makeElement = makeElement; @@ -1375,6 +1380,7 @@ fabric.CommonMethods = { fabric.util.getScrollLeftTop = getScrollLeftTop; fabric.util.getElementOffset = getElementOffset; fabric.util.getElementStyle = getElementStyle; + fabric.util.getNodeCanvas = getNodeCanvas; })(); (function() { @@ -3551,6 +3557,9 @@ fabric.ElementsParser.prototype.checkIfDone = function() { this._setCssDimension(prop, cssValue); } } + if (this._isCurrentlyDrawing) { + this.freeDrawingBrush && this.freeDrawingBrush._setBrushStyles(); + } this._initRetinaScaling(); this._setImageSmoothing(); this.calcOffset(); @@ -3788,6 +3797,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { }, _centerObject: function(object, center) { object.setPositionByOrigin(center, "center", "center"); + object.setCoords(); this.renderOnAddRemove && this.requestRenderAll(); return this; }, @@ -4079,7 +4089,10 @@ fabric.ElementsParser.prototype.checkIfDone = function() { return this.renderOnAddRemove && this.requestRenderAll(); }, dispose: function() { - this._objects.length = 0; + this.forEachObject(function(object) { + object.dispose && object.dispose(); + }); + this._objects = []; this.backgroundImage = null; this.overlayImage = null; this._iTextInstances = null; @@ -4130,11 +4143,11 @@ fabric.ElementsParser.prototype.checkIfDone = function() { fabric.StaticCanvas.prototype.toJSON = fabric.StaticCanvas.prototype.toObject; if (fabric.isLikelyNode) { fabric.StaticCanvas.prototype.createPNGStream = function() { - var impl = fabric.jsdomImplForWrapper(this.lowerCanvasEl); + var impl = fabric.util.getNodeCanvas(this.lowerCanvasEl); return impl && impl.createPNGStream(); }; fabric.StaticCanvas.prototype.createJPEGStream = function(opts) { - var impl = fabric.jsdomImplForWrapper(this.lowerCanvasEl); + var impl = fabric.util.getNodeCanvas(this.lowerCanvasEl); return impl && impl.createJPEGStream(opts); }; } @@ -4539,6 +4552,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { selectionDashArray: [], selectionBorderColor: "rgba(255, 255, 255, 0.3)", selectionLineWidth: 1, + selectionFullyContained: false, hoverCursor: "move", moveCursor: "move", defaultCursor: "default", @@ -4593,6 +4607,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this.clearContext(this.contextTop); this.contextTopDirty = false; } + if (this.isDrawingMode && this._isCurrentlyDrawing) { + this.freeDrawingBrush && this.freeDrawingBrush._render(); + } var canvasToDrawOn = this.contextContainer; this.renderCanvas(canvasToDrawOn, this._chooseObjectsToRender()); return this; @@ -5477,8 +5494,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { return false; }, _onDoubleClick: function(e) { - var target; - this._handleEvent(e, "dblclick", target); + this._handleEvent(e, "dblclick"); }, _onMouseDown: function(e) { this.__onMouseDown(e); @@ -5635,16 +5651,16 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this._handleEvent(e, "up"); }, __onMouseDown: function(e) { - var target = this.findTarget(e); + var target = this.findTarget(e) || null; if (checkClick(e, RIGHT_CLICK)) { if (this.fireRightClick) { - this._handleEvent(e, "down", target ? target : null, RIGHT_CLICK); + this._handleEvent(e, "down", target, RIGHT_CLICK); } return; } if (checkClick(e, MIDDLE_CLICK)) { if (this.fireMiddleClick) { - this._handleEvent(e, "down", target ? target : null, MIDDLE_CLICK); + this._handleEvent(e, "down", target, MIDDLE_CLICK); } return; } @@ -5681,7 +5697,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this._setupCurrentTransform(e, target); } } - this._handleEvent(e, "down", target ? target : null); + this._handleEvent(e, "down", target); shouldRender && this.requestRenderAll(); }, _beforeTransform: function(e, target) { @@ -5726,7 +5742,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { groupSelector.top = pointer.y - groupSelector.ey; this.renderTop(); } else if (!this._currentTransform) { - target = this.findTarget(e); + target = this.findTarget(e) || null; this._setCursorFromEvent(e, target); this._fireOverOutEvents(target, e); } else { @@ -5944,13 +5960,13 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { } }, _collectObjects: function() { - var group = [], currentObject, x1 = this._groupSelector.ex, y1 = this._groupSelector.ey, x2 = x1 + this._groupSelector.left, y2 = y1 + this._groupSelector.top, selectionX1Y1 = new fabric.Point(min(x1, x2), min(y1, y2)), selectionX2Y2 = new fabric.Point(max(x1, x2), max(y1, y2)), isClick = x1 === x2 && y1 === y2; + var group = [], currentObject, x1 = this._groupSelector.ex, y1 = this._groupSelector.ey, x2 = x1 + this._groupSelector.left, y2 = y1 + this._groupSelector.top, selectionX1Y1 = new fabric.Point(min(x1, x2), min(y1, y2)), selectionX2Y2 = new fabric.Point(max(x1, x2), max(y1, y2)), allowIntersect = !this.selectionFullyContained, isClick = x1 === x2 && y1 === y2; for (var i = this._objects.length; i--; ) { currentObject = this._objects[i]; if (!currentObject || !currentObject.selectable || !currentObject.visible) { continue; } - if (currentObject.intersectsWithRect(selectionX1Y1, selectionX2Y2) || currentObject.isContainedWithinRect(selectionX1Y1, selectionX2Y2) || currentObject.containsPoint(selectionX1Y1) || currentObject.containsPoint(selectionX2Y2)) { + if (allowIntersect && currentObject.intersectsWithRect(selectionX1Y1, selectionX2Y2) || currentObject.isContainedWithinRect(selectionX1Y1, selectionX2Y2) || allowIntersect && currentObject.containsPoint(selectionX1Y1) || allowIntersect && currentObject.containsPoint(selectionX2Y2)) { group.push(currentObject); if (isClick) { break; @@ -7174,7 +7190,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { if (!skipGroup && this.group) { prefix = this.group.transformMatrixKey(skipGroup) + sep; } - return prefix + this.top + sep + this.left + sep + this.scaleX + sep + this.scaleY + sep + this.skewX + sep + this.skewY + sep + this.angle + sep + this.flipX + sep + this.flipY + sep + this.width + sep + this.height; + return prefix + this.top + sep + this.left + sep + this.scaleX + sep + this.scaleY + sep + this.skewX + sep + this.skewY + sep + this.angle + sep + this.width + sep + this.height + sep + this.strokeWidth + this.flipX + this.flipY; }, calcTransformMatrix: function(skipGroup) { if (skipGroup) { @@ -7526,7 +7542,6 @@ fabric.util.object.extend(fabric.Object.prototype, { ctx.beginPath(); ctx.moveTo(0, rotateHeight); ctx.lineTo(0, rotateHeight - rotatingPointOffset); - ctx.closePath(); ctx.stroke(); } ctx.restore(); @@ -7919,10 +7934,6 @@ fabric.util.object.extend(fabric.Object.prototype, { startAngle: 0, endAngle: pi * 2, cacheProperties: fabric.Object.prototype.cacheProperties.concat("radius"), - initialize: function(options) { - this.callSuper("initialize", options); - this.set("radius", options && options.radius || 0); - }, _set: function(key, value) { this.callSuper("_set", key, value); if (key === "radius") { @@ -7987,10 +7998,8 @@ fabric.util.object.extend(fabric.Object.prototype, { } fabric.Triangle = fabric.util.createClass(fabric.Object, { type: "triangle", - initialize: function(options) { - this.callSuper("initialize", options); - this.set("width", options && options.width || 100).set("height", options && options.height || 100); - }, + width: 100, + height: 100, _render: function(ctx) { var widthBy2 = this.width / 2, heightBy2 = this.height / 2; ctx.beginPath(); @@ -9251,9 +9260,9 @@ fabric.util.object.extend(fabric.Object.prototype, { initialize: function(element, options) { options || (options = {}); this.filters = []; + this.cacheKey = "texture" + fabric.Object.__uid++; this.callSuper("initialize", options); this._initElement(element, options); - this.cacheKey = "texture" + fabric.Object.__uid++; }, getElement: function() { return this._element; @@ -9275,6 +9284,16 @@ fabric.util.object.extend(fabric.Object.prototype, { } return this; }, + dispose: function() { + var backend = fabric.filterBackend; + if (backend && backend.evictCachesForKey) { + backend.evictCachesForKey(this.cacheKey); + backend.evictCachesForKey(this.cacheKey + "_filtered"); + } + this._originalElement = undefined; + this._element = undefined; + this._filteredEl = undefined; + }, setCrossOrigin: function(value) { this.crossOrigin = value; this._element.crossOrigin = value; @@ -11627,9 +11646,14 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { ctx.restore(); }, _renderChars: function(method, ctx, line, left, top, lineIndex) { - var lineHeight = this.getHeightOfLine(lineIndex), isJustify = this.textAlign.indexOf("justify") !== -1, actualStyle, nextStyle, charsToRender = "", charBox, boxWidth = 0, timeToRender; + var lineHeight = this.getHeightOfLine(lineIndex), isJustify = this.textAlign.indexOf("justify") !== -1, actualStyle, nextStyle, charsToRender = "", charBox, boxWidth = 0, timeToRender, shortCut = !isJustify && this.isEmptyStyles(lineIndex); ctx.save(); top -= lineHeight * this._fontSizeFraction / this.lineHeight; + if (shortCut) { + this._renderChar(method, ctx, lineIndex, 0, this.textLines[lineIndex], left, top, lineHeight); + ctx.restore(); + return; + } for (var i = 0, len = line.length - 1; i <= len; i++) { timeToRender = i === len || this.charSpacing; charsToRender += line[i]; @@ -12717,12 +12741,12 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { var cursorStart = this.get2DCursorLocation(start, true), cursorEnd = this.get2DCursorLocation(end, true), lineStart = cursorStart.lineIndex, charStart = cursorStart.charIndex, lineEnd = cursorEnd.lineIndex, charEnd = cursorEnd.charIndex, i, styleObj; if (lineStart !== lineEnd) { if (this.styles[lineStart]) { - for (i = charStart; i < this._textLines[lineStart].length; i++) { + for (i = charStart; i < this._unwrappedTextLines[lineStart].length; i++) { delete this.styles[lineStart][i]; } } if (this.styles[lineEnd]) { - for (i = charEnd; i < this._textLines[lineEnd].length; i++) { + for (i = charEnd; i < this._unwrappedTextLines[lineEnd].length; i++) { styleObj = this.styles[lineEnd][i]; if (styleObj) { this.styles[lineStart] || (this.styles[lineStart] = {}); @@ -12856,7 +12880,11 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { } 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); + if (addedLines[i] > 0) { + this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle); + } else if (copiedStyle) { + this.styles[cursorLoc.lineIndex + i][0] = copiedStyle[0]; + } copiedStyle = copiedStyle && copiedStyle.slice(addedLines[i] + 1); } if (addedLines[i] > 0) { @@ -13386,11 +13414,29 @@ fabric.util.object.extend(fabric.IText.prototype, { this._text.splice(start, end - start); this.text = this._text.join(""); this.set("dirty", true); - this._removeExtraneousStyles(); if (this._shouldClearDimensionCache()) { this.initDimensions(); this.setCoords(); } + this._removeExtraneousStyles(); + }, + insertChars: function(text, style, start, end) { + if (typeof end === "undefined") { + end = start; + } + if (end > start) { + this.removeStyleFromTo(start, end); + } + var graphemes = fabric.util.string.graphemeSplit(text); + this.insertNewStyleBlock(graphemes, start, style); + this._text = [].concat(this._text.slice(0, start), graphemes, this._text.slice(end)); + this.text = this._text.join(""); + this.set("dirty", true); + if (this._shouldClearDimensionCache()) { + this.initDimensions(); + this.setCoords(); + } + this._removeExtraneousStyles(); } }); @@ -13411,7 +13457,7 @@ fabric.util.object.extend(fabric.IText.prototype, { }, _wrapSVGTextAndBg: function(markup, textAndBg) { var noShadow = true, filter = this.getSvgFilter(), style = filter === "" ? "" : ' style="' + filter + '"', textDecoration = this.getSvgTextDecoration(this); - markup.push("\t\n", textAndBg.textBgRects.join(""), '\t\t\n", textAndBg.textSpans.join(""), "\t\t\n", "\t\n"); + markup.push("\t\n", textAndBg.textBgRects.join(""), '\t\t", textAndBg.textSpans.join(""), "\n", "\t\n"); }, _getSVGTextAndBg: function(textTopOffset, textLeftOffset) { var textSpans = [], textBgRects = [], height = textTopOffset, lineOffset; @@ -13431,7 +13477,7 @@ fabric.util.object.extend(fabric.IText.prototype, { }, _createTextCharSpan: function(_char, styleDecl, left, top) { var styleProps = this.getSvgSpanStyles(styleDecl, _char !== _char.trim()), fillStyles = styleProps ? 'style="' + styleProps + '"' : ""; - return [ '\t\t\t", fabric.util.string.escapeXml(_char), "\n" ].join(""); + return [ '", fabric.util.string.escapeXml(_char), "" ].join(""); }, _setSVGTextLineText: function(textSpans, lineIndex, textLeftOffset, textTopOffset) { var lineHeight = this.getHeightOfLine(lineIndex), isJustify = this.textAlign.indexOf("justify") !== -1, actualStyle, nextStyle, charsToRender = "", charBox, style, boxWidth = 0, line = this._textLines[lineIndex], timeToRender; diff --git a/package.json b/package.json index 531ca60b..2c0f4429 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-rc.3", + "version": "2.0.0-rc.4", "author": "Juriy Zaytsev ", "contributors": [ { @@ -47,7 +47,7 @@ "test": "node test.js", "lint": "eslint --config .eslintrc.json src", "lint_tests": "eslint test/unit --config .eslintrc_tests", - "export_dist_to_site": "cp dist/fabric.js ../fabricjs.com/lib/fabric.js && cp package.json ../fabricjs.com/lib/fabricinfo.json && cp -r src HEADER.js lib ../fabricjs.com/build/files/", + "export_dist_to_site": "cp dist/fabric.js ../fabricjs.com/lib/fabric.js && cp package.json ../fabricjs.com/lib/package.json && cp -r src HEADER.js lib ../fabricjs.com/build/files/", "export_tests_to_site": "cp test/unit/*.js ../fabricjs.com/test/unit", "all": "npm run build && npm run test && npm run lint && npm run lint_tests && npm run export_dist_to_site && npm run export_tests_to_site" },