From f8b4ab15281a8d3fcce4aceabed0c693904448bb Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Tue, 27 Jun 2017 11:46:11 +0200 Subject: [PATCH] Version 1.7.14 (#4038) * build v1714 * fixed changelog --- CHANGELOG.md | 7 ++ HEADER.js | 2 +- ISSUE_TEMPLATE.md | 2 +- dist/fabric.js | 226 ++++++++++++++++++++++++++++++++++++++++--------- dist/fabric.min.js | 18 ++-- dist/fabric.min.js.gz | Bin 70499 -> 71048 bytes dist/fabric.require.js | 131 ++++++++++++++++++++-------- package.json | 2 +- 8 files changed, 303 insertions(+), 85 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab987cb2a..0983635a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +**Version 1.7.14** + +- Improvement: Avoid cache canvas to resize each mouse move step. [#4037](https://github.com/kangax/fabric.js/pull/4037) +- Improvement: Make cache canvas limited in size. [#4035](https://github.com/kangax/fabric.js/pull/4035) +- Fix: Make groups and statefull cache work. [#4032](https://github.com/kangax/fabric.js/pull/4032) +- Add: Marked the hiddentextarea from itext so that custom projects can recognize it. [#4022](https://github.com/kangax/fabric.js/pull/4022) + **Version 1.7.13** - Fix: Try to minimize delay in loadFroJson [#4007](https://github.com/kangax/fabric.js/pull/4007) diff --git a/HEADER.js b/HEADER.js index 1933a160c..48ba7bc8c 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.13" }; +var fabric = fabric || { version: "1.7.14" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index b7724c672..a322d8220 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.13 +1.7.14 ## Test Case http://jsfiddle.net/fabricjs/Da7SP/ diff --git a/dist/fabric.js b/dist/fabric.js index 033469e15..6c9ab5e48 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.13" }; +var fabric = fabric || { version: "1.7.14" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -63,6 +63,31 @@ fabric.DPI = 96; fabric.reNum = '(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)'; fabric.fontPaths = { }; fabric.iMatrix = [1, 0, 0, 1, 0, 0]; +fabric.canvasModule = 'canvas'; + +/** + * Pixel limit for cache canvases. 1Mpx , 4Mpx should be fine. + * @since 1.7.14 + * @type Number + * @default + */ +fabric.perfLimitSizeTotal = 2097152; + +/** + * Pixel limit for cache canvases width or height. IE fixes the maximum at 5000 + * @since 1.7.14 + * @type Number + * @default + */ +fabric.maxCacheSideLimit = 4096; + +/** + * Lowest pixel limit for cache canvases, set at 256PX + * @since 1.7.14 + * @type Number + * @default + */ +fabric.minCacheSideLimit = 256; /** * Cache Object for widths of chars in text rendering. @@ -1167,6 +1192,25 @@ fabric.CommonMethods = { else if (fabric.charWidthsCache[fontFamily]) { delete fabric.charWidthsCache[fontFamily]; } + }, + + /** + * Clear char widths cache for a font family. + * @memberOf fabric.util + * @param {Number} ar aspect ratio + * @param {Number} maximumArea Maximum area you want to achieve + * @param {Number} maximumSide biggest side allowed + * @return {Object.x} Limited dimensions by X + * @return {Object.y} Limited dimensions by Y + */ + limitDimsByArea: function(ar, maximumArea) { + var roughWidth = Math.sqrt(maximumArea * ar), + perfLimitSizeY = Math.floor(maximumArea / roughWidth); + return { x: Math.floor(roughWidth), y: perfLimitSizeY }; + }, + + capValue: function(min, value, max) { + return Math.max(min, Math.min(value, max)); } }; @@ -11675,7 +11719,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati capitalize = fabric.util.string.capitalize, degreesToRadians = fabric.util.degreesToRadians, supportsLineDash = fabric.StaticCanvas.supports('setLineDash'), - objectCaching = !fabric.isLikelyNode; + objectCaching = !fabric.isLikelyNode, + ALIASING_LIMIT = 2; if (fabric.Object) { return; @@ -12471,8 +12516,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati 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' + 'angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor ' + + 'skewX skewY fillRule' ).split(' '), /** @@ -12480,8 +12525,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @type Array */ cacheProperties: ( - 'fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray' + - ' strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor' + 'fill stroke strokeWidth strokeDashArray width height' + + ' strokeLineCap strokeLineJoin strokeMiterLimit backgroundColor' ).split(' '), /** @@ -12507,6 +12552,46 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati }, /** + * Limit the cache dimensions so that X * Y do not cross fabric.perfLimitSizeTotal + * and each side do not cross fabric.cacheSideLimit + * those numbers are configurable so that you can get as much detail as you want + * making bargain with performances. + * @param {Object} dims + * @param {Object} dims.width width of canvas + * @param {Object} dims.height height of canvas + * @param {Object} dims.zoomX zoomX zoom value to unscale the canvas before drawing cache + * @param {Object} dims.zoomY zoomY zoom value to unscale the canvas before drawing cache + * @return {Object}.width width of canvas + * @return {Object}.height height of canvas + * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache + * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache + */ + _limitCacheSize: function(dims) { + var perfLimitSizeTotal = fabric.perfLimitSizeTotal, + maximumSide = fabric.cacheSideLimit, + width = dims.width, height = dims.height, + ar = width / height, limitedDims = fabric.util.limitDimsByArea(ar, perfLimitSizeTotal, maximumSide), + capValue = fabric.util.capValue, max = fabric.maxCacheSideLimit, min = fabric.minCacheSideLimit, + x = capValue(min, limitedDims.x, max), + y = capValue(min, limitedDims.y, max); + if (width > x) { + dims.zoomX /= width / x; + dims.width = x; + } + else if (width < min) { + dims.width = min; + } + if (height > y) { + dims.zoomY /= height / y; + dims.height = y; + } + else if (height < min) { + dims.height = min; + } + return dims; + }, + + /** * Return the dimension and the zoom level needed to create a cache canvas * big enough to host the object to be cached. * @private @@ -12525,8 +12610,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati width = dim.x * zoomX, height = dim.y * zoomY; return { - width: width + 2, - height: height + 2, + width: width + ALIASING_LIMIT, + height: height + ALIASING_LIMIT, zoomX: zoomX, zoomY: zoomY }; @@ -12545,17 +12630,41 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati return false; } } - var dims = this._getCacheCanvasDimensions(), + var dims = this._limitCacheSize(this._getCacheCanvasDimensions()), + minCacheSize = fabric.minCacheSideLimit, width = dims.width, height = dims.height, - zoomX = dims.zoomX, zoomY = dims.zoomY; - - if (width !== this.cacheWidth || height !== this.cacheHeight) { - this._cacheCanvas.width = Math.ceil(width); - this._cacheCanvas.height = Math.ceil(height); - this._cacheContext.translate(width / 2, height / 2); + zoomX = dims.zoomX, zoomY = dims.zoomY, + dimensionsChanged = width !== this.cacheWidth || height !== this.cacheHeight, + zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY, + shouldRedraw = dimensionsChanged || zoomChanged, + additionalWidth = 0, additionalHeight = 0, shouldResizeCanvas = false; + if (dimensionsChanged) { + var canvasWidth = this._cacheCanvas.width, + canvasHeight = this._cacheCanvas.height, + sizeGrowing = width > canvasWidth || height > canvasHeight, + sizeShrinking = (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) && + canvasWidth > minCacheSize && canvasHeight > minCacheSize; + shouldResizeCanvas = sizeGrowing || sizeShrinking; + if (sizeGrowing) { + additionalWidth = (width * 0.1) & ~1; + additionalHeight = (height * 0.1) & ~1; + } + } + if (shouldRedraw) { + if (shouldResizeCanvas) { + this._cacheCanvas.width = Math.max(Math.ceil(width) + additionalWidth, minCacheSize); + this._cacheCanvas.height = Math.max(Math.ceil(height) + additionalHeight, minCacheSize); + this.cacheWidth = width; + this.cacheHeight = height; + this.cacheTranslationX = (width + additionalWidth) / 2; + this.cacheTranslationY = (height + additionalHeight) / 2; + } + else { + this._cacheContext.setTransform(1, 0, 0, 1, 0, 0); + this._cacheContext.clearRect(0, 0, this._cacheCanvas.width, this._cacheCanvas.height); + } + this._cacheContext.translate(this.cacheTranslationX, this.cacheTranslationY); this._cacheContext.scale(zoomX, zoomY); - this.cacheWidth = width; - this.cacheHeight = height; this.zoomX = zoomX; this.zoomY = zoomY; return true; @@ -12772,7 +12881,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * Retrieves viewportTransform from Object's canvas if possible * @method getViewportTransform * @memberOf fabric.Object.prototype - * @return {Boolean} flipY value // TODO + * @return {Boolean} */ getViewportTransform: function() { if (this.canvas && this.canvas.viewportTransform) { @@ -12781,6 +12890,16 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati return fabric.iMatrix.concat(); }, + /* + * @private + * return if the object would be visible in rendering + * @memberOf fabric.Object.prototype + * @return {Boolean} + */ + isNotVisible: function() { + return this.opacity === 0 || (this.width === 0 && this.height === 0) || !this.visible; + }, + /** * Renders an object on a specified context * @param {CanvasRenderingContext2D} ctx Context to render on @@ -12788,7 +12907,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati */ render: function(ctx, noTransform) { // do not render if width/height are zeros or object is not visible - if ((this.width === 0 && this.height === 0) || !this.visible) { + if (this.isNotVisible()) { return; } if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) { @@ -12819,6 +12938,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati this.drawCacheOnCanvas(ctx); } else { + this.dirty = false; this.drawObject(ctx, noTransform); if (noTransform && this.objectCaching && this.statefullCache) { this.saveState({ propertySet: 'cacheProperties' }); @@ -12882,7 +13002,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati */ drawCacheOnCanvas: function(ctx) { ctx.scale(1 / this.zoomX, 1 / this.zoomY); - ctx.drawImage(this._cacheCanvas, -this.cacheWidth / 2, -this.cacheHeight / 2); + ctx.drawImage(this._cacheCanvas, -this.cacheTranslationX, -this.cacheTranslationY); }, /** @@ -12891,13 +13011,16 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * on parent canvas. */ isCacheDirty: function(skipCanvas) { - if (!skipCanvas && this._updateCacheCanvas()) { + if (this.isNotVisible()) { + return false; + } + if (this._cacheCanvas && !skipCanvas && this._updateCacheCanvas()) { // in this case the context is already cleared. return true; } else { if (this.dirty || (this.statefullCache && this.hasStateChanged('cacheProperties'))) { - if (!skipCanvas) { + if (this._cacheCanvas && !skipCanvas) { var width = this.cacheWidth / this.zoomX; var height = this.cacheHeight / this.zoomY; this._cacheContext.clearRect(-width / 2, -height / 2, width, height); @@ -14612,35 +14735,34 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } function _isEqual(origValue, currentValue, firstPass) { - if (!fabric.isLikelyNode && origValue instanceof Element) { - // avoid checking deep html elements - return origValue === currentValue; + if (origValue === currentValue) { + // if the objects are identical, return + return true; } - else if (origValue instanceof Array) { + else if (Array.isArray(origValue)) { if (origValue.length !== currentValue.length) { return false; } for (var i = 0, len = origValue.length; i < len; i++) { - if (origValue[i] !== currentValue[i]) { + if (!_isEqual(origValue[i], currentValue[i])) { return false; } } return true; } else if (origValue && typeof origValue === 'object') { - if (!firstPass && Object.keys(origValue).length !== Object.keys(currentValue).length) { + var keys = Object.keys(origValue), key; + if (!firstPass && keys.length !== Object.keys(currentValue).length) { return false; } - for (var key in origValue) { + for (var i = 0, len = keys.length; i < len; i++) { + key = keys[i]; if (!_isEqual(origValue[key], currentValue[key])) { return false; } } return true; } - else { - return origValue === currentValue; - } } @@ -14653,11 +14775,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ hasStateChanged: function(propertySet) { propertySet = propertySet || originalSet; - propertySet = '_' + propertySet; - if (!Object.keys(this[propertySet]).length) { + var dashedPropertySet = '_' + propertySet; + if (Object.keys(this[dashedPropertySet]).length < this[propertySet].length) { return true; } - return !_isEqual(this[propertySet], this, true); + return !_isEqual(this[dashedPropertySet], this, true); }, /** @@ -16873,8 +16995,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return; } + var stateProperties = fabric.Object.prototype.stateProperties.concat(); + stateProperties.push('path'); + var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); - cacheProperties.push('path'); + cacheProperties.push('path', 'fillRule'); /** * Path class @@ -16915,6 +17040,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot cacheProperties: cacheProperties, + stateProperties: stateProperties, + /** * Constructor * @param {Array|String} path Path data (sequence of coordinates and corresponding "command" tokens) @@ -17850,6 +17977,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot fill: '', /** + * Pathgroups are container, do not render anything on theyr own, ence no cache properties + * @type Boolean + * @default + */ + cacheProperties: [], + + /** * Constructor * @param {Array} paths * @param {Object} [options] Options object @@ -17974,8 +18108,10 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } for (var i = 0, len = this.paths.length; i < len; i++) { if (this.paths[i].isCacheDirty(true)) { - var dim = this._getNonTransformedDimensions(); - this._cacheContext.clearRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y); + if (this._cacheCanvas) { + var x = this.cacheWidth / this.zoomX, y = this.cacheHeight / this.zoomY; + this._cacheContext.clearRect(-x / 2, -y / 2, x, y); + } return true; } } @@ -18199,6 +18335,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot subTargetCheck: false, /** + * Groups are container, do not render anything on theyr own, ence no cache properties + * @type Boolean + * @default + */ + cacheProperties: [], + + /** * Constructor * @param {Object} objects Group objects * @param {Object} [options] Options object @@ -18509,8 +18652,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } for (var i = 0, len = this._objects.length; i < len; i++) { if (this._objects[i].isCacheDirty(true)) { - var dim = this._getNonTransformedDimensions(); - this._cacheContext.clearRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y); + if (this._cacheCanvas) { + // if this group has not a cache canvas there is nothing to clean + var x = this.cacheWidth / this.zoomX, y = this.cacheHeight / this.zoomY; + this._cacheContext.clearRect(-x / 2, -y / 2, x, y); + } return true; } } diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 3755a5895..fc257a6c7 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,9 +1,9 @@ -var fabric=fabric||{version:"1.7.13"};"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(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),n=this,s=this.renderOnAddRemove;return this.renderOnAddRemove=!1,this._enlivenObjects(r.objects,function(t){n.clear(),n._setBgOverlay(r,function(){t.forEach(function(t,e){n.insertAt(t,e)}),n.renderOnAddRemove=s,delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),n.renderAll(),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,r),this.__setBgOverlay("overlayImage",t.overlayImage,i,r),this.__setBgOverlay("backgroundColor",t.background,i,r),this.__setBgOverlay("overlayColor",t.overlay,i,r)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_enlivenObjects:function(t,e,i){return t&&0!==t.length?void fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,i):void(e&&e([]))},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.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(t.slice&&"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 +var fabric=fabric||{version:"1.7.14"};"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.canvasModule="canvas",fabric.perfLimitSizeTotal=2097152,fabric.maxCacheSideLimit=4096,fabric.minCacheSideLimit=256,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(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),n=this,s=this.renderOnAddRemove;return this.renderOnAddRemove=!1,this._enlivenObjects(r.objects,function(t){n.clear(),n._setBgOverlay(r,function(){t.forEach(function(t,e){n.insertAt(t,e)}),n.renderOnAddRemove=s,delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),n.renderAll(),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,r),this.__setBgOverlay("overlayImage",t.overlayImage,i,r),this.__setBgOverlay("backgroundColor",t.background,i,r),this.__setBgOverlay("overlayColor",t.overlay,i,r)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_enlivenObjects:function(t,e,i){return t&&0!==t.length?void fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,i):void(e&&e([]))},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.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,c=2;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY fillRule".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height strokeLineCap strokeLineJoin strokeMiterLimit backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,r=e.cacheSideLimit,n=t.width,s=t.height,o=n/s,a=e.util.limitDimsByArea(o,i,r),h=e.util.capValue,c=e.maxCacheSideLimit,l=e.minCacheSideLimit,u=h(l,a.x,c),f=h(l,a.y,c);return n>u?(t.zoomX/=n/u,t.width=u):nf?(t.zoomY/=s/f,t.height=f):sg||s>p,b=(n<.9*g||s<.9*p)&&g>r&&p>r;d=v||b,v&&(u=.1*n&-2,f=.1*s&-2)}return!!l&&(d?(this._cacheCanvas.width=Math.max(Math.ceil(n)+u,r),this._cacheCanvas.height=Math.max(Math.ceil(s)+f,r),this.cacheWidth=n,this.cacheHeight=s,this.cacheTranslationX=(n+u)/2,this.cacheTranslationY=(s+f)/2):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,this._cacheCanvas.width,this._cacheCanvas.height)),this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(o,a),this.zoomX=o,this.zoomY=a,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===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()},isNotVisible:function(){return 0===this.opacity||0===this.width&&0===this.height||!this.visible},render:function(t,i){this.isNotVisible()||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.dirty=!1,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.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){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,cacheProperties:[],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 9847bbeb5b98cc3d53c1a44a03694545c02d4d66..011287d9dc4b6b8f6a035714060826a27662457d 100644 GIT binary patch delta 70809 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 PH4gtj3gi#LPyYh|FWS&E delta 70269 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 1670407b1..a19083bd4 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,5 +1,5 @@ var fabric = fabric || { - version: "1.7.13" + version: "1.7.14" }; if (typeof exports !== "undefined") { @@ -33,6 +33,14 @@ fabric.fontPaths = {}; fabric.iMatrix = [ 1, 0, 0, 1, 0, 0 ]; +fabric.canvasModule = "canvas"; + +fabric.perfLimitSizeTotal = 2097152; + +fabric.maxCacheSideLimit = 4096; + +fabric.minCacheSideLimit = 256; + fabric.charWidthsCache = {}; fabric.devicePixelRatio = fabric.window.devicePixelRatio || fabric.window.webkitDevicePixelRatio || fabric.window.mozDevicePixelRatio || 1; @@ -559,6 +567,16 @@ fabric.CommonMethods = { } else if (fabric.charWidthsCache[fontFamily]) { delete fabric.charWidthsCache[fontFamily]; } + }, + limitDimsByArea: function(ar, maximumArea) { + var roughWidth = Math.sqrt(maximumArea * ar), perfLimitSizeY = Math.floor(maximumArea / roughWidth); + return { + x: Math.floor(roughWidth), + y: perfLimitSizeY + }; + }, + capValue: function(min, value, max) { + return Math.max(min, Math.min(value, max)); } }; })(typeof exports !== "undefined" ? exports : this); @@ -5978,7 +5996,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { (function(global) { "use strict"; - var fabric = global.fabric || (global.fabric = {}), extend = fabric.util.object.extend, clone = fabric.util.object.clone, toFixed = fabric.util.toFixed, capitalize = fabric.util.string.capitalize, degreesToRadians = fabric.util.degreesToRadians, supportsLineDash = fabric.StaticCanvas.supports("setLineDash"), objectCaching = !fabric.isLikelyNode; + var fabric = global.fabric || (global.fabric = {}), extend = fabric.util.object.extend, clone = fabric.util.object.clone, toFixed = fabric.util.toFixed, capitalize = fabric.util.string.capitalize, degreesToRadians = fabric.util.degreesToRadians, supportsLineDash = fabric.StaticCanvas.supports("setLineDash"), objectCaching = !fabric.isLikelyNode, ALIASING_LIMIT = 2; if (fabric.Object) { return; } @@ -6051,8 +6069,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { statefullCache: false, noScaleCache: true, dirty: true, - 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(" "), + stateProperties: ("top left width height scaleX scaleY flipX flipY originX originY transformMatrix " + "stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit " + "angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor " + "skewX skewY fillRule").split(" "), + cacheProperties: ("fill stroke strokeWidth strokeDashArray width height" + " strokeLineCap strokeLineJoin strokeMiterLimit backgroundColor").split(" "), initialize: function(options) { options = options || {}; if (options) { @@ -6065,11 +6083,27 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { this._cacheContext = this._cacheCanvas.getContext("2d"); this._updateCacheCanvas(); }, + _limitCacheSize: function(dims) { + var perfLimitSizeTotal = fabric.perfLimitSizeTotal, maximumSide = fabric.cacheSideLimit, width = dims.width, height = dims.height, ar = width / height, limitedDims = fabric.util.limitDimsByArea(ar, perfLimitSizeTotal, maximumSide), capValue = fabric.util.capValue, max = fabric.maxCacheSideLimit, min = fabric.minCacheSideLimit, x = capValue(min, limitedDims.x, max), y = capValue(min, limitedDims.y, max); + if (width > x) { + dims.zoomX /= width / x; + dims.width = x; + } else if (width < min) { + dims.width = min; + } + if (height > y) { + dims.zoomY /= height / y; + dims.height = y; + } else if (height < min) { + dims.height = min; + } + return dims; + }, _getCacheCanvasDimensions: function() { var zoom = this.canvas && this.canvas.getZoom() || 1, objectScale = this.getObjectScaling(), dim = this._getNonTransformedDimensions(), retina = this.canvas && this.canvas._isRetinaScaling() ? fabric.devicePixelRatio : 1, zoomX = objectScale.scaleX * zoom * retina, zoomY = objectScale.scaleY * zoom * retina, width = dim.x * zoomX, height = dim.y * zoomY; return { - width: width + 2, - height: height + 2, + width: width + ALIASING_LIMIT, + height: height + ALIASING_LIMIT, zoomX: zoomX, zoomY: zoomY }; @@ -6081,14 +6115,29 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { return false; } } - var dims = this._getCacheCanvasDimensions(), width = dims.width, height = dims.height, zoomX = dims.zoomX, zoomY = dims.zoomY; - if (width !== this.cacheWidth || height !== this.cacheHeight) { - this._cacheCanvas.width = Math.ceil(width); - this._cacheCanvas.height = Math.ceil(height); - this._cacheContext.translate(width / 2, height / 2); + var dims = this._limitCacheSize(this._getCacheCanvasDimensions()), minCacheSize = fabric.minCacheSideLimit, width = dims.width, height = dims.height, zoomX = dims.zoomX, zoomY = dims.zoomY, dimensionsChanged = width !== this.cacheWidth || height !== this.cacheHeight, zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY, shouldRedraw = dimensionsChanged || zoomChanged, additionalWidth = 0, additionalHeight = 0, shouldResizeCanvas = false; + if (dimensionsChanged) { + var canvasWidth = this._cacheCanvas.width, canvasHeight = this._cacheCanvas.height, sizeGrowing = width > canvasWidth || height > canvasHeight, sizeShrinking = (width < canvasWidth * .9 || height < canvasHeight * .9) && canvasWidth > minCacheSize && canvasHeight > minCacheSize; + shouldResizeCanvas = sizeGrowing || sizeShrinking; + if (sizeGrowing) { + additionalWidth = width * .1 & ~1; + additionalHeight = height * .1 & ~1; + } + } + if (shouldRedraw) { + if (shouldResizeCanvas) { + this._cacheCanvas.width = Math.max(Math.ceil(width) + additionalWidth, minCacheSize); + this._cacheCanvas.height = Math.max(Math.ceil(height) + additionalHeight, minCacheSize); + this.cacheWidth = width; + this.cacheHeight = height; + this.cacheTranslationX = (width + additionalWidth) / 2; + this.cacheTranslationY = (height + additionalHeight) / 2; + } else { + this._cacheContext.setTransform(1, 0, 0, 1, 0, 0); + this._cacheContext.clearRect(0, 0, this._cacheCanvas.width, this._cacheCanvas.height); + } + this._cacheContext.translate(this.cacheTranslationX, this.cacheTranslationY); this._cacheContext.scale(zoomX, zoomY); - this.cacheWidth = width; - this.cacheHeight = height; this.zoomX = zoomX; this.zoomY = zoomY; return true; @@ -6225,8 +6274,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { } return fabric.iMatrix.concat(); }, + isNotVisible: function() { + return this.opacity === 0 || this.width === 0 && this.height === 0 || !this.visible; + }, render: function(ctx, noTransform) { - if (this.width === 0 && this.height === 0 || !this.visible) { + if (this.isNotVisible()) { return; } if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) { @@ -6257,6 +6309,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { } this.drawCacheOnCanvas(ctx); } else { + this.dirty = false; this.drawObject(ctx, noTransform); if (noTransform && this.objectCaching && this.statefullCache) { this.saveState({ @@ -6284,14 +6337,17 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { }, drawCacheOnCanvas: function(ctx) { ctx.scale(1 / this.zoomX, 1 / this.zoomY); - ctx.drawImage(this._cacheCanvas, -this.cacheWidth / 2, -this.cacheHeight / 2); + ctx.drawImage(this._cacheCanvas, -this.cacheTranslationX, -this.cacheTranslationY); }, isCacheDirty: function(skipCanvas) { - if (!skipCanvas && this._updateCacheCanvas()) { + if (this.isNotVisible()) { + return false; + } + if (this._cacheCanvas && !skipCanvas && this._updateCacheCanvas()) { return true; } else { if (this.dirty || this.statefullCache && this.hasStateChanged("cacheProperties")) { - if (!skipCanvas) { + if (this._cacheCanvas && !skipCanvas) { var width = this.cacheWidth / this.zoomX; var height = this.cacheHeight / this.zoomY; this._cacheContext.clearRect(-width / 2, -height / 2, width, height); @@ -7066,40 +7122,40 @@ fabric.util.object.extend(fabric.Object.prototype, { extend(origin[destination], tmpObj, deep); } function _isEqual(origValue, currentValue, firstPass) { - if (!fabric.isLikelyNode && origValue instanceof Element) { - return origValue === currentValue; - } else if (origValue instanceof Array) { + if (origValue === currentValue) { + return true; + } else if (Array.isArray(origValue)) { if (origValue.length !== currentValue.length) { return false; } for (var i = 0, len = origValue.length; i < len; i++) { - if (origValue[i] !== currentValue[i]) { + if (!_isEqual(origValue[i], currentValue[i])) { return false; } } return true; } else if (origValue && typeof origValue === "object") { - if (!firstPass && Object.keys(origValue).length !== Object.keys(currentValue).length) { + var keys = Object.keys(origValue), key; + if (!firstPass && keys.length !== Object.keys(currentValue).length) { return false; } - for (var key in origValue) { + for (var i = 0, len = keys.length; i < len; i++) { + key = keys[i]; if (!_isEqual(origValue[key], currentValue[key])) { return false; } } return true; - } else { - return origValue === currentValue; } } fabric.util.object.extend(fabric.Object.prototype, { hasStateChanged: function(propertySet) { propertySet = propertySet || originalSet; - propertySet = "_" + propertySet; - if (!Object.keys(this[propertySet]).length) { + var dashedPropertySet = "_" + propertySet; + if (Object.keys(this[dashedPropertySet]).length < this[propertySet].length) { return true; } - return !_isEqual(this[propertySet], this, true); + return !_isEqual(this[dashedPropertySet], this, true); }, saveState: function(options) { var propertySet = options && options.propertySet || originalSet, destination = "_" + propertySet; @@ -8056,14 +8112,17 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.warn("fabric.Path is already defined"); return; } + var stateProperties = fabric.Object.prototype.stateProperties.concat(); + stateProperties.push("path"); var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); - cacheProperties.push("path"); + cacheProperties.push("path", "fillRule"); fabric.Path = fabric.util.createClass(fabric.Object, { type: "path", path: null, minX: 0, minY: 0, cacheProperties: cacheProperties, + stateProperties: stateProperties, initialize: function(path, options) { options = options || {}; this.callSuper("initialize", options); @@ -8569,6 +8628,7 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.PathGroup = fabric.util.createClass(fabric.Object, { type: "path-group", fill: "", + cacheProperties: [], initialize: function(paths, options) { options = options || {}; this.paths = paths || []; @@ -8658,8 +8718,10 @@ fabric.util.object.extend(fabric.Object.prototype, { } for (var i = 0, len = this.paths.length; i < len; i++) { if (this.paths[i].isCacheDirty(true)) { - var dim = this._getNonTransformedDimensions(); - this._cacheContext.clearRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y); + if (this._cacheCanvas) { + var x = this.cacheWidth / this.zoomX, y = this.cacheHeight / this.zoomY; + this._cacheContext.clearRect(-x / 2, -y / 2, x, y); + } return true; } } @@ -8765,6 +8827,7 @@ fabric.util.object.extend(fabric.Object.prototype, { type: "group", strokeWidth: 0, subTargetCheck: false, + cacheProperties: [], initialize: function(objects, options, isAlreadyGrouped) { options = options || {}; this._objects = []; @@ -8947,8 +9010,10 @@ fabric.util.object.extend(fabric.Object.prototype, { } for (var i = 0, len = this._objects.length; i < len; i++) { if (this._objects[i].isCacheDirty(true)) { - var dim = this._getNonTransformedDimensions(); - this._cacheContext.clearRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y); + if (this._cacheCanvas) { + var x = this.cacheWidth / this.zoomX, y = this.cacheHeight / this.zoomY; + this._cacheContext.clearRect(-x / 2, -y / 2, x, y); + } return true; } } diff --git a/package.json b/package.json index 919434796..43ebe55c4 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.13", + "version": "1.7.14", "author": "Juriy Zaytsev ", "contributors": [ {