From c743ba558706266bde180313e26bea4e53c13d68 Mon Sep 17 00:00:00 2001 From: Asturur Date: Wed, 7 Jun 2017 14:35:17 +0200 Subject: [PATCH] v1712 --- CHANGELOG.md | 13 +++ HEADER.js | 2 +- ISSUE_TEMPLATE.md | 2 +- README.md | 3 +- dist/fabric.js | 219 ++++++++++++++++++++++++++++--------------------- dist/fabric.min.js | 16 ++-- dist/fabric.min.js.gz | Bin 70364 -> 70484 bytes dist/fabric.require.js | 175 +++++++++++++++++++++------------------ package.json | 2 +- 9 files changed, 245 insertions(+), 187 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4edb01afa..bfacf9781 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +**Version 1.7.12** + +- Fix: removed possible memleaks from window resize event. [#3984](https://github.com/kangax/fabric.js/pull/3984) +- Fix: restored default cursor to noTarget only. unselectable objects get the standard hovercursor. [#3953](https://github.com/kangax/fabric.js/pull/3953) +- Cache fixes: fix uncached pathGroup, removed cache creation at initialize time [#3982](https://github.com/kangax/fabric.js/pull/3982) +- Improvement: nextTarget to mouseOut and prevTarget to mouseOver [#3900](https://github.com/kangax/fabric.js/pull/3900) +- Improvement: add isClick boolean to left mouse up [#3898](https://github.com/kangax/fabric.js/pull/3898) +- Fix: can start selection on top of non selectable object [#3892](https://github.com/kangax/fabric.js/pull/3892) +- Improvement: better management of right/middle click [#3888](https://github.com/kangax/fabric.js/pull/3888) +- Fix: subTargetCheck on activeObject/activeGroup was firing too many events [#3909](https://github.com/kangax/fabric.js/pull/3909) +- Fix: After addWithUpdate or removeWithUpdate object coords must be updated. [#3911](https://github.com/kangax/fabric.js/pull/3911) + + **Version 1.7.11** - Hotfix: restore path-groups ability to render [#3877](https://github.com/kangax/fabric.js/pull/3877) diff --git a/HEADER.js b/HEADER.js index 0fc093312..92535526f 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.7.11" }; +var fabric = fabric || { version: "1.7.12" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index cb7002c1c..d9b9eaf5d 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -25,7 +25,7 @@ Remove the template from below and provide thoughtful commentary *and code sampl ## Version -1.7.10 +1.7.12 ## Test Case http://jsfiddle.net/fabricjs/Da7SP/ diff --git a/README.md b/README.md index b9943fad6..b7794455f 100644 --- a/README.md +++ b/README.md @@ -255,7 +255,7 @@ For example: ### Staying in touch -Follow [@fabric.js](http://twitter.com/fabricjs) or [@kangax](http://twitter.com/kangax) on twitter. +Follow [@fabric.js](http://twitter.com/fabricjs) or [@kangax](http://twitter.com/kangax) or [@AndreaBogazzi](http://twitter.com/AndreaBogazzi) on twitter. Questions, suggestions — [fabric.js on Google Groups](http://groups.google.com/group/fabricjs). @@ -273,6 +273,7 @@ Get help in Fabric's IRC channel — irc://irc.freenode.net/#fabric.js - [Maxim "hakunin" Chernyak](http://twitter.com/hakunin) for ideas, and help with various parts of the library throughout its life - [Sergey Nisnevich](http://nisnya.com) for help with geometry logic - [Stefan Kienzle](https://twitter.com/kienzle_s) for help with bugs, features, documentation, github issues +- [Andrea Bogazzi](https://twitter.com/AndreaBogazzi) for help with bugs, features, documentation, github issues, and much more. - [And all the other GitHub contributors](https://github.com/kangax/fabric.js/graphs/contributors) ### MIT License diff --git a/dist/fabric.js b/dist/fabric.js index b6d2cee48..21b9de07f 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=json,gestures minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.7.11" }; +var fabric = fabric || { version: "1.7.12" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -9663,6 +9663,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab // first check current group (if one exists) // active group does not check sub targets like normal groups. // if active group just exits. + this.targets = []; if (activeGroup && !skipGroup && activeGroup === this._searchPossibleTargets([activeGroup], pointer)) { this._fireOverOutEvents(activeGroup, e); return activeGroup; @@ -9682,7 +9683,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab } } - this.targets = []; var target = this._searchPossibleTargets(this._objects, pointer); if (e[this.altSelectionKey] && target && activeTarget && target !== activeTarget) { target = activeTarget; @@ -9695,21 +9695,25 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @private */ _fireOverOutEvents: function(target, e) { + var overOpt, outOpt, hoveredTarget = this._hoveredTarget; + if (hoveredTarget !== target) { + overOpt = { e: e, target: target, previousTarget: this._hoveredTarget }; + outOpt = { e: e, target: this._hoveredTarget, nextTarget: target }; + this._hoveredTarget = target; + } if (target) { - if (this._hoveredTarget !== target) { - if (this._hoveredTarget) { - this.fire('mouse:out', { target: this._hoveredTarget, e: e }); - this._hoveredTarget.fire('mouseout', { e: e }); + if (hoveredTarget !== target) { + if (hoveredTarget) { + this.fire('mouse:out', outOpt); + hoveredTarget.fire('mouseout', outOpt); } - this.fire('mouse:over', { target: target, e: e }); - target.fire('mouseover', { e: e }); - this._hoveredTarget = target; + this.fire('mouse:over', overOpt); + target.fire('mouseover', overOpt); } } - else if (this._hoveredTarget) { - this.fire('mouse:out', { target: this._hoveredTarget, e: e }); - this._hoveredTarget.fire('mouseout', { e: e }); - this._hoveredTarget = null; + else if (hoveredTarget) { + this.fire('mouse:out', outOpt); + hoveredTarget.fire('mouseout', outOpt); } }, @@ -9835,7 +9839,12 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab _createUpperCanvas: function () { var lowerCanvasClass = this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/, ''); - this.upperCanvasEl = this._createCanvasElement(); + if (this.upperCanvasEl) { + this.upperCanvasEl.className = ''; + } + else { + this.upperCanvasEl = this._createCanvasElement(); + } fabric.util.addClass(this.upperCanvasEl, 'upper-canvas ' + lowerCanvasClass); this.wrapperEl.appendChild(this.upperCanvasEl); @@ -9946,9 +9955,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab currentActiveObject.fire('deselected', { e: e }); } this._setActiveObject(object); - this.renderAll(); this.fire('object:selected', { target: object, e: e }); object.fire('selected', { e: e }); + this.renderAll(); return this; }, @@ -10107,9 +10116,16 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @chainable */ deactivateAllWithDispatch: function (e) { + var allObjects = this.getObjects(), + i = 0, + len = allObjects.length, + obj; + for ( ; i < len; i++) { + obj = allObjects[i]; + obj && obj.set('active', false); + } this.discardActiveGroup(e); this.discardActiveObject(e); - this.deactivateAll(); return this; }, @@ -10270,7 +10286,12 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab tl: 7 // nw }, addListener = fabric.util.addListener, - removeListener = fabric.util.removeListener; + removeListener = fabric.util.removeListener, + RIGHT_CLICK = 3, MIDDLE_CLICK = 2, LEFT_CLICK = 1; + + function checkClick(e, value) { + return 'which' in e ? e.which === value : e.button === value - 1; + } fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ { @@ -10294,7 +10315,10 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @private */ _initEventListeners: function () { - + // in case we initialized the class twice. This should not happen normally + // but in some kind of applications where the canvas element may be changed + // this is a workaround to having double listeners. + this.removeListeners(); this._bindEvents(); addListener(fabric.window, 'resize', this._onResize); @@ -10324,6 +10348,10 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @private */ _bindEvents: function() { + if (this.eventsBinded) { + // for any reason we pass here twice we do not want to bind events twice. + return; + } this._onMouseDown = this._onMouseDown.bind(this); this._onMouseMove = this._onMouseMove.bind(this); this._onMouseUp = this._onMouseUp.bind(this); @@ -10337,6 +10365,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this._onMouseOut = this._onMouseOut.bind(this); this._onMouseEnter = this._onMouseEnter.bind(this); this._onContextMenu = this._onContextMenu.bind(this); + this.eventsBinded = true; }, /** @@ -10562,15 +10591,33 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @param {Event} e Event object fired on mouseup */ __onMouseUp: function (e) { - var target, searchTarget = true, transform = this._currentTransform, - groupSelector = this._groupSelector, - isClick = (!groupSelector || (groupSelector.left === 0 && groupSelector.top === 0)); + + var target; + // if right/middle click just fire events and return + // target undefined will make the _handleEvent search the target + if (checkClick(e, RIGHT_CLICK)) { + if (this.fireRightClick) { + this._handleEvent(e, 'up', target, RIGHT_CLICK); + } + return; + } + + if (checkClick(e, MIDDLE_CLICK)) { + if (this.fireMiddleClick) { + this._handleEvent(e, 'up', target, MIDDLE_CLICK); + } + return; + } if (this.isDrawingMode && this._isCurrentlyDrawing) { this._onMouseUpInDrawingMode(e); return; } + var searchTarget = true, transform = this._currentTransform, + groupSelector = this._groupSelector, + isClick = (!groupSelector || (groupSelector.left === 0 && groupSelector.top === 0)); + if (transform) { this._finalizeCurrentTransform(); searchTarget = !transform.actionPerformed; @@ -10593,33 +10640,31 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab if (target) { target.isMoving = false; } - - this._handleCursorAndEvent(e, target, 'up'); + this._setCursorFromEvent(e, target); + this._handleEvent(e, 'up', target ? target : null, LEFT_CLICK, isClick); target && (target.__corner = 0); shouldRender && this.renderAll(); }, /** - * set cursor for mouse up and handle mouseUp event - * @param {Event} e event from mouse - * @param {fabric.Object} target receiving event - * @param {String} eventType event to fire (up, down or move) - */ - _handleCursorAndEvent: function(e, target, eventType) { - this._setCursorFromEvent(e, target); - this._handleEvent(e, eventType, target ? target : null); - }, - - /** + * @private * Handle event firing for target and subtargets * @param {Event} e event from mouse * @param {String} eventType event to fire (up, down or move) * @param {fabric.Object} targetObj receiving event + * @param {Number} [button] button used in the event 1 = left, 2 = middle, 3 = right + * @param {Boolean} isClick for left button only, indicates that the mouse up happened without move. */ - _handleEvent: function(e, eventType, targetObj) { + _handleEvent: function(e, eventType, targetObj, button, isClick) { var target = typeof targetObj === 'undefined' ? this.findTarget(e) : targetObj, targets = this.targets || [], - options = { e: e, target: target, subTargets: targets }; + options = { + e: e, + target: target, + subTargets: targets, + button: button || LEFT_CLICK, + isClick: isClick || false + }; this.fire('mouse:' + eventType, options); target && target.fire('mouse' + eventType, options); for (var i = 0; i < targets.length; i++) { @@ -10725,18 +10770,16 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab var target = this.findTarget(e); // if right click just fire events - var isRightClick = 'which' in e ? e.which === 3 : e.button === 2; - if (isRightClick) { + if (checkClick(e, RIGHT_CLICK)) { if (this.fireRightClick) { - this._handleEvent(e, 'down', target ? target : null); + this._handleEvent(e, 'down', target ? target : null, RIGHT_CLICK); } return; } - var isMiddleClick = 'which' in e ? e.which === 2 : e.button === 1; - if (isMiddleClick) { + if (checkClick(e, MIDDLE_CLICK)) { if (this.fireMiddleClick) { - this._handleEvent(e, 'down', target ? target : null); + this._handleEvent(e, 'down', target ? target : null, MIDDLE_CLICK); } return; } @@ -10759,13 +10802,22 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab shouldGroup = this._shouldGroup(e, target); if (this._shouldClearSelection(e, target)) { - this._clearSelection(e, target, pointer); + this.deactivateAllWithDispatch(e); } else if (shouldGroup) { this._handleGrouping(e, target); target = this.getActiveGroup(); } + if (this.selection && (!target || (!target.selectable && !target.isEditing))) { + this._groupSelector = { + ex: pointer.x, + ey: pointer.y, + top: 0, + left: 0 + }; + } + if (target) { if (target.selectable && (target.__corner || !shouldGroup)) { this._beforeTransform(e, target); @@ -10800,25 +10852,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab /** * @private - */ - _clearSelection: function(e, target, pointer) { - this.deactivateAllWithDispatch(e); - - if (target && target.selectable) { - this.setActiveObject(target, e); - } - else if (this.selection) { - this._groupSelector = { - ex: pointer.x, - ey: pointer.y, - top: 0, - left: 0 - }; - } - }, - - /** - * @private * @param {Object} target Object for that origin is set to center */ _setOriginToCenter: function(target) { @@ -11021,7 +11054,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @param {Object} target Object that the mouse is hovering, if so. */ _setCursorFromEvent: function (e, target) { - if (!target || !target.selectable) { + if (!target) { this.setCursor(this.defaultCursor); return false; } @@ -12435,16 +12468,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati dirty: true, /** - * When set to `true`, force the object to have its own cache, even if it is inside a group - * it may be needed when your object behave in a particular way on the cache and always needs - * its own isolated canvas to render correctly. - * since 1.7.5 - * @type Boolean - * @default false - */ - needsItsOwnCache: false, - - /** * List of properties to consider when checking if state * of an object is changed (fabric.Object#hasStateChanged) * as well as for history (undo/redo) purposes @@ -12475,9 +12498,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati if (options) { this.setOptions(options); } - if (this.objectCaching) { - this._createCacheCanvas(); - } }, /** @@ -12792,7 +12812,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati ctx.transform.apply(ctx, this.transformMatrix); } this.clipTo && fabric.util.clipContext(this, ctx); - if (this.shouldCache()) { + if (this.shouldCache(noTransform)) { if (!this._cacheCanvas) { this._createCacheCanvas(); } @@ -12814,16 +12834,30 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati }, /** + * When returns `true`, force the object to have its own cache, even if it is inside a group + * it may be needed when your object behave in a particular way on the cache and always needs + * its own isolated canvas to render correctly. + * This function is created to be subclassed by custom classes. + * since 1.7.12 + * @type function + * @return false + */ + needsItsOwnCache: function() { + return false; + }, + + /** * Decide if the object should cache or not. * objectCaching is a global flag, wins over everything * needsItsOwnCache should be used when the object drawing method requires * a cache step. None of the fabric classes requires it. * Generally you do not cache objects in groups because the group outside is cached. + * @param {Boolean} noTransform if rendereing in pathGroup, caching is not supported at object level * @return {Boolean} */ - shouldCache: function() { - return this.objectCaching && - (!this.group || this.needsItsOwnCache || !this.group.isCaching()); + shouldCache: function(noTransform) { + return !noTransform && this.objectCaching && + (!this.group || this.needsItsOwnCache() || !this.group.isCaching()); }, /** @@ -16578,7 +16612,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {String} svg representation of an instance */ toSVG: function(reviver) { - var points = [], diffX, diffY, + var points = [], + diffX = 0, + diffY = 0, markup = this._createBaseSVGMarkup(); if (!(this.group && this.group.type === 'path-group')) { @@ -16917,10 +16953,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } this._setPositionDimensions(options); - - if (this.objectCaching) { - this._createCacheCanvas(); - } }, /** @@ -17846,9 +17878,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } this.setOptions(options); this.setCoords(); - if (this.objectCaching) { - this._createCacheCanvas(); - } }, /** @@ -17904,7 +17933,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {Boolean} */ shouldCache: function() { - var parentCache = this.objectCaching && (!this.group || this.needsItsOwnCache || !this.group.isCaching()); + var parentCache = this.objectCaching && (!this.group || this.needsItsOwnCache() || !this.group.isCaching()); this.caching = parentCache; if (parentCache) { for (var i = 0, len = this.paths.length; i < len; i++) { @@ -18284,6 +18313,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this.forEachObject(this._setObjectActive, this); this._calcBounds(); this._updateObjectsCoords(); + this.setCoords(); this.dirty = true; return this; }, @@ -18311,6 +18341,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this.remove(object); this._calcBounds(); this._updateObjectsCoords(); + this.setCoords(); this.dirty = true; return this; }, @@ -18426,7 +18457,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {Boolean} */ shouldCache: function() { - var parentCache = this.objectCaching && (!this.group || this.needsItsOwnCache || !this.group.isCaching()); + var parentCache = this.objectCaching && (!this.group || this.needsItsOwnCache() || !this.group.isCaching()); this.caching = parentCache; if (parentCache) { for (var i = 0, len = this._objects.length; i < len; i++) { @@ -22039,7 +22070,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { */ _getCacheCanvasDimensions: function() { var dim = this.callSuper('_getCacheCanvasDimensions'); - var fontSize = this.fontSize * 2; + var fontSize = this.fontSize; dim.width += fontSize * dim.zoomX; dim.height += fontSize * dim.zoomY; return dim; @@ -24976,7 +25007,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.__newClickTime = +new Date(); var newPointer = this.canvas.getPointer(options.e); - if (this.isTripleClick(newPointer)) { + if (this.isTripleClick(newPointer, options.e)) { this.fire('tripleclick', options); this._stopEvent(options.e); } @@ -25039,7 +25070,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot */ initMousedownHandler: function() { this.on('mousedown', function(options) { - if (!this.editable) { + if (!this.editable || (options.e.button && options.e.button !== 1)) { return; } var pointer = this.canvas.getPointer(options.e); @@ -25077,7 +25108,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot initMouseupHandler: function() { this.on('mouseup', function(options) { this.__isMousedown = false; - if (!this.editable || this._isObjectMoved(options.e)) { + if (!this.editable || this._isObjectMoved(options.e) || (options.e.button && options.e.button !== 1)) { return; } diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 20c989df9..fbf651be3 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,9 +1,9 @@ -var fabric=fabric||{version:"1.7.11"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E")),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.iMatrix=[1,0,0,1,0,0],fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);"undefined"!=typeof e&&(this.clipTo=new Function("ctx",e))}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?P-=2*f:1===c&&P<0&&(P+=2*f);for(var I=Math.ceil(Math.abs(P/f*2)),E=[],L=P/I,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=A+L,R=0;R=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){for(var e=null,i=this;i.constructor.superclass;){var n=i.constructor.superclass.prototype[t];if(i[t]!==n){e=n;break}i=i.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return _;if((f||d)&&(x=" translate("+y(f)+" "+y(d)+") "),r=x+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ", +var fabric=fabric||{version:"1.7.12"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E")),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.iMatrix=[1,0,0,1,0,0],fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);"undefined"!=typeof e&&(this.clipTo=new Function("ctx",e))}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?A-=2*f:1===c&&A<0&&(A+=2*f);for(var E=Math.ceil(Math.abs(A/f*2)),I=[],L=A/E,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=P+L,R=0;R=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){for(var e=null,i=this;i.constructor.superclass;){var n=i.constructor.superclass.prototype[t];if(i[t]!==n){e=n;break}i=i.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return _;if((f||d)&&(x=" translate("+y(f)+" "+y(d)+") "),r=x+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ", "svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),_}function g(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}var p=t.fabric||(t.fabric={}),v=p.util.object.extend,b=p.util.object.clone,m=p.util.toFixed,y=p.util.parseUnit,_=p.util.multiplyTransformMatrices,x=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,C=/^(symbol|image|marker|pattern|view|svg)$/i,S=/^(?:pattern|defs|symbol|metadata|clipPath|mask)$/i,w=/^(symbol|g|a|svg)$/i,O={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX",opacity:"opacity"},T={stroke:"strokeOpacity",fill:"fillOpacity"};p.cssRules={},p.gradientDefs={},p.parseTransformAttribute=function(){function t(t,e){var i=Math.cos(e[0]),r=Math.sin(e[0]),n=0,s=0;3===e.length&&(n=e[1],s=e[2]),t[0]=i,t[1]=r,t[2]=-r,t[3]=i,t[4]=n-(i*n-r*s),t[5]=s-(r*n+i*s)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e,i){t[i]=Math.tan(p.util.degreesToRadians(e[0]))}function r(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var n=[1,0,0,1,0,0],s=p.reNum,o="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+s+")\\s*\\))",h="(?:(skewY)\\s*\\(\\s*("+s+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+")"+o+"("+s+"))?\\s*\\))",l="(?:(scale)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",u="(?:(translate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",f="(?:(matrix)\\s*\\(\\s*("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")\\s*\\))",d="(?:"+f+"|"+u+"|"+l+"|"+c+"|"+a+"|"+h+")",g="(?:"+d+"(?:"+o+"*"+d+")*)",v="^\\s*(?:"+g+"?)\\s*$",b=new RegExp(v),m=new RegExp(d,"g");return function(s){var o=n.concat(),a=[];if(!s||s&&!b.test(s))return o;s.replace(m,function(s){var h=new RegExp(d).exec(s).filter(function(t){return!!t}),c=h[1],l=h.slice(2).map(parseFloat);switch(c){case"translate":r(o,l);break;case"rotate":l[0]=p.util.degreesToRadians(l[0]),t(o,l);break;case"scale":e(o,l);break;case"skewX":i(o,l,2);break;case"skewY":i(o,l,1);break;case"matrix":o=l}a.push(o.concat()),o=n.concat()});for(var h=a[0];a.length>1;)a.shift(),h=p.util.multiplyTransformMatrices(h,a[0]);return h}}();var j=new RegExp("^\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*$");p.parseSVGDocument=function(t,e,i,r){if(t){f(t);var n=p.Object.__uid++,s=d(t),o=p.util.toArray(t.getElementsByTagName("*"));if(s.crossOrigin=r&&r.crossOrigin,s.svgUid=n,0===o.length&&p.isLikelyNode){o=t.selectNodes('//*[name(.)!="svg"]');for(var a=[],h=0,c=o.length;h/i,""))),n&&n.documentElement||e&&e(null),p.parseSVGDocument(n.documentElement,function(t,i){e&&e(t,i)},i,r)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:n})},loadSVGFromString:function(t,e,i,r){t=t.trim();var n;if("undefined"!=typeof DOMParser){var s=new DOMParser;s&&s.parseFromString&&(n=s.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t.replace(//i,"")));p.parseSVGDocument(n.documentElement,function(t,i){e(t,i)},i,r)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r,n){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0,this.parsingOptions=n},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}var n=fabric.util.object.clone;fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,i,r=n(this.coords,!0),s=n(this.colorStops,!0),o=r.r1>r.r2;if(s.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var a in r)"x1"===a||"x2"===a?r[a]+=this.offsetX-t.width/2:"y1"!==a&&"y2"!==a||(r[a]+=this.offsetY-t.height/2);if(i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']),"radial"===this.type){if(o){s=s.concat(),s.reverse();for(var h=0;h0)for(var l=Math.max(r.r1,r.r2),u=c/l,h=0;h\n')}return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:"y1"!==r&&"y2"!==r||(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;s\n\n\n'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=fabric.util.transformPoint,s=fabric.util.invertTransform,o=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass(fabric.CommonMethods,{initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!1,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw o;if("undefined"==typeof e.getContext)throw o;return e},_initOptions:function(t){this._setOptions(t),this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(t),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i=this._activeGroup,r=!1,n=!0;this.viewportTransform=t;for(var s=0,o=this._objects.length;s"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),"\n")},createSVGRefElementsMarkup:function(){var t=this,e=["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)});return e.join("")},createSVGFontFacesMarkup:function(){for(var t,e,i,r,n,s,o,a="",h={},c=fabric.fontPaths,l=this.getObjects(),u=0,f=l.length;u',"\n",a,"","\n"].join("")),a},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&s===this._searchPossibleTargets([s],n))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&o===this._searchPossibleTargets([o],n)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout",{e:e})),this.fire("mouse:over",{target:t,e:e}),t.fire("mouseover",{e:e}),this._hoveredTarget=t):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout",{e:e}),this._hoveredTarget=null)},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":"none"}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){var e=this._activeObject;e&&(e.set("active",!1),t!==e&&e.onDeselect&&"function"==typeof e.onDeselect&&e.onDeselect()),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){var i=this.getActiveObject();return i&&i!==t&&i.fire("deselected",{e:e}),this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this._hoveredTarget===t&&(this._hoveredTarget=null),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){var t=this._activeObject;t&&(t.set("active",!1),t.onDeselect&&"function"==typeof t.onDeselect&&t.onDeselect()),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return e&&(this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e.fire("deselected",{e:t})),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return e&&(this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t})),this},deactivateAll:function(){for(var t,e=this.getObjects(),i=0,r=e.length;i1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e||!e.selectable)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0),e)}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i,e),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e,e:t}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,needsItsOwnCache:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t),this.objectCaching&&this._createCacheCanvas()},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this._getNonTransformedDimensions(),n=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,s=i.scaleX*t*n,o=i.scaleY*t*n,a=r.x*s,h=r.y*o;return{width:a+2,height:h+2,zoomX:s,zoomY:o}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.action;if("scale"===t.slice(0,5))return!1}var e=this._getCacheCanvasDimensions(),i=e.width,r=e.height,n=e.zoomX,s=e.zoomY;return(i!==this.cacheWidth||r!==this.cacheHeight)&&(this._cacheCanvas.width=Math.ceil(i),this._cacheCanvas.height=Math.ceil(r),this._cacheContext.translate(i/2,r/2),this._cacheContext.scale(n,s),this.cacheWidth=i,this.cacheHeight=r,this.zoomX=n,this.zoomY=s,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),this.angle&&t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),this.skewX&&t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),this.skewY&&t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},render:function(t,i){0===this.width&&0===this.height||!this.visible||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache()?(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)):(this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},shouldCache:function(){return this.objectCaching&&(!this.group||this.needsItsOwnCache||!this.group.isCaching())},willDrawShadow:function(){return!!this.shadow},drawObject:function(t,e){this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._render(t,e)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheWidth/2,-this.cacheHeight/2)},isCacheDirty:function(t){if(!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t){if(this.active&&(!this.group||this.group===this.canvas.getActiveGroup())){var i,r=this.getViewportTransform(),n=this.calcTransformMatrix();n=e.util.multiplyTransformMatrices(r,n),i=e.util.qrDecompose(n),t.save(),t.translate(i.translateX,i.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(i.angle)),this.drawBordersInGroup(t,i)):(t.rotate(o(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore())},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]);var e=o?new a(i[o],i):new a(i);n&&n(e)})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top); -return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")},onDeselect:function(){}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return 6.123233995736766e-17!==i&&i!==-1.8369701987210297e-16||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,r)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed,o=e.Object.NUM_FRACTION_DIGITS;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var a=e.Object.prototype.cacheProperties.concat();a.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:a,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){var e,i,r=[],n=this._createBaseSVGMarkup();this.group&&"path-group"===this.group.type||(e=this.pathOffset.x,i=this.pathOffset.y);for(var a=0,h=this.points.length;a\n'),t?t(n.join("")):n.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){var r=t.paths;delete t.paths,"string"==typeof r?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max;if(!e.Group){var s={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache||!this.group.isCaching());if(this.caching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,k,M,D,A,P,I;for(T.x=(t+.5)*y,j.x=r(T.x),h=0;h=e)){P=r(1e3*s(c-T.x)),O[P]||(O[P]={});for(var E=j.y-w;E<=j.y+w;E++)E<0||E>=o||(I=r(1e3*s(E-T.y)),O[P][I]||(O[P][I]=m(n(i(P*x,2)+i(I*C,2))/1e3)),u=O[P][I],u>0&&(d=4*(E*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],D+=u*v[d+2],A+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=D/g,b[d+3]=A/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(E=4*(I+M*e),j+=x*p[E+3],S+=x,p[E+3]<255&&(x=x*p[E+3]/250),w+=x*p[E],O+=x*p[E+1],T+=x*p[E+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=j/S}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=2*this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;t.fillStyle=s,this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e)))},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",e)},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,n,s,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,n,s,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),this._dimensionAffectingProps.indexOf(t)>-1&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,i,r){return e.Object._fromObject("Text",t,i,r,"text")},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o); -}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&(this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(o=!0,s[h-i]=this.styles[e][a],delete this.styles[e][a])}o&&(this.styles[e+1]=s)}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}var h=r||t(n[i-1]);h&&(this.styles[e][i]=h),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in r){var s=parseInt(n,10);s<=e&&delete r[s]}for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="white-space: nowrap; position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 1px; height: 1px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.set("dirty",!0),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())},fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,e){var i=this._styleMap[t];t=i.line,fabric.IText.prototype.shiftLineStyles.call(this,t,e)},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e, -t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file +this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render")},_renderObjects:function(t,e){for(var i=0,r=e.length;i"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),"\n")},createSVGRefElementsMarkup:function(){var t=this,e=["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)});return e.join("")},createSVGFontFacesMarkup:function(){for(var t,e,i,r,n,s,o,a="",h={},c=fabric.fontPaths,l=this.getObjects(),u=0,f=l.length;u',"\n",a,"","\n"].join("")),a},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(this.targets=[],s&&!e&&s===this._searchPossibleTargets([s],n))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&o===this._searchPossibleTargets([o],n)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){var i,r,n=this._hoveredTarget;n!==t&&(i={e:e,target:t,previousTarget:this._hoveredTarget},r={e:e,target:this._hoveredTarget,nextTarget:t},this._hoveredTarget=t),t?n!==t&&(n&&(this.fire("mouse:out",r),n.fire("mouseout",r)),this.fire("mouse:over",i),t.fire("mouseover",i)):n&&(this.fire("mouse:out",r),n.fire("mouseout",r))},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl?this.upperCanvasEl.className="":this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":"none"}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){var e=this._activeObject;e&&(e.set("active",!1),t!==e&&e.onDeselect&&"function"==typeof e.onDeselect&&e.onDeselect()),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){var i=this.getActiveObject();return i&&i!==t&&i.fire("deselected",{e:e}),this._setActiveObject(t),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this.renderAll(),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this._hoveredTarget===t&&(this._hoveredTarget=null),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){var t=this._activeObject;t&&(t.set("active",!1),t.onDeselect&&"function"==typeof t.onDeselect&&t.onDeselect()),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return e&&(this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e.fire("deselected",{e:t})),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return e&&(this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t})),this},deactivateAll:function(){for(var t,e=this.getObjects(),i=0,r=e.length;i1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!0},_setCornerCursor:function(t,i,r){if(t in e)this.setCursor(this._getRotatedCornerCursor(t,i,r));else{if("mtr"!==t||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(t,i,r){var n=Math.round(i.getAngle()%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.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0),e)}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i,e),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e,e:t}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this._getNonTransformedDimensions(),n=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,s=i.scaleX*t*n,o=i.scaleY*t*n,a=r.x*s,h=r.y*o;return{width:a+2,height:h+2,zoomX:s,zoomY:o}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.action;if("scale"===t.slice(0,5))return!1}var e=this._getCacheCanvasDimensions(),i=e.width,r=e.height,n=e.zoomX,s=e.zoomY;return(i!==this.cacheWidth||r!==this.cacheHeight)&&(this._cacheCanvas.width=Math.ceil(i),this._cacheCanvas.height=Math.ceil(r),this._cacheContext.translate(i/2,r/2),this._cacheContext.scale(n,s),this.cacheWidth=i,this.cacheHeight=r,this.zoomX=n,this.zoomY=s,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),this.angle&&t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),this.skewX&&t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),this.skewY&&t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},render:function(t,i){0===this.width&&0===this.height||!this.visible||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache(i)?(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)):(this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},needsItsOwnCache:function(){return!1},shouldCache:function(t){return!t&&this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isCaching())},willDrawShadow:function(){return!!this.shadow},drawObject:function(t,e){this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._render(t,e)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheWidth/2,-this.cacheHeight/2)},isCacheDirty:function(t){if(!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t){if(this.active&&(!this.group||this.group===this.canvas.getActiveGroup())){var i,r=this.getViewportTransform(),n=this.calcTransformMatrix();n=e.util.multiplyTransformMatrices(r,n),i=e.util.qrDecompose(n),t.save(),t.translate(i.translateX,i.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(i.angle)),this.drawBordersInGroup(t,i)):(t.rotate(o(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore())},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]);var e=o?new a(i[o],i):new a(i);n&&n(e)})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n; +},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")},onDeselect:function(){}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return 6.123233995736766e-17!==i&&i!==-1.8369701987210297e-16||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,r)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed,o=e.Object.NUM_FRACTION_DIGITS;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var a=e.Object.prototype.cacheProperties.concat();a.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:a,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){var e=[],i=0,r=0,n=this._createBaseSVGMarkup();this.group&&"path-group"===this.group.type||(i=this.pathOffset.x,r=this.pathOffset.y);for(var a=0,h=this.points.length;a\n'),t?t(n.join("")):n.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){var r=t.paths;delete t.paths,"string"==typeof r?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max;if(!e.Group){var s={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.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,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isCaching());if(this.caching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,k,M,D,P,A,E;for(T.x=(t+.5)*y,j.x=r(T.x),h=0;h=e)){A=r(1e3*s(c-T.x)),O[A]||(O[A]={});for(var I=j.y-w;I<=j.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[A][E]||(O[A][E]=m(n(i(A*x,2)+i(E*C,2))/1e3)),u=O[A][E],u>0&&(d=4*(I*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],D+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=D/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(I=4*(E+M*e),j+=x*p[I+3],S+=x,p[I+3]<255&&(x=x*p[I+3]/250),w+=x*p[I],O+=x*p[I+1],T+=x*p[I+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=j/S}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;t.fillStyle=s,this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e)))},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",e)},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,n,s,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,n,s,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),this._dimensionAffectingProps.indexOf(t)>-1&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,i,r){return e.Object._fromObject("Text",t,i,r,"text")},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&(this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(o=!0,s[h-i]=this.styles[e][a],delete this.styles[e][a])}o&&(this.styles[e+1]=s)}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}var h=r||t(n[i-1]);h&&(this.styles[e][i]=h),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in r){var s=parseInt(n,10);s<=e&&delete r[s]}for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e,t.e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable&&(!t.e.button||1===t.e.button)){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,!this.editable||this._isObjectMoved(t.e)||t.e.button&&1!==t.e.button||(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="white-space: nowrap; position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 1px; height: 1px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.set("dirty",!0),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())},fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i]); +},shiftLineStyles:function(t,e){var i=this._styleMap[t];t=i.line,fabric.IText.prototype.shiftLineStyles.call(this,t,e)},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 012bfd4984d953c2ec5b868d8d99f0167715a64a..5fafd6094bd70f0ffef4556c318ff80bdde71a24 100644 GIT binary patch delta 45775 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 8d9389e7e..7a66db783 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,5 +1,5 @@ var fabric = fabric || { - version: "1.7.11" + version: "1.7.12" }; if (typeof exports !== "undefined") { @@ -4817,6 +4817,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { return; } var ignoreZoom = true, pointer = this.getPointer(e, ignoreZoom), activeGroup = this.getActiveGroup(), activeObject = this.getActiveObject(), activeTarget; + this.targets = []; if (activeGroup && !skipGroup && activeGroup === this._searchPossibleTargets([ activeGroup ], pointer)) { this._fireOverOutEvents(activeGroup, e); return activeGroup; @@ -4833,7 +4834,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { activeTarget = activeObject; } } - this.targets = []; var target = this._searchPossibleTargets(this._objects, pointer); if (e[this.altSelectionKey] && target && activeTarget && target !== activeTarget) { target = activeTarget; @@ -4842,35 +4842,32 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { return target; }, _fireOverOutEvents: function(target, e) { + var overOpt, outOpt, hoveredTarget = this._hoveredTarget; + if (hoveredTarget !== target) { + overOpt = { + e: e, + target: target, + previousTarget: this._hoveredTarget + }; + outOpt = { + e: e, + target: this._hoveredTarget, + nextTarget: target + }; + this._hoveredTarget = target; + } if (target) { - if (this._hoveredTarget !== target) { - if (this._hoveredTarget) { - this.fire("mouse:out", { - target: this._hoveredTarget, - e: e - }); - this._hoveredTarget.fire("mouseout", { - e: e - }); + if (hoveredTarget !== target) { + if (hoveredTarget) { + this.fire("mouse:out", outOpt); + hoveredTarget.fire("mouseout", outOpt); } - this.fire("mouse:over", { - target: target, - e: e - }); - target.fire("mouseover", { - e: e - }); - this._hoveredTarget = target; + this.fire("mouse:over", overOpt); + target.fire("mouseover", overOpt); } - } else if (this._hoveredTarget) { - this.fire("mouse:out", { - target: this._hoveredTarget, - e: e - }); - this._hoveredTarget.fire("mouseout", { - e: e - }); - this._hoveredTarget = null; + } else if (hoveredTarget) { + this.fire("mouse:out", outOpt); + hoveredTarget.fire("mouseout", outOpt); } }, _checkTarget: function(pointer, obj) { @@ -4940,7 +4937,11 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { }, _createUpperCanvas: function() { var lowerCanvasClass = this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/, ""); - this.upperCanvasEl = this._createCanvasElement(); + if (this.upperCanvasEl) { + this.upperCanvasEl.className = ""; + } else { + this.upperCanvasEl = this._createCanvasElement(); + } fabric.util.addClass(this.upperCanvasEl, "upper-canvas " + lowerCanvasClass); this.wrapperEl.appendChild(this.upperCanvasEl); this._copyCanvasStyle(this.lowerCanvasEl, this.upperCanvasEl); @@ -5006,7 +5007,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { }); } this._setActiveObject(object); - this.renderAll(); this.fire("object:selected", { target: object, e: e @@ -5014,6 +5014,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { object.fire("selected", { e: e }); + this.renderAll(); return this; }, getActiveObject: function() { @@ -5116,9 +5117,13 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { return this; }, deactivateAllWithDispatch: function(e) { + var allObjects = this.getObjects(), i = 0, len = allObjects.length, obj; + for (;i < len; i++) { + obj = allObjects[i]; + obj && obj.set("active", false); + } this.discardActiveGroup(e); this.discardActiveObject(e); - this.deactivateAll(); return this; }, dispose: function() { @@ -5207,10 +5212,14 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { bl: 5, ml: 6, tl: 7 - }, addListener = fabric.util.addListener, removeListener = fabric.util.removeListener; + }, addListener = fabric.util.addListener, removeListener = fabric.util.removeListener, RIGHT_CLICK = 3, MIDDLE_CLICK = 2, LEFT_CLICK = 1; + function checkClick(e, value) { + return "which" in e ? e.which === value : e.button === value - 1; + } fabric.util.object.extend(fabric.Canvas.prototype, { cursorMap: [ "n-resize", "ne-resize", "e-resize", "se-resize", "s-resize", "sw-resize", "w-resize", "nw-resize" ], _initEventListeners: function() { + this.removeListeners(); this._bindEvents(); addListener(fabric.window, "resize", this._onResize); addListener(this.upperCanvasEl, "mousedown", this._onMouseDown); @@ -5234,6 +5243,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { } }, _bindEvents: function() { + if (this.eventsBinded) { + return; + } this._onMouseDown = this._onMouseDown.bind(this); this._onMouseMove = this._onMouseMove.bind(this); this._onMouseUp = this._onMouseUp.bind(this); @@ -5247,6 +5259,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this._onMouseOut = this._onMouseOut.bind(this); this._onMouseEnter = this._onMouseEnter.bind(this); this._onContextMenu = this._onContextMenu.bind(this); + this.eventsBinded = true; }, removeListeners: function() { removeListener(fabric.window, "resize", this._onResize); @@ -5367,11 +5380,24 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { return !!(target && (target.isMoving || target !== activeObject) || !target && !!activeObject || !target && !activeObject && !this._groupSelector || pointer && this._previousPointer && this.selection && (pointer.x !== this._previousPointer.x || pointer.y !== this._previousPointer.y)); }, __onMouseUp: function(e) { - var target, searchTarget = true, transform = this._currentTransform, groupSelector = this._groupSelector, isClick = !groupSelector || groupSelector.left === 0 && groupSelector.top === 0; + var target; + if (checkClick(e, RIGHT_CLICK)) { + if (this.fireRightClick) { + this._handleEvent(e, "up", target, RIGHT_CLICK); + } + return; + } + if (checkClick(e, MIDDLE_CLICK)) { + if (this.fireMiddleClick) { + this._handleEvent(e, "up", target, MIDDLE_CLICK); + } + return; + } if (this.isDrawingMode && this._isCurrentlyDrawing) { this._onMouseUpInDrawingMode(e); return; } + var searchTarget = true, transform = this._currentTransform, groupSelector = this._groupSelector, isClick = !groupSelector || groupSelector.left === 0 && groupSelector.top === 0; if (transform) { this._finalizeCurrentTransform(); searchTarget = !transform.actionPerformed; @@ -5387,19 +5413,18 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { if (target) { target.isMoving = false; } - this._handleCursorAndEvent(e, target, "up"); + this._setCursorFromEvent(e, target); + this._handleEvent(e, "up", target ? target : null, LEFT_CLICK, isClick); target && (target.__corner = 0); shouldRender && this.renderAll(); }, - _handleCursorAndEvent: function(e, target, eventType) { - this._setCursorFromEvent(e, target); - this._handleEvent(e, eventType, target ? target : null); - }, - _handleEvent: function(e, eventType, targetObj) { + _handleEvent: function(e, eventType, targetObj, button, isClick) { var target = typeof targetObj === "undefined" ? this.findTarget(e) : targetObj, targets = this.targets || [], options = { e: e, target: target, - subTargets: targets + subTargets: targets, + button: button || LEFT_CLICK, + isClick: isClick || false }; this.fire("mouse:" + eventType, options); target && target.fire("mouse" + eventType, options); @@ -5460,17 +5485,15 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { }, __onMouseDown: function(e) { var target = this.findTarget(e); - var isRightClick = "which" in e ? e.which === 3 : e.button === 2; - if (isRightClick) { + if (checkClick(e, RIGHT_CLICK)) { if (this.fireRightClick) { - this._handleEvent(e, "down", target ? target : null); + this._handleEvent(e, "down", target ? target : null, RIGHT_CLICK); } return; } - var isMiddleClick = "which" in e ? e.which === 2 : e.button === 1; - if (isMiddleClick) { + if (checkClick(e, MIDDLE_CLICK)) { if (this.fireMiddleClick) { - this._handleEvent(e, "down", target ? target : null); + this._handleEvent(e, "down", target ? target : null, MIDDLE_CLICK); } return; } @@ -5485,11 +5508,19 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this._previousPointer = pointer; var shouldRender = this._shouldRender(target, pointer), shouldGroup = this._shouldGroup(e, target); if (this._shouldClearSelection(e, target)) { - this._clearSelection(e, target, pointer); + this.deactivateAllWithDispatch(e); } else if (shouldGroup) { this._handleGrouping(e, target); target = this.getActiveGroup(); } + if (this.selection && (!target || !target.selectable && !target.isEditing)) { + this._groupSelector = { + ex: pointer.x, + ey: pointer.y, + top: 0, + left: 0 + }; + } if (target) { if (target.selectable && (target.__corner || !shouldGroup)) { this._beforeTransform(e, target); @@ -5515,19 +5546,6 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this.onBeforeScaleRotate(target); } }, - _clearSelection: function(e, target, pointer) { - this.deactivateAllWithDispatch(e); - if (target && target.selectable) { - this.setActiveObject(target, e); - } else if (this.selection) { - this._groupSelector = { - ex: pointer.x, - ey: pointer.y, - top: 0, - left: 0 - }; - } - }, _setOriginToCenter: function(target) { this._previousOriginX = this._currentTransform.target.originX; this._previousOriginY = this._currentTransform.target.originY; @@ -5638,7 +5656,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { } }, _setCursorFromEvent: function(e, target) { - if (!target || !target.selectable) { + if (!target) { this.setCursor(this.defaultCursor); return false; } @@ -6035,7 +6053,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { statefullCache: false, noScaleCache: true, dirty: true, - needsItsOwnCache: false, stateProperties: ("top left width height scaleX scaleY flipX flipY originX originY transformMatrix " + "stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit " + "angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor " + "skewX skewY").split(" "), cacheProperties: ("fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray" + " strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor").split(" "), initialize: function(options) { @@ -6043,9 +6060,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { if (options) { this.setOptions(options); } - if (this.objectCaching) { - this._createCacheCanvas(); - } }, _createCacheCanvas: function() { this._cacheProperties = {}; @@ -6232,7 +6246,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { ctx.transform.apply(ctx, this.transformMatrix); } this.clipTo && fabric.util.clipContext(this, ctx); - if (this.shouldCache()) { + if (this.shouldCache(noTransform)) { if (!this._cacheCanvas) { this._createCacheCanvas(); } @@ -6255,8 +6269,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { this.clipTo && ctx.restore(); ctx.restore(); }, - shouldCache: function() { - return this.objectCaching && (!this.group || this.needsItsOwnCache || !this.group.isCaching()); + needsItsOwnCache: function() { + return false; + }, + shouldCache: function(noTransform) { + return !noTransform && this.objectCaching && (!this.group || this.needsItsOwnCache() || !this.group.isCaching()); }, willDrawShadow: function() { return !!this.shadow; @@ -7927,7 +7944,7 @@ fabric.util.object.extend(fabric.Object.prototype, { }); }, toSVG: function(reviver) { - var points = [], diffX, diffY, markup = this._createBaseSVGMarkup(); + var points = [], diffX = 0, diffY = 0, markup = this._createBaseSVGMarkup(); if (!(this.group && this.group.type === "path-group")) { diffX = this.pathOffset.x; diffY = this.pathOffset.y; @@ -8066,9 +8083,6 @@ fabric.util.object.extend(fabric.Object.prototype, { this.path = this._parsePath(); } this._setPositionDimensions(options); - if (this.objectCaching) { - this._createCacheCanvas(); - } }, _setPositionDimensions: function(options) { var calcDim = this._parseDimensions(); @@ -8571,9 +8585,6 @@ fabric.util.object.extend(fabric.Object.prototype, { } this.setOptions(options); this.setCoords(); - if (this.objectCaching) { - this._createCacheCanvas(); - } }, parseDimensionsFromPaths: function(options) { var points, p, xC = [], yC = [], path, height, width, m; @@ -8616,7 +8627,7 @@ fabric.util.object.extend(fabric.Object.prototype, { ctx.restore(); }, shouldCache: function() { - var parentCache = this.objectCaching && (!this.group || this.needsItsOwnCache || !this.group.isCaching()); + var parentCache = this.objectCaching && (!this.group || this.needsItsOwnCache() || !this.group.isCaching()); this.caching = parentCache; if (parentCache) { for (var i = 0, len = this.paths.length; i < len; i++) { @@ -8815,6 +8826,7 @@ fabric.util.object.extend(fabric.Object.prototype, { this.forEachObject(this._setObjectActive, this); this._calcBounds(); this._updateObjectsCoords(); + this.setCoords(); this.dirty = true; return this; }, @@ -8829,6 +8841,7 @@ fabric.util.object.extend(fabric.Object.prototype, { this.remove(object); this._calcBounds(); this._updateObjectsCoords(); + this.setCoords(); this.dirty = true; return this; }, @@ -8898,7 +8911,7 @@ fabric.util.object.extend(fabric.Object.prototype, { this._transformDone = false; }, shouldCache: function() { - var parentCache = this.objectCaching && (!this.group || this.needsItsOwnCache || !this.group.isCaching()); + var parentCache = this.objectCaching && (!this.group || this.needsItsOwnCache() || !this.group.isCaching()); this.caching = parentCache; if (parentCache) { for (var i = 0, len = this._objects.length; i < len; i++) { @@ -10342,7 +10355,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { }, _getCacheCanvasDimensions: function() { var dim = this.callSuper("_getCacheCanvasDimensions"); - var fontSize = this.fontSize * 2; + var fontSize = this.fontSize; dim.width += fontSize * dim.zoomX; dim.height += fontSize * dim.zoomY; return dim; @@ -11910,7 +11923,7 @@ fabric.util.object.extend(fabric.IText.prototype, { onMouseDown: function(options) { this.__newClickTime = +new Date(); var newPointer = this.canvas.getPointer(options.e); - if (this.isTripleClick(newPointer)) { + if (this.isTripleClick(newPointer, options.e)) { this.fire("tripleclick", options); this._stopEvent(options.e); } else if (this.isDoubleClick(newPointer)) { @@ -11948,7 +11961,7 @@ fabric.util.object.extend(fabric.IText.prototype, { }, initMousedownHandler: function() { this.on("mousedown", function(options) { - if (!this.editable) { + if (!this.editable || options.e.button && options.e.button !== 1) { return; } var pointer = this.canvas.getPointer(options.e); @@ -11974,7 +11987,7 @@ fabric.util.object.extend(fabric.IText.prototype, { initMouseupHandler: function() { this.on("mouseup", function(options) { this.__isMousedown = false; - if (!this.editable || this._isObjectMoved(options.e)) { + if (!this.editable || this._isObjectMoved(options.e) || options.e.button && options.e.button !== 1) { return; } if (this.__lastSelected && !this.__corner) { diff --git a/package.json b/package.json index be5069ccd..903f5e2dc 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", "homepage": "http://fabricjs.com/", - "version": "1.7.11", + "version": "1.7.12", "author": "Juriy Zaytsev ", "contributors": [ {