From 58f2488fc7c2486a0ebddb291e6cfebde806e5e5 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Mon, 5 Feb 2018 00:05:12 +0100 Subject: [PATCH] changes (#4676) --- CHANGELOG.md | 10 ++ CONTRIBUTING.md | 4 +- HEADER.js | 4 +- README.md | 14 +-- dist/fabric.js | 218 ++++++++++++++++++++++++++--------------- dist/fabric.min.js | 2 +- dist/fabric.min.js.gz | Bin 78789 -> 79012 bytes dist/fabric.require.js | 148 +++++++++++++++++----------- package.json | 2 +- 9 files changed, 253 insertions(+), 149 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a60e23db..c19f30e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,14 @@ **Version 2.0.0** + - final + - fix dataurl and svg export on retina and rounding [#4674](https://github.com/kangax/fabric.js/pull/4674) + - avoid error if iText is removed on mousedown [#4650](https://github.com/kangax/fabric.js/pull/4650) + - fix calcOffset when text enter editing [#4649](https://github.com/kangax/fabric.js/pull/4649) + - Gradient fix parsing floats [#4637](https://github.com/kangax/fabric.js/pull/4637) + - Add CrossOrigin managment to fabric.Pattern [#4618](https://github.com/kangax/fabric.js/pull/4618) + - Add patternTransform toObject saving [#4626](https://github.com/kangax/fabric.js/pull/4626) + - normalize brushes render [#4613](https://github.com/kangax/fabric.js/pull/4613) + - avoid charspacing shortcut [#4594](https://github.com/kangax/fabric.js/pull/4594) + - Fix color toHexa() [#4579](https://github.com/kangax/fabric.js/pull/4579) - rc3 and rc4 - more fixes to transformMatrix memoization - Canvas.selectionFullyContained allows you to select objects just when full grabbed by the selections. [#4508](https://github.com/kangax/fabric.js/pull/4508) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bc8e9f2f..83a0e238 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,7 +11,7 @@ To get your questions answered, please ask/search on [Fabric's google group], [StackOverflow] or on Fabric's IRC channel (irc://irc.freenode.net/#fabric.js). Please do not open an issue if you're not sure it's a bug or if it's not a feature/suggestion. -For news about Fabric you can follow [@fabric.js], [@kangax], or [@kienzle_s] on Twitter. +For news about Fabric you can follow [@fabric.js], [@AndreaBogazzi], [@kangax], or [@kienzle_s] on Twitter. Demos and examples can be found on [jsfiddle], [codepen.io] and [fabricjs.com]. ## Issue tracker @@ -61,10 +61,12 @@ Here are a few notes you should take into account: [Fabric's google group]: https://groups.google.com/forum/#!forum/fabricjs [stackoverflow]: http://stackoverflow.com/questions/tagged/fabricjs [@fabric.js]: https://twitter.com/fabricjs +[@AndreaBogazzi]: https://twitter.com/AndreaBogazzi [@kangax]: https://twitter.com/kangax [@kienzle_s]: https://twitter.com/kienzle_s [jsfiddle]: http://jsfiddle.net/user/fabricjs/fiddles [codepen.io]: http://codepen.io/tag/fabricjs [fabricjs.com]: http://fabricjs.com/demos +[fabricjs.com/docs]: http://fabricjs.com/docs [JSDoc 3]: http://usejsdoc.org/ [issue]: https://github.com/kangax/fabric.js/issues diff --git a/HEADER.js b/HEADER.js index 1289fae6..3c1d978c 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ - /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ +/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: '2.0.0-rc.4' }; +var fabric = fabric || { version: '2.0.0' }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/README.md b/README.md index 3a745bc8..fe696178 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Fabric.js allows you to easily create simple shapes like rectangles, circles, tr ### Goals -- Unit tested (4600+ assertion, 940+ tests at the moment, 75%+ coverage) +- Unit tested (4800+ assertion, 1050+ tests at the moment, 76%+ coverage) - Modular (~60 small ["classes", modules, mixins](http://fabricjs.com/docs/)) - Cross-browser - [Fast](https://github.com/kangax/fabric.js/wiki/Focus-on-speed) @@ -130,13 +130,9 @@ To install Fabric.js using npm, you must first manually [install Cairo](http://c //# sourceMappingURL=fabric.min.js.map -6. Lint source code (prerequisite: `npm -g install jshint`) +6. Ensure code guidelines are met (prerequisite: `npm -g install eslint`) - $ npm run lint_tests - -7. Ensure code guidelines are met (prerequisite: `npm -g install jscs`) - - $ npm run lint + $ npm run lint && npm run lint_tests

Testing

@@ -239,7 +235,7 @@ For example: ### Staying in touch -Follow [@fabric.js](http://twitter.com/fabricjs), [@kangax](http://twitter.com/kangax) or or [@AndreaBogazzi](http://twitter.com/AndreaBogazzi) on twitter. +Follow [@fabric.js](http://twitter.com/fabricjs), [@kangax](http://twitter.com/kangax) or [@AndreaBogazzi](http://twitter.com/AndreaBogazzi) on twitter. Questions, suggestions — [fabric.js on Google Groups](http://groups.google.com/group/fabricjs). @@ -258,7 +254,7 @@ Get help in Fabric's IRC channel — irc://irc.freenode.net/#fabric.js - [Maxim "hakunin" Chernyak](http://twitter.com/hakunin) for ideas, and help with various parts of the library throughout its life - [Sergey Nisnevich](http://nisnya.com) for help with geometry logic - [Stefan Kienzle](https://twitter.com/kienzle_s) for help with bugs, features, documentation, GitHub issues -- [Shutterstock](http://www.shutterstock.com) for the time and resources invested in using and improving fabric.js +- [Shutterstock](http://www.shutterstock.com/jobs) for the time and resources invested in using and improving fabric.js - [And all the other GitHub contributors](https://github.com/kangax/fabric.js/graphs/contributors) ### MIT License diff --git a/dist/fabric.js b/dist/fabric.js index 2c4d261e..813ec700 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -5028,7 +5028,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { toHexa: function() { var source = this.getSource(), a; - a = source[3] * 255; + a = Math.round(source[3] * 255); a = a.toString(16); a = (a.length === 1) ? ('0' + a) : a; @@ -5888,7 +5888,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { options[prop] = 0; } propValue = parseFloat(options[prop], 10); - if (typeof options[prop] === 'string' && /^\d+%$/.test(options[prop])) { + if (typeof options[prop] === 'string' && /^(\d+\.\d+)%|(\d+)%$/.test(options[prop])) { multFactor = 0.01; } else { @@ -5961,6 +5961,21 @@ fabric.ElementsParser.prototype.checkIfDone = function() { */ offsetY: 0, + /** + * crossOrigin value (one of "", "anonymous", "use-credentials") + * @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes + * @type String + * @default + */ + crossOrigin: '', + + /** + * transform matrix to change the pattern, imported from svgs. + * @type Array + * @default + */ + patternTransform: null, + /** * Constructor * @param {Object} [options] Options object @@ -5988,7 +6003,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { fabric.util.loadImage(options.source, function(img) { _this.source = img; callback && callback(_this); - }); + }, null, this.crossOrigin); } }, @@ -6018,8 +6033,10 @@ fabric.ElementsParser.prototype.checkIfDone = function() { type: 'pattern', source: source, repeat: this.repeat, + crossOrigin: this.crossOrigin, offsetX: toFixed(this.offsetX, NUM_FRACTION_DIGITS), offsetY: toFixed(this.offsetY, NUM_FRACTION_DIGITS), + patternTransform: this.patternTransform ? this.patternTransform.concat() : null }; fabric.util.populateWithProperties(this, object, propertiesToInclude); @@ -8146,6 +8163,17 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype } }, + /** + * Sets the transformation on given context + * @param {RenderingContext2d} ctx context to render on + * @private + */ + _saveAndTransform: function(ctx) { + var v = this.canvas.viewportTransform; + ctx.save(); + ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]); + }, + /** * Sets brush shadow styles * @private @@ -8278,12 +8306,10 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype */ _render: function() { var ctx = this.canvas.contextTop, i, len, - v = this.canvas.viewportTransform, p1 = this._points[0], p2 = this._points[1]; - ctx.save(); - ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]); + this._saveAndTransform(ctx); ctx.beginPath(); //if we only have 2 points in the path and they are the same //it means that the user only clicked the canvas without moving the mouse @@ -8442,11 +8468,8 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric */ drawDot: function(pointer) { var point = this.addPoint(pointer), - ctx = this.canvas.contextTop, - v = this.canvas.viewportTransform; - ctx.save(); - ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]); - + ctx = this.canvas.contextTop; + this._saveAndTransform(ctx); ctx.fillStyle = point.fill; ctx.beginPath(); ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false); @@ -8466,6 +8489,25 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric this.drawDot(pointer); }, + /** + * Render the full state of the brush + * @private + */ + _render: function() { + var ctx = this.canvas.contextTop, i, len, + points = this.points, point; + this._saveAndTransform(ctx); + for (i = 0, len = points.length; i < len; i++) { + point = points[i]; + ctx.fillStyle = point.fill; + ctx.beginPath(); + ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + } + ctx.restore(); + }, + /** * Invoked on mouse move * @param {Object} pointer @@ -8602,7 +8644,7 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric this._setShadow(); this.addSprayChunk(pointer); - this.render(); + this.render(this.sprayChunkPoints); }, /** @@ -8611,7 +8653,7 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric */ onMouseMove: function(pointer) { this.addSprayChunk(pointer); - this.render(); + this.render(this.sprayChunkPoints); }, /** @@ -8637,8 +8679,6 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric originY: 'center', fill: this.color }); - - this.shadow && rect.setShadow(this.shadow); rects.push(rect); } } @@ -8648,8 +8688,7 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric } var group = new fabric.Group(rects, { originX: 'center', originY: 'center' }); - group.canvas = this.canvas; - + this.shadow && group.setShadow(this.shadow); this.canvas.add(group); this.canvas.fire('path:created', { path: group }); @@ -8683,18 +8722,16 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric }, /** - * Renders brush + * Render new chunk of spray brush */ - render: function() { - var ctx = this.canvas.contextTop; + render: function(sprayChunk) { + var ctx = this.canvas.contextTop, i, len; ctx.fillStyle = this.color; - var v = this.canvas.viewportTransform, i, len; - ctx.save(); - ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]); + this._saveAndTransform(ctx); - for (i = 0, len = this.sprayChunkPoints.length; i < len; i++) { - var point = this.sprayChunkPoints[i]; + for (i = 0, len = sprayChunk.length; i < len; i++) { + var point = sprayChunk[i]; if (typeof point.opacity !== 'undefined') { ctx.globalAlpha = point.opacity; } @@ -8703,6 +8740,21 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric ctx.restore(); }, + /** + * Render all spray chunks + */ + _render: function() { + var ctx = this.canvas.contextTop, i, ilen; + ctx.fillStyle = this.color; + + this._saveAndTransform(ctx); + + for (i = 0, ilen = this.sprayChunks.length; i < ilen; i++) { + this.render(this.sprayChunks[i]); + } + ctx.restore(); + }, + /** * @param {Object} pointer */ @@ -10922,7 +10974,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ _onMouseDownInDrawingMode: function(e) { this._isCurrentlyDrawing = true; - this.discardActiveObject(e).requestRenderAll(); + if (this.getActiveObject()) { + this.discardActiveObject(e).requestRenderAll(); + } if (this.clipTo) { fabric.util.clipContext(this, this.contextTop); } @@ -11543,11 +11597,12 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @param {Object} [options] Options object * @param {String} [options.format=png] The format of the output image. Either "jpeg" or "png" * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg. - * @param {Number} [options.multiplier=1] Multiplier to scale by + * @param {Number} [options.multiplier=1] Multiplier to scale by, to have consistent * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14 * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14 * @param {Number} [options.width] Cropping width. Introduced in v1.2.14 * @param {Number} [options.height] Cropping height. Introduced in v1.2.14 + * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 2.0.0 * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format * @see {@link http://jsfiddle.net/fabricjs/NfZVb/|jsFiddle demo} * @example Generate jpeg dataURL with lower quality @@ -11574,7 +11629,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab var format = options.format || 'png', quality = options.quality || 1, - multiplier = options.multiplier || 1, + multiplier = options.multiplier || options.enableRetinaScaling ? 1 : 1 / this.getRetinaScaling(), cropping = { left: options.left || 0, top: options.top || 0, @@ -13292,7 +13347,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14 * @param {Number} [options.width] Cropping width. Introduced in v1.2.14 * @param {Number} [options.height] Cropping height. Introduced in v1.2.14 - * @param {Boolean} [options.enableRetina] Enable retina scaling for clone image. Introduce in 1.6.4 + * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4 * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format */ toDataURL: function(options) { @@ -13304,7 +13359,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati el.width = boundingRect.width; el.height = boundingRect.height; fabric.util.wrapElement(el, 'div'); - var canvas = new fabric.StaticCanvas(el, { enableRetinaScaling: options.enableRetinaScaling }); + var canvas = new fabric.StaticCanvas(el, { + enableRetinaScaling: options.enableRetinaScaling, + renderOnAddRemove: false, + skipOffscreen: false, + }); // to avoid common confusion https://github.com/kangax/fabric.js/issues/806 if (options.format === 'jpg') { options.format = 'jpeg'; @@ -13324,10 +13383,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati var originalCanvas = this.canvas; canvas.add(this); var data = canvas.toDataURL(options); - this.set(origParams).setCoords(); this.canvas = originalCanvas; - + // canvas.dispose will call image.dispose that will nullify the elements + // since this canvas is a simple element for the process, we remove references + // to objects in this way in order to avoid object trashing. + canvas._objects = []; canvas.dispose(); canvas = null; @@ -14588,8 +14649,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot /* _TO_SVG_START_ */ (function() { - var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; - function getSvgColorString(prop, value) { if (!value) { return prop + ': none; '; @@ -14656,7 +14715,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot var term = '; ', strokeWidth = style.strokeWidth ? 'stroke-width: ' + style.strokeWidth + term : '', fontFamily = style.fontFamily ? 'font-family: ' + style.fontFamily.replace(/"/g, '\'') + term : '', - fontSize = style.fontSize ? 'font-size: ' + style.fontSize + term : '', + fontSize = style.fontSize ? 'font-size: ' + style.fontSize + 'px' + term : '', fontStyle = style.fontStyle ? 'font-style: ' + style.fontStyle + term : '', fontWeight = style.fontWeight ? 'font-weight: ' + style.fontWeight + term : '', fill = style.fill ? getSvgColorString('fill', style.fill) : '', @@ -14755,6 +14814,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot _setSVGBg: function(textBgRects) { if (this.backgroundColor) { + var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; textBgRects.push( '\t\t-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);void 0!==e&&(this.clipTo=new Function("ctx",e))}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return-1!==i&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e);return{x:t.x*r-t.y*i,y:t.x*i+t.y*r}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e)-i,n=[t[0].y,t[1].y,t[2].y,t[3].y],s=fabric.util.array.min(n);return{left:i,top:s,width:r,height:fabric.util.array.max(n)-s}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},getSvgAttributes:function(t){var e=["instantiated_by_use","style","id","class"];switch(t){case"linearGradient":e=e.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);break;case"radialGradient":e=e.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);break;case"stop":e=e.concat(["offset","stop-color","stop-opacity"])}return e},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)(r+=a[d++%f])>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(){return fabric.document.createElement("canvas")},createImage:function(){return fabric.document.createElement("img")},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.rotate(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?P-=2*f:1===c&&P<0&&(P+=2*f);for(var M=Math.ceil(Math.abs(P/f*2)),F=[],I=P/M,L=8/3*Math.sin(I/4)*Math.sin(I/4)/Math.sin(I/2),B=A+I,R=0;R=n?s-n:2*Math.PI-(n-s)}function i(t,e,i,r,n,a,h,c){var l=o.call(arguments);if(s[l])return s[l];var u,f,d,g,p,v,m,b,_=Math.sqrt,y=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var T=0;T<2;++T)if(T>0&&(f=6*e-12*r+6*a,u=-3*e+9*r-9*a+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;0<(g=-d/f)&&g<1&&S.push(g)}else(m=f*f-4*d*u)<0||(0<(p=(-f+(b=_(m)))/(2*u))&&p<1&&S.push(p),0<(v=(-f-b)/(2*u))&&v<1&&S.push(v));for(var O,k,D,j=S.length,E=j;j--;)O=(D=1-(g=S[j]))*D*D*t+3*D*D*g*i+3*D*g*g*n+g*g*g*h,w[0][j]=O,k=D*D*D*e+3*D*D*g*r+3*D*g*g*a+g*g*g*c,w[1][j]=k;w[0][E]=t,w[1][E]=e,w[0][E+1]=h,w[1][E+1]=c;var A=[{x:y.apply(null,w[0]),y:y.apply(null,w[1])},{x:x.apply(null,w[0]),y:x.apply(null,w[1])}];return s[l]=A,A}var r={},n={},s={},o=Array.prototype.join;fabric.util.drawArc=function(e,i,r,n){for(var s=n[0],o=n[1],a=n[2],h=n[3],c=n[4],l=[[],[],[],[]],u=t(n[5]-i,n[6]-r,s,o,h,c,a),f=0,d=u.length;f=e})}}}(),function(){function t(e,i,r){if(r)if(!fabric.isLikelyNode&&i instanceof Element)e=i;else if(i instanceof Array){e=[];for(var n=0,s=i.length;n/g,">")},graphemeSplit:function(t){var e,i=0,r=[];for(i=0,e;i57343)return t.charAt(e);if(55296<=i&&i<=56319){if(t.length<=e+1)throw"High surrogate without following low surrogate";var r=t.charCodeAt(e+1);if(56320>r||r>57343)throw"High surrogate without following low surrogate";return t.charAt(e)+t.charAt(e+1)}if(0===e)throw"Low surrogate without preceding high surrogate";var n=t.charCodeAt(e-1);if(55296>n||n>56319)throw"Low surrogate without preceding high surrogate";return!1}(t,i))&&r.push(e);return r}}}(),function(){function t(){}function e(t){for(var e=null,r=this;r.constructor.superclass;){var n=r.constructor.superclass.prototype[t];if(r[t]!==n){e=n;break}r=r.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,i.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}var i=Array.prototype.slice,r=function(){},n=function(){for(var t in{toString:1})if("toString"===t)return!1;return!0}(),s=function(t,e,i){for(var r in e)r in t.prototype&&"function"==typeof t.prototype[r]&&(e[r]+"").indexOf("callSuper")>-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],n&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=function(){function n(){this.initialize.apply(this,arguments)}var o=null,a=i.call(arguments,0);"function"==typeof a[0]&&(o=a.shift()),n.superclass=o,n.subclasses=[],o&&(t.prototype=o.prototype,n.prototype=new t,o.subclasses.push(n));for(var h=0,c=a.length;h=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(r,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=function(t,e){var i=t.style;if(!i)return t;if("string"==typeof e)return t.style.cssText+=";"+e,e.indexOf("opacity")>-1?n(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)"opacity"===r?n(t,e[r]):i["float"===r||"cssFloat"===r?void 0===i.styleFloat?"cssFloat":"styleFloat":r]=e[r];return t}}(),function(){function t(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function e(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&((t=t.parentNode||t.host)===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==t.style.position););return{left:e,top:i}}var i,r=Array.prototype.slice,n=function(t){return r.call(t,0)};try{i=n(fabric.document.childNodes)instanceof Array}catch(t){}i||(n=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var s;s=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){var t=fabric.document.documentElement.style,e="userSelect"in t?"userSelect":"MozUserSelect"in t?"MozUserSelect":"WebkitUserSelect"in t?"WebkitUserSelect":"KhtmlUserSelect"in t?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),e?t.style[e]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t},fabric.util.makeElementSelectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=null),e?t.style[e]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}}(),function(){fabric.util.getScript=function(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}}(),fabric.util.getById=function(t){return"string"==typeof t?fabric.document.getElementById(t):t},fabric.util.toArray=n,fabric.util.makeElement=t,fabric.util.addClass=function(t,e){t&&-1===(" "+t.className+" ").indexOf(" "+e+" ")&&(t.className+=(t.className?" ":"")+e)},fabric.util.wrapElement=function(e,i,r){return"string"==typeof i&&(i=t(i,r)),e.parentNode&&e.parentNode.replaceChild(i,e),i.appendChild(e),i},fabric.util.getScrollLeftTop=e,fabric.util.getElementOffset=function(t){var i,r,n=t&&t.ownerDocument,o={left:0,top:0},a={left:0,top:0},h={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return a;for(var c in h)a[h[c]]+=parseInt(s(t,c),10)||0;return i=n.documentElement,void 0!==t.getBoundingClientRect&&(o=t.getBoundingClientRect()),r=e(t),{left:o.left+r.left-(i.clientLeft||0)+a.left,top:o.top+r.top-(i.clientTop||0)+a.top}},fabric.util.getElementStyle=s,fabric.util.getNodeCanvas=function(t){var e=fabric.jsdomImplForWrapper(t);return e._canvas||e._image}}(),function(){function t(){}var e=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{if(t[e]())return t[e]}catch(t){}}();fabric.util.request=function(i,r){r||(r={});var n=r.method?r.method.toUpperCase():"GET",s=r.onComplete||function(){},o=e(),a=r.body||r.parameters;return o.onreadystatechange=function(){4===o.readyState&&(s(o),o.onreadystatechange=t)},"GET"===n&&(a=null,"string"==typeof r.parameters&&(i=function(t,e){return t+(/\?/.test(t)?"&":"?")+e}(i,r.parameters))),o.open(n,i,!0),"POST"!==n&&"PUT"!==n||o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.send(a),o}}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){void 0!==console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(){return!1}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){return fabric.window.setTimeout(t,1e3/60)},r=fabric.window.cancelAnimationFrame||fabric.window.clearTimeout;fabric.util.animate=function(i){e(function(r){i||(i={});var n,s=r||+new Date,o=i.duration||500,a=s+o,h=i.onChange||t,c=i.abort||t,l=i.onComplete||t,u=i.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},f="startValue"in i?i.startValue:0,d="endValue"in i?i.endValue:100,g=i.byValue||d-f;i.onStart&&i.onStart(),function t(r){if(c())l(d,1,1);else{var p=(n=r||+new Date)>a?o:n-s,v=p/o,m=u(p,f,g,o),b=Math.abs((m-f)/g);h(m,b,v),n>a?i.onComplete&&i.onComplete():e(t)}}(s)})},fabric.util.requestAnimFrame=e,fabric.util.cancelAnimFrame=function(){return r.apply(fabric.window,arguments)}}(),function(){fabric.util.animateColor=function(t,e,i,r){var n=new fabric.Color(t).getSource(),s=new fabric.Color(e).getSource();r=r||{},fabric.util.animate(fabric.util.object.extend(r,{duration:i||500,startValue:n,endValue:s,byValue:s,easing:function(t,e,i,n){return function(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}(e,i,r.colorEasing?r.colorEasing(t,n):1-Math.cos(t/n*(Math.PI/2)))}}))}}(),function(){function t(t,e,i,r){return t-1&&a>-1&&a-1&&(e="stroke")}else n=s?e.map(d):d(e,r);else e="";return!s&&isNaN(n)?e:n}function r(t){return new RegExp("^("+t.join("|")+")\\b","i")}function n(t,e){var i,r,n,s,o=[];for(n=0,s=e.length;na?a:o),1===o&&1===a&&0===h&&0===l&&0===g&&0===p)return x;if((g||p)&&(C=" translate("+d(g)+" "+d(p)+") "),r=C+" matrix("+o+" 0 0 "+a+" "+h*o+" "+l*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else r=(n=t).getAttribute("transform")+r;return n.setAttribute("transform",r),x}var c=t.fabric||(t.fabric={}),l=c.util.object.extend,u=c.util.object.clone,f=c.util.toFixed,d=c.util.parseUnit,g=c.util.multiplyTransformMatrices,p={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","paint-order":"paintFirst","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"textAnchor",opacity:"opacity"},v={stroke:"strokeOpacity",fill:"fillOpacity"};c.svgValidTagNamesRegEx=r(["path","circle","polygon","polyline","ellipse","rect","line","image","text","linearGradient","radialGradient","stop"]),c.svgViewBoxElementsRegEx=r(["symbol","image","marker","pattern","view","svg"]),c.svgInvalidAncestorsRegEx=r(["pattern","defs","symbol","metadata","clipPath","mask","desc"]),c.svgValidParentsRegEx=r(["symbol","g","a","svg"]),c.cssRules={},c.gradientDefs={},c.parseTransformAttribute=function(){function t(t,e,i){t[i]=Math.tan(c.util.degreesToRadians(e[0]))}var e=[1,0,0,1,0,0],i=c.reNum,r="(?:\\s+,?\\s*|,\\s*)",n="(?:"+("(?:(matrix)\\s*\\(\\s*("+i+")"+r+"("+i+")"+r+"("+i+")"+r+"("+i+")"+r+"("+i+")"+r+"("+i+")\\s*\\))")+"|"+("(?:(translate)\\s*\\(\\s*("+i+")(?:"+r+"("+i+"))?\\s*\\))")+"|"+("(?:(scale)\\s*\\(\\s*("+i+")(?:"+r+"("+i+"))?\\s*\\))")+"|"+("(?:(rotate)\\s*\\(\\s*("+i+")(?:"+r+"("+i+")"+r+"("+i+"))?\\s*\\))")+"|"+("(?:(skewX)\\s*\\(\\s*("+i+")\\s*\\))")+"|"+("(?:(skewY)\\s*\\(\\s*("+i+")\\s*\\))")+")",s="^\\s*(?:"+("(?:"+n+"(?:"+r+"*"+n+")*)")+"?)\\s*$",o=new RegExp(s),a=new RegExp(n,"g");return function(i){var r=e.concat(),s=[];if(!i||i&&!o.test(i))return r;i.replace(a,function(i){var o=new RegExp(n).exec(i).filter(function(t){return!!t}),a=o[1],h=o.slice(2).map(parseFloat);switch(a){case"translate":!function(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}(r,h);break;case"rotate":h[0]=c.util.degreesToRadians(h[0]),function(t,e){var i=Math.cos(e[0]),r=Math.sin(e[0]),n=0,s=0;3===e.length&&(n=e[1],s=e[2]),t[0]=i,t[1]=r,t[2]=-r,t[3]=i,t[4]=n-(i*n-r*s),t[5]=s-(r*n+i*s)}(r,h);break;case"scale":!function(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}(r,h);break;case"skewX":t(r,h,2);break;case"skewY":t(r,h,1);break;case"matrix":r=h}s.push(r.concat()),r=e.concat()});for(var h=s[0];s.length>1;)s.shift(),h=c.util.multiplyTransformMatrices(h,s[0]);return h}}();var m=new RegExp("^\\s*("+c.reNum+"+)\\s*,?\\s*("+c.reNum+"+)\\s*,?\\s*("+c.reNum+"+)\\s*,?\\s*("+c.reNum+"+)\\s*$");c.parseSVGDocument=function(t,e,i,r){if(t){!function(t){for(var e=n(t,["use","svg:use"]),i=0;e.length&&i/i,""))),n&&n.documentElement||e&&e(null),c.parseSVGDocument(n.documentElement,function(t,i,r,n){e&&e(t,i,r,n)},i,r)}})},loadSVGFromString:function(t,e,i,r){t=t.trim();var n;if("undefined"!=typeof DOMParser){var s=new DOMParser;s&&s.parseFromString&&(n=s.parseFromString(t,"text/xml"))}else c.window.ActiveXObject&&((n=new ActiveXObject("Microsoft.XMLDOM")).async="false",n.loadXML(t.replace(//i,"")));c.parseSVGDocument(n.documentElement,function(t,i,r,n){e(t,i,r,n)},i,r)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r,n){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0,this.parsingOptions=n},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return void 0===i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}})}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});i.Intersection?i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection")).appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){var n,s,o,a,h=new e,c=r.length;for(a=0;a0&&(h.status="Intersection"),h},i.Intersection.intersectPolygonPolygon=function(t,i){var r,n=new e,s=t.length;for(r=0;r0&&(n.status="Intersection"),n},i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d})}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});r.Color?r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:o,s){var a=s.split(/\s*;\s*/);for(""===a[a.length-1]&&a.pop(),n=a.length;n--;){var h=a[n].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:o,color:e.toRgb(),opacity:r}}function e(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}var i=fabric.util.object.clone;fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,r,n,s,o=i(this.coords,!0),a=i(this.colorStops,!0),h=o.r1>o.r2,c=t.width/2,l=t.height/2;a.sort(function(t,e){return t.offset-e.offset}),"path"===t.type&&(c-=t.pathOffset.x,l-=t.pathOffset.y);for(var u in o)"x1"===u||"x2"===u?o[u]+=this.offsetX-c:"y1"!==u&&"y2"!==u||(o[u]+=this.offsetY-l);if(s='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(s+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?n=["\n']:"radial"===this.type&&(n=["\n']),"radial"===this.type){if(h)for((a=a.concat()).reverse(),e=0,r=a.length;e0){var d=f/Math.max(o.r1,o.r2);for(e=0,r=a.length;e\n')}return n.push("linear"===this.type?"\n":"\n"),n.join("")},toLive:function(t){var e,i,r,n=fabric.util.object.clone(this.coords);if(this.type){for("linear"===this.type?e=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(e=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2)),i=0,r=this.colorStops.length;i\n\n\n'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if(void 0!==e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;e.Shadow?e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[];return{color:(i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle));return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+20,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+20),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/)}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)fabric.warn("fabric.StaticCanvas is already defined.");else{var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=fabric.util.transformPoint,s=fabric.util.invertTransform,o=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass(fabric.CommonMethods,{initialize:function(t,e){e||(e={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,_initStatic:function(t,e){var i=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(){var t=fabric.util.createCanvasElement();if(!t)throw o;if(t.style||(t.style={}),void 0===t.getContext)throw o;return t},_initOptions:function(t){this._setOptions(t),this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){t&&t.getContext?this.lowerCanvasEl=t:this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(),this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i,r,n=this._activeObject;for(this.viewportTransform=t,i=0,r=this._objects.length;i"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),"\n")},createSVGRefElementsMarkup:function(){var t=this;return["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)}).join("")},createSVGFontFacesMarkup:function(){var t,e,i,r,n,s,o,a,h="",c={},l=fabric.fontPaths,u=this.getObjects();for(o=0,a=u.length;o',"\n",h,"","\n"].join("")),h},_setSVGObjects:function(t,e){var i,r,n,s=this.getObjects();for(r=0,n=s.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeObject;if(t===s&&"activeSelection"===t.type)for(e=(n=s._objects).length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeObject;if(t===s&&"activeSelection"===t.type)for(n=s._objects,e=0;e0+c&&(o=s-1,i(this._objects,n),this._objects.splice(o,0,n)),c++;else 0!==(s=this._objects.indexOf(t))&&(o=this._findNewLowerIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(t,e,i){var r,n;if(i)for(r=e,n=e-1;n>=0;--n){if(t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t)){r=n;break}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeObject,c=0;if(t===h&&"activeSelection"===t.type)for(r=(a=h._objects).length;r--;)n=a[r],(s=this._objects.indexOf(n))"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return void 0!==i.getImageData;case"setLineDash":return void 0!==i.setLineDash;case"toDataURL":return void 0!==e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject,fabric.isLikelyNode&&(fabric.StaticCanvas.prototype.createPNGStream=function(){var t=fabric.util.getNodeCanvas(this.lowerCanvasEl);return t&&t.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){var e=fabric.util.getNodeCanvas(this.lowerCanvasEl);return e&&e.createJPEGStream(t)})}}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.miterLimit=this.strokeMiterLimit,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.length>1&&t.eq(this._points[this._points.length-1])||this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t,e,i=this.canvas.contextTop,r=this.canvas.viewportTransform,n=this._points[0],s=this._points[1];if(i.save(),i.transform(r[0],r[1],r[2],r[3],r[4],r[5]),i.beginPath(),2===this._points.length&&n.x===s.x&&n.y===s.y){var o=this.width/1e3;n=new fabric.Point(n.x,n.y),s=new fabric.Point(s.x,s.y),n.x-=o,s.x+=o}for(i.moveTo(n.x,n.y),t=1,e=this._points.length;t2;for(c&&(a=t[2].xt[e-2].x?1:n.x===t[e-2].x?0:-1,h=n.y>t[e-2].y?1:n.y===t[e-2].y?0:-1),i.push("L ",n.x+a*r," ",n.y+h*r),i},createPath:function(t){var e=new fabric.Path(t,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeMiterLimit:this.strokeMiterLimit,strokeLineJoin:this.strokeLineJoin,strokeDashArray:this.strokeDashArray}),i=new fabric.Point(e.left+e.width/2,e.top+e.height/2);return i=e.translateToGivenOrigin(i,"center","center",e.originX,e.originY),e.top=i.y,e.left=i.x,this.shadow&&(this.shadow.affectStroke=!0,e.setShadow(this.shadow)),e},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath();var t=this.convertPointsToSVGPath(this._points).join("");if("M 0 0 Q 0 0 0 0 L 0 0"!==t){var e=this.createPath(t);this.canvas.clearContext(this.canvas.contextTop),this.canvas.add(e),this.canvas.renderAll(),e.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:e})}else this.canvas.requestRenderAll()}}),fabric.CircleBrush=fabric.util.createClass(fabric.BaseBrush,{width:10,initialize:function(t){this.canvas=t,this.points=[]},drawDot:function(t){var e=this.addPoint(t),i=this.canvas.contextTop,r=this.canvas.viewportTransform;i.save(),i.transform(r[0],r[1],r[2],r[3],r[4],r[5]),i.fillStyle=e.fill,i.beginPath(),i.arc(e.x,e.y,e.radius,0,2*Math.PI,!1),i.closePath(),i.fill(),i.restore()},onMouseDown:function(t){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(t)},onMouseMove:function(t){this.drawDot(t)},onMouseUp:function(){var t,e,i=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;var r=[];for(t=0,e=this.points.length;t0&&!this.preserveObjectStacking){e=[],i=[];for(var n=0,s=this._objects.length;n1&&(this._activeObject._objects=i),e.push.apply(e,i)}else e=this._objects;return e},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.isDrawingMode&&this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._render();var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this},renderTop:function(){var t=this.contextTop;return this.clearContext(t),this.selection&&this._groupSelector&&this._drawSelection(t),this.fire("after:render"),this.contextTopDirty=!0,this},_resetCurrentTransform:function(){var t=this._currentTransform;t.target.set({scaleX:t.original.scaleX,scaleY:t.original.scaleY,skewX:t.original.skewX,skewY:t.original.skewY,left:t.original.left,top:t.original.top}),this._shouldCenterTransform(t.target)?"rotate"===t.action?this._setOriginToCenter(t.target):("center"!==t.originX&&("right"===t.originX?t.mouseXSign=-1:t.mouseXSign=1),"center"!==t.originY&&("bottom"===t.originY?t.mouseYSign=-1:t.mouseYSign=1),t.originX="center",t.originY="center"):(t.originX=t.original.originX,t.originY=t.original.originY)},containsPoint:function(t,e,i){var r,n=i||this.getPointer(t,!0);return r=e.group&&e.group===this._activeObject&&"activeSelection"===e.group.type?this._normalizePointer(e.group,n):{x:n.x,y:n.y},e.containsPoint(r)||e._findTargetCorner(n)},_normalizePointer:function(t,e){var i=t.calcTransformMatrix(),r=fabric.util.invertTransform(i),n=this.restorePointerVpt(e);return fabric.util.transformPoint(n,r)},isTargetTransparent:function(t,e,i){var r=this.contextCache,n=t.selectionBackgroundColor,s=this.viewportTransform;t.selectionBackgroundColor="",this.clearContext(r),r.save(),r.transform(s[0],s[1],s[2],s[3],s[4],s[5]),t.render(r),r.restore(),t===this._activeObject&&t._renderControls(r,{hasBorders:!1,transparentCorners:!1},{hasBorders:!1}),t.selectionBackgroundColor=n;return fabric.util.isTransparent(r,e,i,this.targetFindTolerance)},_isSelectionKeyPressed:function(t){return"[object Array]"===Object.prototype.toString.call(this.selectionKey)?!!this.selectionKey.find(function(e){return!0===t[e]}):t[this.selectionKey]},_shouldClearSelection:function(t,e){var i=this.getActiveObjects(),r=this._activeObject;return!e||e&&r&&i.length>1&&-1===i.indexOf(e)&&r!==e&&!this._isSelectionKeyPressed(t)||e&&!e.evented||e&&!e.selectable&&r&&r!==e},_shouldCenterTransform:function(t){if(t){var e,i=this._currentTransform;return"scale"===i.action||"scaleX"===i.action||"scaleY"===i.action?e=this.centeredScaling||t.centeredScaling:"rotate"===i.action&&(e=this.centeredRotation||t.centeredRotation),e?!i.altKey:i.altKey}},_getOriginFromCorner:function(t,e){var i={x:t.originX,y:t.originY};return"ml"===e||"tl"===e||"bl"===e?i.x="right":"mr"!==e&&"tr"!==e&&"br"!==e||(i.x="left"),"tl"===e||"mt"===e||"tr"===e?i.y="bottom":"bl"!==e&&"mb"!==e&&"br"!==e||(i.y="top"),i},_getActionFromCorner:function(t,e,i){if(!e)return"drag";switch(e){case"mtr":return"rotate";case"ml":case"mr":return i[this.altActionKey]?"skewY":"scaleX";case"mt":case"mb":return i[this.altActionKey]?"skewX":"scaleY";default:return"scale"}},_setupCurrentTransform:function(t,i){if(i){var r=this.getPointer(t),n=i._findTargetCorner(this.getPointer(t,!0)),s=this._getActionFromCorner(i,n,t),o=this._getOriginFromCorner(i,n);this._currentTransform={target:i,action:s,corner:n,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:r.x-i.left,offsetY:r.y-i.top,originX:o.x,originY:o.y,ex:r.x,ey:r.y,lastX:r.x,lastY:r.y,left:i.left,top:i.top,theta:e(i.angle),width:i.width*i.scaleX,mouseXSign:1,mouseYSign:1,shiftKey:t.shiftKey,altKey:t[this.centeredKey]},this._currentTransform.original={left:i.left,top:i.top,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,originX:o.x,originY:o.y},this._resetCurrentTransform()}},_translateObject:function(t,e){var i=this._currentTransform,r=i.target,n=t-i.offsetX,s=e-i.offsetY,o=!r.get("lockMovementX")&&r.left!==n,a=!r.get("lockMovementY")&&r.top!==s;return o&&r.set("left",n),a&&r.set("top",s),o||a},_changeSkewTransformOrigin:function(t,e,i){var r="originX",n={0:"center"},s=e.target.skewX,o="left",a="right",h="mt"===e.corner||"ml"===e.corner?1:-1,c=1;t=t>0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),(l=2*Math.abs(t)-o[i])<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),o,a)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var h=e.ex+.5-(i>0?0:o),c=e.ey+.5-(r>0?0:a);t.beginPath(),fabric.util.drawDashedLine(t,h,c,h+o,c,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c+a-1,h+o,c+a-1,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c,h,c+a,this.selectionDashArray),fabric.util.drawDashedLine(t,h+o-1,c,h+o-1,c+a,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+.5-(i>0?0:o),e.ey+.5-(r>0?0:a),o,a)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r,n=this.getPointer(t,!0),s=this._activeObject,o=this.getActiveObjects();if(this.targets=[],o.length>1&&!e&&s===this._searchPossibleTargets([s],n))return s;if(1===o.length&&s._findTargetCorner(n))return s;if(1===o.length&&s===this._searchPossibleTargets([s],n)){if(!this.preserveObjectStacking)return s;i=s,r=this.targets,this.targets=[]}var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i,this.targets=r),a}},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;if(!this.isTargetTransparent(e,t.x,t.y))return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){"group"===(i=t[s]).type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),(n=this._searchPossibleTargets(i._objects,r))&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl?this.upperCanvasEl.className="":this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.width||t.width,i=this.height||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":"none"}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var t=this._activeObject;return t?"activeSelection"===t.type&&t._objects?t._objects.slice(0):[t]:[]},_onObjectRemoved:function(t){t===this._activeObject&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this._hoveredTarget===t&&(this._hoveredTarget=null),this.callSuper("_onObjectRemoved",t)},_fireSelectionEvents:function(t,e){var i=!1,r=this.getActiveObjects(),n=[],s=[],o={e:e};t.forEach(function(t){-1===r.indexOf(t)&&(i=!0,t.fire("deselected",o),s.push(t))}),r.forEach(function(e){-1===t.indexOf(e)&&(i=!0,e.fire("selected",o),n.push(e))}),t.length>0&&r.length>0?(o.selected=n,o.deselected=s,o.updated=n[0]||s[0],o.target=this._activeObject,i&&this.fire("selection:updated",o)):r.length>0?(1===r.length&&(o.target=n[0],this.fire("object:selected",o)),o.selected=n,o.target=this._activeObject,this.fire("selection:created",o)):t.length>0&&(o.deselected=s,this.fire("selection:cleared",o))},setActiveObject:function(t,e){var i=this.getActiveObjects();return this._setActiveObject(t,e),this._fireSelectionEvents(i,e),this},_setActiveObject:function(t,e){return this._activeObject!==t&&(!!this._discardActiveObject(e,t)&&(!t.onSelect({e:e})&&(this._activeObject=t,!0)))},_discardActiveObject:function(t,e){var i=this._activeObject;if(i){if(i.onDeselect({e:t,object:e}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var e=this.getActiveObjects();return e.length&&this.fire("before:selection:cleared",{target:e[0],e:t}),this._discardActiveObject(t),this._fireSelectionEvents(e,t),this},dispose:function(){var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),delete this.upperCanvasEl,t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,fabric.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var e=this._activeObject;e&&e._renderControls(t)},_toObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(t),n=this.callSuper("_toObject",t,e,i);return this._unwindGroupTransformOnObject(t,r),n},_realizeGroupTransformOnObject:function(t){if(t.group&&"activeSelection"===t.group.type&&this._activeObject===t.group){var e={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach(function(i){e[i]=t[i]}),this._activeObject.realizeTransform(t),e}return null},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},_setSVGObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(e);this.callSuper("_setSVGObject",t,e,i),this._unwindGroupTransformOnObject(e,r)}});for(var o in fabric.StaticCanvas)"prototype"!==o&&(fabric.Canvas[o]=fabric.StaticCanvas[o]);fabric.isTouchSupported&&(fabric.Canvas.prototype._setCursorFromEvent=function(){})}(),function(){function t(t,e){return"which"in t?t.which===e:t.button===e-1}var e={mt:0,tr:1,mr:2,br:3,mb:4,bl:5,ml:6,tl:7},i=fabric.util.addListener,r=fabric.util.removeListener;fabric.util.object.extend(fabric.Canvas.prototype,{cursorMap:["n-resize","ne-resize","e-resize","se-resize","s-resize","sw-resize","w-resize","nw-resize"],_initEventListeners:function(){this.removeListeners(),this._bindEvents(),i(fabric.window,"resize",this._onResize),i(this.upperCanvasEl,"mousedown",this._onMouseDown),i(this.upperCanvasEl,"dblclick",this._onDoubleClick),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"mouseout",this._onMouseOut),i(this.upperCanvasEl,"mouseenter",this._onMouseEnter),i(this.upperCanvasEl,"wheel",this._onMouseWheel),i(this.upperCanvasEl,"contextmenu",this._onContextMenu),i(this.upperCanvasEl,"touchstart",this._onMouseDown,{passive:!1}),i(this.upperCanvasEl,"touchmove",this._onMouseMove,{passive:!1}),"undefined"!=typeof eventjs&&"add"in eventjs&&(eventjs.add(this.upperCanvasEl,"gesture",this._onGesture),eventjs.add(this.upperCanvasEl,"drag",this._onDrag),eventjs.add(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.add(this.upperCanvasEl,"shake",this._onShake),eventjs.add(this.upperCanvasEl,"longpress",this._onLongPress))},_bindEvents:function(){this.eventsBinded||(this._onMouseDown=this._onMouseDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this.eventsBinded=!0)},removeListeners:function(){r(fabric.window,"resize",this._onResize),r(this.upperCanvasEl,"mousedown",this._onMouseDown),r(this.upperCanvasEl,"mousemove",this._onMouseMove),r(this.upperCanvasEl,"mouseout",this._onMouseOut),r(this.upperCanvasEl,"mouseenter",this._onMouseEnter),r(this.upperCanvasEl,"wheel",this._onMouseWheel),r(this.upperCanvasEl,"contextmenu",this._onContextMenu),r(this.upperCanvasEl,"doubleclick",this._onDoubleClick),r(this.upperCanvasEl,"touchstart",this._onMouseDown),r(this.upperCanvasEl,"touchmove",this._onMouseMove),"undefined"!=typeof eventjs&&"remove"in eventjs&&(eventjs.remove(this.upperCanvasEl,"gesture",this._onGesture),eventjs.remove(this.upperCanvasEl,"drag",this._onDrag),eventjs.remove(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.remove(this.upperCanvasEl,"shake",this._onShake),eventjs.remove(this.upperCanvasEl,"longpress",this._onLongPress))},_onGesture:function(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t){this.__onMouseWheel(t)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t}),this._iTextInstances&&this._iTextInstances.forEach(function(t){t.isEditing&&t.hiddenTextarea.focus()})},_onMouseEnter:function(t){this.findTarget(t)||(this.fire("mouse:over",{target:null,e:t}),this._hoveredTarget=null)},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e)},_onContextMenu:function(t){return this.stopContextMenu&&(t.stopPropagation(),t.preventDefault()),!1},_onDoubleClick:function(t){this._handleEvent(t,"dblclick")},_onMouseDown:function(t){this.__onMouseDown(t),i(fabric.document,"touchend",this._onMouseUp,{passive:!1}),i(fabric.document,"touchmove",this._onMouseMove,{passive:!1}),r(this.upperCanvasEl,"mousemove",this._onMouseMove),r(this.upperCanvasEl,"touchmove",this._onMouseMove),"touchstart"===t.type?r(this.upperCanvasEl,"mousedown",this._onMouseDown):(i(fabric.document,"mouseup",this._onMouseUp),i(fabric.document,"mousemove",this._onMouseMove))},_onMouseUp:function(t){if(this.__onMouseUp(t),r(fabric.document,"mouseup",this._onMouseUp),r(fabric.document,"touchend",this._onMouseUp),r(fabric.document,"mousemove",this._onMouseMove),r(fabric.document,"touchmove",this._onMouseMove),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"touchmove",this._onMouseMove,{passive:!1}),"touchend"===t.type){var e=this;setTimeout(function(){i(e.upperCanvasEl,"mousedown",e._onMouseDown)},400)}},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t,e){var i=this._activeObject;return(!i||!i.isEditing||t!==i)&&!!(t&&(t.isMoving||t!==i)||!t&&i||!t&&!i&&!this._groupSelector||e&&this._previousPointer&&this.selection&&(e.x!==this._previousPointer.x||e.y!==this._previousPointer.y))},__onMouseUp:function(e){var i,r=!0,n=this._currentTransform,s=this._groupSelector,o=!s||0===s.left&&0===s.top;if(t(e,3))this.fireRightClick&&this._handleEvent(e,"up",i,3,o);else if(t(e,2))this.fireMiddleClick&&this._handleEvent(e,"up",i,2,o);else if(this.isDrawingMode&&this._isCurrentlyDrawing)this._onMouseUpInDrawingMode(e);else{n&&(this._finalizeCurrentTransform(e),r=!n.actionPerformed),i=r?this.findTarget(e,!0):n.target;var a=this._shouldRender(i,this.getPointer(e));i||!o?this._maybeGroupObjects(e):(this._groupSelector=null,this._currentTransform=null),i&&(i.isMoving=!1),this._setCursorFromEvent(e,i),this._handleEvent(e,"up",i||null,1,o),i&&(i.__corner=0),a&&this.requestRenderAll()}},_handleEvent:function(t,e,i,r,n){var s=void 0===i?this.findTarget(t):i,o=this.targets||[],a={e:t,target:s,subTargets:o,button:r||1,isClick:n||!1};this.fire("mouse:"+e,a),s&&s.fire("mouse"+e,a);for(var h=0;h1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t)||null,this._setCursorFromEvent(t,e),this._fireOverOutEvents(e,t)),this._handleEvent(t,"move",this._currentTransform?null:e)}},_fireOverOutEvents:function(t,e){var i,r,n=this._hoveredTarget;n!==t&&(i={e:e,target:t,previousTarget:this._hoveredTarget},r={e:e,target:this._hoveredTarget,nextTarget:t},this._hoveredTarget=t),t?n!==t&&(n&&(this.fire("mouse:out",r),n.fire("mouseout",r)),this.fire("mouse:over",i),t.fire("mouseover",i)):n&&(this.fire("mouse:out",r),n.fire("mouseout",r))},__onMouseWheel:function(t){this._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.requestRenderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n))&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor)),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return this._isUniscalePossible(t,e.target)?(e.currentAction="scale",this._scaleObject(i,r)):(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally"))},_isUniscalePossible:function(t,e){return(t[this.uniScaleKey]||this.uniScaleTransform)&&!e.get("lockUniScaling")},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this._activeObject&&"activeSelection"===this._activeObject.type?this._activeObject:null,n=(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this.setCursor(this.getCornerCursor(n,e,t)):this.setCursor(i)},getCornerCursor:function(t,i,r){return this.actionIsDisabled(t,i,r)?this.notAllowedCursor:t in e?this._getRotatedCornerCursor(t,i,r):"mtr"===t&&i.hasRotatingPoint?this.rotationCursor:this.defaultCursor},actionIsDisabled:function(t,e,i){return"mt"===t||"mb"===t?i[this.altActionKey]?e.lockSkewingX:e.lockScalingY:"ml"===t||"mr"===t?i[this.altActionKey]?e.lockSkewingY:e.lockScalingX:"mtr"===t?e.lockRotation:this._isUniscalePossible(i,e)?e.lockScalingX&&e.lockScalingY:e.lockScalingX||e.lockScalingY},_getRotatedCornerCursor:function(t,i,r){var n=Math.round(i.angle%360/45);return n<0&&(n+=8),n+=e[t],r[this.altActionKey]&&e[t]%2==0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this._activeObject;return i&&this._isSelectionKeyPressed(t)&&e&&e.selectable&&this.selection&&(i!==e||"activeSelection"===i.type)},_handleGrouping:function(t,e){var i=this._activeObject;i.__corner||(e!==i||(e=this.findTarget(t,!0)))&&(i&&"activeSelection"===i.type?this._updateActiveSelection(e,t):this._createActiveSelection(e,t))},_updateActiveSelection:function(t,e){var i=this._activeObject,r=i._objects.slice(0);i.contains(t)?(i.removeWithUpdate(t),this._hoveredTarget=t,1===i.size()&&this._setActiveObject(i.item(0),e)):(i.addWithUpdate(t),this._hoveredTarget=i),this._fireSelectionEvents(r,e)},_createActiveSelection:function(t,e){var i=this.getActiveObjects(),r=this._createGroup(t);this._hoveredTarget=r,this._setActiveObject(r,e),this._fireSelectionEvents(i,e)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(e,t))},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=!this.selectionFullyContained,u=n===o&&s===a,f=this._objects.length;f--&&!((i=this._objects[f])&&i.selectable&&i.visible&&(l&&i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||l&&i.containsPoint(h)||l&&i.containsPoint(c))&&(r.push(i),u)););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t),this.setCursor(this.defaultCursor),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.width,s=this.height,o=(i.width||this.width)*r,a=(i.height||this.height)*r,h=this.getZoom()*r,c=this.viewportTransform,l=[h,0,0,h,(c[4]-i.left)*r,(c[5]-i.top)*r],u=this.interactive,f=this.skipOffscreen,d=n!==o||s!==a;this.viewportTransform=l,this.skipOffscreen=!1,this.interactive=!1,d&&this.setDimensions({width:o,height:a},{backstoreOnly:!0}),this.renderAll();var g=this.__toDataURL(t,e,i);return this.interactive=u,this.skipOffscreen=f,this.viewportTransform=c,d&&this.setDimensions({width:n,height:s},{backstoreOnly:!0}),this.renderAll(),g},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");return t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e)}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t),n=this,s=this.renderOnAddRemove;return this.renderOnAddRemove=!1,this._enlivenObjects(r.objects,function(t){n.clear(),n._setBgOverlay(r,function(){t.forEach(function(t,e){n.insertAt(t,e)}),n.renderOnAddRemove=s,delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),n.renderAll(),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(t.backgroundImage||t.overlayImage||t.background||t.overlay){var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,r),this.__setBgOverlay("overlayImage",t.overlayImage,i,r),this.__setBgOverlay("backgroundColor",t.background,i,r),this.__setBgOverlay("overlayColor",t.overlay,i,r)}else e&&e()},__setBgOverlay:function(t,e,i,r){var n=this;if(!e)return i[t]=!0,void(r&&r());"backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})},_enlivenObjects:function(t,e,i){t&&0!==t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,i):e&&e([])},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.width,e.height=this.height;var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,__corner:0,paintFirst:"fill",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY fillRule paintFirst".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeLineCap strokeLineJoin strokeMiterLimit backgroundColor".split(" "),initialize:function(t){t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,r=t.width,n=t.height,s=e.maxCacheSideLimit,o=e.minCacheSideLimit;if(r<=s&&n<=s&&r*n<=i)return rl&&(t.zoomX/=r/l,t.width=l,t.capped=!0),n>u&&(t.zoomY/=n/u,t.height=u,t.capped=!0),t},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,n=this._getNonTransformedDimensions(),s=i.scaleX*t*r,o=i.scaleY*t*r;return{width:n.x*s+2,height:n.y*o+2,zoomX:s,zoomY:o,x:n.x,y:n.y}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.target,i=this.canvas._currentTransform.action;if(this===t&&i.slice&&"scale"===i.slice(0,5))return!1}var r,n,s=this._cacheCanvas,o=this._limitCacheSize(this._getCacheCanvasDimensions()),a=e.minCacheSideLimit,h=o.width,c=o.height,l=o.zoomX,u=o.zoomY,f=h!==this.cacheWidth||c!==this.cacheHeight,d=this.zoomX!==l||this.zoomY!==u,g=f||d,p=0,v=0,m=!1;if(f){var b=this._cacheCanvas.width,_=this._cacheCanvas.height,y=h>b||c>_;m=y||(h<.9*b||c<.9*_)&&b>a&&_>a,y&&!o.capped&&(h>a||c>a)&&(p=.1*h,v=.1*c)}return!!g&&(m?(s.width=Math.ceil(h+p),s.height=Math.ceil(c+v)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,s.width,s.height)),r=o.x*l/2,n=o.y*u/2,this.cacheTranslationX=Math.round(s.width/2-r)+r,this.cacheTranslationY=Math.round(s.height/2-n)+n,this.cacheWidth=h,this.cacheHeight=c,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(l,u),this.zoomX=l,this.zoomY=u,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t){var e;e=this.group&&!this.group._transformDone?this.calcTransformMatrix():this.calcOwnMatrix(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,version:e.version,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.angle,i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype;return i.stateProperties.forEach(function(e){t[e]===i[e]&&delete t[e];"[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e])&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},getObjectOpacity:function(){var t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t},_set:function(t,i){var r="scaleX"===t||"scaleY"===t,n=this[t]!==i,s=!1;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,n&&(s=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(t)>-1?(this.dirty=!0,s&&this.group.set("dirty",!0)):s&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||0===this.width&&0===this.height||!this.visible},render:function(t){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t,this),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache()?(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext),this.dirty=!1),this.drawCacheOnCanvas(t)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(t),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},_removeCacheCanvas:function(){this._cacheCanvas=null,this.cacheWidth=0,this.cacheHeight=0},needsItsOwnCache:function(){return"stroke"===this.paintFirst&&"object"==typeof this.shadow},shouldCache:function(){return this.ownCaching=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawObject:function(t){this._renderBackground(t),this._setStrokeStyles(t,this),this._setFillStyles(t,this),this._render(t)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){this.group&&!this.group._transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity},_setStrokeStyles:function(t,e){e.stroke&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,t.strokeStyle=e.stroke.toLive?e.stroke.toLive(t,this):e.stroke)},_setFillStyles:function(t,e){e.fill&&(t.fillStyle=e.fill.toLive?e.fill.toLive(t,this):e.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){var r,n,s,a=this.getViewportTransform(),h=this.calcTransformMatrix();n=void 0!==(i=i||{}).hasBorders?i.hasBorders:this.hasBorders,s=void 0!==i.hasControls?i.hasControls:this.hasControls,h=e.util.multiplyTransformMatrices(a,h),r=e.util.qrDecompose(h),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),i.forActiveSelection?(t.rotate(o(r.angle)),n&&this.drawBordersInGroup(t,r,i)):(t.rotate(o(this.angle)),n&&this.drawBorders(t,i)),s&&this.drawControls(t,i),t.restore()},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e.browserShadowBlurConstant*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(!e||!e.toLive)return{offsetX:0,offsetY:0};var i=e.gradientTransform||e.patternTransform,r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;return t.translate(r,n),i&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:n}},_renderPaintInOrder:function(t){"stroke"===this.paintFirst?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore())},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var t=e.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",t.scaleX),this.set("scaleY",t.scaleY),this.angle=t.angle,this.skewX=t.skewX,this.skewY=0}},_removeTransformMatrix:function(t){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=e.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,t&&(this.scaleX*=t.scaleX,this.scaleY*=t.scaleY,this.cropX=t.cropX,this.cropY=t.cropY,i.x+=t.offsetLeft,i.y+=t.offsetTop,this.width=t.width,this.height=t.height),this.setPositionByOrigin(i,"center","center")},clone:function(t,i){var r=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(r,t):e.Object._fromObject("Object",r,t)},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={left:this.left,top:this.top};this.setPositionByOrigin(new e.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},rotate:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors&&e.util.createAccessors(e.Object),i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s){var o=e[t];i=r(i,!0),e.util.enlivenPatterns([i.fill,i.stroke],function(t){void 0!==t[0]&&(i.fill=t[0]),void 0!==t[1]&&(i.stroke=t[1]);var e=s?new o(i[s],i):new o(i);n&&n(e)})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n=void 0!==i&&void 0!==r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getScaledWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")},onDeselect:function(){}})}(),function(){var t=fabric.util.degreesToRadians,e=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,ownMatrixCache:null,matrixCache:null,getCoords:function(t,e){this.oCoords||this.setCoords();var i=t?this.aCoords:this.oCoords;return function(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}(e?this.calcCoords(t):i)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r);return"Intersection"===fabric.Intersection.intersectPolygonRectangle(n,t,e).status},intersectsWithObject:function(t,e,i){return"Intersection"===fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i)).status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2==1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if((e=n[s]).x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o=0;for(var a in e)if(!((s=e[a]).o.y=t.y&&s.d.y>=t.y||(s.o.x===s.d.x&&s.o.x>=t.x?n=s.o.x:(i=0,r=(s.d.y-s.o.y)/(s.d.x-s.o.x),n=-(t.y-i*t.x-(s.o.y-r*s.o.x))/(i-r)),n>=t.x&&(o+=1),2!==o)))break;return o},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=e?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),m=new fabric.Point(p.x-o*a,p.y+o*h),b=new fabric.Point(g.x+u,g.y+f);if(!e)var _=new fabric.Point((p.x+m.x)/2,(p.y+m.y)/2),y=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((b.x+v.x)/2,(b.y+v.y)/2),C=new fabric.Point((b.x+m.x)/2,(b.y+m.y)/2),S=new fabric.Point(y.x+a*this.rotatingPointOffset,y.y-h*this.rotatingPointOffset);g={tl:p,tr:v,br:b,bl:m};return e||(g.ml=_,g.mt=y,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var e=t(this.angle),i=Math.cos(e),r=Math.sin(e);return 6.123233995736766e-17!==i&&-1.8369701987210297e-16!==i||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},transformMatrixKey:function(t){var e="";return!t&&this.group&&(e=this.group.transformMatrixKey(t)+"_"),e+this.top+"_"+this.left+"_"+this.scaleX+"_"+this.scaleY+"_"+this.skewX+"_"+this.skewY+"_"+this.angle+"_"+this.width+"_"+this.height+"_"+this.strokeWidth+this.flipX+this.flipY},calcTransformMatrix:function(t){if(t)return this.calcOwnMatrix();var i=this.transformMatrixKey(),r=this.matrixCache||(this.matrixCache={});if(r.key===i)return r.value;var n=this.calcOwnMatrix();return this.group&&(n=e(this.group.calcTransformMatrix(),n)),r.key=i,r.value=n,n},calcOwnMatrix:function(){var t=this.transformMatrixKey(!0),i=this.ownMatrixCache||(this.ownMatrixCache={});if(i.key===t)return i.value;var r,n=this.getCenterPoint(),s=[1,0,0,1,n.x,n.y],o=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0);return this.angle&&(r=this._calcRotateMatrix(),s=e(s,r)),s=e(s,o),i.key=t,i.value=s,s},_calcDimensionsTransformMatrix:function(i,r,n){var s,o=[this.scaleX*(n&&this.flipX?-1:1),0,0,this.scaleY*(n&&this.flipY?-1:1),0,0];return i&&(s=[1,0,Math.tan(t(i)),1],o=e(o,s,!0)),r&&(s=[1,Math.tan(t(r)),0,1],o=e(o,s,!0)),o},_getNonTransformedDimensions:function(){var t=this.strokeWidth;return{x:this.width+t,y:this.height+t}},_getTransformedDimensions:function(t,e){void 0===t&&(t=this.skewX),void 0===e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n')},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){function t(t,e,r){var n={};r.forEach(function(e){n[e]=t[e]}),i(t[e],n,!0)}function e(t,i,r){if(t===i)return!0;if(Array.isArray(t)){if(t.length!==i.length)return!1;for(var n=0,s=t.length;n\n'),t?t(e.join("")):e.join("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e,n){n=n||{};var s=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),o=[s.x1||0,s.y1||0,s.x2||0,s.y2||0];e(new i.Line(o,r(s,n)))},i.Line.fromObject=function(t,e){var r=n(t,!0);r.points=[t.x1,t.y1,t.x2,t.y2],i.Object._fromObject("Line",r,function(t){delete t.points,e&&e(t)},"points")})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=Math.PI,r=e.util.object.extend;e.Circle?e.warn("fabric.Circle is already defined."):(e.Circle=e.util.createClass(e.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*i,cacheProperties:e.Object.prototype.cacheProperties.concat("radius"),_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),r=(this.endAngle-this.startAngle)%(2*i);if(0===r)e.push("\n");else{var n=Math.cos(this.startAngle)*this.radius,s=Math.sin(this.startAngle)*this.radius,o=Math.cos(this.endAngle)*this.radius,a=Math.sin(this.endAngle)*this.radius,h=r>i?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t){t.beginPath(),t.arc(0,0,this.radius,this.startAngle,this.endAngle,!1),this._renderPaintInOrder(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),e.Circle.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),e.Circle.fromElement=function(t,i,n){n||(n={});var s=e.parseAttributes(t,e.Circle.ATTRIBUTE_NAMES);if(!function(t){return"radius"in t&&t.radius>=0}(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=(s.left||0)-s.radius,s.top=(s.top||0)-s.radius,i(new e.Circle(r(s,n)))},e.Circle.fromObject=function(t,i){return e.Object._fromObject("Circle",t,i)})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Triangle?e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",width:100,height:100,_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderPaintInOrder(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push(""),t?t(e.join("")):e.join("")}}),e.Triangle.fromObject=function(t,i){return e.Object._fromObject("Triangle",t,i)})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;e.Ellipse?e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup();return e.push("\n"),t?t(e.join("")):e.join("")},_render:function(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,0,this.rx,0,i,!1),t.restore(),this._renderPaintInOrder(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i,n){n||(n={});var s=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);s.left=(s.left||0)-s.rx,s.top=(s.top||0)-s.ry,i(new e.Ellipse(r(s,n)))},e.Ellipse.fromObject=function(t,i){return e.Object._fromObject("Ellipse",t,i)})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Rect?e.warn("fabric.Rect is already defined"):(e.Rect=e.util.createClass(e.Object,{stateProperties:e.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t){if(1!==this.width||1!==this.height){var e=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,n=this.height,s=-this.width/2,o=-this.height/2,a=0!==e||0!==i,h=.4477152502;t.beginPath(),t.moveTo(s+e,o),t.lineTo(s+r-e,o),a&&t.bezierCurveTo(s+r-h*e,o,s+r,o+h*i,s+r,o+i),t.lineTo(s+r,o+n-i),a&&t.bezierCurveTo(s+r,o+n-h*i,s+r-h*e,o+n,s+r-e,o+n),t.lineTo(s+e,o+n),a&&t.bezierCurveTo(s+h*e,o+n,s,o+n-h*i,s,o+n-i),t.lineTo(s,o+i),a&&t.bezierCurveTo(s,o+h*i,s+h*e,o,s+e,o),t.closePath(),this._renderPaintInOrder(t)}else t.fillRect(-.5,-.5,1,1)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=-this.width/2,r=-this.height/2;return e.push("\n"),t?t(e.join("")):e.join("")}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r,n){if(!t)return r(null);n=n||{};var s=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);s.left=s.left||0,s.top=s.top||0;var o=new e.Rect(i(n?e.util.object.clone(n):{},s));o.visible=o.visible&&o.width>0&&o.height>0,r(o)},e.Rect.fromObject=function(t,i){return e.Object._fromObject("Rect",t,i)})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed,o=e.Object.NUM_FRACTION_DIGITS;e.Polyline?e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,cacheProperties:e.Object.prototype.cacheProperties.concat("points"),initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e);var i=this._calcDimensions();void 0===e.left&&(this.left=i.left),void 0===e.top&&(this.top=i.top),this.width=i.width,this.height=i.height,this.pathOffset={x:i.left+this.width/2,y:i.top+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x")||0,i=r(t,"y")||0;return{left:e,top:i,width:(n(t,"x")||0)-e,height:(n(t,"y")||0)-i}},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){for(var e=[],i=this.pathOffset.x,r=this.pathOffset.y,n=this._createBaseSVGMarkup(),a=0,h=this.points.length;a\n"),t?t(n.join("")):n.join("")},commonRender:function(t){var e,i=this.points.length,r=this.pathOffset.x,n=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-r,this.points[0].y-n);for(var s=0;s"},toObject:function(t){return n(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left})},toDatalessObject:function(t){var e=this.toObject(["sourcePath"].concat(t));return e.sourcePath&&delete e.path,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var m=1,b=n.length;m"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group},_set:function(t,e){var i=this._objects.length;if(this.useSetOnGroup)for(;i--;)this._objects[i].setOnGroup(t,e);if("canvas"===t)for(i=this._objects.length;i--;)this._objects[i]._set(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e,r=this.sourcePath;return e=r||this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r}),i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isOnACache());if(this.ownCaching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")}}),e.Group.fromObject=function(t,i){e.util.enlivenObjects(t.objects,function(r){var n=e.util.object.clone(t,!0);delete n.objects,i&&i(new e.Group(r,n,!0))})})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});e.ActiveSelection||(e.ActiveSelection=e.util.createClass(e.Group,{type:"activeSelection",initialize:function(t,i){i=i||{},this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;i.originX&&(this.originX=i.originX),i.originY&&(this.originY=i.originY),this._calcBounds(),this._updateObjectsCoords(),e.Object.prototype.initialize.call(this,i),this.setCoords()},toGroup:function(){var t=this._objects;this._objects=[];var i=this.toObject(),r=new e.Group([]);if(delete i.objects,r.set(i),r.type="group",t.forEach(function(t){t.group=r,t.canvas.remove(t)}),r._objects=t,!this.canvas)return r;var n=this.canvas;return n.add(r),n._activeObject=r,r.setCoords(),r},onDeselect:function(){return this.destroy(),!1},toString:function(){return"#"},_set:function(t,i){var r=this._objects.length;if("canvas"===t)for(;r--;)this._objects[r].set(t,i);if(this.useSetOnGroup)for(;r--;)this._objects[r].setOnGroup(t,i);e.Object.prototype._set.call(this,t,i)},shouldCache:function(){return!1},willDrawShadow:function(){if(this.shadow)return this.callSuper("willDrawShadow");for(var t=0,e=this._objects.length;t\n');var n=["\t\n'];if("fill"===this.paintFirst&&Array.prototype.push.apply(e,n),this.stroke||this.strokeDashArray){var s=this.fill;this.fill=null,e.push("\t\n'),this.fill=s}return"fill"!==this.paintFirst&&Array.prototype.push.apply(e,n),e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():e.src:this.src||""},setSrc:function(t,e,i){return fabric.util.loadImage(t,function(t){this.setElement(t,i),e(this)},this,i&&i.crossOrigin),this},toString:function(){return'#'},applyResizeFilters:function(){var t=this.resizeFilter,e=this.canvas?this.canvas.getRetinaScaling():1,i=this.minimumScaleTrigger,r=this.scaleX*e,n=this.scaleY*e,s=this._filteredEl||this._originalElement;if(!t||r>i&&n>i)return this._element=s,this._filterScalingX=1,void(this._filterScalingY=1);fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend());var o=fabric.util.createCanvasElement(),a=this._filteredEl?this.cacheKey:this.cacheKey+"_filtered",h=s.width,c=s.height;o.width=h,o.height=c,this._element=o,t.scaleX=r,t.scaleY=n,fabric.filterBackend.applyFilters([t],s,h,c,this._element,a),this._filterScalingX=o.width/this._originalElement.width,this._filterScalingY=o.height/this._originalElement.height},applyFilters:function(t){if(t=t||this.filters||[],0===(t=t.filter(function(t){return t})).length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var e=this._originalElement,i=e.naturalWidth||e.width,r=e.naturalHeight||e.height;if(this._element===this._originalElement){var n=fabric.util.createCanvasElement();n.width=i,n.height=r,this._element=n,this._filteredEl=n}else this._element.getContext("2d").clearRect(0,0,i,r);return fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend()),fabric.filterBackend.applyFilters(t,this._originalElement,i,r,this._element,this.cacheKey),this._originalElement.width===this._element.width&&this._originalElement.height===this._element.height||(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(t){!1===this.isMoving&&this.resizeFilter&&this._needsResize()&&(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,this.applyResizeFilters()),this._stroke(t),this._renderPaintInOrder(t)},_renderFill:function(t){var e=this.width,i=this.height,r=e*this._filterScalingX,n=i*this._filterScalingY,s=-e/2,o=-i/2,a=this._element;a&&t.drawImage(a,this.cropX*this._filterScalingX,this.cropY*this._filterScalingY,r,n,s,o,e,i)},_needsResize:function(){return this.scaleX!==this._lastScaleX||this.scaleY!==this._lastScaleY},_resetWidthHeight:function(){var t=this.getElement();this.set("width",t.width),this.set("height",t.height)},_initElement:function(t,e){this.setElement(fabric.util.getById(t),e),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(t,e){t&&t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){this.width="width"in t?t.width:this.getElement()?this.getElement().width||0:0,this.height="height"in t?t.height:this.getElement()?this.getElement().height||0:0},parsePreserveAspectRatioAttribute:function(){var t,e=fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,n=1,s=1,o=0,a=0,h=0,c=0,l=this.width,u=this.height,f={width:l,height:u};return!e||"none"===e.alignX&&"none"===e.alignY?(n=l/i,s=u/r):("meet"===e.meetOrSlice&&(t=(l-i*(n=s=fabric.util.findScaleToFit(this._element,f)))/2,"Min"===e.alignX&&(o=-t),"Max"===e.alignX&&(o=t),t=(u-r*s)/2,"Min"===e.alignY&&(a=-t),"Max"===e.alignY&&(a=t)),"slice"===e.meetOrSlice&&(t=i-l/(n=s=fabric.util.findScaleToCover(this._element,f)),"Mid"===e.alignX&&(h=t/2),"Max"===e.alignX&&(h=t),t=r-u/s,"Mid"===e.alignY&&(c=t/2),"Max"===e.alignY&&(c=t),i=l/n,r=u/s)),{width:i,height:r,scaleX:n,scaleY:s,offsetLeft:o,offsetTop:a,cropX:h,cropY:c}}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(t,e){fabric.util.loadImage(t.src,function(i,r){r?e&&e(null,r):fabric.Image.prototype._initFilters.call(t,t.filters,function(r){t.filters=r||[],fabric.Image.prototype._initFilters.call(t,[t.resizeFilter],function(r){t.resizeFilter=r[0];var n=new fabric.Image(i,t);e(n)})})},null,t.crossOrigin)},fabric.Image.fromURL=function(t,e,i){fabric.util.loadImage(t,function(t){e&&e(new fabric.Image(t,i))},null,i&&i.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin".split(" ")),fabric.Image.fromElement=function(t,i,r){var n=fabric.parseAttributes(t,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(n["xlink:href"],i,e(r?fabric.util.object.clone(r):{},n))})}("undefined"!=typeof exports?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.angle%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.rotate(this._getAngleValueForStraighten()),this},fxStraighten:function(t){var e=function(){},i=(t=t||{}).onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.rotate(t),r()},onComplete:function(){n.setCoords(),i()}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.requestRenderAllBound}),this}}),function(){"use strict";function t(t,e){var i="precision "+e+" float;\nvoid main(){}",r=t.createShader(t.FRAGMENT_SHADER);return t.shaderSource(r,i),t.compileShader(r),!!t.getShaderParameter(r,t.COMPILE_STATUS)}function e(t){t&&t.tileSize&&(this.tileSize=t.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}fabric.isWebglSupported=function(e){if(fabric.isLikelyNode)return!1;e=e||fabric.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),r=i.getContext("webgl")||i.getContext("experimental-webgl"),n=!1;if(r){fabric.maxTextureSize=r.getParameter(r.MAX_TEXTURE_SIZE),n=fabric.maxTextureSize>=e;for(var s=["highp","mediump","lowp"],o=0;o<3;o++)if(t(r,s[o])){fabric.webGlPrecision=s[o];break}}return this.isSupported=n,n},fabric.WebglFilterBackend=e,e.prototype={tileSize:2048,resources:{},setupGLContext:function(t,e){this.dispose(),this.createWebGLCanvas(t,e),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(t,e)},chooseFastestCopyGLTo2DMethod:function(t,e){var i,r=void 0!==window.performance;try{new ImageData(1,1),i=!0}catch(t){i=!1}var n="undefined"!=typeof ArrayBuffer,s="undefined"!=typeof Uint8ClampedArray;if(r&&i&&n&&s){var o,a,h=fabric.util.createCanvasElement(),c=new ArrayBuffer(t*e*4),l={imageBuffer:c,destinationWidth:t,destinationHeight:e,targetCanvas:h};h.width=t,h.height=e,o=window.performance.now(),copyGLTo2DDrawImage.call(l,this.gl,l),a=window.performance.now()-o,o=window.performance.now(),copyGLTo2DPutImageData.call(l,this.gl,l),a>window.performance.now()-o?(this.imageBuffer=c,this.copyGLTo2D=copyGLTo2DPutImageData):this.copyGLTo2D=copyGLTo2DDrawImage}},createWebGLCanvas:function(t,e){var i=fabric.util.createCanvasElement();i.width=t,i.height=e;var r={premultipliedAlpha:!1},n=i.getContext("webgl",r);n||(n=i.getContext("experimental-webgl",r)),n&&(n.clearColor(0,0,0,0),this.canvas=i,this.gl=n)},applyFilters:function(t,e,i,r,n,s){var o,a=this.gl;s&&(o=this.getCachedTexture(s,e));var h={originalWidth:e.width||e.originalWidth,originalHeight:e.height||e.originalHeight,sourceWidth:i,sourceHeight:r,destinationWidth:i,destinationHeight:r,context:a,sourceTexture:this.createTexture(a,i,r,!o&&e),targetTexture:this.createTexture(a,i,r),originalTexture:o||this.createTexture(a,i,r,!o&&e),passes:t.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:n},c=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,c),t.forEach(function(t){t&&t.applyTo(h)}),resizeCanvasIfNeeded(h),this.copyGLTo2D(a,h),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(h.sourceTexture),a.deleteTexture(h.targetTexture),a.deleteFramebuffer(c),n.getContext("2d").setTransform(1,0,0,1,0,0),h},applyFiltersDebug:function(t,e,i,r,n,s){var o=this.gl,a=this.applyFilters(t,e,i,r,n,s),h=o.getError();if(h!==o.NO_ERROR){var c=this.glErrorToString(o,h),l=new Error("WebGL Error "+c);throw l.glErrorCode=h,l}return a},glErrorToString:function(t,e){if(!t)return"Context undefined for error code: "+e;if("number"!=typeof e)return"Error code is not a number";switch(e){case t.NO_ERROR:return"NO_ERROR";case t.INVALID_ENUM:return"INVALID_ENUM";case t.INVALID_VALUE:return"INVALID_VALUE";case t.INVALID_OPERATION:return"INVALID_OPERATION";case t.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case t.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case t.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return"UNKNOWN_ERROR"}},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(t,e,i,r){var n=t.createTexture();return t.bindTexture(t.TEXTURE_2D,n),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),r?t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r):t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,i,0,t.RGBA,t.UNSIGNED_BYTE,null),n},getCachedTexture:function(t,e){if(this.textureCache[t])return this.textureCache[t];var i=this.createTexture(this.gl,e.width,e.height,e);return this.textureCache[t]=i,i},evictCachesForKey:function(t){this.textureCache[t]&&(this.gl.deleteTexture(this.textureCache[t]),delete this.textureCache[t])},copyGLTo2D:copyGLTo2DDrawImage,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var t=this.gl,e=t.getExtension("WEBGL_debug_renderer_info"),i={renderer:"",vendor:""};if(e){var r=t.getParameter(e.UNMASKED_RENDERER_WEBGL),n=t.getParameter(e.UNMASKED_VENDOR_WEBGL);r&&(i.renderer=r.toLowerCase()),n&&(i.vendor=n.toLowerCase())}return this.gpuInfo=i,i}}}(),function(){"use strict";function t(){}var e=function(){};fabric.Canvas2dFilterBackend=t,t.prototype={evictCachesForKey:e,dispose:e,clearWebGLCaches:e,resources:{},applyFilters:function(t,e,i,r,n){var s=n.getContext("2d");s.drawImage(e,0,0,i,r);var o={sourceWidth:i,sourceHeight:r,imageData:s.getImageData(0,0,i,r),originalEl:e,originalImageData:s.getImageData(0,0,i,r),canvasEl:n,ctx:s,filterBackend:this};return t.forEach(function(t){t.applyTo(o)}),o.imageData.width===i&&o.imageData.height===r||(n.width=o.imageData.width,n.height=o.imageData.height),s.putImageData(o.imageData,0,0),o}}}(),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},createProgram:function(t,e,i){e=e||this.fragmentSource,i=i||this.vertexSource,"highp"!==fabric.webGlPrecision&&(e=e.replace(/precision highp float/g,"precision "+fabric.webGlPrecision+" float"));var r=t.createShader(t.VERTEX_SHADER);if(t.shaderSource(r,i),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+t.getShaderInfoLog(r));var n=t.createShader(t.FRAGMENT_SHADER);if(t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+t.getShaderInfoLog(n));var s=t.createProgram();if(t.attachShader(s,r),t.attachShader(s,n),t.linkProgram(s),!t.getProgramParameter(s,t.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+t.getProgramInfoLog(s));var o=this.getAttributeLocations(t,s),a=this.getUniformLocations(t,s)||{};return a.uStepW=t.getUniformLocation(s,"uStepW"),a.uStepH=t.getUniformLocation(s,"uStepH"),{program:s,attributeLocations:o,uniformLocations:a}},getAttributeLocations:function(t,e){return{aPosition:t.getAttribLocation(e,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(t,e,i){var r=e.aPostion,n=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,n),t.enableVertexAttribArray(r),t.vertexAttribPointer(r,2,t.FLOAT,!1,0,0),t.bufferData(t.ARRAY_BUFFER,i,t.STATIC_DRAW)},_setupFrameBuffer:function(t){var e,i,r=t.context;t.passes>1?(e=t.destinationWidth,i=t.destinationHeight,t.sourceWidth===e&&t.sourceHeight===i||(r.deleteTexture(t.targetTexture),t.targetTexture=t.filterBackend.createTexture(r,e,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.finish())},_swapTextures:function(t){t.passes--,t.pass++;var e=t.targetTexture;t.targetTexture=t.sourceTexture,t.sourceTexture=e},isNeutralState:function(){return!1},applyTo:function(t){if(t.webgl){if(t.passes>1&&this.isNeutralState(t))return;this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t)}else this.isNeutralState()||this.applyTo2d(t)},retrieveShader:function(t){return t.programCache.hasOwnProperty(this.type)||(t.programCache[this.type]=this.createProgram(t.context)),t.programCache[this.type]},applyToWebGL:function(t){var e=t.context,i=this.retrieveShader(t);0===t.pass&&t.originalTexture?e.bindTexture(e.TEXTURE_2D,t.originalTexture):e.bindTexture(e.TEXTURE_2D,t.sourceTexture),e.useProgram(i.program),this.sendAttributeData(e,i.attributeLocations,t.aPosition),e.uniform1f(i.uniformLocations.uStepW,1/t.sourceWidth),e.uniform1f(i.uniformLocations.uStepH,1/t.sourceHeight),this.sendUniformData(e,i.uniformLocations),e.viewport(0,0,t.destinationWidth,t.destinationHeight),e.drawArrays(e.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(t,e,i){t.activeTexture(i),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE0)},unbindAdditionalTexture:function(t,e){t.activeTexture(e),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(t){this[this.mainParameter]=t},sendUniformData:function(){},createHelpLayer:function(t){if(!t.helpLayer){var e=document.createElement("canvas");e.width=t.sourceWidth,e.height=t.sourceHeight,t.helpLayer=e}},toObject:function(){var t={type:this.type},e=this.mainParameter;return e&&(t[e]=this[e]),t},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.ColorMatrix=r(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(t){this.callSuper("initialize",t),this.matrix=this.matrix.slice(0)},isNeutralState:function(){for(var t=i.ColorMatrix,e=20;e--;)if(this.matrix[e]!==t.prototype.matrix[e])return!1;return!0},applyTo2d:function(t){var e,i,r,n,s,o=t.imageData.data,a=o.length,h=this.matrix,c=this.colorsOnly;for(s=0;sy||o<0||o>_||(h=4*(a*_+o),c=v[d*m+f],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,S||(n+=p[h+3]*c));C[s]=e,C[s+1]=i,C[s+2]=r,C[s+3]=S?p[s+3]:n}t.imageData=x},getUniformLocations:function(t,e){return{uMatrix:t.getUniformLocation(e,"uMatrix"),uOpaque:t.getUniformLocation(e,"uOpaque"),uHalfSize:t.getUniformLocation(e,"uHalfSize"),uSize:t.getUniformLocation(e,"uSize")}},sendUniformData:function(t,e){t.uniform1fv(e.uMatrix,this.matrix)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Grayscale=r(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(t){var e,i,r=t.imageData.data,n=r.length,s=this.mode;for(e=0;ec[0]&&n>c[1]&&s>c[2]&&r1&&this.isNeutralState(t))return;t.passes++,this.width=t.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=t.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),t.destinationWidth=this.dW,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceWidth=t.destinationWidth,this.height=t.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),t.destinationHeight=this.dH,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceHeight=t.destinationHeight}else this.isNeutralState(t)||this.applyTo2d(t)},isNeutralState:function(t){var e=t.scaleX||this.scaleX,i=t.scaleY||this.scaleY;return 1===e&&1===i},lanczosCreate:function(t){return function(e){if(e>=t||e<=-t)return 0;if(e<1.1920929e-7&&e>-1.1920929e-7)return 1;var i=(e*=Math.PI)/t;return a(e)/e*a(i)/i}},applyTo2d:function(t){var e=t.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var n,s=e.width,a=e.height,h=o(s*i),c=o(a*r);"sliceHack"===this.resizeType?n=this.sliceByTwo(t,s,a,h,c):"hermite"===this.resizeType?n=this.hermiteFastResize(t,s,a,h,c):"bilinear"===this.resizeType?n=this.bilinearFiltering(t,s,a,h,c):"lanczos"===this.resizeType&&(n=this.lanczosResize(t,s,a,h,c)),t.imageData=n},sliceByTwo:function(t,i,n,s,o){var a,h,c=t.imageData,l=!1,u=!1,f=.5*i,d=.5*n,g=e.filterBackend.resources,p=0,v=0,m=i,b=0;for(g.sliceByTwo||(g.sliceByTwo=document.createElement("canvas")),((a=g.sliceByTwo).width<1.5*i||a.height=e)){P=r(1e3*s(w-C.x)),x[P]||(x[P]={});for(var F=S.y-y;F<=S.y+y;F++)F<0||F>=o||(M=r(1e3*s(F-C.y)),x[P][M]||(x[P][M]=g(n(i(P*m,2)+i(M*b,2))/1e3)),(T=x[P][M])>0&&(k+=T,D+=T*u[O=4*(F*e+w)],j+=T*u[O+1],E+=T*u[O+2],A+=T*u[O+3]))}d[O=4*(h*a+t)]=D/k,d[O+1]=j/k,d[O+2]=E/k,d[O+3]=A/k}return++t1&&M<-1||(_=2*M*M*M-3*M*M+1)>0&&(T+=_*d[(P=4*(A+k*e))+3],x+=_,d[P+3]<255&&(_=_*d[P+3]/250),C+=_*d[P],S+=_*d[P+1],w+=_*d[P+2],y+=_)}p[b]=C/y,p[b+1]=S/y,p[b+2]=w/y,p[b+3]=T/x}return g},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Contrast=r(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(0!==this.contrast){var e,i=t.imageData.data,r=i.length,n=Math.floor(255*this.contrast),s=259*(n+255)/(255*(259-n));for(e=0;e1&&(e=1/this.aspectRatio):this.aspectRatio<1&&(e=this.aspectRatio),t=e*this.blur*.12,this.horizontal?i[0]=t:i[1]=t,i}}),i.Blur.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Gamma=r(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",applyTo2d:function(t){var e,i=t.imageData.data,r=this.gamma,n=i.length,s=1/r[0],o=1/r[1],a=1/r[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),e=0,n=256;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){"stroke"===this.paintFirst?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,e,i){t.textBaseline="alphabetic",t.font=this._getFontDeclaration(e,i)},calcTextWidth:function(){for(var t=this.getLineWidth(0),e=1,i=this._textLines.length;et&&(t=r)}return t},_renderTextLine:function(t,e,i,r,n,s){this._renderChars(t,e,i,r,n,s)},_renderTextLinesBackground:function(t){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var e,i,r,n,s,o,a=0,h=t.fillStyle,c=this._getLeftOffset(),l=this._getTopOffset(),u=0,f=0,d=0,g=this._textLines.length;dn)){var d=a-n;h[t]=a,h[c]+=d,n=a}return{width:n*u,kernedWidth:a*u}},getHeightOfChar:function(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")},measureLine:function(t){var e=this._measureLine(t);return 0!==this.charSpacing&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e},_measureLine:function(t){var e,i,r,n,s=0,o=this._textLines[t],a=new Array(o.length);for(this.__charBounds[t]=a,e=0;e0&&!n){var u=this.__charBounds[e][i-1];l.left=u.left+u.width+a.kernedWidth-a.width}return l},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var e=this._textLines[t],i=this.getHeightOfChar(t,0),r=1,n=e.length;ri&&(i=s)}return this.__lineHeights[t]=i*this.lineHeight*this._fontSizeMult,this.__lineHeights[t]},calcTextHeight:function(){for(var t,e=0,i=0,r=this._textLines.length;i0?(t.fillStyle=f,s&&f&&t.fillRect(d+r+o,g+l*(1-this._fontSizeFraction)+this.offsets[e]*this.fontSize,a,this.fontSize/15),o=h.left,a=h.width,s=c,f=u):a+=h.kernedWidth;t.fillStyle=u,c&&u&&t.fillRect(d+r+o,g+l*(1-this._fontSizeFraction)+this.offsets[e]*this.fontSize,a,this.fontSize/15),g+=i}else g+=i;this._removeShadow(t)}},_getFontDeclaration:function(t,i){var r=t||this;return[e.isLikelyNode?r.fontWeight:r.fontStyle,e.isLikelyNode?r.fontStyle:r.fontWeight,i?"200px":r.fontSize+"px",e.isLikelyNode?'"'+r.fontFamily+'"':r.fontFamily].join(" ")},render:function(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t)))},_splitTextIntoLines:function(t){for(var i=t.split(this._reNewline),r=new Array(i.length),n=["\n"],s=[],o=0;o-1&&(t.underline=!0),t.textDecoration.indexOf("line-through")>-1&&(t.linethrough=!0),t.textDecoration.indexOf("overline")>-1&&(t.overline=!0),delete t.textDecoration)}fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(t,e){this.callSuper("initialize",t,e),this.initBehavior()},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(t){this.clearContextTop(),this.callSuper("render",t),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(t){this.callSuper("_render",t)},clearContextTop:function(t){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this.canvas.contextTop,i=this.canvas.viewportTransform;e.save(),e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(e),this.transformMatrix&&e.transform.apply(e,this.transformMatrix),this._clearTextArea(e),t||e.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas){var t,e=this._getCursorBoundaries();this.canvas&&this.canvas.contextTop?(t=this.canvas.contextTop,this.clearContextTop(!0)):(t=this.canvas.contextContainer).save(),this.selectionStart===this.selectionEnd?this.renderCursor(e,t):this.renderSelection(e,t),t.restore()}},_clearTextArea:function(t){var e=this.width+4,i=this.height+4;t.clearRect(-e/2,-i/2,e,i)},_getCursorBoundaries:function(t){void 0===t&&(t=this.selectionStart);var e=this._getLeftOffset(),i=this._getTopOffset(),r=this._getCursorBoundariesOffsets(t);return{left:e,top:i,leftOffset:r.left,topOffset:r.top}},_getCursorBoundariesOffsets:function(t){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;for(var e,i,r=0,n=0,s=this.get2DCursorLocation(t),o=0;o0?n:0)},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,s=this.getValueOfPropertyAt(r,n,"fontSize"),o=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/o,h=t.topOffset;h+=(1-this._fontSizeFraction)*this.getHeightOfLine(r)/this.lineHeight-s*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(t,e),e.fillStyle=this.getValueOfPropertyAt(r,n,"fill"),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+t.leftOffset-a/2,h+t.top,a,s)},renderSelection:function(t,e){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,r=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,n=-1!==this.textAlign.indexOf("justify"),s=this.get2DCursorLocation(i),o=this.get2DCursorLocation(r),a=s.lineIndex,h=o.lineIndex,c=s.charIndex<0?0:s.charIndex,l=o.charIndex<0?0:o.charIndex,u=a;u<=h;u++){var f=this._getLineLeftOffset(u)||0,d=this.getHeightOfLine(u),g=0,p=0,v=0;u===a&&(p=this.__charBounds[a][c].left),u>=a&&u1)&&(d/=this.lineHeight),this.inCompositionMode?(e.fillStyle=this.compositionColor||"black",e.fillRect(t.left+f+p,t.top+t.topOffset+d,v-p,1)):(e.fillStyle=this.selectionColor,e.fillRect(t.left+f+p,t.top+t.topOffset,v-p,d)),t.topOffset+=g}},getCurrentCharFontSize:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fontSize")},getCurrentCharColor:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fill")},_getCurrentCharIndex:function(){var t=this.get2DCursorLocation(this.selectionStart,!0),e=t.charIndex>0?t.charIndex-1:0;return{l:t.lineIndex,c:e}}}),fabric.IText.fromObject=function(e,i){if(t(e),e.styles)for(var r in e.styles)for(var n in e.styles[r])t(e.styles[r][n]);fabric.Object._fromObject("IText",e,i,"text")}}(),function(){var t=fabric.util.object.clone;fabric.util.object.extend(fabric.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(t){this.isEditing&&this.exitEditing(),this.selected=!1,fabric.Object.prototype.onDeselect.call(this,t)},initAddedHandler:function(){var t=this;this.on("added",function(){var e=t.canvas;e&&(e._hasITextHandlers||(e._hasITextHandlers=!0,t._initCanvasHandlers(e)),e._iTextInstances=e._iTextInstances||[],e._iTextInstances.push(t))})},initRemovedHandler:function(){var t=this;this.on("removed",function(){var e=t.canvas;e&&(e._iTextInstances=e._iTextInstances||[],fabric.util.removeFromArray(e._iTextInstances,t),0===e._iTextInstances.length&&(e._hasITextHandlers=!1,t._removeCanvasHandlers(e)))})},_initCanvasHandlers:function(t){t._mouseUpITextHandler=function(){t._iTextInstances&&t._iTextInstances.forEach(function(t){t.__isMousedown=!1})}.bind(this),t.on("mouse:up",t._mouseUpITextHandler)},_removeCanvasHandlers:function(t){t.off("mouse:up",t._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(t,e,i,r){var n;return n={isAborted:!1,abort:function(){this.isAborted=!0}},t.animate("_currentCursorOpacity",e,{duration:i,onComplete:function(){n.isAborted||t[r]()},onChange:function(){t.canvas&&t.selectionStart===t.selectionEnd&&t.renderCursorOrSelection()},abort:function(){return n.isAborted}}),n},_onTickComplete:function(){var t=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){t._currentTickCompleteState=t._animateCursor(t,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(t){var e=this,i=t?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout(function(){e._tick()},i)},abortCursorAnimation:function(){var t=this._currentTickState||this._currentTickCompleteState,e=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,t&&e&&e.clearContext(e.contextTop||e.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(t){var e=0,i=t-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i--;for(;/\S/.test(this._text[i])&&i>-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i++;for(;/\S/.test(this._text[i])&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this._text[i])&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(t,e,i){var r=i.slice(0,t),n=fabric.util.string.graphemeSplit(r).length;if(t===e)return{selectionStart:n,selectionEnd:n};var s=i.slice(t,e);return{selectionStart:n,selectionEnd:n+fabric.util.string.graphemeSplit(s).length}},fromGraphemeToStringSelection:function(t,e,i){var r=i.slice(0,t).join("").length;if(t===e)return{selectionStart:r,selectionEnd:r};return{selectionStart:r,selectionEnd:r+i.slice(t,e).join("").length}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var t=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=t.selectionStart,this.hiddenTextarea.selectionEnd=t.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var t=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=t.selectionEnd,this.inCompositionMode||(this.selectionStart=t.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.inCompositionMode?this.compositionStart:this.selectionStart,e=this._getCursorBoundaries(t),i=this.get2DCursorLocation(t),r=i.lineIndex,n=i.charIndex,s=this.getValueOfPropertyAt(r,n,"fontSize")*this.lineHeight,o=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),(h=fabric.util.transformPoint(h,this.canvas.viewportTransform)).x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s+"px",charHeight:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&(this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},removeStyleFromTo:function(t,e){var i,r,n=this.get2DCursorLocation(t,!0),s=this.get2DCursorLocation(e,!0),o=n.lineIndex,a=n.charIndex,h=s.lineIndex,c=s.charIndex;if(o!==h){if(this.styles[o])for(i=a;i=c&&(r[l-f]=r[u],delete r[u])}},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},restartCursorIfNeeded:function(){this._currentTickState&&!this._currentTickState.isAborted&&this._currentTickCompleteState&&!this._currentTickCompleteState.isAborted||this.initDelayedCursor()},insertNewlineStyleObject:function(e,i,r,n){var s,o={},a=!1;r||(r=1),this.shiftLineStyles(e,r),this.styles[e]&&(s=this.styles[e][0===i?i:i-1]);for(var h in this.styles[e]){var c=parseInt(h,10);c>=i&&(a=!0,o[c-i]=this.styles[e][h],delete this.styles[e][h])}for(a?this.styles[e+r]=o:delete this.styles[e+r];r>1;)r--,n&&n[r]?this.styles[e+r]={0:t(n[r])}:s?this.styles[e+r]={0:t(s)}:delete this.styles[e+r];this._forceClearCache=!0},insertCharStyleObject:function(e,i,r,n){this.styles||(this.styles={});var s=this.styles[e],o=s?t(s):{};r||(r=1);for(var a in o){var h=parseInt(a,10);h>=i&&(s[h+r]=o[h],o[h-r]||delete s[h])}if(this._forceClearCache=!0,n)for(;r--;)Object.keys(n[r]).length&&(this.styles[e]||(this.styles[e]={}),this.styles[e][i+r]=t(n[r]));else if(s)for(var c=s[i?i-1:1];c&&r--;)this.styles[e][i+r]=t(c)},insertNewStyleBlock:function(t,e,i){for(var r=this.get2DCursorLocation(e,!0),n=[0],s=0,o=0;o0&&(this.insertCharStyleObject(r.lineIndex,r.charIndex,n[0],i),i=i&&i.slice(n[0]+1)),s&&this.insertNewlineStyleObject(r.lineIndex,r.charIndex+n[0],s);for(o=1;o0?this.insertCharStyleObject(r.lineIndex+o,0,n[o],i):i&&(this.styles[r.lineIndex+o][0]=i[0]),i=i&&i.slice(n[o]+1);n[o]>0&&this.insertCharStyleObject(r.lineIndex+o,0,n[o],i)},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e,t.e)&&(this.fire("tripleclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("mousedblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable&&(!t.e.button||1===t.e.button)){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,!this.editable||this._isObjectMoved(t.e)||t.e.button&&1!==t.e.button||(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i=this.getLocalPointer(t),r=0,n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;h0&&(o+=this._textLines[h-1].length+1);n=this._getLineLeftOffset(a)*this.scaleX;for(var l=0,u=(e=this._textLines[a]).length;ls||o<0?0:1);return this.flipX&&(a=n-a),a>this._text.length&&(a=this._text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; line-height: 1px; paddingーtop: "+t.fontSize+";",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing&&!this.inCompositionMode){if(t.keyCode in this.keysMap)this[this.keysMap[t.keyCode]](t);else{if(!(t.keyCode in this.ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this.ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(t){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:t.keyCode in this.ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this.ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.requestRenderAll())},onInput:function(t){var e=this.fromPaste;if(this.fromPaste=!1,t&&t.stopPropagation(),this.isEditing){var i,r,n=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,s=this._text.length,o=n.length,a=o-s;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var h=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),c=this.selectionStart>h.selectionStart;this.selectionStart!==this.selectionEnd?(i=this._text.slice(this.selectionStart,this.selectionEnd),a+=this.selectionEnd-this.selectionStart):o0&&(r+=(i=this.__charBounds[t][e-1]).left+i.width),r},getDownCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(n===this._textLines.length-1||t.metaKey||34===t.keyCode)return this._text.length-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n+1,o);return this._textLines[n].slice(s).length+a+2},_getSelectionForOffset:function(t,e){return t.shiftKey&&this.selectionStart!==this.selectionEnd&&e?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||t.metaKey||33===t.keyCode)return-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n-1,o),h=this._textLines[n].slice(0,s);return-this._textLines[n-1].length+a-h.length},_getIndexOnLine:function(t,e){for(var i,r,n=this._textLines[t],s=this._getLineLeftOffset(t),o=0,a=0,h=n.length;ae){r=!0;var c=s-i,l=s,u=Math.abs(c-e);o=Math.abs(l-e)=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i=this["get"+t+"CursorOffset"](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(i):this.moveCursorWithoutShift(i),0!==i&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,e.shiftKey?i+="Shift":i+="outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t,e){void 0===e&&(e=t+1),this.removeStyleFromTo(t,e),this._text.splice(t,e-t),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(t,e,i,r){void 0===r&&(r=i),r>i&&this.removeStyleFromTo(i,r);var n=fabric.util.string.graphemeSplit(t);this.insertNewStyleBlock(n,i,e),this._text=[].concat(this._text.slice(0,i),n,this._text.slice(r)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.Text.prototype,{toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this._getSVGLeftTopOffsets(),r=this._getSVGTextAndBg(i.textTop,i.textLeft);return this._wrapSVGTextAndBg(e,r),t?t(e.join("")):e.join("")},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(t,e){var i=this.getSvgFilter(),r=""===i?"":' style="'+i+'"',n=this.getSvgTextDecoration(this);t.push("\t\n",e.textBgRects.join(""),'\t\t",e.textSpans.join(""),"\n","\t\n")},_getSVGTextAndBg:function(t,e){var i,r=[],n=[],s=t;this._setSVGBg(n);for(var o=0,a=this._textLines.length;o",fabric.util.string.escapeXml(i),""].join("")},_setSVGTextLineText:function(t,e,i,r){var n,s,o,a,h,c=this.getHeightOfLine(e),l=-1!==this.textAlign.indexOf("justify"),u="",f=0,d=this._textLines[e];r+=c*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,p=d.length-1;g<=p;g++)h=g===p||this.charSpacing,u+=d[g],o=this.__charBounds[e][g],0===f?(i+=o.kernedWidth-o.width,f+=o.width):f+=o.kernedWidth,l&&!h&&this._reSpaceAndTab.test(d[g])&&(h=!0),h||(n=n||this.getCompleteStyleDeclaration(e,g),s=this.getCompleteStyleDeclaration(e,g+1),h=this._hasStyleChangedForSvg(n,s)),h&&(a=this._getStyleDeclaration(e,g)||{},t.push(this._createTextCharSpan(u,a,i,r)),u="",n=s,i+=f,f=0)},_pushTextBgRect:function(i,r,n,s,o,a){i.push("\t\t\n')},_setSVGTextLineBg:function(t,e,i,r){for(var n,s,o=this._textLines[e],a=this.getHeightOfLine(e)/this.lineHeight,h=0,c=0,l=this.getValueOfPropertyAt(e,0,"textBackgroundColor"),u=0,f=o.length;uthis.width&&this._set("width",this.dynamicMinWidth),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(t){for(var e=0,i=0,r=0,n={},s=0;s0?(i=0,r++,e++):this._reSpaceAndTab.test(t.graphemeText[r])&&s>0&&(i++,r++),n[s]={line:e,offset:i},r+=t.graphemeLines[s].length,i+=t.graphemeLines[s].length;return n},styleHas:function(t,i){if(this._styleMap&&!this.isWrapping){var r=this._styleMap[i];r&&(i=r.line)}return e.Text.prototype.styleHas.call(this,t,i)},_getStyleDeclaration:function(t,e){if(this._styleMap&&!this.isWrapping){var i=this._styleMap[t];if(!i)return null;t=i.line,e=i.offset+e}return this.callSuper("_getStyleDeclaration",t,e)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=[];for(this.isWrapping=!0,i=0;i=r&&!d&&(s.push(o),o=[],n=l,d=!0),d||o.push(" "),o=o.concat(h),u=this._measureWord([" "],i,c),c++,d=!1,l>f&&(f=l);return p&&s.push(o),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),s},isEndOfWrapping:function(t){return!this._styleMap[t+1]||this._styleMap[t+1].line!==this._styleMap[t].line},_splitTextIntoLines:function(t){for(var i=e.Text.prototype._splitTextIntoLines.call(this,t),r=this._wrapText(i.lines,this.width),n=new Array(r.length),s=0;s=h.getMinWidth()?(h.set("width",l),!0):void 0},fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]}})}(); \ No newline at end of file +function resizeCanvasIfNeeded(t){var e=t.targetCanvas,i=e.width,r=e.height,n=t.destinationWidth,s=t.destinationHeight;i===n&&r===s||(e.width=n,e.height=s)}function copyGLTo2DDrawImage(t,e){var i=t.canvas,r=e.targetCanvas,n=r.getContext("2d");n.translate(0,r.height),n.scale(1,-1);var s=i.height-r.height;n.drawImage(i,0,s,r.width,r.height,0,0,r.width,r.height)}function copyGLTo2DPutImageData(t,e){var i=e.targetCanvas.getContext("2d"),r=e.destinationWidth,n=e.destinationHeight,s=r*n*4,o=new Uint8Array(this.imageBuffer,0,s),a=new Uint8ClampedArray(this.imageBuffer,0,s);t.readPixels(0,0,r,n,t.RGBA,t.UNSIGNED_BYTE,o);var h=new ImageData(a,r,n);i.putImageData(h,0,0)}var fabric=fabric||{version:"2.0.0-rc.4"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]}}),fabric.jsdomImplForWrapper=require("jsdom/lib/jsdom/living/generated/utils").implForWrapper,fabric.nodeCanvas=require("jsdom/lib/jsdom/utils").Canvas,fabric.window=fabric.document.defaultView,DOMParser=require("xmldom").DOMParser),fabric.isTouchSupported="ontouchstart"in fabric.window,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","instantiated_by_use"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.iMatrix=[1,0,0,1,0,0],fabric.canvasModule="canvas",fabric.perfLimitSizeTotal=2097152,fabric.maxCacheSideLimit=4096,fabric.minCacheSideLimit=256,fabric.charWidthsCache={},fabric.textureSize=2048,fabric.enableGLFiltering=!0,fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,fabric.browserShadowBlurConstant=1,fabric.initFilterBackend=function(){return fabric.enableGLFiltering&&fabric.isWebglSupported&&fabric.isWebglSupported(fabric.textureSize)?(console.log("max texture size: "+fabric.maxTextureSize),new fabric.WebglFilterBackend({tileSize:fabric.textureSize})):fabric.Canvas2dFilterBackend?new fabric.Canvas2dFilterBackend:void 0},"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=fabric),function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);void 0!==e&&(this.clipTo=new Function("ctx",e))}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return-1!==i&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e);return{x:t.x*r-t.y*i,y:t.x*i+t.y*r}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e)-i,n=[t[0].y,t[1].y,t[2].y,t[3].y],s=fabric.util.array.min(n);return{left:i,top:s,width:r,height:fabric.util.array.max(n)-s}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},getSvgAttributes:function(t){var e=["instantiated_by_use","style","id","class"];switch(t){case"linearGradient":e=e.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);break;case"radialGradient":e=e.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);break;case"stop":e=e.concat(["offset","stop-color","stop-opacity"])}return e},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)(r+=a[d++%f])>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(){return fabric.document.createElement("canvas")},createImage:function(){return fabric.document.createElement("img")},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.rotate(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?P-=2*f:1===c&&P<0&&(P+=2*f);for(var M=Math.ceil(Math.abs(P/f*2)),F=[],I=P/M,L=8/3*Math.sin(I/4)*Math.sin(I/4)/Math.sin(I/2),R=A+I,B=0;B=n?s-n:2*Math.PI-(n-s)}function i(t,e,i,r,n,a,h,c){var l=o.call(arguments);if(s[l])return s[l];var u,f,d,g,p,v,m,b,_=Math.sqrt,y=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var T=0;T<2;++T)if(T>0&&(f=6*e-12*r+6*a,u=-3*e+9*r-9*a+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;0<(g=-d/f)&&g<1&&S.push(g)}else(m=f*f-4*d*u)<0||(0<(p=(-f+(b=_(m)))/(2*u))&&p<1&&S.push(p),0<(v=(-f-b)/(2*u))&&v<1&&S.push(v));for(var O,k,D,j=S.length,E=j;j--;)O=(D=1-(g=S[j]))*D*D*t+3*D*D*g*i+3*D*g*g*n+g*g*g*h,w[0][j]=O,k=D*D*D*e+3*D*D*g*r+3*D*g*g*a+g*g*g*c,w[1][j]=k;w[0][E]=t,w[1][E]=e,w[0][E+1]=h,w[1][E+1]=c;var A=[{x:y.apply(null,w[0]),y:y.apply(null,w[1])},{x:x.apply(null,w[0]),y:x.apply(null,w[1])}];return s[l]=A,A}var r={},n={},s={},o=Array.prototype.join;fabric.util.drawArc=function(e,i,r,n){for(var s=n[0],o=n[1],a=n[2],h=n[3],c=n[4],l=[[],[],[],[]],u=t(n[5]-i,n[6]-r,s,o,h,c,a),f=0,d=u.length;f=e})}}}(),function(){function t(e,i,r){if(r)if(!fabric.isLikelyNode&&i instanceof Element)e=i;else if(i instanceof Array){e=[];for(var n=0,s=i.length;n/g,">")},graphemeSplit:function(t){var e,i=0,r=[];for(i=0,e;i57343)return t.charAt(e);if(55296<=i&&i<=56319){if(t.length<=e+1)throw"High surrogate without following low surrogate";var r=t.charCodeAt(e+1);if(56320>r||r>57343)throw"High surrogate without following low surrogate";return t.charAt(e)+t.charAt(e+1)}if(0===e)throw"Low surrogate without preceding high surrogate";var n=t.charCodeAt(e-1);if(55296>n||n>56319)throw"Low surrogate without preceding high surrogate";return!1}(t,i))&&r.push(e);return r}}}(),function(){function t(){}function e(t){for(var e=null,r=this;r.constructor.superclass;){var n=r.constructor.superclass.prototype[t];if(r[t]!==n){e=n;break}r=r.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,i.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}var i=Array.prototype.slice,r=function(){},n=function(){for(var t in{toString:1})if("toString"===t)return!1;return!0}(),s=function(t,e,i){for(var r in e)r in t.prototype&&"function"==typeof t.prototype[r]&&(e[r]+"").indexOf("callSuper")>-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],n&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=function(){function n(){this.initialize.apply(this,arguments)}var o=null,a=i.call(arguments,0);"function"==typeof a[0]&&(o=a.shift()),n.superclass=o,n.subclasses=[],o&&(t.prototype=o.prototype,n.prototype=new t,o.subclasses.push(n));for(var h=0,c=a.length;h=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(r,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=function(t,e){var i=t.style;if(!i)return t;if("string"==typeof e)return t.style.cssText+=";"+e,e.indexOf("opacity")>-1?n(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)"opacity"===r?n(t,e[r]):i["float"===r||"cssFloat"===r?void 0===i.styleFloat?"cssFloat":"styleFloat":r]=e[r];return t}}(),function(){function t(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function e(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&((t=t.parentNode||t.host)===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==t.style.position););return{left:e,top:i}}var i,r=Array.prototype.slice,n=function(t){return r.call(t,0)};try{i=n(fabric.document.childNodes)instanceof Array}catch(t){}i||(n=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var s;s=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){var t=fabric.document.documentElement.style,e="userSelect"in t?"userSelect":"MozUserSelect"in t?"MozUserSelect":"WebkitUserSelect"in t?"WebkitUserSelect":"KhtmlUserSelect"in t?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),e?t.style[e]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t},fabric.util.makeElementSelectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=null),e?t.style[e]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}}(),function(){fabric.util.getScript=function(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}}(),fabric.util.getById=function(t){return"string"==typeof t?fabric.document.getElementById(t):t},fabric.util.toArray=n,fabric.util.makeElement=t,fabric.util.addClass=function(t,e){t&&-1===(" "+t.className+" ").indexOf(" "+e+" ")&&(t.className+=(t.className?" ":"")+e)},fabric.util.wrapElement=function(e,i,r){return"string"==typeof i&&(i=t(i,r)),e.parentNode&&e.parentNode.replaceChild(i,e),i.appendChild(e),i},fabric.util.getScrollLeftTop=e,fabric.util.getElementOffset=function(t){var i,r,n=t&&t.ownerDocument,o={left:0,top:0},a={left:0,top:0},h={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return a;for(var c in h)a[h[c]]+=parseInt(s(t,c),10)||0;return i=n.documentElement,void 0!==t.getBoundingClientRect&&(o=t.getBoundingClientRect()),r=e(t),{left:o.left+r.left-(i.clientLeft||0)+a.left,top:o.top+r.top-(i.clientTop||0)+a.top}},fabric.util.getElementStyle=s,fabric.util.getNodeCanvas=function(t){var e=fabric.jsdomImplForWrapper(t);return e._canvas||e._image}}(),function(){function t(){}var e=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{if(t[e]())return t[e]}catch(t){}}();fabric.util.request=function(i,r){r||(r={});var n=r.method?r.method.toUpperCase():"GET",s=r.onComplete||function(){},o=e(),a=r.body||r.parameters;return o.onreadystatechange=function(){4===o.readyState&&(s(o),o.onreadystatechange=t)},"GET"===n&&(a=null,"string"==typeof r.parameters&&(i=function(t,e){return t+(/\?/.test(t)?"&":"?")+e}(i,r.parameters))),o.open(n,i,!0),"POST"!==n&&"PUT"!==n||o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.send(a),o}}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){void 0!==console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(){return!1}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){return fabric.window.setTimeout(t,1e3/60)},r=fabric.window.cancelAnimationFrame||fabric.window.clearTimeout;fabric.util.animate=function(i){e(function(r){i||(i={});var n,s=r||+new Date,o=i.duration||500,a=s+o,h=i.onChange||t,c=i.abort||t,l=i.onComplete||t,u=i.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},f="startValue"in i?i.startValue:0,d="endValue"in i?i.endValue:100,g=i.byValue||d-f;i.onStart&&i.onStart(),function t(r){if(c())l(d,1,1);else{var p=(n=r||+new Date)>a?o:n-s,v=p/o,m=u(p,f,g,o),b=Math.abs((m-f)/g);h(m,b,v),n>a?i.onComplete&&i.onComplete():e(t)}}(s)})},fabric.util.requestAnimFrame=e,fabric.util.cancelAnimFrame=function(){return r.apply(fabric.window,arguments)}}(),function(){fabric.util.animateColor=function(t,e,i,r){var n=new fabric.Color(t).getSource(),s=new fabric.Color(e).getSource();r=r||{},fabric.util.animate(fabric.util.object.extend(r,{duration:i||500,startValue:n,endValue:s,byValue:s,easing:function(t,e,i,n){return function(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}(e,i,r.colorEasing?r.colorEasing(t,n):1-Math.cos(t/n*(Math.PI/2)))}}))}}(),function(){function t(t,e,i,r){return t-1&&a>-1&&a-1&&(e="stroke")}else n=s?e.map(d):d(e,r);else e="";return!s&&isNaN(n)?e:n}function r(t){return new RegExp("^("+t.join("|")+")\\b","i")}function n(t,e){var i,r,n,s,o=[];for(n=0,s=e.length;na?a:o),1===o&&1===a&&0===h&&0===l&&0===g&&0===p)return x;if((g||p)&&(C=" translate("+d(g)+" "+d(p)+") "),r=C+" matrix("+o+" 0 0 "+a+" "+h*o+" "+l*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else r=(n=t).getAttribute("transform")+r;return n.setAttribute("transform",r),x}var c=t.fabric||(t.fabric={}),l=c.util.object.extend,u=c.util.object.clone,f=c.util.toFixed,d=c.util.parseUnit,g=c.util.multiplyTransformMatrices,p={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","paint-order":"paintFirst","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"textAnchor",opacity:"opacity"},v={stroke:"strokeOpacity",fill:"fillOpacity"};c.svgValidTagNamesRegEx=r(["path","circle","polygon","polyline","ellipse","rect","line","image","text","linearGradient","radialGradient","stop"]),c.svgViewBoxElementsRegEx=r(["symbol","image","marker","pattern","view","svg"]),c.svgInvalidAncestorsRegEx=r(["pattern","defs","symbol","metadata","clipPath","mask","desc"]),c.svgValidParentsRegEx=r(["symbol","g","a","svg"]),c.cssRules={},c.gradientDefs={},c.parseTransformAttribute=function(){function t(t,e,i){t[i]=Math.tan(c.util.degreesToRadians(e[0]))}var e=[1,0,0,1,0,0],i=c.reNum,r="(?:\\s+,?\\s*|,\\s*)",n="(?:"+("(?:(matrix)\\s*\\(\\s*("+i+")"+r+"("+i+")"+r+"("+i+")"+r+"("+i+")"+r+"("+i+")"+r+"("+i+")\\s*\\))")+"|"+("(?:(translate)\\s*\\(\\s*("+i+")(?:"+r+"("+i+"))?\\s*\\))")+"|"+("(?:(scale)\\s*\\(\\s*("+i+")(?:"+r+"("+i+"))?\\s*\\))")+"|"+("(?:(rotate)\\s*\\(\\s*("+i+")(?:"+r+"("+i+")"+r+"("+i+"))?\\s*\\))")+"|"+("(?:(skewX)\\s*\\(\\s*("+i+")\\s*\\))")+"|"+("(?:(skewY)\\s*\\(\\s*("+i+")\\s*\\))")+")",s="^\\s*(?:"+("(?:"+n+"(?:"+r+"*"+n+")*)")+"?)\\s*$",o=new RegExp(s),a=new RegExp(n,"g");return function(i){var r=e.concat(),s=[];if(!i||i&&!o.test(i))return r;i.replace(a,function(i){var o=new RegExp(n).exec(i).filter(function(t){return!!t}),a=o[1],h=o.slice(2).map(parseFloat);switch(a){case"translate":!function(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}(r,h);break;case"rotate":h[0]=c.util.degreesToRadians(h[0]),function(t,e){var i=Math.cos(e[0]),r=Math.sin(e[0]),n=0,s=0;3===e.length&&(n=e[1],s=e[2]),t[0]=i,t[1]=r,t[2]=-r,t[3]=i,t[4]=n-(i*n-r*s),t[5]=s-(r*n+i*s)}(r,h);break;case"scale":!function(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}(r,h);break;case"skewX":t(r,h,2);break;case"skewY":t(r,h,1);break;case"matrix":r=h}s.push(r.concat()),r=e.concat()});for(var h=s[0];s.length>1;)s.shift(),h=c.util.multiplyTransformMatrices(h,s[0]);return h}}();var m=new RegExp("^\\s*("+c.reNum+"+)\\s*,?\\s*("+c.reNum+"+)\\s*,?\\s*("+c.reNum+"+)\\s*,?\\s*("+c.reNum+"+)\\s*$");c.parseSVGDocument=function(t,e,i,r){if(t){!function(t){for(var e=n(t,["use","svg:use"]),i=0;e.length&&i/i,""))),n&&n.documentElement||e&&e(null),c.parseSVGDocument(n.documentElement,function(t,i,r,n){e&&e(t,i,r,n)},i,r)}})},loadSVGFromString:function(t,e,i,r){t=t.trim();var n;if("undefined"!=typeof DOMParser){var s=new DOMParser;s&&s.parseFromString&&(n=s.parseFromString(t,"text/xml"))}else c.window.ActiveXObject&&((n=new ActiveXObject("Microsoft.XMLDOM")).async="false",n.loadXML(t.replace(//i,"")));c.parseSVGDocument(n.documentElement,function(t,i,r,n){e(t,i,r,n)},i,r)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r,n){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0,this.parsingOptions=n},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return void 0===i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}})}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});i.Intersection?i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection")).appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){var n,s,o,a,h=new e,c=r.length;for(a=0;a0&&(h.status="Intersection"),h},i.Intersection.intersectPolygonPolygon=function(t,i){var r,n=new e,s=t.length;for(r=0;r0&&(n.status="Intersection"),n},i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d})}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});r.Color?r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:o,s){var a=s.split(/\s*;\s*/);for(""===a[a.length-1]&&a.pop(),n=a.length;n--;){var h=a[n].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:o,color:e.toRgb(),opacity:r}}function e(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^(\d+\.\d+)%|(\d+)%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}var i=fabric.util.object.clone;fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,r,n,s,o=i(this.coords,!0),a=i(this.colorStops,!0),h=o.r1>o.r2,c=t.width/2,l=t.height/2;a.sort(function(t,e){return t.offset-e.offset}),"path"===t.type&&(c-=t.pathOffset.x,l-=t.pathOffset.y);for(var u in o)"x1"===u||"x2"===u?o[u]+=this.offsetX-c:"y1"!==u&&"y2"!==u||(o[u]+=this.offsetY-l);if(s='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(s+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?n=["\n']:"radial"===this.type&&(n=["\n']),"radial"===this.type){if(h)for((a=a.concat()).reverse(),e=0,r=a.length;e0){var d=f/Math.max(o.r1,o.r2);for(e=0,r=a.length;e\n')}return n.push("linear"===this.type?"\n":"\n"),n.join("")},toLive:function(t){var e,i,r,n=fabric.util.object.clone(this.coords);if(this.type){for("linear"===this.type?e=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(e=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2)),i=0,r=this.colorStops.length;i\n\n\n'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if(void 0!==e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;e.Shadow?e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[];return{color:(i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle));return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+20,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+20),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/)}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)fabric.warn("fabric.StaticCanvas is already defined.");else{var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=fabric.util.transformPoint,s=fabric.util.invertTransform,o=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass(fabric.CommonMethods,{initialize:function(t,e){e||(e={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,_initStatic:function(t,e){var i=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(){var t=fabric.util.createCanvasElement();if(!t)throw o;if(t.style||(t.style={}),void 0===t.getContext)throw o;return t},_initOptions:function(t){this._setOptions(t),this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){t&&t.getContext?this.lowerCanvasEl=t:this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(),this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i,r,n=this._activeObject;for(this.viewportTransform=t,i=0,r=this._objects.length;i"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),"\n")},createSVGRefElementsMarkup:function(){var t=this;return["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)}).join("")},createSVGFontFacesMarkup:function(){var t,e,i,r,n,s,o,a,h="",c={},l=fabric.fontPaths,u=this.getObjects();for(o=0,a=u.length;o',"\n",h,"","\n"].join("")),h},_setSVGObjects:function(t,e){var i,r,n,s=this.getObjects();for(r=0,n=s.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeObject;if(t===s&&"activeSelection"===t.type)for(e=(n=s._objects).length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeObject;if(t===s&&"activeSelection"===t.type)for(n=s._objects,e=0;e0+c&&(o=s-1,i(this._objects,n),this._objects.splice(o,0,n)),c++;else 0!==(s=this._objects.indexOf(t))&&(o=this._findNewLowerIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(t,e,i){var r,n;if(i)for(r=e,n=e-1;n>=0;--n){if(t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t)){r=n;break}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeObject,c=0;if(t===h&&"activeSelection"===t.type)for(r=(a=h._objects).length;r--;)n=a[r],(s=this._objects.indexOf(n))"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return void 0!==i.getImageData;case"setLineDash":return void 0!==i.setLineDash;case"toDataURL":return void 0!==e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject,fabric.isLikelyNode&&(fabric.StaticCanvas.prototype.createPNGStream=function(){var t=fabric.util.getNodeCanvas(this.lowerCanvasEl);return t&&t.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){var e=fabric.util.getNodeCanvas(this.lowerCanvasEl);return e&&e.createJPEGStream(t)})}}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.miterLimit=this.strokeMiterLimit,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_saveAndTransform:function(t){var e=this.canvas.viewportTransform;t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.length>1&&t.eq(this._points[this._points.length-1])||this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t,e,i=this.canvas.contextTop,r=this._points[0],n=this._points[1];if(this._saveAndTransform(i),i.beginPath(),2===this._points.length&&r.x===n.x&&r.y===n.y){var s=this.width/1e3;r=new fabric.Point(r.x,r.y),n=new fabric.Point(n.x,n.y),r.x-=s,n.x+=s}for(i.moveTo(r.x,r.y),t=1,e=this._points.length;t2;for(c&&(a=t[2].xt[e-2].x?1:n.x===t[e-2].x?0:-1,h=n.y>t[e-2].y?1:n.y===t[e-2].y?0:-1),i.push("L ",n.x+a*r," ",n.y+h*r),i},createPath:function(t){var e=new fabric.Path(t,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeMiterLimit:this.strokeMiterLimit,strokeLineJoin:this.strokeLineJoin,strokeDashArray:this.strokeDashArray}),i=new fabric.Point(e.left+e.width/2,e.top+e.height/2);return i=e.translateToGivenOrigin(i,"center","center",e.originX,e.originY),e.top=i.y,e.left=i.x,this.shadow&&(this.shadow.affectStroke=!0,e.setShadow(this.shadow)),e},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath();var t=this.convertPointsToSVGPath(this._points).join("");if("M 0 0 Q 0 0 0 0 L 0 0"!==t){var e=this.createPath(t);this.canvas.clearContext(this.canvas.contextTop),this.canvas.add(e),this.canvas.renderAll(),e.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:e})}else this.canvas.requestRenderAll()}}),fabric.CircleBrush=fabric.util.createClass(fabric.BaseBrush,{width:10,initialize:function(t){this.canvas=t,this.points=[]},drawDot:function(t){var e=this.addPoint(t),i=this.canvas.contextTop;this._saveAndTransform(i),i.fillStyle=e.fill,i.beginPath(),i.arc(e.x,e.y,e.radius,0,2*Math.PI,!1),i.closePath(),i.fill(),i.restore()},onMouseDown:function(t){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(t)},_render:function(){var t,e,i,r=this.canvas.contextTop,n=this.points;for(this._saveAndTransform(r),t=0,e=n.length;t0&&!this.preserveObjectStacking){e=[],i=[];for(var n=0,s=this._objects.length;n1&&(this._activeObject._objects=i),e.push.apply(e,i)}else e=this._objects;return e},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.isDrawingMode&&this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._render();var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this},renderTop:function(){var t=this.contextTop;return this.clearContext(t),this.selection&&this._groupSelector&&this._drawSelection(t),this.fire("after:render"),this.contextTopDirty=!0,this},_resetCurrentTransform:function(){var t=this._currentTransform;t.target.set({scaleX:t.original.scaleX,scaleY:t.original.scaleY,skewX:t.original.skewX,skewY:t.original.skewY,left:t.original.left,top:t.original.top}),this._shouldCenterTransform(t.target)?"rotate"===t.action?this._setOriginToCenter(t.target):("center"!==t.originX&&("right"===t.originX?t.mouseXSign=-1:t.mouseXSign=1),"center"!==t.originY&&("bottom"===t.originY?t.mouseYSign=-1:t.mouseYSign=1),t.originX="center",t.originY="center"):(t.originX=t.original.originX,t.originY=t.original.originY)},containsPoint:function(t,e,i){var r,n=i||this.getPointer(t,!0);return r=e.group&&e.group===this._activeObject&&"activeSelection"===e.group.type?this._normalizePointer(e.group,n):{x:n.x,y:n.y},e.containsPoint(r)||e._findTargetCorner(n)},_normalizePointer:function(t,e){var i=t.calcTransformMatrix(),r=fabric.util.invertTransform(i),n=this.restorePointerVpt(e);return fabric.util.transformPoint(n,r)},isTargetTransparent:function(t,e,i){var r=this.contextCache,n=t.selectionBackgroundColor,s=this.viewportTransform;t.selectionBackgroundColor="",this.clearContext(r),r.save(),r.transform(s[0],s[1],s[2],s[3],s[4],s[5]),t.render(r),r.restore(),t===this._activeObject&&t._renderControls(r,{hasBorders:!1,transparentCorners:!1},{hasBorders:!1}),t.selectionBackgroundColor=n;return fabric.util.isTransparent(r,e,i,this.targetFindTolerance)},_isSelectionKeyPressed:function(t){return"[object Array]"===Object.prototype.toString.call(this.selectionKey)?!!this.selectionKey.find(function(e){return!0===t[e]}):t[this.selectionKey]},_shouldClearSelection:function(t,e){var i=this.getActiveObjects(),r=this._activeObject;return!e||e&&r&&i.length>1&&-1===i.indexOf(e)&&r!==e&&!this._isSelectionKeyPressed(t)||e&&!e.evented||e&&!e.selectable&&r&&r!==e},_shouldCenterTransform:function(t){if(t){var e,i=this._currentTransform;return"scale"===i.action||"scaleX"===i.action||"scaleY"===i.action?e=this.centeredScaling||t.centeredScaling:"rotate"===i.action&&(e=this.centeredRotation||t.centeredRotation),e?!i.altKey:i.altKey}},_getOriginFromCorner:function(t,e){var i={x:t.originX,y:t.originY};return"ml"===e||"tl"===e||"bl"===e?i.x="right":"mr"!==e&&"tr"!==e&&"br"!==e||(i.x="left"),"tl"===e||"mt"===e||"tr"===e?i.y="bottom":"bl"!==e&&"mb"!==e&&"br"!==e||(i.y="top"),i},_getActionFromCorner:function(t,e,i){if(!e)return"drag";switch(e){case"mtr":return"rotate";case"ml":case"mr":return i[this.altActionKey]?"skewY":"scaleX";case"mt":case"mb":return i[this.altActionKey]?"skewX":"scaleY";default:return"scale"}},_setupCurrentTransform:function(t,i){if(i){var r=this.getPointer(t),n=i._findTargetCorner(this.getPointer(t,!0)),s=this._getActionFromCorner(i,n,t),o=this._getOriginFromCorner(i,n);this._currentTransform={target:i,action:s,corner:n,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:r.x-i.left,offsetY:r.y-i.top,originX:o.x,originY:o.y,ex:r.x,ey:r.y,lastX:r.x,lastY:r.y,left:i.left,top:i.top,theta:e(i.angle),width:i.width*i.scaleX,mouseXSign:1,mouseYSign:1,shiftKey:t.shiftKey,altKey:t[this.centeredKey]},this._currentTransform.original={left:i.left,top:i.top,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,originX:o.x,originY:o.y},this._resetCurrentTransform()}},_translateObject:function(t,e){var i=this._currentTransform,r=i.target,n=t-i.offsetX,s=e-i.offsetY,o=!r.get("lockMovementX")&&r.left!==n,a=!r.get("lockMovementY")&&r.top!==s;return o&&r.set("left",n),a&&r.set("top",s),o||a},_changeSkewTransformOrigin:function(t,e,i){var r="originX",n={0:"center"},s=e.target.skewX,o="left",a="right",h="mt"===e.corner||"ml"===e.corner?1:-1,c=1;t=t>0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),(l=2*Math.abs(t)-o[i])<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),o,a)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var h=e.ex+.5-(i>0?0:o),c=e.ey+.5-(r>0?0:a);t.beginPath(),fabric.util.drawDashedLine(t,h,c,h+o,c,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c+a-1,h+o,c+a-1,this.selectionDashArray),fabric.util.drawDashedLine(t,h,c,h,c+a,this.selectionDashArray),fabric.util.drawDashedLine(t,h+o-1,c,h+o-1,c+a,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+.5-(i>0?0:o),e.ey+.5-(r>0?0:a),o,a)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r,n=this.getPointer(t,!0),s=this._activeObject,o=this.getActiveObjects();if(this.targets=[],o.length>1&&!e&&s===this._searchPossibleTargets([s],n))return s;if(1===o.length&&s._findTargetCorner(n))return s;if(1===o.length&&s===this._searchPossibleTargets([s],n)){if(!this.preserveObjectStacking)return s;i=s,r=this.targets,this.targets=[]}var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i,this.targets=r),a}},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;if(!this.isTargetTransparent(e,t.x,t.y))return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){"group"===(i=t[s]).type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),(n=this._searchPossibleTargets(i._objects,r))&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl?this.upperCanvasEl.className="":this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.width||t.width,i=this.height||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":"none"}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var t=this._activeObject;return t?"activeSelection"===t.type&&t._objects?t._objects.slice(0):[t]:[]},_onObjectRemoved:function(t){t===this._activeObject&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this._hoveredTarget===t&&(this._hoveredTarget=null),this.callSuper("_onObjectRemoved",t)},_fireSelectionEvents:function(t,e){var i=!1,r=this.getActiveObjects(),n=[],s=[],o={e:e};t.forEach(function(t){-1===r.indexOf(t)&&(i=!0,t.fire("deselected",o),s.push(t))}),r.forEach(function(e){-1===t.indexOf(e)&&(i=!0,e.fire("selected",o),n.push(e))}),t.length>0&&r.length>0?(o.selected=n,o.deselected=s,o.updated=n[0]||s[0],o.target=this._activeObject,i&&this.fire("selection:updated",o)):r.length>0?(1===r.length&&(o.target=n[0],this.fire("object:selected",o)),o.selected=n,o.target=this._activeObject,this.fire("selection:created",o)):t.length>0&&(o.deselected=s,this.fire("selection:cleared",o))},setActiveObject:function(t,e){var i=this.getActiveObjects();return this._setActiveObject(t,e),this._fireSelectionEvents(i,e),this},_setActiveObject:function(t,e){return this._activeObject!==t&&(!!this._discardActiveObject(e,t)&&(!t.onSelect({e:e})&&(this._activeObject=t,!0)))},_discardActiveObject:function(t,e){var i=this._activeObject;if(i){if(i.onDeselect({e:t,object:e}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var e=this.getActiveObjects();return e.length&&this.fire("before:selection:cleared",{target:e[0],e:t}),this._discardActiveObject(t),this._fireSelectionEvents(e,t),this},dispose:function(){var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),delete this.upperCanvasEl,t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,fabric.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var e=this._activeObject;e&&e._renderControls(t)},_toObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(t),n=this.callSuper("_toObject",t,e,i);return this._unwindGroupTransformOnObject(t,r),n},_realizeGroupTransformOnObject:function(t){if(t.group&&"activeSelection"===t.group.type&&this._activeObject===t.group){var e={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach(function(i){e[i]=t[i]}),this._activeObject.realizeTransform(t),e}return null},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},_setSVGObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(e);this.callSuper("_setSVGObject",t,e,i),this._unwindGroupTransformOnObject(e,r)}});for(var o in fabric.StaticCanvas)"prototype"!==o&&(fabric.Canvas[o]=fabric.StaticCanvas[o]);fabric.isTouchSupported&&(fabric.Canvas.prototype._setCursorFromEvent=function(){})}(),function(){function t(t,e){return"which"in t?t.which===e:t.button===e-1}var e={mt:0,tr:1,mr:2,br:3,mb:4,bl:5,ml:6,tl:7},i=fabric.util.addListener,r=fabric.util.removeListener;fabric.util.object.extend(fabric.Canvas.prototype,{cursorMap:["n-resize","ne-resize","e-resize","se-resize","s-resize","sw-resize","w-resize","nw-resize"],_initEventListeners:function(){this.removeListeners(),this._bindEvents(),i(fabric.window,"resize",this._onResize),i(this.upperCanvasEl,"mousedown",this._onMouseDown),i(this.upperCanvasEl,"dblclick",this._onDoubleClick),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"mouseout",this._onMouseOut),i(this.upperCanvasEl,"mouseenter",this._onMouseEnter),i(this.upperCanvasEl,"wheel",this._onMouseWheel),i(this.upperCanvasEl,"contextmenu",this._onContextMenu),i(this.upperCanvasEl,"touchstart",this._onMouseDown,{passive:!1}),i(this.upperCanvasEl,"touchmove",this._onMouseMove,{passive:!1}),"undefined"!=typeof eventjs&&"add"in eventjs&&(eventjs.add(this.upperCanvasEl,"gesture",this._onGesture),eventjs.add(this.upperCanvasEl,"drag",this._onDrag),eventjs.add(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.add(this.upperCanvasEl,"shake",this._onShake),eventjs.add(this.upperCanvasEl,"longpress",this._onLongPress))},_bindEvents:function(){this.eventsBinded||(this._onMouseDown=this._onMouseDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this.eventsBinded=!0)},removeListeners:function(){r(fabric.window,"resize",this._onResize),r(this.upperCanvasEl,"mousedown",this._onMouseDown),r(this.upperCanvasEl,"mousemove",this._onMouseMove),r(this.upperCanvasEl,"mouseout",this._onMouseOut),r(this.upperCanvasEl,"mouseenter",this._onMouseEnter),r(this.upperCanvasEl,"wheel",this._onMouseWheel),r(this.upperCanvasEl,"contextmenu",this._onContextMenu),r(this.upperCanvasEl,"doubleclick",this._onDoubleClick),r(this.upperCanvasEl,"touchstart",this._onMouseDown),r(this.upperCanvasEl,"touchmove",this._onMouseMove),"undefined"!=typeof eventjs&&"remove"in eventjs&&(eventjs.remove(this.upperCanvasEl,"gesture",this._onGesture),eventjs.remove(this.upperCanvasEl,"drag",this._onDrag),eventjs.remove(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.remove(this.upperCanvasEl,"shake",this._onShake),eventjs.remove(this.upperCanvasEl,"longpress",this._onLongPress))},_onGesture:function(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t){this.__onMouseWheel(t)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t}),this._iTextInstances&&this._iTextInstances.forEach(function(t){t.isEditing&&t.hiddenTextarea.focus()})},_onMouseEnter:function(t){this.findTarget(t)||(this.fire("mouse:over",{target:null,e:t}),this._hoveredTarget=null)},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e)},_onContextMenu:function(t){return this.stopContextMenu&&(t.stopPropagation(),t.preventDefault()),!1},_onDoubleClick:function(t){this._handleEvent(t,"dblclick")},_onMouseDown:function(t){this.__onMouseDown(t),i(fabric.document,"touchend",this._onMouseUp,{passive:!1}),i(fabric.document,"touchmove",this._onMouseMove,{passive:!1}),r(this.upperCanvasEl,"mousemove",this._onMouseMove),r(this.upperCanvasEl,"touchmove",this._onMouseMove),"touchstart"===t.type?r(this.upperCanvasEl,"mousedown",this._onMouseDown):(i(fabric.document,"mouseup",this._onMouseUp),i(fabric.document,"mousemove",this._onMouseMove))},_onMouseUp:function(t){if(this.__onMouseUp(t),r(fabric.document,"mouseup",this._onMouseUp),r(fabric.document,"touchend",this._onMouseUp),r(fabric.document,"mousemove",this._onMouseMove),r(fabric.document,"touchmove",this._onMouseMove),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"touchmove",this._onMouseMove,{passive:!1}),"touchend"===t.type){var e=this;setTimeout(function(){i(e.upperCanvasEl,"mousedown",e._onMouseDown)},400)}},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t,e){var i=this._activeObject;return(!i||!i.isEditing||t!==i)&&!!(t&&(t.isMoving||t!==i)||!t&&i||!t&&!i&&!this._groupSelector||e&&this._previousPointer&&this.selection&&(e.x!==this._previousPointer.x||e.y!==this._previousPointer.y))},__onMouseUp:function(e){var i,r=!0,n=this._currentTransform,s=this._groupSelector,o=!s||0===s.left&&0===s.top;if(t(e,3))this.fireRightClick&&this._handleEvent(e,"up",i,3,o);else if(t(e,2))this.fireMiddleClick&&this._handleEvent(e,"up",i,2,o);else if(this.isDrawingMode&&this._isCurrentlyDrawing)this._onMouseUpInDrawingMode(e);else{n&&(this._finalizeCurrentTransform(e),r=!n.actionPerformed),i=r?this.findTarget(e,!0):n.target;var a=this._shouldRender(i,this.getPointer(e));i||!o?this._maybeGroupObjects(e):(this._groupSelector=null,this._currentTransform=null),i&&(i.isMoving=!1),this._setCursorFromEvent(e,i),this._handleEvent(e,"up",i||null,1,o),i&&(i.__corner=0),a&&this.requestRenderAll()}},_handleEvent:function(t,e,i,r,n){var s=void 0===i?this.findTarget(t):i,o=this.targets||[],a={e:t,target:s,subTargets:o,button:r||1,isClick:n||!1};this.fire("mouse:"+e,a),s&&s.fire("mouse"+e,a);for(var h=0;h1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t)||null,this._setCursorFromEvent(t,e),this._fireOverOutEvents(e,t)),this._handleEvent(t,"move",this._currentTransform?null:e)}},_fireOverOutEvents:function(t,e){var i,r,n=this._hoveredTarget;n!==t&&(i={e:e,target:t,previousTarget:this._hoveredTarget},r={e:e,target:this._hoveredTarget,nextTarget:t},this._hoveredTarget=t),t?n!==t&&(n&&(this.fire("mouse:out",r),n.fire("mouseout",r)),this.fire("mouse:over",i),t.fire("mouseover",i)):n&&(this.fire("mouse:out",r),n.fire("mouseout",r))},__onMouseWheel:function(t){this._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.requestRenderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n))&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor)),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return this._isUniscalePossible(t,e.target)?(e.currentAction="scale",this._scaleObject(i,r)):(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally"))},_isUniscalePossible:function(t,e){return(t[this.uniScaleKey]||this.uniScaleTransform)&&!e.get("lockUniScaling")},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this._activeObject&&"activeSelection"===this._activeObject.type?this._activeObject:null,n=(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this.setCursor(this.getCornerCursor(n,e,t)):this.setCursor(i)},getCornerCursor:function(t,i,r){return this.actionIsDisabled(t,i,r)?this.notAllowedCursor:t in e?this._getRotatedCornerCursor(t,i,r):"mtr"===t&&i.hasRotatingPoint?this.rotationCursor:this.defaultCursor},actionIsDisabled:function(t,e,i){return"mt"===t||"mb"===t?i[this.altActionKey]?e.lockSkewingX:e.lockScalingY:"ml"===t||"mr"===t?i[this.altActionKey]?e.lockSkewingY:e.lockScalingX:"mtr"===t?e.lockRotation:this._isUniscalePossible(i,e)?e.lockScalingX&&e.lockScalingY:e.lockScalingX||e.lockScalingY},_getRotatedCornerCursor:function(t,i,r){var n=Math.round(i.angle%360/45);return n<0&&(n+=8),n+=e[t],r[this.altActionKey]&&e[t]%2==0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this._activeObject;return i&&this._isSelectionKeyPressed(t)&&e&&e.selectable&&this.selection&&(i!==e||"activeSelection"===i.type)},_handleGrouping:function(t,e){var i=this._activeObject;i.__corner||(e!==i||(e=this.findTarget(t,!0)))&&(i&&"activeSelection"===i.type?this._updateActiveSelection(e,t):this._createActiveSelection(e,t))},_updateActiveSelection:function(t,e){var i=this._activeObject,r=i._objects.slice(0);i.contains(t)?(i.removeWithUpdate(t),this._hoveredTarget=t,1===i.size()&&this._setActiveObject(i.item(0),e)):(i.addWithUpdate(t),this._hoveredTarget=i),this._fireSelectionEvents(r,e)},_createActiveSelection:function(t,e){var i=this.getActiveObjects(),r=this._createGroup(t);this._hoveredTarget=r,this._setActiveObject(r,e),this._fireSelectionEvents(i,e)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(e,t))},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=!this.selectionFullyContained,u=n===o&&s===a,f=this._objects.length;f--&&!((i=this._objects[f])&&i.selectable&&i.visible&&(l&&i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||l&&i.containsPoint(h)||l&&i.containsPoint(c))&&(r.push(i),u)););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t),this.setCursor(this.defaultCursor),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||t.enableRetinaScaling?1:1/this.getRetinaScaling(),n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.width,s=this.height,o=(i.width||this.width)*r,a=(i.height||this.height)*r,h=this.getZoom()*r,c=this.viewportTransform,l=[h,0,0,h,(c[4]-i.left)*r,(c[5]-i.top)*r],u=this.interactive,f=this.skipOffscreen,d=n!==o||s!==a;this.viewportTransform=l,this.skipOffscreen=!1,this.interactive=!1,d&&this.setDimensions({width:o,height:a},{backstoreOnly:!0}),this.renderAll();var g=this.__toDataURL(t,e,i);return this.interactive=u,this.skipOffscreen=f,this.viewportTransform=c,d&&this.setDimensions({width:n,height:s},{backstoreOnly:!0}),this.renderAll(),g},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");return t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e)}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t),n=this,s=this.renderOnAddRemove;return this.renderOnAddRemove=!1,this._enlivenObjects(r.objects,function(t){n.clear(),n._setBgOverlay(r,function(){t.forEach(function(t,e){n.insertAt(t,e)}),n.renderOnAddRemove=s,delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),n.renderAll(),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(t.backgroundImage||t.overlayImage||t.background||t.overlay){var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,r),this.__setBgOverlay("overlayImage",t.overlayImage,i,r),this.__setBgOverlay("backgroundColor",t.background,i,r),this.__setBgOverlay("overlayColor",t.overlay,i,r)}else e&&e()},__setBgOverlay:function(t,e,i,r){var n=this;if(!e)return i[t]=!0,void(r&&r());"backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})},_enlivenObjects:function(t,e,i){t&&0!==t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,i):e&&e([])},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.width,e.height=this.height;var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,__corner:0,paintFirst:"fill",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY fillRule paintFirst".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeLineCap strokeLineJoin strokeMiterLimit backgroundColor".split(" "),initialize:function(t){t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,r=t.width,n=t.height,s=e.maxCacheSideLimit,o=e.minCacheSideLimit;if(r<=s&&n<=s&&r*n<=i)return rl&&(t.zoomX/=r/l,t.width=l,t.capped=!0),n>u&&(t.zoomY/=n/u,t.height=u,t.capped=!0),t},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,n=this._getNonTransformedDimensions(),s=i.scaleX*t*r,o=i.scaleY*t*r;return{width:n.x*s+2,height:n.y*o+2,zoomX:s,zoomY:o,x:n.x,y:n.y}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.target,i=this.canvas._currentTransform.action;if(this===t&&i.slice&&"scale"===i.slice(0,5))return!1}var r,n,s=this._cacheCanvas,o=this._limitCacheSize(this._getCacheCanvasDimensions()),a=e.minCacheSideLimit,h=o.width,c=o.height,l=o.zoomX,u=o.zoomY,f=h!==this.cacheWidth||c!==this.cacheHeight,d=this.zoomX!==l||this.zoomY!==u,g=f||d,p=0,v=0,m=!1;if(f){var b=this._cacheCanvas.width,_=this._cacheCanvas.height,y=h>b||c>_;m=y||(h<.9*b||c<.9*_)&&b>a&&_>a,y&&!o.capped&&(h>a||c>a)&&(p=.1*h,v=.1*c)}return!!g&&(m?(s.width=Math.ceil(h+p),s.height=Math.ceil(c+v)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,s.width,s.height)),r=o.x*l/2,n=o.y*u/2,this.cacheTranslationX=Math.round(s.width/2-r)+r,this.cacheTranslationY=Math.round(s.height/2-n)+n,this.cacheWidth=h,this.cacheHeight=c,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(l,u),this.zoomX=l,this.zoomY=u,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t){var e;e=this.group&&!this.group._transformDone?this.calcTransformMatrix():this.calcOwnMatrix(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,version:e.version,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.angle,i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype;return i.stateProperties.forEach(function(e){t[e]===i[e]&&delete t[e];"[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e])&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},getObjectOpacity:function(){var t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t},_set:function(t,i){var r="scaleX"===t||"scaleY"===t,n=this[t]!==i,s=!1;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,n&&(s=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(t)>-1?(this.dirty=!0,s&&this.group.set("dirty",!0)):s&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||0===this.width&&0===this.height||!this.visible},render:function(t){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t,this),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache()?(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext),this.dirty=!1),this.drawCacheOnCanvas(t)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(t),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},_removeCacheCanvas:function(){this._cacheCanvas=null,this.cacheWidth=0,this.cacheHeight=0},needsItsOwnCache:function(){return"stroke"===this.paintFirst&&"object"==typeof this.shadow},shouldCache:function(){return this.ownCaching=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawObject:function(t){this._renderBackground(t),this._setStrokeStyles(t,this),this._setFillStyles(t,this),this._render(t)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){this.group&&!this.group._transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity},_setStrokeStyles:function(t,e){e.stroke&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,t.strokeStyle=e.stroke.toLive?e.stroke.toLive(t,this):e.stroke)},_setFillStyles:function(t,e){e.fill&&(t.fillStyle=e.fill.toLive?e.fill.toLive(t,this):e.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){var r,n,s,a=this.getViewportTransform(),h=this.calcTransformMatrix();n=void 0!==(i=i||{}).hasBorders?i.hasBorders:this.hasBorders,s=void 0!==i.hasControls?i.hasControls:this.hasControls,h=e.util.multiplyTransformMatrices(a,h),r=e.util.qrDecompose(h),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),i.forActiveSelection?(t.rotate(o(r.angle)),n&&this.drawBordersInGroup(t,r,i)):(t.rotate(o(this.angle)),n&&this.drawBorders(t,i)),s&&this.drawControls(t,i),t.restore()},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e.browserShadowBlurConstant*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(!e||!e.toLive)return{offsetX:0,offsetY:0};var i=e.gradientTransform||e.patternTransform,r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;return t.translate(r,n),i&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:n}},_renderPaintInOrder:function(t){"stroke"===this.paintFirst?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore())},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var t=e.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",t.scaleX),this.set("scaleY",t.scaleY),this.angle=t.angle,this.skewX=t.skewX,this.skewY=0}},_removeTransformMatrix:function(t){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=e.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,t&&(this.scaleX*=t.scaleX,this.scaleY*=t.scaleY,this.cropX=t.cropX,this.cropY=t.cropY,i.x+=t.offsetLeft,i.y+=t.offsetTop,this.width=t.width,this.height=t.height),this.setPositionByOrigin(i,"center","center")},clone:function(t,i){var r=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(r,t):e.Object._fromObject("Object",r,t)},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling,renderOnAddRemove:!1,skipOffscreen:!1});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={left:this.left,top:this.top};this.setPositionByOrigin(new e.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n._objects=[],n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},rotate:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors&&e.util.createAccessors(e.Object),i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s){var o=e[t];i=r(i,!0),e.util.enlivenPatterns([i.fill,i.stroke],function(t){void 0!==t[0]&&(i.fill=t[0]),void 0!==t[1]&&(i.stroke=t[1]);var e=s?new o(i[s],i):new o(i);n&&n(e)})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n=void 0!==i&&void 0!==r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getScaledWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")},onDeselect:function(){}})}(),function(){var t=fabric.util.degreesToRadians,e=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,ownMatrixCache:null,matrixCache:null,getCoords:function(t,e){this.oCoords||this.setCoords();var i=t?this.aCoords:this.oCoords;return function(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}(e?this.calcCoords(t):i)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r);return"Intersection"===fabric.Intersection.intersectPolygonRectangle(n,t,e).status},intersectsWithObject:function(t,e,i){return"Intersection"===fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i)).status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2==1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if((e=n[s]).x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o=0;for(var a in e)if(!((s=e[a]).o.y=t.y&&s.d.y>=t.y||(s.o.x===s.d.x&&s.o.x>=t.x?n=s.o.x:(i=0,r=(s.d.y-s.o.y)/(s.d.x-s.o.x),n=-(t.y-i*t.x-(s.o.y-r*s.o.x))/(i-r)),n>=t.x&&(o+=1),2!==o)))break;return o},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=e?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),m=new fabric.Point(p.x-o*a,p.y+o*h),b=new fabric.Point(g.x+u,g.y+f);if(!e)var _=new fabric.Point((p.x+m.x)/2,(p.y+m.y)/2),y=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((b.x+v.x)/2,(b.y+v.y)/2),C=new fabric.Point((b.x+m.x)/2,(b.y+m.y)/2),S=new fabric.Point(y.x+a*this.rotatingPointOffset,y.y-h*this.rotatingPointOffset);g={tl:p,tr:v,br:b,bl:m};return e||(g.ml=_,g.mt=y,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var e=t(this.angle),i=Math.cos(e),r=Math.sin(e);return 6.123233995736766e-17!==i&&-1.8369701987210297e-16!==i||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},transformMatrixKey:function(t){var e="";return!t&&this.group&&(e=this.group.transformMatrixKey(t)+"_"),e+this.top+"_"+this.left+"_"+this.scaleX+"_"+this.scaleY+"_"+this.skewX+"_"+this.skewY+"_"+this.angle+"_"+this.width+"_"+this.height+"_"+this.strokeWidth+this.flipX+this.flipY},calcTransformMatrix:function(t){if(t)return this.calcOwnMatrix();var i=this.transformMatrixKey(),r=this.matrixCache||(this.matrixCache={});if(r.key===i)return r.value;var n=this.calcOwnMatrix();return this.group&&(n=e(this.group.calcTransformMatrix(),n)),r.key=i,r.value=n,n},calcOwnMatrix:function(){var t=this.transformMatrixKey(!0),i=this.ownMatrixCache||(this.ownMatrixCache={});if(i.key===t)return i.value;var r,n=this.getCenterPoint(),s=[1,0,0,1,n.x,n.y],o=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0);return this.angle&&(r=this._calcRotateMatrix(),s=e(s,r)),s=e(s,o),i.key=t,i.value=s,s},_calcDimensionsTransformMatrix:function(i,r,n){var s,o=[this.scaleX*(n&&this.flipX?-1:1),0,0,this.scaleY*(n&&this.flipY?-1:1),0,0];return i&&(s=[1,0,Math.tan(t(i)),1],o=e(o,s,!0)),r&&(s=[1,Math.tan(t(r)),0,1],o=e(o,s,!0)),o},_getNonTransformedDimensions:function(){var t=this.strokeWidth;return{x:this.width+t,y:this.height+t}},_getTransformedDimensions:function(t,e){void 0===t&&(t=this.skewX),void 0===e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n')}},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){function t(t,e,r){var n={};r.forEach(function(e){n[e]=t[e]}),i(t[e],n,!0)}function e(t,i,r){if(t===i)return!0;if(Array.isArray(t)){if(t.length!==i.length)return!1;for(var n=0,s=t.length;n\n'),t?t(e.join("")):e.join("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e,n){n=n||{};var s=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),o=[s.x1||0,s.y1||0,s.x2||0,s.y2||0];e(new i.Line(o,r(s,n)))},i.Line.fromObject=function(t,e){var r=n(t,!0);r.points=[t.x1,t.y1,t.x2,t.y2],i.Object._fromObject("Line",r,function(t){delete t.points,e&&e(t)},"points")})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=Math.PI;e.Circle?e.warn("fabric.Circle is already defined."):(e.Circle=e.util.createClass(e.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*i,cacheProperties:e.Object.prototype.cacheProperties.concat("radius"),_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),r=(this.endAngle-this.startAngle)%(2*i);if(0===r)e.push("\n");else{var n=Math.cos(this.startAngle)*this.radius,s=Math.sin(this.startAngle)*this.radius,o=Math.cos(this.endAngle)*this.radius,a=Math.sin(this.endAngle)*this.radius,h=r>i?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t){t.beginPath(),t.arc(0,0,this.radius,this.startAngle,this.endAngle,!1),this._renderPaintInOrder(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),e.Circle.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),e.Circle.fromElement=function(t,i){var r=e.parseAttributes(t,e.Circle.ATTRIBUTE_NAMES);if(!function(t){return"radius"in t&&t.radius>=0}(r))throw new Error("value of `r` attribute is required and can not be negative");r.left=(r.left||0)-r.radius,r.top=(r.top||0)-r.radius,i(new e.Circle(r))},e.Circle.fromObject=function(t,i){return e.Object._fromObject("Circle",t,i)})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Triangle?e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",width:100,height:100,_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderPaintInOrder(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push(""),t?t(e.join("")):e.join("")}}),e.Triangle.fromObject=function(t,i){return e.Object._fromObject("Triangle",t,i)})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI;e.Ellipse?e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup();return e.push("\n"),t?t(e.join("")):e.join("")},_render:function(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,0,this.rx,0,i,!1),t.restore(),this._renderPaintInOrder(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){var r=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);r.left=(r.left||0)-r.rx,r.top=(r.top||0)-r.ry,i(new e.Ellipse(r))},e.Ellipse.fromObject=function(t,i){return e.Object._fromObject("Ellipse",t,i)})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Rect?e.warn("fabric.Rect is already defined"):(e.Rect=e.util.createClass(e.Object,{stateProperties:e.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t){if(1!==this.width||1!==this.height){var e=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,n=this.height,s=-this.width/2,o=-this.height/2,a=0!==e||0!==i,h=.4477152502;t.beginPath(),t.moveTo(s+e,o),t.lineTo(s+r-e,o),a&&t.bezierCurveTo(s+r-h*e,o,s+r,o+h*i,s+r,o+i),t.lineTo(s+r,o+n-i),a&&t.bezierCurveTo(s+r,o+n-h*i,s+r-h*e,o+n,s+r-e,o+n),t.lineTo(s+e,o+n),a&&t.bezierCurveTo(s+h*e,o+n,s,o+n-h*i,s,o+n-i),t.lineTo(s,o+i),a&&t.bezierCurveTo(s,o+h*i,s+h*e,o,s+e,o),t.closePath(),this._renderPaintInOrder(t)}else t.fillRect(-.5,-.5,1,1)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=-this.width/2,r=-this.height/2;return e.push("\n"),t?t(e.join("")):e.join("")}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r,n){if(!t)return r(null);n=n||{};var s=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);s.left=s.left||0,s.top=s.top||0;var o=new e.Rect(i(n?e.util.object.clone(n):{},s));o.visible=o.visible&&o.width>0&&o.height>0,r(o)},e.Rect.fromObject=function(t,i){return e.Object._fromObject("Rect",t,i)})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed;e.Polyline?e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,cacheProperties:e.Object.prototype.cacheProperties.concat("points"),initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e);var i=this._calcDimensions();void 0===e.left&&(this.left=i.left),void 0===e.top&&(this.top=i.top),this.width=i.width,this.height=i.height,this.pathOffset={x:i.left+this.width/2,y:i.top+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x")||0,i=r(t,"y")||0;return{left:e,top:i,width:(n(t,"x")||0)-e,height:(n(t,"y")||0)-i}},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){for(var i=[],r=this.pathOffset.x,n=this.pathOffset.y,o=this._createBaseSVGMarkup(),a=e.Object.NUM_FRACTION_DIGITS,h=0,c=this.points.length;h\n"),t?t(o.join("")):o.join("")},commonRender:function(t){var e,i=this.points.length,r=this.pathOffset.x,n=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-r,this.points[0].y-n);for(var s=0;s"},toObject:function(t){return n(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left})},toDatalessObject:function(t){var e=this.toObject(["sourcePath"].concat(t));return e.sourcePath&&delete e.path,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var m=1,b=n.length;m"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group},_set:function(t,e){var i=this._objects.length;if(this.useSetOnGroup)for(;i--;)this._objects[i].setOnGroup(t,e);if("canvas"===t)for(i=this._objects.length;i--;)this._objects[i]._set(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e,r=this.sourcePath;return e=r||this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r}),i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isOnACache());if(this.ownCaching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")}}),e.Group.fromObject=function(t,i){e.util.enlivenObjects(t.objects,function(r){var n=e.util.object.clone(t,!0);delete n.objects,i&&i(new e.Group(r,n,!0))})})}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});e.ActiveSelection||(e.ActiveSelection=e.util.createClass(e.Group,{type:"activeSelection",initialize:function(t,i){i=i||{},this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;i.originX&&(this.originX=i.originX),i.originY&&(this.originY=i.originY),this._calcBounds(),this._updateObjectsCoords(),e.Object.prototype.initialize.call(this,i),this.setCoords()},toGroup:function(){var t=this._objects;this._objects=[];var i=this.toObject(),r=new e.Group([]);if(delete i.objects,r.set(i),r.type="group",t.forEach(function(t){t.group=r,t.canvas.remove(t)}),r._objects=t,!this.canvas)return r;var n=this.canvas;return n.add(r),n._activeObject=r,r.setCoords(),r},onDeselect:function(){return this.destroy(),!1},toString:function(){return"#"},_set:function(t,i){var r=this._objects.length;if("canvas"===t)for(;r--;)this._objects[r].set(t,i);if(this.useSetOnGroup)for(;r--;)this._objects[r].setOnGroup(t,i);e.Object.prototype._set.call(this,t,i)},shouldCache:function(){return!1},willDrawShadow:function(){if(this.shadow)return this.callSuper("willDrawShadow");for(var t=0,e=this._objects.length;t\n');var n=["\t\n'];if("fill"===this.paintFirst&&Array.prototype.push.apply(e,n),this.stroke||this.strokeDashArray){var s=this.fill;this.fill=null,e.push("\t\n'),this.fill=s}return"fill"!==this.paintFirst&&Array.prototype.push.apply(e,n),e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():e.src:this.src||""},setSrc:function(t,e,i){return fabric.util.loadImage(t,function(t){this.setElement(t,i),e(this)},this,i&&i.crossOrigin),this},toString:function(){return'#'},applyResizeFilters:function(){var t=this.resizeFilter,e=this.canvas?this.canvas.getRetinaScaling():1,i=this.minimumScaleTrigger,r=this.scaleX*e,n=this.scaleY*e,s=this._filteredEl||this._originalElement;if(!t||r>i&&n>i)return this._element=s,this._filterScalingX=1,void(this._filterScalingY=1);fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend());var o=fabric.util.createCanvasElement(),a=this._filteredEl?this.cacheKey:this.cacheKey+"_filtered",h=s.width,c=s.height;o.width=h,o.height=c,this._element=o,t.scaleX=r,t.scaleY=n,fabric.filterBackend.applyFilters([t],s,h,c,this._element,a),this._filterScalingX=o.width/this._originalElement.width,this._filterScalingY=o.height/this._originalElement.height},applyFilters:function(t){if(t=t||this.filters||[],0===(t=t.filter(function(t){return t})).length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var e=this._originalElement,i=e.naturalWidth||e.width,r=e.naturalHeight||e.height;if(this._element===this._originalElement){var n=fabric.util.createCanvasElement();n.width=i,n.height=r,this._element=n,this._filteredEl=n}else this._element.getContext("2d").clearRect(0,0,i,r);return fabric.filterBackend||(fabric.filterBackend=fabric.initFilterBackend()),fabric.filterBackend.applyFilters(t,this._originalElement,i,r,this._element,this.cacheKey),this._originalElement.width===this._element.width&&this._originalElement.height===this._element.height||(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(t){!1===this.isMoving&&this.resizeFilter&&this._needsResize()&&(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,this.applyResizeFilters()),this._stroke(t),this._renderPaintInOrder(t)},_renderFill:function(t){var e=this.width,i=this.height,r=e*this._filterScalingX,n=i*this._filterScalingY,s=-e/2,o=-i/2,a=this._element;a&&t.drawImage(a,this.cropX*this._filterScalingX,this.cropY*this._filterScalingY,r,n,s,o,e,i)},_needsResize:function(){return this.scaleX!==this._lastScaleX||this.scaleY!==this._lastScaleY},_resetWidthHeight:function(){var t=this.getElement();this.set("width",t.width),this.set("height",t.height)},_initElement:function(t,e){this.setElement(fabric.util.getById(t),e),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(t,e){t&&t.length?fabric.util.enlivenObjects(t,function(t){e&&e(t)},"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){this.width="width"in t?t.width:this.getElement()?this.getElement().width||0:0,this.height="height"in t?t.height:this.getElement()?this.getElement().height||0:0},parsePreserveAspectRatioAttribute:function(){var t,e=fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,n=1,s=1,o=0,a=0,h=0,c=0,l=this.width,u=this.height,f={width:l,height:u};return!e||"none"===e.alignX&&"none"===e.alignY?(n=l/i,s=u/r):("meet"===e.meetOrSlice&&(t=(l-i*(n=s=fabric.util.findScaleToFit(this._element,f)))/2,"Min"===e.alignX&&(o=-t),"Max"===e.alignX&&(o=t),t=(u-r*s)/2,"Min"===e.alignY&&(a=-t),"Max"===e.alignY&&(a=t)),"slice"===e.meetOrSlice&&(t=i-l/(n=s=fabric.util.findScaleToCover(this._element,f)),"Mid"===e.alignX&&(h=t/2),"Max"===e.alignX&&(h=t),t=r-u/s,"Mid"===e.alignY&&(c=t/2),"Max"===e.alignY&&(c=t),i=l/n,r=u/s)),{width:i,height:r,scaleX:n,scaleY:s,offsetLeft:o,offsetTop:a,cropX:h,cropY:c}}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(t,e){fabric.util.loadImage(t.src,function(i,r){r?e&&e(null,r):fabric.Image.prototype._initFilters.call(t,t.filters,function(r){t.filters=r||[],fabric.Image.prototype._initFilters.call(t,[t.resizeFilter],function(r){t.resizeFilter=r[0];var n=new fabric.Image(i,t);e(n)})})},null,t.crossOrigin)},fabric.Image.fromURL=function(t,e,i){fabric.util.loadImage(t,function(t){e&&e(new fabric.Image(t,i))},null,i&&i.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin".split(" ")),fabric.Image.fromElement=function(t,i,r){var n=fabric.parseAttributes(t,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(n["xlink:href"],i,e(r?fabric.util.object.clone(r):{},n))})}("undefined"!=typeof exports?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.angle%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.rotate(this._getAngleValueForStraighten()),this},fxStraighten:function(t){var e=function(){},i=(t=t||{}).onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.rotate(t),r()},onComplete:function(){n.setCoords(),i()}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.requestRenderAllBound}),this}}),function(){"use strict";function t(t,e){var i="precision "+e+" float;\nvoid main(){}",r=t.createShader(t.FRAGMENT_SHADER);return t.shaderSource(r,i),t.compileShader(r),!!t.getShaderParameter(r,t.COMPILE_STATUS)}function e(t){t&&t.tileSize&&(this.tileSize=t.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}fabric.isWebglSupported=function(e){if(fabric.isLikelyNode)return!1;e=e||fabric.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),r=i.getContext("webgl")||i.getContext("experimental-webgl"),n=!1;if(r){fabric.maxTextureSize=r.getParameter(r.MAX_TEXTURE_SIZE),n=fabric.maxTextureSize>=e;for(var s=["highp","mediump","lowp"],o=0;o<3;o++)if(t(r,s[o])){fabric.webGlPrecision=s[o];break}}return this.isSupported=n,n},fabric.WebglFilterBackend=e,e.prototype={tileSize:2048,resources:{},setupGLContext:function(t,e){this.dispose(),this.createWebGLCanvas(t,e),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(t,e)},chooseFastestCopyGLTo2DMethod:function(t,e){var i,r=void 0!==window.performance;try{new ImageData(1,1),i=!0}catch(t){i=!1}var n="undefined"!=typeof ArrayBuffer,s="undefined"!=typeof Uint8ClampedArray;if(r&&i&&n&&s){var o,a,h=fabric.util.createCanvasElement(),c=new ArrayBuffer(t*e*4),l={imageBuffer:c,destinationWidth:t,destinationHeight:e,targetCanvas:h};h.width=t,h.height=e,o=window.performance.now(),copyGLTo2DDrawImage.call(l,this.gl,l),a=window.performance.now()-o,o=window.performance.now(),copyGLTo2DPutImageData.call(l,this.gl,l),a>window.performance.now()-o?(this.imageBuffer=c,this.copyGLTo2D=copyGLTo2DPutImageData):this.copyGLTo2D=copyGLTo2DDrawImage}},createWebGLCanvas:function(t,e){var i=fabric.util.createCanvasElement();i.width=t,i.height=e;var r={premultipliedAlpha:!1},n=i.getContext("webgl",r);n||(n=i.getContext("experimental-webgl",r)),n&&(n.clearColor(0,0,0,0),this.canvas=i,this.gl=n)},applyFilters:function(t,e,i,r,n,s){var o,a=this.gl;s&&(o=this.getCachedTexture(s,e));var h={originalWidth:e.width||e.originalWidth,originalHeight:e.height||e.originalHeight,sourceWidth:i,sourceHeight:r,destinationWidth:i,destinationHeight:r,context:a,sourceTexture:this.createTexture(a,i,r,!o&&e),targetTexture:this.createTexture(a,i,r),originalTexture:o||this.createTexture(a,i,r,!o&&e),passes:t.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:n},c=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,c),t.forEach(function(t){t&&t.applyTo(h)}),resizeCanvasIfNeeded(h),this.copyGLTo2D(a,h),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(h.sourceTexture),a.deleteTexture(h.targetTexture),a.deleteFramebuffer(c),n.getContext("2d").setTransform(1,0,0,1,0,0),h},applyFiltersDebug:function(t,e,i,r,n,s){var o=this.gl,a=this.applyFilters(t,e,i,r,n,s),h=o.getError();if(h!==o.NO_ERROR){var c=this.glErrorToString(o,h),l=new Error("WebGL Error "+c);throw l.glErrorCode=h,l}return a},glErrorToString:function(t,e){if(!t)return"Context undefined for error code: "+e;if("number"!=typeof e)return"Error code is not a number";switch(e){case t.NO_ERROR:return"NO_ERROR";case t.INVALID_ENUM:return"INVALID_ENUM";case t.INVALID_VALUE:return"INVALID_VALUE";case t.INVALID_OPERATION:return"INVALID_OPERATION";case t.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case t.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case t.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return"UNKNOWN_ERROR"}},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(t,e,i,r){var n=t.createTexture();return t.bindTexture(t.TEXTURE_2D,n),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),r?t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r):t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,i,0,t.RGBA,t.UNSIGNED_BYTE,null),n},getCachedTexture:function(t,e){if(this.textureCache[t])return this.textureCache[t];var i=this.createTexture(this.gl,e.width,e.height,e);return this.textureCache[t]=i,i},evictCachesForKey:function(t){this.textureCache[t]&&(this.gl.deleteTexture(this.textureCache[t]),delete this.textureCache[t])},copyGLTo2D:copyGLTo2DDrawImage,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var t=this.gl,e=t.getExtension("WEBGL_debug_renderer_info"),i={renderer:"",vendor:""};if(e){var r=t.getParameter(e.UNMASKED_RENDERER_WEBGL),n=t.getParameter(e.UNMASKED_VENDOR_WEBGL);r&&(i.renderer=r.toLowerCase()),n&&(i.vendor=n.toLowerCase())}return this.gpuInfo=i,i}}}(),function(){"use strict";function t(){}var e=function(){};fabric.Canvas2dFilterBackend=t,t.prototype={evictCachesForKey:e,dispose:e,clearWebGLCaches:e,resources:{},applyFilters:function(t,e,i,r,n){var s=n.getContext("2d");s.drawImage(e,0,0,i,r);var o={sourceWidth:i,sourceHeight:r,imageData:s.getImageData(0,0,i,r),originalEl:e,originalImageData:s.getImageData(0,0,i,r),canvasEl:n,ctx:s,filterBackend:this};return t.forEach(function(t){t.applyTo(o)}),o.imageData.width===i&&o.imageData.height===r||(n.width=o.imageData.width,n.height=o.imageData.height),s.putImageData(o.imageData,0,0),o}}}(),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},createProgram:function(t,e,i){e=e||this.fragmentSource,i=i||this.vertexSource,"highp"!==fabric.webGlPrecision&&(e=e.replace(/precision highp float/g,"precision "+fabric.webGlPrecision+" float"));var r=t.createShader(t.VERTEX_SHADER);if(t.shaderSource(r,i),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+t.getShaderInfoLog(r));var n=t.createShader(t.FRAGMENT_SHADER);if(t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+t.getShaderInfoLog(n));var s=t.createProgram();if(t.attachShader(s,r),t.attachShader(s,n),t.linkProgram(s),!t.getProgramParameter(s,t.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+t.getProgramInfoLog(s));var o=this.getAttributeLocations(t,s),a=this.getUniformLocations(t,s)||{};return a.uStepW=t.getUniformLocation(s,"uStepW"),a.uStepH=t.getUniformLocation(s,"uStepH"),{program:s,attributeLocations:o,uniformLocations:a}},getAttributeLocations:function(t,e){return{aPosition:t.getAttribLocation(e,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(t,e,i){var r=e.aPostion,n=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,n),t.enableVertexAttribArray(r),t.vertexAttribPointer(r,2,t.FLOAT,!1,0,0),t.bufferData(t.ARRAY_BUFFER,i,t.STATIC_DRAW)},_setupFrameBuffer:function(t){var e,i,r=t.context;t.passes>1?(e=t.destinationWidth,i=t.destinationHeight,t.sourceWidth===e&&t.sourceHeight===i||(r.deleteTexture(t.targetTexture),t.targetTexture=t.filterBackend.createTexture(r,e,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.finish())},_swapTextures:function(t){t.passes--,t.pass++;var e=t.targetTexture;t.targetTexture=t.sourceTexture,t.sourceTexture=e},isNeutralState:function(){return!1},applyTo:function(t){if(t.webgl){if(t.passes>1&&this.isNeutralState(t))return;this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t)}else this.isNeutralState()||this.applyTo2d(t)},retrieveShader:function(t){return t.programCache.hasOwnProperty(this.type)||(t.programCache[this.type]=this.createProgram(t.context)),t.programCache[this.type]},applyToWebGL:function(t){var e=t.context,i=this.retrieveShader(t);0===t.pass&&t.originalTexture?e.bindTexture(e.TEXTURE_2D,t.originalTexture):e.bindTexture(e.TEXTURE_2D,t.sourceTexture),e.useProgram(i.program),this.sendAttributeData(e,i.attributeLocations,t.aPosition),e.uniform1f(i.uniformLocations.uStepW,1/t.sourceWidth),e.uniform1f(i.uniformLocations.uStepH,1/t.sourceHeight),this.sendUniformData(e,i.uniformLocations),e.viewport(0,0,t.destinationWidth,t.destinationHeight),e.drawArrays(e.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(t,e,i){t.activeTexture(i),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE0)},unbindAdditionalTexture:function(t,e){t.activeTexture(e),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(t){this[this.mainParameter]=t},sendUniformData:function(){},createHelpLayer:function(t){if(!t.helpLayer){var e=document.createElement("canvas");e.width=t.sourceWidth,e.height=t.sourceHeight,t.helpLayer=e}},toObject:function(){var t={type:this.type},e=this.mainParameter;return e&&(t[e]=this[e]),t},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.ColorMatrix=r(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(t){this.callSuper("initialize",t),this.matrix=this.matrix.slice(0)},isNeutralState:function(){for(var t=i.ColorMatrix,e=20;e--;)if(this.matrix[e]!==t.prototype.matrix[e])return!1;return!0},applyTo2d:function(t){var e,i,r,n,s,o=t.imageData.data,a=o.length,h=this.matrix,c=this.colorsOnly;for(s=0;sy||o<0||o>_||(h=4*(a*_+o),c=v[d*m+f],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,S||(n+=p[h+3]*c));C[s]=e,C[s+1]=i,C[s+2]=r,C[s+3]=S?p[s+3]:n}t.imageData=x},getUniformLocations:function(t,e){return{uMatrix:t.getUniformLocation(e,"uMatrix"),uOpaque:t.getUniformLocation(e,"uOpaque"),uHalfSize:t.getUniformLocation(e,"uHalfSize"),uSize:t.getUniformLocation(e,"uSize")}},sendUniformData:function(t,e){t.uniform1fv(e.uMatrix,this.matrix)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Grayscale=r(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(t){var e,i,r=t.imageData.data,n=r.length,s=this.mode;for(e=0;ec[0]&&n>c[1]&&s>c[2]&&r1&&this.isNeutralState(t))return;t.passes++,this.width=t.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=t.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),t.destinationWidth=this.dW,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceWidth=t.destinationWidth,this.height=t.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),t.destinationHeight=this.dH,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceHeight=t.destinationHeight}else this.isNeutralState(t)||this.applyTo2d(t)},isNeutralState:function(t){var e=t.scaleX||this.scaleX,i=t.scaleY||this.scaleY;return 1===e&&1===i},lanczosCreate:function(t){return function(e){if(e>=t||e<=-t)return 0;if(e<1.1920929e-7&&e>-1.1920929e-7)return 1;var i=(e*=Math.PI)/t;return a(e)/e*a(i)/i}},applyTo2d:function(t){var e=t.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var n,s=e.width,a=e.height,h=o(s*i),c=o(a*r);"sliceHack"===this.resizeType?n=this.sliceByTwo(t,s,a,h,c):"hermite"===this.resizeType?n=this.hermiteFastResize(t,s,a,h,c):"bilinear"===this.resizeType?n=this.bilinearFiltering(t,s,a,h,c):"lanczos"===this.resizeType&&(n=this.lanczosResize(t,s,a,h,c)),t.imageData=n},sliceByTwo:function(t,i,n,s,o){var a,h,c=t.imageData,l=!1,u=!1,f=.5*i,d=.5*n,g=e.filterBackend.resources,p=0,v=0,m=i,b=0;for(g.sliceByTwo||(g.sliceByTwo=document.createElement("canvas")),((a=g.sliceByTwo).width<1.5*i||a.height=e)){P=r(1e3*s(w-C.x)),x[P]||(x[P]={});for(var F=S.y-y;F<=S.y+y;F++)F<0||F>=o||(M=r(1e3*s(F-C.y)),x[P][M]||(x[P][M]=g(n(i(P*m,2)+i(M*b,2))/1e3)),(T=x[P][M])>0&&(k+=T,D+=T*u[O=4*(F*e+w)],j+=T*u[O+1],E+=T*u[O+2],A+=T*u[O+3]))}d[O=4*(h*a+t)]=D/k,d[O+1]=j/k,d[O+2]=E/k,d[O+3]=A/k}return++t1&&M<-1||(_=2*M*M*M-3*M*M+1)>0&&(T+=_*d[(P=4*(A+k*e))+3],x+=_,d[P+3]<255&&(_=_*d[P+3]/250),C+=_*d[P],S+=_*d[P+1],w+=_*d[P+2],y+=_)}p[b]=C/y,p[b+1]=S/y,p[b+2]=w/y,p[b+3]=T/x}return g},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Contrast=r(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(0!==this.contrast){var e,i=t.imageData.data,r=i.length,n=Math.floor(255*this.contrast),s=259*(n+255)/(255*(259-n));for(e=0;e1&&(e=1/this.aspectRatio):this.aspectRatio<1&&(e=this.aspectRatio),t=e*this.blur*.12,this.horizontal?i[0]=t:i[1]=t,i}}),i.Blur.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Gamma=r(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",applyTo2d:function(t){var e,i=t.imageData.data,r=this.gamma,n=i.length,s=1/r[0],o=1/r[1],a=1/r[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),e=0,n=256;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){"stroke"===this.paintFirst?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,e,i){t.textBaseline="alphabetic",t.font=this._getFontDeclaration(e,i)},calcTextWidth:function(){for(var t=this.getLineWidth(0),e=1,i=this._textLines.length;et&&(t=r)}return t},_renderTextLine:function(t,e,i,r,n,s){this._renderChars(t,e,i,r,n,s)},_renderTextLinesBackground:function(t){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var e,i,r,n,s,o,a=0,h=t.fillStyle,c=this._getLeftOffset(),l=this._getTopOffset(),u=0,f=0,d=0,g=this._textLines.length;dn)){var d=a-n;h[t]=a,h[c]+=d,n=a}return{width:n*u,kernedWidth:a*u}},getHeightOfChar:function(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")},measureLine:function(t){var e=this._measureLine(t);return 0!==this.charSpacing&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e},_measureLine:function(t){var e,i,r,n,s=0,o=this._textLines[t],a=new Array(o.length);for(this.__charBounds[t]=a,e=0;e0&&!n){var u=this.__charBounds[e][i-1];l.left=u.left+u.width+a.kernedWidth-a.width}return l},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var e=this._textLines[t],i=this.getHeightOfChar(t,0),r=1,n=e.length;ri&&(i=s)}return this.__lineHeights[t]=i*this.lineHeight*this._fontSizeMult,this.__lineHeights[t]},calcTextHeight:function(){for(var t,e=0,i=0,r=this._textLines.length;i0?(t.fillStyle=f,s&&f&&t.fillRect(d+r+o,g+l*(1-this._fontSizeFraction)+this.offsets[e]*this.fontSize,a,this.fontSize/15),o=h.left,a=h.width,s=c,f=u):a+=h.kernedWidth;t.fillStyle=u,c&&u&&t.fillRect(d+r+o,g+l*(1-this._fontSizeFraction)+this.offsets[e]*this.fontSize,a,this.fontSize/15),g+=i}else g+=i;this._removeShadow(t)}},_getFontDeclaration:function(t,i){var r=t||this;return[e.isLikelyNode?r.fontWeight:r.fontStyle,e.isLikelyNode?r.fontStyle:r.fontWeight,i?"200px":r.fontSize+"px",e.isLikelyNode?'"'+r.fontFamily+'"':r.fontFamily].join(" ")},render:function(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t)))},_splitTextIntoLines:function(t){for(var i=t.split(this._reNewline),r=new Array(i.length),n=["\n"],s=[],o=0;o-1&&(t.underline=!0),t.textDecoration.indexOf("line-through")>-1&&(t.linethrough=!0),t.textDecoration.indexOf("overline")>-1&&(t.overline=!0),delete t.textDecoration)}fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(t,e){this.callSuper("initialize",t,e),this.initBehavior()},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(t){this.clearContextTop(),this.callSuper("render",t),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(t){this.callSuper("_render",t)},clearContextTop:function(t){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this.canvas.contextTop,i=this.canvas.viewportTransform;e.save(),e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(e),this.transformMatrix&&e.transform.apply(e,this.transformMatrix),this._clearTextArea(e),t||e.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas){var t,e=this._getCursorBoundaries();this.canvas&&this.canvas.contextTop?(t=this.canvas.contextTop,this.clearContextTop(!0)):(t=this.canvas.contextContainer).save(),this.selectionStart===this.selectionEnd?this.renderCursor(e,t):this.renderSelection(e,t),t.restore()}},_clearTextArea:function(t){var e=this.width+4,i=this.height+4;t.clearRect(-e/2,-i/2,e,i)},_getCursorBoundaries:function(t){void 0===t&&(t=this.selectionStart);var e=this._getLeftOffset(),i=this._getTopOffset(),r=this._getCursorBoundariesOffsets(t);return{left:e,top:i,leftOffset:r.left,topOffset:r.top}},_getCursorBoundariesOffsets:function(t){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;for(var e,i,r=0,n=0,s=this.get2DCursorLocation(t),o=0;o0?n:0)},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,s=this.getValueOfPropertyAt(r,n,"fontSize"),o=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/o,h=t.topOffset;h+=(1-this._fontSizeFraction)*this.getHeightOfLine(r)/this.lineHeight-s*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(t,e),e.fillStyle=this.getValueOfPropertyAt(r,n,"fill"),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+t.leftOffset-a/2,h+t.top,a,s)},renderSelection:function(t,e){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,r=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,n=-1!==this.textAlign.indexOf("justify"),s=this.get2DCursorLocation(i),o=this.get2DCursorLocation(r),a=s.lineIndex,h=o.lineIndex,c=s.charIndex<0?0:s.charIndex,l=o.charIndex<0?0:o.charIndex,u=a;u<=h;u++){var f=this._getLineLeftOffset(u)||0,d=this.getHeightOfLine(u),g=0,p=0,v=0;u===a&&(p=this.__charBounds[a][c].left),u>=a&&u1)&&(d/=this.lineHeight),this.inCompositionMode?(e.fillStyle=this.compositionColor||"black",e.fillRect(t.left+f+p,t.top+t.topOffset+d,v-p,1)):(e.fillStyle=this.selectionColor,e.fillRect(t.left+f+p,t.top+t.topOffset,v-p,d)),t.topOffset+=g}},getCurrentCharFontSize:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fontSize")},getCurrentCharColor:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fill")},_getCurrentCharIndex:function(){var t=this.get2DCursorLocation(this.selectionStart,!0),e=t.charIndex>0?t.charIndex-1:0;return{l:t.lineIndex,c:e}}}),fabric.IText.fromObject=function(e,i){if(t(e),e.styles)for(var r in e.styles)for(var n in e.styles[r])t(e.styles[r][n]);fabric.Object._fromObject("IText",e,i,"text")}}(),function(){var t=fabric.util.object.clone;fabric.util.object.extend(fabric.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(t){this.isEditing&&this.exitEditing(),this.selected=!1,fabric.Object.prototype.onDeselect.call(this,t)},initAddedHandler:function(){var t=this;this.on("added",function(){var e=t.canvas;e&&(e._hasITextHandlers||(e._hasITextHandlers=!0,t._initCanvasHandlers(e)),e._iTextInstances=e._iTextInstances||[],e._iTextInstances.push(t))})},initRemovedHandler:function(){var t=this;this.on("removed",function(){var e=t.canvas;e&&(e._iTextInstances=e._iTextInstances||[],fabric.util.removeFromArray(e._iTextInstances,t),0===e._iTextInstances.length&&(e._hasITextHandlers=!1,t._removeCanvasHandlers(e)))})},_initCanvasHandlers:function(t){t._mouseUpITextHandler=function(){t._iTextInstances&&t._iTextInstances.forEach(function(t){t.__isMousedown=!1})}.bind(this),t.on("mouse:up",t._mouseUpITextHandler)},_removeCanvasHandlers:function(t){t.off("mouse:up",t._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(t,e,i,r){var n;return n={isAborted:!1,abort:function(){this.isAborted=!0}},t.animate("_currentCursorOpacity",e,{duration:i,onComplete:function(){n.isAborted||t[r]()},onChange:function(){t.canvas&&t.selectionStart===t.selectionEnd&&t.renderCursorOrSelection()},abort:function(){return n.isAborted}}),n},_onTickComplete:function(){var t=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){t._currentTickCompleteState=t._animateCursor(t,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(t){var e=this,i=t?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout(function(){e._tick()},i)},abortCursorAnimation:function(){var t=this._currentTickState||this._currentTickCompleteState,e=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,t&&e&&e.clearContext(e.contextTop||e.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(t){var e=0,i=t-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i--;for(;/\S/.test(this._text[i])&&i>-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i++;for(;/\S/.test(this._text[i])&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this._text[i])&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(t,e,i){var r=i.slice(0,t),n=fabric.util.string.graphemeSplit(r).length;if(t===e)return{selectionStart:n,selectionEnd:n};var s=i.slice(t,e);return{selectionStart:n,selectionEnd:n+fabric.util.string.graphemeSplit(s).length}},fromGraphemeToStringSelection:function(t,e,i){var r=i.slice(0,t).join("").length;if(t===e)return{selectionStart:r,selectionEnd:r};return{selectionStart:r,selectionEnd:r+i.slice(t,e).join("").length}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var t=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=t.selectionStart,this.hiddenTextarea.selectionEnd=t.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var t=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=t.selectionEnd,this.inCompositionMode||(this.selectionStart=t.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.inCompositionMode?this.compositionStart:this.selectionStart,e=this._getCursorBoundaries(t),i=this.get2DCursorLocation(t),r=i.lineIndex,n=i.charIndex,s=this.getValueOfPropertyAt(r,n,"fontSize")*this.lineHeight,o=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),(h=fabric.util.transformPoint(h,this.canvas.viewportTransform)).x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s+"px",charHeight:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&(this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},removeStyleFromTo:function(t,e){var i,r,n=this.get2DCursorLocation(t,!0),s=this.get2DCursorLocation(e,!0),o=n.lineIndex,a=n.charIndex,h=s.lineIndex,c=s.charIndex;if(o!==h){if(this.styles[o])for(i=a;i=c&&(r[l-f]=r[u],delete r[u])}},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},restartCursorIfNeeded:function(){this._currentTickState&&!this._currentTickState.isAborted&&this._currentTickCompleteState&&!this._currentTickCompleteState.isAborted||this.initDelayedCursor()},insertNewlineStyleObject:function(e,i,r,n){var s,o={},a=!1;r||(r=1),this.shiftLineStyles(e,r),this.styles[e]&&(s=this.styles[e][0===i?i:i-1]);for(var h in this.styles[e]){var c=parseInt(h,10);c>=i&&(a=!0,o[c-i]=this.styles[e][h],delete this.styles[e][h])}for(a?this.styles[e+r]=o:delete this.styles[e+r];r>1;)r--,n&&n[r]?this.styles[e+r]={0:t(n[r])}:s?this.styles[e+r]={0:t(s)}:delete this.styles[e+r];this._forceClearCache=!0},insertCharStyleObject:function(e,i,r,n){this.styles||(this.styles={});var s=this.styles[e],o=s?t(s):{};r||(r=1);for(var a in o){var h=parseInt(a,10);h>=i&&(s[h+r]=o[h],o[h-r]||delete s[h])}if(this._forceClearCache=!0,n)for(;r--;)Object.keys(n[r]).length&&(this.styles[e]||(this.styles[e]={}),this.styles[e][i+r]=t(n[r]));else if(s)for(var c=s[i?i-1:1];c&&r--;)this.styles[e][i+r]=t(c)},insertNewStyleBlock:function(t,e,i){for(var r=this.get2DCursorLocation(e,!0),n=[0],s=0,o=0;o0&&(this.insertCharStyleObject(r.lineIndex,r.charIndex,n[0],i),i=i&&i.slice(n[0]+1)),s&&this.insertNewlineStyleObject(r.lineIndex,r.charIndex+n[0],s);for(o=1;o0?this.insertCharStyleObject(r.lineIndex+o,0,n[o],i):i&&(this.styles[r.lineIndex+o][0]=i[0]),i=i&&i.slice(n[o]+1);n[o]>0&&this.insertCharStyleObject(r.lineIndex+o,0,n[o],i)},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e,t.e)&&(this.fire("tripleclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("mousedblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},_mouseDownHandler:function(t){if(this.canvas&&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())}},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler)},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,!this.editable||this._isObjectMoved(t.e)||t.e.button&&1!==t.e.button||(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i=this.getLocalPointer(t),r=0,n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;h0&&(o+=this._textLines[h-1].length+1);n=this._getLineLeftOffset(a)*this.scaleX;for(var l=0,u=(e=this._textLines[a]).length;ls||o<0?0:1);return this.flipX&&(a=n-a),a>this._text.length&&(a=this._text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; line-height: 1px; paddingーtop: "+t.fontSize+";",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing&&!this.inCompositionMode){if(t.keyCode in this.keysMap)this[this.keysMap[t.keyCode]](t);else{if(!(t.keyCode in this.ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this.ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(t){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:t.keyCode in this.ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this.ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.requestRenderAll())},onInput:function(t){var e=this.fromPaste;if(this.fromPaste=!1,t&&t.stopPropagation(),this.isEditing){var i,r,n=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,s=this._text.length,o=n.length,a=o-s;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var h=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),c=this.selectionStart>h.selectionStart;this.selectionStart!==this.selectionEnd?(i=this._text.slice(this.selectionStart,this.selectionEnd),a+=this.selectionEnd-this.selectionStart):o0&&(r+=(i=this.__charBounds[t][e-1]).left+i.width),r},getDownCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(n===this._textLines.length-1||t.metaKey||34===t.keyCode)return this._text.length-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n+1,o);return this._textLines[n].slice(s).length+a+2},_getSelectionForOffset:function(t,e){return t.shiftKey&&this.selectionStart!==this.selectionEnd&&e?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||t.metaKey||33===t.keyCode)return-i;var s=r.charIndex,o=this._getWidthBeforeCursor(n,s),a=this._getIndexOnLine(n-1,o),h=this._textLines[n].slice(0,s);return-this._textLines[n-1].length+a-h.length},_getIndexOnLine:function(t,e){for(var i,r,n=this._textLines[t],s=this._getLineLeftOffset(t),o=0,a=0,h=n.length;ae){r=!0;var c=s-i,l=s,u=Math.abs(c-e);o=Math.abs(l-e)=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i=this["get"+t+"CursorOffset"](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(i):this.moveCursorWithoutShift(i),0!==i&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,e.shiftKey?i+="Shift":i+="outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t,e){void 0===e&&(e=t+1),this.removeStyleFromTo(t,e),this._text.splice(t,e-t),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(t,e,i,r){void 0===r&&(r=i),r>i&&this.removeStyleFromTo(i,r);var n=fabric.util.string.graphemeSplit(t);this.insertNewStyleBlock(n,i,e),this._text=[].concat(this._text.slice(0,i),n,this._text.slice(r)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),function(){var t=fabric.util.toFixed;fabric.util.object.extend(fabric.Text.prototype,{toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this._getSVGLeftTopOffsets(),r=this._getSVGTextAndBg(i.textTop,i.textLeft);return this._wrapSVGTextAndBg(e,r),t?t(e.join("")):e.join("")},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(t,e){var i=this.getSvgFilter(),r=""===i?"":' style="'+i+'"',n=this.getSvgTextDecoration(this);t.push("\t\n",e.textBgRects.join(""),'\t\t",e.textSpans.join(""),"\n","\t\n")},_getSVGTextAndBg:function(t,e){var i,r=[],n=[],s=t;this._setSVGBg(n);for(var o=0,a=this._textLines.length;o",fabric.util.string.escapeXml(e),""].join("")},_setSVGTextLineText:function(t,e,i,r){var n,s,o,a,h,c=this.getHeightOfLine(e),l=-1!==this.textAlign.indexOf("justify"),u="",f=0,d=this._textLines[e];r+=c*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,p=d.length-1;g<=p;g++)h=g===p||this.charSpacing,u+=d[g],o=this.__charBounds[e][g],0===f?(i+=o.kernedWidth-o.width,f+=o.width):f+=o.kernedWidth,l&&!h&&this._reSpaceAndTab.test(d[g])&&(h=!0),h||(n=n||this.getCompleteStyleDeclaration(e,g),s=this.getCompleteStyleDeclaration(e,g+1),h=this._hasStyleChangedForSvg(n,s)),h&&(a=this._getStyleDeclaration(e,g)||{},t.push(this._createTextCharSpan(u,a,i,r)),u="",n=s,i+=f,f=0)},_pushTextBgRect:function(e,i,r,n,s,o){var a=fabric.Object.NUM_FRACTION_DIGITS;e.push("\t\t\n')},_setSVGTextLineBg:function(t,e,i,r){for(var n,s,o=this._textLines[e],a=this.getHeightOfLine(e)/this.lineHeight,h=0,c=0,l=this.getValueOfPropertyAt(e,0,"textBackgroundColor"),u=0,f=o.length;uthis.width&&this._set("width",this.dynamicMinWidth),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(t){for(var e=0,i=0,r=0,n={},s=0;s0?(i=0,r++,e++):this._reSpaceAndTab.test(t.graphemeText[r])&&s>0&&(i++,r++),n[s]={line:e,offset:i},r+=t.graphemeLines[s].length,i+=t.graphemeLines[s].length;return n},styleHas:function(t,i){if(this._styleMap&&!this.isWrapping){var r=this._styleMap[i];r&&(i=r.line)}return e.Text.prototype.styleHas.call(this,t,i)},_getStyleDeclaration:function(t,e){if(this._styleMap&&!this.isWrapping){var i=this._styleMap[t];if(!i)return null;t=i.line,e=i.offset+e}return this.callSuper("_getStyleDeclaration",t,e)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=[];for(this.isWrapping=!0,i=0;i=r&&!d&&(s.push(o),o=[],n=l,d=!0),d||o.push(" "),o=o.concat(h),u=this._measureWord([" "],i,c),c++,d=!1,l>f&&(f=l);return p&&s.push(o),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),s},isEndOfWrapping:function(t){return!this._styleMap[t+1]||this._styleMap[t+1].line!==this._styleMap[t].line},_splitTextIntoLines:function(t){for(var i=e.Text.prototype._splitTextIntoLines.call(this,t),r=this._wrapText(i.lines,this.width),n=new Array(r.length),s=0;s=h.getMinWidth()?(h.set("width",l),!0):void 0},fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]}})}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 23e47d7678ce4e8900b25de81e7d039f14686985..39fd57508740eab53b4957ff2d7359bd3a63f5a0 100644 GIT binary patch delta 61467 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 delta 61243 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index f696f1b6..7e6577e5 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -2723,7 +2723,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { }, toHexa: function() { var source = this.getSource(), a; - a = source[3] * 255; + a = Math.round(source[3] * 255); a = a.toString(16); a = a.length === 1 ? "0" + a : a; return this.toHex() + a.toUpperCase(); @@ -3195,7 +3195,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { options[prop] = 0; } propValue = parseFloat(options[prop], 10); - if (typeof options[prop] === "string" && /^\d+%$/.test(options[prop])) { + if (typeof options[prop] === "string" && /^(\d+\.\d+)%|(\d+)%$/.test(options[prop])) { multFactor = .01; } else { multFactor = 1; @@ -3230,6 +3230,8 @@ fabric.ElementsParser.prototype.checkIfDone = function() { repeat: "repeat", offsetX: 0, offsetY: 0, + crossOrigin: "", + patternTransform: null, initialize: function(options, callback) { options || (options = {}); this.id = fabric.Object.__uid++; @@ -3247,7 +3249,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { fabric.util.loadImage(options.source, function(img) { _this.source = img; callback && callback(_this); - }); + }, null, this.crossOrigin); } }, toObject: function(propertiesToInclude) { @@ -3263,8 +3265,10 @@ fabric.ElementsParser.prototype.checkIfDone = function() { type: "pattern", source: source, repeat: this.repeat, + crossOrigin: this.crossOrigin, offsetX: toFixed(this.offsetX, NUM_FRACTION_DIGITS), - offsetY: toFixed(this.offsetY, NUM_FRACTION_DIGITS) + offsetY: toFixed(this.offsetY, NUM_FRACTION_DIGITS), + patternTransform: this.patternTransform ? this.patternTransform.concat() : null }; fabric.util.populateWithProperties(this, object, propertiesToInclude); return object; @@ -4176,6 +4180,11 @@ fabric.BaseBrush = fabric.util.createClass({ ctx.setLineDash(this.strokeDashArray); } }, + _saveAndTransform: function(ctx) { + var v = this.canvas.viewportTransform; + ctx.save(); + ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]); + }, _setShadow: function() { if (!this.shadow) { return; @@ -4234,9 +4243,8 @@ fabric.BaseBrush = fabric.util.createClass({ this._addPoint(pointerPoint); }, _render: function() { - var ctx = this.canvas.contextTop, i, len, v = this.canvas.viewportTransform, p1 = this._points[0], p2 = this._points[1]; - ctx.save(); - ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]); + var ctx = this.canvas.contextTop, i, len, p1 = this._points[0], p2 = this._points[1]; + this._saveAndTransform(ctx); ctx.beginPath(); if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) { var width = this.width / 1e3; @@ -4328,9 +4336,8 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, { this.points = []; }, drawDot: function(pointer) { - var point = this.addPoint(pointer), ctx = this.canvas.contextTop, v = this.canvas.viewportTransform; - ctx.save(); - ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]); + var point = this.addPoint(pointer), ctx = this.canvas.contextTop; + this._saveAndTransform(ctx); ctx.fillStyle = point.fill; ctx.beginPath(); ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false); @@ -4344,6 +4351,19 @@ fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, { this._setShadow(); this.drawDot(pointer); }, + _render: function() { + var ctx = this.canvas.contextTop, i, len, points = this.points, point; + this._saveAndTransform(ctx); + for (i = 0, len = points.length; i < len; i++) { + point = points[i]; + ctx.fillStyle = point.fill; + ctx.beginPath(); + ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false); + ctx.closePath(); + ctx.fill(); + } + ctx.restore(); + }, onMouseMove: function(pointer) { this.drawDot(pointer); }, @@ -4402,11 +4422,11 @@ fabric.SprayBrush = fabric.util.createClass(fabric.BaseBrush, { this.canvas.clearContext(this.canvas.contextTop); this._setShadow(); this.addSprayChunk(pointer); - this.render(); + this.render(this.sprayChunkPoints); }, onMouseMove: function(pointer) { this.addSprayChunk(pointer); - this.render(); + this.render(this.sprayChunkPoints); }, onMouseUp: function() { var originalRenderOnAddRemove = this.canvas.renderOnAddRemove; @@ -4424,7 +4444,6 @@ fabric.SprayBrush = fabric.util.createClass(fabric.BaseBrush, { originY: "center", fill: this.color }); - this.shadow && rect.setShadow(this.shadow); rects.push(rect); } } @@ -4435,7 +4454,7 @@ fabric.SprayBrush = fabric.util.createClass(fabric.BaseBrush, { originX: "center", originY: "center" }); - group.canvas = this.canvas; + this.shadow && group.setShadow(this.shadow); this.canvas.add(group); this.canvas.fire("path:created", { path: group @@ -4459,14 +4478,12 @@ fabric.SprayBrush = fabric.util.createClass(fabric.BaseBrush, { } return uniqueRectsArray; }, - render: function() { - var ctx = this.canvas.contextTop; + render: function(sprayChunk) { + var ctx = this.canvas.contextTop, i, len; ctx.fillStyle = this.color; - var v = this.canvas.viewportTransform, i, len; - ctx.save(); - ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]); - for (i = 0, len = this.sprayChunkPoints.length; i < len; i++) { - var point = this.sprayChunkPoints[i]; + this._saveAndTransform(ctx); + for (i = 0, len = sprayChunk.length; i < len; i++) { + var point = sprayChunk[i]; if (typeof point.opacity !== "undefined") { ctx.globalAlpha = point.opacity; } @@ -4474,6 +4491,15 @@ fabric.SprayBrush = fabric.util.createClass(fabric.BaseBrush, { } ctx.restore(); }, + _render: function() { + var ctx = this.canvas.contextTop, i, ilen; + ctx.fillStyle = this.color; + this._saveAndTransform(ctx); + for (i = 0, ilen = this.sprayChunks.length; i < ilen; i++) { + this.render(this.sprayChunks[i]); + } + ctx.restore(); + }, addSprayChunk: function(pointer) { this.sprayChunkPoints = []; var x, y, width, radius = this.width / 2, i; @@ -5626,7 +5652,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { }, _onMouseDownInDrawingMode: function(e) { this._isCurrentlyDrawing = true; - this.discardActiveObject(e).requestRenderAll(); + if (this.getActiveObject()) { + this.discardActiveObject(e).requestRenderAll(); + } if (this.clipTo) { fabric.util.clipContext(this, this.contextTop); } @@ -5991,7 +6019,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { fabric.util.object.extend(fabric.StaticCanvas.prototype, { toDataURL: function(options) { options || (options = {}); - var format = options.format || "png", quality = options.quality || 1, multiplier = options.multiplier || 1, cropping = { + var format = options.format || "png", quality = options.quality || 1, multiplier = options.multiplier || options.enableRetinaScaling ? 1 : 1 / this.getRetinaScaling(), cropping = { left: options.left || 0, top: options.top || 0, width: options.width || 0, @@ -6741,7 +6769,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { el.height = boundingRect.height; fabric.util.wrapElement(el, "div"); var canvas = new fabric.StaticCanvas(el, { - enableRetinaScaling: options.enableRetinaScaling + enableRetinaScaling: options.enableRetinaScaling, + renderOnAddRemove: false, + skipOffscreen: false }); if (options.format === "jpg") { options.format = "jpeg"; @@ -6759,6 +6789,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { var data = canvas.toDataURL(options); this.set(origParams).setCoords(); this.canvas = originalCanvas; + canvas._objects = []; canvas.dispose(); canvas = null; return data; @@ -7322,7 +7353,6 @@ fabric.util.object.extend(fabric.Object.prototype, { }); (function() { - var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; function getSvgColorString(prop, value) { if (!value) { return prop + ": none; "; @@ -7343,7 +7373,7 @@ fabric.util.object.extend(fabric.Object.prototype, { return [ stroke, "stroke-width: ", strokeWidth, "; ", "stroke-dasharray: ", strokeDashArray, "; ", "stroke-linecap: ", strokeLineCap, "; ", "stroke-linejoin: ", strokeLineJoin, "; ", "stroke-miterlimit: ", strokeMiterLimit, "; ", fill, "fill-rule: ", fillRule, "; ", "opacity: ", opacity, ";", filter, visibility ].join(""); }, getSvgSpanStyles: function(style, useWhiteSpace) { - var term = "; ", strokeWidth = style.strokeWidth ? "stroke-width: " + style.strokeWidth + term : "", fontFamily = style.fontFamily ? "font-family: " + style.fontFamily.replace(/"/g, "'") + term : "", fontSize = style.fontSize ? "font-size: " + style.fontSize + term : "", fontStyle = style.fontStyle ? "font-style: " + style.fontStyle + term : "", fontWeight = style.fontWeight ? "font-weight: " + style.fontWeight + term : "", fill = style.fill ? getSvgColorString("fill", style.fill) : "", stroke = style.stroke ? getSvgColorString("stroke", style.stroke) : "", textDecoration = this.getSvgTextDecoration(style); + var term = "; ", strokeWidth = style.strokeWidth ? "stroke-width: " + style.strokeWidth + term : "", fontFamily = style.fontFamily ? "font-family: " + style.fontFamily.replace(/"/g, "'") + term : "", fontSize = style.fontSize ? "font-size: " + style.fontSize + "px" + term : "", fontStyle = style.fontStyle ? "font-style: " + style.fontStyle + term : "", fontWeight = style.fontWeight ? "font-weight: " + style.fontWeight + term : "", fill = style.fill ? getSvgColorString("fill", style.fill) : "", stroke = style.stroke ? getSvgColorString("stroke", style.stroke) : "", textDecoration = this.getSvgTextDecoration(style); if (textDecoration) { textDecoration = "text-decoration: " + textDecoration + term; } @@ -7370,6 +7400,7 @@ fabric.util.object.extend(fabric.Object.prototype, { }, _setSVGBg: function(textBgRects) { if (this.backgroundColor) { + var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; textBgRects.push("\t\t\n'); } }, @@ -7923,7 +7954,7 @@ fabric.util.object.extend(fabric.Object.prototype, { (function(global) { "use strict"; - var fabric = global.fabric || (global.fabric = {}), pi = Math.PI, extend = fabric.util.object.extend; + var fabric = global.fabric || (global.fabric = {}), pi = Math.PI; if (fabric.Circle) { fabric.warn("fabric.Circle is already defined."); return; @@ -7971,15 +8002,14 @@ fabric.util.object.extend(fabric.Object.prototype, { } }); fabric.Circle.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")); - fabric.Circle.fromElement = function(element, callback, options) { - options || (options = {}); + fabric.Circle.fromElement = function(element, callback) { var parsedAttributes = fabric.parseAttributes(element, fabric.Circle.ATTRIBUTE_NAMES); if (!isValidRadius(parsedAttributes)) { throw new Error("value of `r` attribute is required and can not be negative"); } parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.radius; parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.radius; - callback(new fabric.Circle(extend(parsedAttributes, options))); + callback(new fabric.Circle(parsedAttributes)); }; function isValidRadius(attributes) { return "radius" in attributes && attributes.radius >= 0; @@ -8030,7 +8060,7 @@ fabric.util.object.extend(fabric.Object.prototype, { (function(global) { "use strict"; - var fabric = global.fabric || (global.fabric = {}), piBy2 = Math.PI * 2, extend = fabric.util.object.extend; + var fabric = global.fabric || (global.fabric = {}), piBy2 = Math.PI * 2; if (fabric.Ellipse) { fabric.warn("fabric.Ellipse is already defined."); return; @@ -8084,12 +8114,11 @@ fabric.util.object.extend(fabric.Object.prototype, { } }); fabric.Ellipse.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")); - fabric.Ellipse.fromElement = function(element, callback, options) { - options || (options = {}); + fabric.Ellipse.fromElement = function(element, callback) { var parsedAttributes = fabric.parseAttributes(element, fabric.Ellipse.ATTRIBUTE_NAMES); parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx; parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry; - callback(new fabric.Ellipse(extend(parsedAttributes, options))); + callback(new fabric.Ellipse(parsedAttributes)); }; fabric.Ellipse.fromObject = function(object, callback) { return fabric.Object._fromObject("Ellipse", object, callback); @@ -8177,7 +8206,7 @@ fabric.util.object.extend(fabric.Object.prototype, { (function(global) { "use strict"; - var fabric = global.fabric || (global.fabric = {}), extend = fabric.util.object.extend, min = fabric.util.array.min, max = fabric.util.array.max, toFixed = fabric.util.toFixed, NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; + var fabric = global.fabric || (global.fabric = {}), extend = fabric.util.object.extend, min = fabric.util.array.min, max = fabric.util.array.max, toFixed = fabric.util.toFixed; if (fabric.Polyline) { fabric.warn("fabric.Polyline is already defined"); return; @@ -8219,7 +8248,7 @@ fabric.util.object.extend(fabric.Object.prototype, { }); }, toSVG: function(reviver) { - var points = [], diffX = this.pathOffset.x, diffY = this.pathOffset.y, markup = this._createBaseSVGMarkup(); + var points = [], diffX = this.pathOffset.x, diffY = this.pathOffset.y, markup = this._createBaseSVGMarkup(), NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; for (var i = 0, len = this.points.length; i < len; i++) { points.push(toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS), ",", toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS), " "); } @@ -11646,7 +11675,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { ctx.restore(); }, _renderChars: function(method, ctx, line, left, top, lineIndex) { - var lineHeight = this.getHeightOfLine(lineIndex), isJustify = this.textAlign.indexOf("justify") !== -1, actualStyle, nextStyle, charsToRender = "", charBox, boxWidth = 0, timeToRender, shortCut = !isJustify && this.isEmptyStyles(lineIndex); + var lineHeight = this.getHeightOfLine(lineIndex), isJustify = this.textAlign.indexOf("justify") !== -1, actualStyle, nextStyle, charsToRender = "", charBox, boxWidth = 0, timeToRender, shortCut = !isJustify && this.charSpacing === 0 && this.isEmptyStyles(lineIndex); ctx.save(); top -= lineHeight * this._fontSizeFraction / this.lineHeight; if (shortCut) { @@ -12509,6 +12538,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { return; } if (this.canvas) { + this.canvas.calcOffset(); this.exitEditingOnOthers(this.canvas); } this.isEditing = true; @@ -12972,26 +13002,27 @@ fabric.util.object.extend(fabric.IText.prototype, { this.selectLine(this.getSelectionStartFromPointer(options.e)); }); }, + _mouseDownHandler: function(options) { + if (!this.canvas || !this.editable || options.e.button && options.e.button !== 1) { + return; + } + var pointer = this.canvas.getPointer(options.e); + this.__mousedownX = pointer.x; + this.__mousedownY = pointer.y; + this.__isMousedown = true; + if (this.selected) { + this.setCursorByClick(options.e); + } + if (this.isEditing) { + this.__selectionStartOnMouseDown = this.selectionStart; + if (this.selectionStart === this.selectionEnd) { + this.abortCursorAnimation(); + } + this.renderCursorOrSelection(); + } + }, initMousedownHandler: function() { - this.on("mousedown", function(options) { - if (!this.editable || options.e.button && options.e.button !== 1) { - return; - } - var pointer = this.canvas.getPointer(options.e); - this.__mousedownX = pointer.x; - this.__mousedownY = pointer.y; - this.__isMousedown = true; - if (this.selected) { - this.setCursorByClick(options.e); - } - if (this.isEditing) { - this.__selectionStartOnMouseDown = this.selectionStart; - if (this.selectionStart === this.selectionEnd) { - this.abortCursorAnimation(); - } - this.renderCursorOrSelection(); - } - }); + this.on("mousedown", this._mouseDownHandler); }, _isObjectMoved: function(e) { var pointer = this.canvas.getPointer(e); @@ -13441,7 +13472,7 @@ fabric.util.object.extend(fabric.IText.prototype, { }); (function() { - var toFixed = fabric.util.toFixed, NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; + var toFixed = fabric.util.toFixed; fabric.util.object.extend(fabric.Text.prototype, { toSVG: function(reviver) { var markup = this._createBaseSVGMarkup(), offsets = this._getSVGLeftTopOffsets(), textAndBg = this._getSVGTextAndBg(offsets.textTop, offsets.textLeft); @@ -13476,7 +13507,7 @@ fabric.util.object.extend(fabric.IText.prototype, { }; }, _createTextCharSpan: function(_char, styleDecl, left, top) { - var styleProps = this.getSvgSpanStyles(styleDecl, _char !== _char.trim()), fillStyles = styleProps ? 'style="' + styleProps + '"' : ""; + var styleProps = this.getSvgSpanStyles(styleDecl, _char !== _char.trim()), fillStyles = styleProps ? 'style="' + styleProps + '"' : "", NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; return [ '", fabric.util.string.escapeXml(_char), "" ].join(""); }, _setSVGTextLineText: function(textSpans, lineIndex, textLeftOffset, textTopOffset) { @@ -13513,6 +13544,7 @@ fabric.util.object.extend(fabric.IText.prototype, { } }, _pushTextBgRect: function(textBgRects, color, left, top, width, height) { + var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS; textBgRects.push("\t\t\n'); }, _setSVGTextLineBg: function(textBgRects, i, leftOffset, textTopOffset) { diff --git a/package.json b/package.json index 7759d935..af764e61 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", "homepage": "http://fabricjs.com/", - "version": "2.0.0-rc.4", + "version": "2.0.0", "author": "Juriy Zaytsev ", "contributors": [ {