From 28c2654a2310a675f22f8b500fd5984fd03de4ff Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sun, 16 Oct 2016 23:40:02 +0200 Subject: [PATCH] Ver166 (#3350) * ver 166 --- CHANGELOG.md | 7 + HEADER.js | 2 +- dist/fabric.js | 286 +++++++++++++++++++++++++++++------ dist/fabric.min.js | 16 +- dist/fabric.min.js.gz | Bin 67614 -> 68001 bytes dist/fabric.require.js | 154 ++++++++++++++----- package.json | 2 +- src/mixins/stateful.mixin.js | 6 +- src/util/lang_object.js | 8 +- test/unit/object.js | 6 - 10 files changed, 386 insertions(+), 101 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64172d8a070..9c8423fbe22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +**Version 1.6.6** + +- Add: Contrast and Saturate filters [#3341](https://github.com/kangax/fabric.js/pull/3341) +- Fix: Correct registering and removal of events to handle iText objects. [#3349](https://github.com/kangax/fabric.js/pull/3349) +- Fix: Corrected 2 regression of 1.6.5 (dataurl export and itext clicks) +- Fix: Corrected path boundaries calculation for Arcs ( a and A ) [#3347](https://github.com/kangax/fabric.js/pull/3347) + **Version 1.6.5** - Fix: charspacing, do not get subzero with charwidth. diff --git a/HEADER.js b/HEADER.js index 577cb842d7f..51e45d5c950 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.6.5" }; +var fabric = fabric || { version: "1.6.6" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/dist/fabric.js b/dist/fabric.js index 27bdd479ac0..9057c3257c6 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=json,gestures minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.6.5" }; +var fabric = fabric || { version: "1.6.6" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -1174,18 +1174,13 @@ fabric.Collection = { */ fabric.util.getBoundsOfArc = function(fx, fy, rx, ry, rot, large, sweep, tx, ty) { - var fromX = 0, fromY = 0, bound = [], bounds = [], - segs = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot), - boundCopy = [[], []]; + var fromX = 0, fromY = 0, bound, bounds = [], + segs = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot); for (var i = 0, len = segs.length; i < len; i++) { bound = getBoundsOfCurve(fromX, fromY, segs[i][0], segs[i][1], segs[i][2], segs[i][3], segs[i][4], segs[i][5]); - boundCopy[0].x = bound[0].x + fx; - boundCopy[0].y = bound[0].y + fy; - boundCopy[1].x = bound[1].x + fx; - boundCopy[1].y = bound[1].y + fy; - bounds.push(boundCopy[0]); - bounds.push(boundCopy[1]); + bounds.push({ x: bound[0].x + fx, y: bound[0].y + fy }); + bounds.push({ x: bound[1].x + fx, y: bound[1].y + fy }); fromX = segs[i][4]; fromY = segs[i][5]; } @@ -1549,7 +1544,6 @@ fabric.Collection = { (function() { - /** * Copies all enumerable properties of one object to another * @memberOf fabric.util.object @@ -1557,12 +1551,17 @@ fabric.Collection = { * @param {Object} source Where to copy from * @return {Object} */ + function extend(destination, source, deep) { // JScript DontEnum bug is not taken care of // the deep clone is for internal use, is not meant to avoid // javascript traps or cloning html element or self referenced objects. if (deep) { - if (source instanceof Array) { + if (!fabric.isLikelyNode && source instanceof Element) { + // avoid cloning deep images, canvases, + destination = source; + } + else if (source instanceof Array) { destination = source.map(function(v) { return clone(v, deep) }) @@ -6779,6 +6778,13 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ this.overlayImage = null; this.backgroundColor = ''; this.overlayColor = '' + if (this._hasITextHandlers) { + this.off('selection:cleared', this._canvasITextSelectionClearedHanlder); + this.off('object:selected', this._canvasITextSelectionClearedHanlder); + this.off('mouse:up', this._mouseUpITextHandler); + this._iTextInstances = null; + this._hasITextHandlers = false; + } this.clearContext(this.contextContainer); this.fire('canvas:cleared'); this.renderAll(); @@ -10958,7 +10964,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab var origWidth = this.getWidth(), origHeight = this.getHeight(), scaledWidth = (cropping.width || this.getWidth()) * multiplier, - scaledHeight = (cropping.width || this.getHeight()) * multiplier, + scaledHeight = (cropping.height || this.getHeight()) * multiplier, zoom = this.getZoom(), newZoom = zoom * multiplier, vp = this.viewportTransform, @@ -13897,7 +13903,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } function _isEqual(origValue, currentValue) { - if (origValue instanceof Array) { + if (!fabric.isLikelyNode && origValue instanceof Element) { + // avoid checking deep html elements + return origValue === currentValue; + } + else if (origValue instanceof Array) { if (origValue.length !== currentValue.length) { return false } @@ -18944,7 +18954,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Constructor * @memberOf fabric.Image.filters.Brightness.prototype * @param {Object} [options] Options object - * @param {Number} [options.brightness=0] Value to brighten the image up (0..255) + * @param {Number} [options.brightness=0] Value to brighten the image up (-255..255) */ initialize: function(options) { options = options || { }; @@ -20746,6 +20756,180 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag })(typeof exports !== 'undefined' ? exports : this); +(function(global) { + + 'use strict'; + + var fabric = global.fabric || (global.fabric = { }), + extend = fabric.util.object.extend, + filters = fabric.Image.filters, + createClass = fabric.util.createClass; + + /** + * Contrast filter class + * @class fabric.Image.filters.Contrast + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter + * @see {@link fabric.Image.filters.Contrast#initialize} for constructor definition + * @see {@link http://fabricjs.com/image-filters|ImageFilters demo} + * @example + * var filter = new fabric.Image.filters.Contrast({ + * contrast: 40 + * }); + * object.filters.push(filter); + * object.applyFilters(canvas.renderAll.bind(canvas)); + */ + filters.Contrast = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Contrast.prototype */ { + + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Contrast', + + /** + * Constructor + * @memberOf fabric.Image.filters.Contrast.prototype + * @param {Object} [options] Options object + * @param {Number} [options.contrast=0] Value to contrast the image up (-255...255) + */ + initialize: function(options) { + options = options || { }; + this.contrast = options.contrast || 0; + }, + + /** + * Applies filter to canvas element + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + contrastF = 259 * (this.contrast + 255) / (255 * (259 - this.contrast)); + + for (var i = 0, len = data.length; i < len; i += 4) { + data[i] = contrastF * (data[i] - 128) + 128; + data[i + 1] = contrastF * (data[i + 1] - 128) + 128; + data[i + 2] = contrastF * (data[i + 2] - 128) + 128; + } + + context.putImageData(imageData, 0, 0); + }, + + /** + * Returns object representation of an instance + * @return {Object} Object representation of an instance + */ + toObject: function() { + return extend(this.callSuper('toObject'), { + contrast: this.contrast + }); + } + }); + + /** + * Returns filter instance from an object representation + * @static + * @param {Object} object Object to create an instance from + * @return {fabric.Image.filters.Contrast} Instance of fabric.Image.filters.Contrast + */ + fabric.Image.filters.Contrast.fromObject = function(object) { + return new fabric.Image.filters.Contrast(object); + }; + +})(typeof exports !== 'undefined' ? exports : this); + + +(function(global) { + + 'use strict'; + + var fabric = global.fabric || (global.fabric = { }), + extend = fabric.util.object.extend, + filters = fabric.Image.filters, + createClass = fabric.util.createClass; + + /** + * Saturate filter class + * @class fabric.Image.filters.Saturate + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter + * @see {@link fabric.Image.filters.Saturate#initialize} for constructor definition + * @see {@link http://fabricjs.com/image-filters|ImageFilters demo} + * @example + * var filter = new fabric.Image.filters.Saturate({ + * saturate: 100 + * }); + * object.filters.push(filter); + * object.applyFilters(canvas.renderAll.bind(canvas)); + */ + filters.Saturate = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Saturate.prototype */ { + + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Saturate', + + /** + * Constructor + * @memberOf fabric.Image.filters.Saturate.prototype + * @param {Object} [options] Options object + * @param {Number} [options.contrast=0] Value to saturate the image (-255...255) + */ + initialize: function(options) { + options = options || { }; + this.saturate = options.saturate || 0; + this.loadProgram(); + }, + + /** + * Applies filter to canvas element + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + max, adjust = -this.saturate * 0.01; + + for (var i = 0, len = data.length; i < len; i += 4) { + max = Math.max(data[i], data[i + 1], data[i + 2]); + data[i] += max !== data[i] ? (max - data[i]) * adjust : 0; + data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0; + data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0; + } + + context.putImageData(imageData, 0, 0); + }, + + /** + * Returns object representation of an instance + * @return {Object} Object representation of an instance + */ + toObject: function() { + return extend(this.callSuper('toObject'), { + saturate: this.saturate + }); + } + }); + + /** + * Returns filter instance from an object representation + * @static + * @param {Object} object Object to create an instance from + * @return {fabric.Image.filters.Saturate} Instance of fabric.Image.filters.Saturate + */ + fabric.Image.filters.Saturate.fromObject = function(object) { + return new fabric.Image.filters.Saturate(object); + }; + +})(typeof exports !== 'undefined' ? exports : this); + + (function(global) { 'use strict'; @@ -23132,6 +23316,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.initRemovedHandler(); this.initCursorSelectionHandlers(); this.initDoubleClickSimulation(); + this.mouseMoveHandler = this.mouseMoveHandler.bind(this); }, /** @@ -23153,18 +23338,14 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag initAddedHandler: function() { var _this = this; this.on('added', function() { - if (this.canvas && !this.canvas._hasITextHandlers) { - this.canvas._hasITextHandlers = true; - this._initCanvasHandlers(); - } - - // Track IText instances per-canvas. Only register in this array once added - // to a canvas; we don't want to leak a reference to the instance forever - // simply because it existed at some point. - // (Might be added to a collection, but not on a canvas.) - if (_this.canvas) { - _this.canvas._iTextInstances = _this.canvas._iTextInstances || []; - _this.canvas._iTextInstances.push(_this); + var canvas = _this.canvas; + if (canvas) { + if (!canvas._hasITextHandlers) { + canvas._hasITextHandlers = true; + _this._initCanvasHandlers(canvas); + } + canvas._iTextInstances = canvas._iTextInstances || []; + canvas._iTextInstances.push(_this); } }); }, @@ -23172,35 +23353,46 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag initRemovedHandler: function() { var _this = this; this.on('removed', function() { - // (Might be removed from a collection, but not on a canvas.) - if (_this.canvas) { - _this.canvas._iTextInstances = _this.canvas._iTextInstances || []; - fabric.util.removeFromArray(_this.canvas._iTextInstances, _this); + var canvas = _this.canvas; + if (canvas) { + canvas._iTextInstances = canvas._iTextInstances || []; + fabric.util.removeFromArray(canvas._iTextInstances, _this); + if (canvas._iTextInstances.length === 0) { + canvas._hasITextHandlers = false; + _this._removeCanvasHandlers(canvas); + } } }); }, /** + * register canvas event to manage exiting on other instances * @private */ - _initCanvasHandlers: function() { - var _this = this; - - this.canvas.on('selection:cleared', function() { - fabric.IText.prototype.exitEditingOnOthers(_this.canvas); - }); - - this.canvas.on('mouse:up', function() { - if (_this.canvas._iTextInstances) { - _this.canvas._iTextInstances.forEach(function(obj) { + _initCanvasHandlers: function(canvas) { + canvas._canvasITextSelectionClearedHanlder = (function() { + fabric.IText.prototype.exitEditingOnOthers(canvas); + }).bind(this); + canvas._mouseUpITextHandler = (function() { + if (canvas._iTextInstances) { + canvas._iTextInstances.forEach(function(obj) { obj.__isMousedown = false; }); } - }); + }).bind(this); + canvas.on('selection:cleared', canvas._canvasITextSelectionClearedHanlder); + canvas.on('object:selected', canvas._canvasITextSelectionClearedHanlder); + canvas.on('mouse:up', canvas._mouseUpITextHandler); + }, - this.canvas.on('object:selected', function() { - fabric.IText.prototype.exitEditingOnOthers(_this.canvas); - }); + /** + * remove canvas event to manage exiting on other instances + * @private + */ + _removeCanvasHandlers: function(canvas) { + canvas.off('selection:cleared', canvas._canvasITextSelectionClearedHanlder); + canvas.off('object:selected', canvas._canvasITextSelectionClearedHanlder); + canvas.off('mouse:up', canvas._mouseUpITextHandler); }, /** @@ -23487,8 +23679,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag return this; } this.canvas.fire('text:editing:entered', { target: this }); - this.canvas.renderAll(); this.initMouseMoveHandler(); + this.canvas.renderAll(); return this; }, @@ -23507,7 +23699,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag * Initializes "mousemove" event handler */ initMouseMoveHandler: function() { - this.canvas.on('mouse:move', this.mouseMoveHandler.bind(this)); + this.canvas.on('mouse:move', this.mouseMoveHandler); }, /** diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 8ed014f07ba..ae1a1e80ea9 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,8 +1,8 @@ -var fabric=fabric||{version:"1.6.5"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(""),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?D-=2*f:1===c&&D<0&&(D+=2*f);for(var E=Math.ceil(Math.abs(D/f*2)),L=[],I=D/E,R=8/3*Math.sin(I/4)*Math.sin(I/4)/Math.sin(I/2),F=P+I,B=0;B=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,S=Math.abs,C=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),S(u)<1e-12){if(S(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){var e=this.constructor.superclass.prototype[t];return arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return y;if((f||d)&&(_=" translate("+x(f)+" "+x(d)+") "),r=_+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),y}function g(t){var e=t.objects,i=t.options;return e=e.map(function(t){return v[m(t.type)].fromObject(t)}),{objects:e,options:i}}function p(t,e,i){e[i]&&e[i].toSVG&&t.push('\t\n','\t\t\n\t\n')}var v=t.fabric||(t.fabric={}),b=v.util.object.extend,m=v.util.string.capitalize,y=v.util.object.clone,_=v.util.toFixed,x=v.util.parseUnit,S=v.util.multiplyTransformMatrices,C=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,w=/^(symbol|image|marker|pattern|view|svg)$/i,O=/^(?:pattern|defs|symbol|metadata)$/i,T=/^(symbol|g|a|svg)$/i,k={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},j={stroke:"strokeOpacity",fill:"fillOpacity"};v.cssRules={},v.gradientDefs={},v.parseTransformAttribute=function(){function t(t,e){var i=e[0],r=3===e.length?e[1]:0,n=3===e.length?e[2]:0;t[0]=Math.cos(i),t[1]=Math.sin(i),t[2]=-Math.sin(i),t[3]=Math.cos(i),t[4]=r-(t[0]*r+t[2]*n),t[5]=n-(t[1]*r+t[3]*n)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e){t[2]=Math.tan(v.util.degreesToRadians(e[0])); -}function r(t,e){t[1]=Math.tan(v.util.degreesToRadians(e[0]))}function n(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var s=[1,0,0,1,0,0],o=v.reNum,a="(?:\\s+,?\\s*|,\\s*)",h="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",c="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+")"+a+"("+o+"))?\\s*\\))",u="(?:(scale)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",f="(?:(translate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")\\s*\\))",g="(?:"+d+"|"+f+"|"+u+"|"+l+"|"+h+"|"+c+")",p="(?:"+g+"(?:"+a+"*"+g+")*)",b="^\\s*(?:"+p+"?)\\s*$",m=new RegExp(b),y=new RegExp(g,"g");return function(o){var a=s.concat(),h=[];if(!o||o&&!m.test(o))return a;o.replace(y,function(o){var c=new RegExp(g).exec(o).filter(function(t){return!!t}),l=c[1],u=c.slice(2).map(parseFloat);switch(l){case"translate":n(a,u);break;case"rotate":u[0]=v.util.degreesToRadians(u[0]),t(a,u);break;case"scale":e(a,u);break;case"skewX":i(a,u);break;case"skewY":r(a,u);break;case"matrix":a=u}h.push(a.concat()),a=s.concat()});for(var c=h[0];h.length>1;)h.shift(),c=v.util.multiplyTransformMatrices(c,h[0]);return c}}();var A=new RegExp("^\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*$");v.parseSVGDocument=function(){function t(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}return function(e,i,r){if(e){f(e);var n=new Date,s=v.Object.__uid++,o=d(e),a=v.util.toArray(e.getElementsByTagName("*"));if(o.svgUid=s,0===a.length&&v.isLikelyNode){a=e.selectNodes('//*[name(.)!="svg"]');for(var h=[],c=0,l=a.length;c/i,""))),n&&n.documentElement||e&&e(null),v.parseSVGDocument(n.documentElement,function(i,r){M.set(t,{objects:v.util.array.invoke(i,"toObject"),options:r}),e&&e(i,r)},i)}t=t.replace(/^\n\s*/,"").trim(),M.has(t,function(i){i?M.get(t,function(t){var i=g(t);e(i.objects,i.options)}):new v.util.request(t,{method:"get",onComplete:r})})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else v.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));v.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)},createSVGFontFacesMarkup:function(t){for(var e,i,r,n,s,o,a,h="",c={},l=v.fontPaths,u=0,f=t.length;u',"","\n"].join("")),h},createSVGRefElementsMarkup:function(t){var e=[];return p(e,t,"backgroundColor"),p(e,t,"overlayColor"),e.join("")}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}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:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(){return{type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform}},toSVG:function(t){var e,i,r=fabric.util.object.clone(this.coords);if(this.colorStops.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var n in r)"x1"===n||"x2"===n||"r2"===n?r[n]+=this.offsetX-t.width/2:"y1"!==n&&"y2"!==n||(r[n]+=this.offsetY-t.height/2);i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']);for(var s=0;s\n');return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:"y1"!==r&&"y2"!==r||(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;s\n\n\n'},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){if(e&&e.source){var r=this;fabric.util.loadImage(e.source,function(n){r[t]=new fabric.Pattern({source:n,repeat:e.repeat,offsetX:e.offsetX,offsetY:e.offsetY}),i&&i()})}else this[t]=e,i&&i();return this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw n;if("undefined"==typeof e.getContext)throw n;return e},_initOptions:function(t){for(var e in t)this[e]=t[e];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(t),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return Math.sqrt(this.viewportTransform[0]*this.viewportTransform[3])},setViewportTransform:function(t){var e,i=this._activeGroup;this.viewportTransform=t;for(var r=0,n=this._objects.length;r"),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","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"\n")},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop;t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur,t.shadowOffsetX=this.shadow.offsetX,t.shadowOffsetY=this.shadow.offsetY}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&ci.padding?t.x<0?t.x+=i.padding:t.x-=i.padding:t.x=0,n(t.y)>i.padding?t.y<0?t.y+=i.padding:t.y-=i.padding: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);return a<0&&(a=360+a),n.target.angle=a%360,!0},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.setAngle(0)},_drawSelection:function(t){var e=this._groupSelector,i=e.left,r=e.top,a=n(i),h=n(r);if(this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(e.ex-(i>0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&this._checkTarget(n,s))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&this._checkTarget(n,o)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout")),this.fire("mouse:over",{target:t,e:e}),t.fire("mouseover"),this._hoveredTarget=t):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){return this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e&&e.fire("deselected",{e:t}),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t}),this},deactivateAll:function(){for(var t=this.getObjects(),e=0,i=t.length;e1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this.fire("mouse:wheel",{e:t})},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor;if(e.selectable){var r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this._setCornerCursor(n,e,t):this.setCursor(i)}else this.setCursor(i);return!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.width||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay;for(var t in r)n[t]=r[t];e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n),n()},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.Image.fromObject(e,function(e){n[t]=e,i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):void(i[t]=!0)},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.toFixed,n=e.util.string.capitalize,s=e.util.degreesToRadians,o=e.StaticCanvas.supports("setLineDash");e.Object||(e.Object=e.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),initialize:function(t){t&&this.setOptions(t)},_initGradient:function(t){!t.fill||!t.fill.colorStops||t.fill instanceof e.Gradient||this.set("fill",new e.Gradient(t.fill)),!t.stroke||!t.stroke.colorStops||t.stroke instanceof e.Gradient||this.set("stroke",new e.Gradient(t.stroke))},_initPattern:function(t){!t.fill||!t.fill.source||t.fill instanceof e.Pattern||this.set("fill",new e.Pattern(t.fill)),!t.stroke||!t.stroke.source||t.stroke instanceof e.Pattern||this.set("stroke",new e.Pattern(t.stroke))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var i=e.util.getFunctionBody(t.clipTo);"undefined"!=typeof i&&(this.clipTo=new Function("ctx",i))}},setOptions:function(t){for(var e in t)this.set(e,t[e]);this._initGradient(t),this._initPattern(t),this._initClipping(t)},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),t.rotate(s(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),t.transform(1,0,Math.tan(s(this.skewX)),1,0,0),t.transform(1,Math.tan(s(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,n={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,i),top:r(this.top,i),width:r(this.width,i),height:r(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:r(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,i),scaleX:r(this.scaleX,i),scaleY:r(this.scaleY,i),angle:r(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():this.transformMatrix,skewX:r(this.skewX,i),skewY:r(this.skewY,i)};return this.includeDefaultValues||(n=this._removeDefaultValues(n)),e.util.populateWithProperties(this,n,t),n},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},get:function(t){return this[t]},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}},_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,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow||(i=new e.Shadow(i)),this[t]=i,"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(t,i){0===this.width&&0===this.height||!this.visible||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this._render(t,i),this.clipTo&&t.restore(),t.restore())},_renderBackground:function(t){this.backgroundColor&&(t.fillStyle=this.backgroundColor,t.fillRect(-this.width/2,-this.height/2,this.width,this.height),this._removeShadow(t))},_setOpacity:function(t){this.group&&this.group._setOpacity(t),t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),o?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),o=this.calcTransformMatrix();o=e.util.multiplyTransformMatrices(n,o),r=e.util.qrDecompose(o),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(s(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(s(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_renderFill:function(t){if(this.fill){if(t.save(),this.fill.gradientTransform){var e=this.fill.gradientTransform;t.transform.apply(t,e)}this.fill.toLive&&t.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore()}},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this.stroke.gradientTransform){var e=this.stroke.gradientTransform;t.transform.apply(t,e)}this.stroke.toLive&&t.translate(-this.width/2+this.stroke.offsetX||0,-this.height/2+this.stroke.offsetY||0),t.stroke(),t.restore()}},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 0},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};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),i.gradientTransform&&(r.gradientTransform=i.gradientTransform);for(var n in i.colorStops){var s=new e.Color(i.colorStops[n]);r.colorStops.push({offset:n,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,e.util.degreesToRadians(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,i){var r=t(this.oCoords),n=fabric.Intersection.intersectPolygonRectangle(r,e,i);return"Intersection"===n.status},intersectsWithObject:function(e){var i=fabric.Intersection.intersectPolygonPolygon(t(this.oCoords),t(e.oCoords));return"Intersection"===i.status||e.isContainedWithinObject(this)||this.isContainedWithinObject(e)},isContainedWithinObject:function(e){for(var i=t(this.oCoords),r=0;r<4;r++)if(!e.containsPoint(i[r]))return!1;return!0},isContainedWithinRect:function(t,e){var i=this.getBoundingRect();return i.left>=t.x&&i.left+i.width<=e.x&&i.top>=t.y&&i.top+i.height<=e.y},containsPoint:function(t){this.oCoords||this.setCoords();var e=this._getImageLines(this.oCoords),i=this._findCrossPoints(t,e);return 0!==i&&i%2===1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){return this.oCoords||this.setCoords(),fabric.util.makeBoundingBoxFromPoints([this.oCoords.tl,this.oCoords.tr,this.oCoords.br,this.oCoords.bl])},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(s/n):0,c=n/Math.cos(h)/2,l=Math.cos(h+t)*c,u=Math.sin(h+t)*c,f=fabric.util.transformPoint(this.getCenterPoint(),i),d=new fabric.Point(f.x-l,f.y-u),g=new fabric.Point(d.x+n*a,d.y+n*o),p=new fabric.Point(d.x-s*o,d.y+s*a),v=new fabric.Point(f.x+l,f.y+u),b=new fabric.Point((d.x+p.x)/2,(d.y+p.y)/2),m=new fabric.Point((g.x+d.x)/2,(g.y+d.y)/2),y=new fabric.Point((v.x+g.x)/2,(v.y+g.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point(m.x+o*this.rotatingPointOffset,m.y-a*this.rotatingPointOffset);return this.oCoords={tl:d,tr:g,br:v,bl:p,ml:b,mt:m,mr:y,mb:_,mtr:x},this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return[1,0,0,1,0,0]},calcTransformMatrix:function(){var t=this.getCenterPoint(),e=[1,0,0,1,t.x,t.y],r=this._calcRotateMatrix(),n=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),s=this.group?this.group.calcTransformMatrix():[1,0,0,1,0,0]; -return s=i(s,e),s=i(s,r),s=i(s,n)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas.moveTo(this,t),this}}),function(){function t(t,e){if(e){if(e.toLive)return t+": url(#SVGID_"+e.id+"); ";var i=new fabric.Color(e),r=t+": "+i.toRgb()+"; ",n=i.getAlpha();return 1!==n&&(r+=t+"-opacity: "+n.toString()+"; "),r}return t+": none; "}fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(e){var i=this.fillRule,r=this.strokeWidth?this.strokeWidth:"0",n=this.strokeDashArray?this.strokeDashArray.join(" "):"none",s=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",a=this.strokeMiterLimit?this.strokeMiterLimit:"4",h="undefined"!=typeof this.opacity?this.opacity:"1",c=this.visible?"":" visibility: hidden;",l=e?"":this.getSvgFilter(),u=t("fill",this.fill),f=t("stroke",this.stroke);return[f,"stroke-width: ",r,"; ","stroke-dasharray: ",n,"; ","stroke-linecap: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",a,"; ",u,"fill-rule: ",i,"; ","opacity: ",h,";",l,c].join("")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgId:function(){return this.id?'id="'+this.id+'" ':""},getSvgTransform:function(){if(this.group&&"path-group"===this.group.type)return"";var t=fabric.util.toFixed,e=this.getAngle(),i=this.getSkewX()%360,r=this.getSkewY()%360,n=this.getCenterPoint(),s=fabric.Object.NUM_FRACTION_DIGITS,o="path-group"===this.type?"":"translate("+t(n.x,s)+" "+t(n.y,s)+")",a=0!==e?" rotate("+t(e,s)+")":"",h=1===this.scaleX&&1===this.scaleY?"":" scale("+t(this.scaleX,s)+" "+t(this.scaleY,s)+")",c=0!==i?" skewX("+t(i,s)+")":"",l=0!==r?" skewY("+t(r,s)+")":"",u="path-group"===this.type?this.width:0,f=this.flipX?" matrix(-1 0 0 1 "+u+" 0) ":"",d="path-group"===this.type?this.height:0,g=this.flipY?" matrix(1 0 0 -1 0 "+d+")":"";return[o,a,h,f,g,c,l].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.join(" ")+") ":""},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t}})}(),function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i){if(t instanceof Array){if(t.length!==i.length)return!1;var r=i.concat().sort(),n=t.concat().sort();return!n.some(function(t,i){return!e(r[i],t)})}if(t instanceof Object){for(var s in t)if(!e(t[s],i[s]))return!1;return!0}return t===i}var i=fabric.util.object.extend;fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return!e(this.originalState,this)},saveState:function(e){return t(this,"originalState",this.stateProperties),e&&e.stateProperties&&t(this,"originalState",e.stateProperties),this},setupState:function(t){return this.originalState={},this.saveState(t),this}})}(),function(){var t=fabric.util.degreesToRadians,e=function(){return"undefined"!=typeof G_vmlCanvasManager};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t){if(!this.hasControls||!this.active)return!1;var e,i,r=t.x,n=t.y;this.__corner=0;for(var s in this.oCoords)if(this.isControlVisible(s)&&("mtr"!==s||this.hasRotatingPoint)&&(!this.get("lockUniScaling")||"mt"!==s&&"mr"!==s&&"mb"!==s&&"ml"!==s)&&(i=this._getImageLines(this.oCoords[s].corner),e=this._findCrossPoints({x:r,y:n},i),0!==e&&e%2===1))return this.__corner=s,s;return!1},_setCornerCoords:function(){var e,i,r=this.oCoords,n=t(45-this.angle),s=.707106*this.cornerSize,o=s*Math.cos(n),a=s*Math.sin(n);for(var h in r)e=r[h].x,i=r[h].y,r[h].corner={tl:{x:e-a,y:i-o},tr:{x:e+o,y:i-a},bl:{x:e-o,y:i+a},br:{x:e+a,y:i+o}}},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width,i=this.height,r=!0,n=!0;return"line"===this.type&&"butt"===this.strokeLineCap&&(n=e,r=i),n&&(i+=i<0?-t:t),r&&(e+=e<0?-t:t),{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return new i.Line(s,r(n,e))},void(i.Line.fromObject=function(t,e){var r=[t.x1,t.y1,t.x2,t.y2],n=new i.Line(r,t);return e&&e(n),n}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;return i.Circle?void i.warn("fabric.Circle is already defined."):(i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("radius",t.radius||0),this.startAngle=t.startAngle||this.startAngle,this.endAngle=t.endAngle||this.endAngle},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return n(this.callSuper("toObject",t),{radius:this.get("radius"),startAngle:this.startAngle,endAngle:this.endAngle})},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)},complexity:function(){return 1}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},void(i.Circle.fromObject=function(t,e){var r=new i.Circle(t);return e&&e(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("width",t.width||100).set("height",t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),void(e.Triangle.fromObject=function(t,i){var r=new e.Triangle(t);return i&&i(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;return e.Ellipse?void e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("rx",t.rx||0),this.set("ry",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 r(this.callSuper("toObject",t),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)},complexity:function(){return 1}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},void(e.Ellipse.fromObject=function(t,i){var r=new e.Ellipse(t);return i&&i(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(t){t=t||{},this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){var e=i(this.callSuper("toObject",t),{rx:this.get("rx")||0,ry:this.get("ry")||0});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i){var r=new e.Rect(t);return i&&i(r),r}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Polyline?void e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,initialize:function(t,i){return e.Polygon.prototype.initialize.call(this,t,i)},_calcDimensions:function(){return e.Polygon.prototype._calcDimensions.call(this)},toObject:function(t){return e.Polygon.prototype.toObject.call(this,t)},toSVG:function(t){return e.Polygon.prototype.toSVG.call(this,t)},_render:function(t,i){e.Polygon.prototype.commonRender.call(this,t,i)&&(this._renderFill(t),this._renderStroke(t))},_renderDashedStroke:function(t){var i,r;t.beginPath();for(var n=0,s=this.points.length;n\n'),t?t(r.join("")):r.join("")},_render:function(t,e){this.commonRender(t,e)&&(this._renderFill(t),(this.stroke||this.strokeDashArray)&&(t.closePath(),this._renderStroke(t)))},commonRender:function(t,e){var i,r=this.points.length;if(!r||isNaN(this.points[r-1].y))return!1;e||t.translate(-this.pathOffset.x,-this.pathOffset.y),t.beginPath(),t.moveTo(this.points[0].x,this.points[0].y);for(var n=0;n"},toObject:function(t){var e=n(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(e.sourcePath=this.sourcePath),this.transformMatrix&&(e.transformMatrix=this.transformMatrix),e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){"string"==typeof t.paths?e.loadSVGFromURL(t.paths,function(r){var n=t.paths;delete t.paths;var s=e.util.groupSVGElements(r,t,n);i(s)}):e.util.enlivenObjects(t.paths,function(r){delete t.paths,i(new e.PathGroup(r,t))})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.array.invoke;if(!e.Group){var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this._objects.length;e--;)this._updateObjectCoords(this._objects[e],t)},_updateObjectCoords:function(t,e){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!e){var i=t.getLeft(),r=t.getTop(),n=this.getCenterPoint();t.set({originalLeft:i,originalTop:r,left:i-n.x,top:r-n.y}),t.setCoords()}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(t){t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){return i(this.callSuper("toObject",t),{objects:s(this._objects,"toObject",t)})},render:function(t){if(this.visible){t.save(),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.transform(t),this._setShadow(t),this.clipTo&&e.util.clipContext(this,t),this._transformDone=!0;for(var i=0,r=this._objects.length;i\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in o){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[C*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=function(t){return new e.Image.filters.Convolute(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,j,A,M,P,D,E;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;h=e)){D=r(1e3*s(c-T.x)),O[D]||(O[D]={});for(var L=k.y-w;L<=k.y+w;L++)L<0||L>=o||(E=r(1e3*s(L-T.y)),O[D][E]||(O[D][E]=m(n(i(D*x,2)+i(E*S,2))/1e3)),u=O[D][E],u>0&&(d=4*(L*e+c),g+=u,j+=u*v[d],A+=u*v[d+1],M+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=j/g,b[d+1]=A/g,b[d+2]=M/g,b[d+3]=P/g}return++t1&&I<-1||(x=2*I*I*I-3*I*I+1,x>0&&(L=4*(E+A*e),k+=x*p[L+3],C+=x,p[L+3]<255&&(x=x*p[L+3]/250),w+=x*p[L],O+=x*p[L+1],T+=x*p[L+2],S+=x))}b[_]=w/S,b[_+1]=O/S,b[_+2]=T/S,b[_+3]=k/C}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=function(t){return new e.Image.filters.Resize(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_render:function(t){this.clipTo&&e.util.clipContext(this,t),this._setOpacity(t),this._setShadow(t),this._setupCompositeOperation(t),this._renderTextBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._renderText(t),this._renderTextDecoration(t),this.clipTo&&t.restore()},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_getNonTransformedDimensions:function(){return{x:this.width,y:this.height}},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearCache:function(){var t=!1;if(this._forceClearCache)return this._forceClearCache=!1,!0;for(var e in this._dimensionAffectingProps)this["__"+e]!==this[e]&&(this["__"+e]=this[e],t=!0);return t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(t.save(),this._setTextStyles(t),this._shouldClearCache()&&this._initDimensions(t),this.drawSelectionBackground(t),e||this.transform(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._render(t),t.restore())},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=i(this.callSuper("toObject",t),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,textBackgroundColor:this.textBackgroundColor,charSpacing:this.charSpacing});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,i,r,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,i,r,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),t in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,i){var n=new e.Text(t.text,r(t));return i&&i(n),n},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(e,r)):t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);for(var e,i,r,n,s,o,a=0,h=this._getLeftOffset(),c=this._getTopOffset(),l=0,u=this._textLines.length;l0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(this.ctx,r)):e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(s[parseInt(o,10)-i]=this.styles[e][o],delete this.styles[e][o]);this.styles[e+1]=s}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}this.styles[e][i]=r||t(n[i-1]),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this._fireSelectionChanged(),this._updateTextarea()},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.clone;e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,initialize:function(t,i){this.ctx=e.util.createCanvasElement().getContext("2d"),this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this._dimensionAffectingProps.width=!0},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t)),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(){var t=this.textAlign;this.ctx.save(),this._setTextStyles(this.ctx),this.textAlign="left";var e=this._wrapText(this.ctx,this.text);return this.textAlign=t,this.ctx.restore(),this._textLines=e,this._styleMap=this._generateStyleMap(),e},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())};var e=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,i){var r=e(this.styles),n=this._styleMap[t];t=n.line;for(var s in this.styles){var o=parseInt(s,10);o>t&&(this.styles[o+i]=r[o],r[o-i]||delete this.styles[o])}},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file +var fabric=fabric||{version:"1.6.6"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(""),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?I-=2*f:1===c&&I<0&&(I+=2*f);for(var D=Math.ceil(Math.abs(I/f*2)),E=[],L=I/D,R=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),F=P+L,B=0;B=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,S=Math.abs,C=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),S(u)<1e-12){if(S(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){var e=this.constructor.superclass.prototype[t];return arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return y;if((f||d)&&(_=" translate("+x(f)+" "+x(d)+") "),r=_+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),y}function g(t){var e=t.objects,i=t.options;return e=e.map(function(t){return v[m(t.type)].fromObject(t)}),{objects:e,options:i}}function p(t,e,i){e[i]&&e[i].toSVG&&t.push('\t\n','\t\t\n\t\n')}var v=t.fabric||(t.fabric={}),b=v.util.object.extend,m=v.util.string.capitalize,y=v.util.object.clone,_=v.util.toFixed,x=v.util.parseUnit,S=v.util.multiplyTransformMatrices,C=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,w=/^(symbol|image|marker|pattern|view|svg)$/i,O=/^(?:pattern|defs|symbol|metadata)$/i,T=/^(symbol|g|a|svg)$/i,k={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},j={stroke:"strokeOpacity",fill:"fillOpacity"};v.cssRules={},v.gradientDefs={},v.parseTransformAttribute=function(){function t(t,e){var i=e[0],r=3===e.length?e[1]:0,n=3===e.length?e[2]:0;t[0]=Math.cos(i),t[1]=Math.sin(i),t[2]=-Math.sin(i),t[3]=Math.cos(i),t[4]=r-(t[0]*r+t[2]*n),t[5]=n-(t[1]*r+t[3]*n)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e){t[2]=Math.tan(v.util.degreesToRadians(e[0])); +}function r(t,e){t[1]=Math.tan(v.util.degreesToRadians(e[0]))}function n(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var s=[1,0,0,1,0,0],o=v.reNum,a="(?:\\s+,?\\s*|,\\s*)",h="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",c="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+")"+a+"("+o+"))?\\s*\\))",u="(?:(scale)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",f="(?:(translate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")\\s*\\))",g="(?:"+d+"|"+f+"|"+u+"|"+l+"|"+h+"|"+c+")",p="(?:"+g+"(?:"+a+"*"+g+")*)",b="^\\s*(?:"+p+"?)\\s*$",m=new RegExp(b),y=new RegExp(g,"g");return function(o){var a=s.concat(),h=[];if(!o||o&&!m.test(o))return a;o.replace(y,function(o){var c=new RegExp(g).exec(o).filter(function(t){return!!t}),l=c[1],u=c.slice(2).map(parseFloat);switch(l){case"translate":n(a,u);break;case"rotate":u[0]=v.util.degreesToRadians(u[0]),t(a,u);break;case"scale":e(a,u);break;case"skewX":i(a,u);break;case"skewY":r(a,u);break;case"matrix":a=u}h.push(a.concat()),a=s.concat()});for(var c=h[0];h.length>1;)h.shift(),c=v.util.multiplyTransformMatrices(c,h[0]);return c}}();var M=new RegExp("^\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*$");v.parseSVGDocument=function(){function t(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}return function(e,i,r){if(e){f(e);var n=new Date,s=v.Object.__uid++,o=d(e),a=v.util.toArray(e.getElementsByTagName("*"));if(o.svgUid=s,0===a.length&&v.isLikelyNode){a=e.selectNodes('//*[name(.)!="svg"]');for(var h=[],c=0,l=a.length;c/i,""))),n&&n.documentElement||e&&e(null),v.parseSVGDocument(n.documentElement,function(i,r){A.set(t,{objects:v.util.array.invoke(i,"toObject"),options:r}),e&&e(i,r)},i)}t=t.replace(/^\n\s*/,"").trim(),A.has(t,function(i){i?A.get(t,function(t){var i=g(t);e(i.objects,i.options)}):new v.util.request(t,{method:"get",onComplete:r})})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else v.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));v.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)},createSVGFontFacesMarkup:function(t){for(var e,i,r,n,s,o,a,h="",c={},l=v.fontPaths,u=0,f=t.length;u',"","\n"].join("")),h},createSVGRefElementsMarkup:function(t){var e=[];return p(e,t,"backgroundColor"),p(e,t,"overlayColor"),e.join("")}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}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:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(){return{type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform}},toSVG:function(t){var e,i,r=fabric.util.object.clone(this.coords);if(this.colorStops.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var n in r)"x1"===n||"x2"===n||"r2"===n?r[n]+=this.offsetX-t.width/2:"y1"!==n&&"y2"!==n||(r[n]+=this.offsetY-t.height/2);i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']);for(var s=0;s\n');return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:"y1"!==r&&"y2"!==r||(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;s\n\n\n'},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){if(e&&e.source){var r=this;fabric.util.loadImage(e.source,function(n){r[t]=new fabric.Pattern({source:n,repeat:e.repeat,offsetX:e.offsetX,offsetY:e.offsetY}),i&&i()})}else this[t]=e,i&&i();return this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw n;if("undefined"==typeof e.getContext)throw n;return e},_initOptions:function(t){for(var e in t)this[e]=t[e];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(t),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return Math.sqrt(this.viewportTransform[0]*this.viewportTransform[3])},setViewportTransform:function(t){var e,i=this._activeGroup;this.viewportTransform=t;for(var r=0,n=this._objects.length;r"),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","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"\n")},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop;t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur,t.shadowOffsetX=this.shadow.offsetX,t.shadowOffsetY=this.shadow.offsetY}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&ci.padding?t.x<0?t.x+=i.padding:t.x-=i.padding:t.x=0,n(t.y)>i.padding?t.y<0?t.y+=i.padding:t.y-=i.padding: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);return a<0&&(a=360+a),n.target.angle=a%360,!0},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.setAngle(0)},_drawSelection:function(t){var e=this._groupSelector,i=e.left,r=e.top,a=n(i),h=n(r);if(this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(e.ex-(i>0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&this._checkTarget(n,s))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&this._checkTarget(n,o)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout")),this.fire("mouse:over",{target:t,e:e}),t.fire("mouseover"),this._hoveredTarget=t):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){return this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e&&e.fire("deselected",{e:t}),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t}),this},deactivateAll:function(){for(var t=this.getObjects(),e=0,i=t.length;e1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this.fire("mouse:wheel",{e:t})},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor;if(e.selectable){var r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this._setCornerCursor(n,e,t):this.setCursor(i)}else this.setCursor(i);return!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay;for(var t in r)n[t]=r[t];e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n),n()},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.Image.fromObject(e,function(e){n[t]=e,i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):void(i[t]=!0)},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.toFixed,n=e.util.string.capitalize,s=e.util.degreesToRadians,o=e.StaticCanvas.supports("setLineDash");e.Object||(e.Object=e.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),initialize:function(t){t&&this.setOptions(t)},_initGradient:function(t){!t.fill||!t.fill.colorStops||t.fill instanceof e.Gradient||this.set("fill",new e.Gradient(t.fill)),!t.stroke||!t.stroke.colorStops||t.stroke instanceof e.Gradient||this.set("stroke",new e.Gradient(t.stroke))},_initPattern:function(t){!t.fill||!t.fill.source||t.fill instanceof e.Pattern||this.set("fill",new e.Pattern(t.fill)),!t.stroke||!t.stroke.source||t.stroke instanceof e.Pattern||this.set("stroke",new e.Pattern(t.stroke))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var i=e.util.getFunctionBody(t.clipTo);"undefined"!=typeof i&&(this.clipTo=new Function("ctx",i))}},setOptions:function(t){for(var e in t)this.set(e,t[e]);this._initGradient(t),this._initPattern(t),this._initClipping(t)},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),t.rotate(s(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),t.transform(1,0,Math.tan(s(this.skewX)),1,0,0),t.transform(1,Math.tan(s(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,n={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,i),top:r(this.top,i),width:r(this.width,i),height:r(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:r(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,i),scaleX:r(this.scaleX,i),scaleY:r(this.scaleY,i),angle:r(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():this.transformMatrix,skewX:r(this.skewX,i),skewY:r(this.skewY,i)};return this.includeDefaultValues||(n=this._removeDefaultValues(n)),e.util.populateWithProperties(this,n,t),n},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},get:function(t){return this[t]},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}},_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,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow||(i=new e.Shadow(i)),this[t]=i,"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(t,i){0===this.width&&0===this.height||!this.visible||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this._render(t,i),this.clipTo&&t.restore(),t.restore())},_renderBackground:function(t){this.backgroundColor&&(t.fillStyle=this.backgroundColor,t.fillRect(-this.width/2,-this.height/2,this.width,this.height),this._removeShadow(t))},_setOpacity:function(t){this.group&&this.group._setOpacity(t),t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),o?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),o=this.calcTransformMatrix();o=e.util.multiplyTransformMatrices(n,o),r=e.util.qrDecompose(o),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(s(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(s(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_renderFill:function(t){if(this.fill){if(t.save(),this.fill.gradientTransform){var e=this.fill.gradientTransform;t.transform.apply(t,e)}this.fill.toLive&&t.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore()}},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this.stroke.gradientTransform){var e=this.stroke.gradientTransform;t.transform.apply(t,e)}this.stroke.toLive&&t.translate(-this.width/2+this.stroke.offsetX||0,-this.height/2+this.stroke.offsetY||0),t.stroke(),t.restore()}},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 0},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};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),i.gradientTransform&&(r.gradientTransform=i.gradientTransform);for(var n in i.colorStops){var s=new e.Color(i.colorStops[n]);r.colorStops.push({offset:n,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,e.util.degreesToRadians(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,i){var r=t(this.oCoords),n=fabric.Intersection.intersectPolygonRectangle(r,e,i);return"Intersection"===n.status},intersectsWithObject:function(e){var i=fabric.Intersection.intersectPolygonPolygon(t(this.oCoords),t(e.oCoords));return"Intersection"===i.status||e.isContainedWithinObject(this)||this.isContainedWithinObject(e)},isContainedWithinObject:function(e){for(var i=t(this.oCoords),r=0;r<4;r++)if(!e.containsPoint(i[r]))return!1;return!0},isContainedWithinRect:function(t,e){var i=this.getBoundingRect();return i.left>=t.x&&i.left+i.width<=e.x&&i.top>=t.y&&i.top+i.height<=e.y},containsPoint:function(t){this.oCoords||this.setCoords();var e=this._getImageLines(this.oCoords),i=this._findCrossPoints(t,e);return 0!==i&&i%2===1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){return this.oCoords||this.setCoords(),fabric.util.makeBoundingBoxFromPoints([this.oCoords.tl,this.oCoords.tr,this.oCoords.br,this.oCoords.bl])},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(s/n):0,c=n/Math.cos(h)/2,l=Math.cos(h+t)*c,u=Math.sin(h+t)*c,f=fabric.util.transformPoint(this.getCenterPoint(),i),d=new fabric.Point(f.x-l,f.y-u),g=new fabric.Point(d.x+n*a,d.y+n*o),p=new fabric.Point(d.x-s*o,d.y+s*a),v=new fabric.Point(f.x+l,f.y+u),b=new fabric.Point((d.x+p.x)/2,(d.y+p.y)/2),m=new fabric.Point((g.x+d.x)/2,(g.y+d.y)/2),y=new fabric.Point((v.x+g.x)/2,(v.y+g.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point(m.x+o*this.rotatingPointOffset,m.y-a*this.rotatingPointOffset);return this.oCoords={tl:d,tr:g,br:v,bl:p,ml:b,mt:m,mr:y,mb:_,mtr:x},this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){ +if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return[1,0,0,1,0,0]},calcTransformMatrix:function(){var t=this.getCenterPoint(),e=[1,0,0,1,t.x,t.y],r=this._calcRotateMatrix(),n=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),s=this.group?this.group.calcTransformMatrix():[1,0,0,1,0,0];return s=i(s,e),s=i(s,r),s=i(s,n)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas.moveTo(this,t),this}}),function(){function t(t,e){if(e){if(e.toLive)return t+": url(#SVGID_"+e.id+"); ";var i=new fabric.Color(e),r=t+": "+i.toRgb()+"; ",n=i.getAlpha();return 1!==n&&(r+=t+"-opacity: "+n.toString()+"; "),r}return t+": none; "}fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(e){var i=this.fillRule,r=this.strokeWidth?this.strokeWidth:"0",n=this.strokeDashArray?this.strokeDashArray.join(" "):"none",s=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",a=this.strokeMiterLimit?this.strokeMiterLimit:"4",h="undefined"!=typeof this.opacity?this.opacity:"1",c=this.visible?"":" visibility: hidden;",l=e?"":this.getSvgFilter(),u=t("fill",this.fill),f=t("stroke",this.stroke);return[f,"stroke-width: ",r,"; ","stroke-dasharray: ",n,"; ","stroke-linecap: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",a,"; ",u,"fill-rule: ",i,"; ","opacity: ",h,";",l,c].join("")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgId:function(){return this.id?'id="'+this.id+'" ':""},getSvgTransform:function(){if(this.group&&"path-group"===this.group.type)return"";var t=fabric.util.toFixed,e=this.getAngle(),i=this.getSkewX()%360,r=this.getSkewY()%360,n=this.getCenterPoint(),s=fabric.Object.NUM_FRACTION_DIGITS,o="path-group"===this.type?"":"translate("+t(n.x,s)+" "+t(n.y,s)+")",a=0!==e?" rotate("+t(e,s)+")":"",h=1===this.scaleX&&1===this.scaleY?"":" scale("+t(this.scaleX,s)+" "+t(this.scaleY,s)+")",c=0!==i?" skewX("+t(i,s)+")":"",l=0!==r?" skewY("+t(r,s)+")":"",u="path-group"===this.type?this.width:0,f=this.flipX?" matrix(-1 0 0 1 "+u+" 0) ":"",d="path-group"===this.type?this.height:0,g=this.flipY?" matrix(1 0 0 -1 0 "+d+")":"";return[o,a,h,f,g,c,l].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.join(" ")+") ":""},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t}})}(),function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i){if(!fabric.isLikelyNode&&t instanceof Element)return t===i;if(t instanceof Array){if(t.length!==i.length)return!1;var r=i.concat().sort(),n=t.concat().sort();return!n.some(function(t,i){return!e(r[i],t)})}if(t instanceof Object){for(var s in t)if(!e(t[s],i[s]))return!1;return!0}return t===i}var i=fabric.util.object.extend;fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return!e(this.originalState,this)},saveState:function(e){return t(this,"originalState",this.stateProperties),e&&e.stateProperties&&t(this,"originalState",e.stateProperties),this},setupState:function(t){return this.originalState={},this.saveState(t),this}})}(),function(){var t=fabric.util.degreesToRadians,e=function(){return"undefined"!=typeof G_vmlCanvasManager};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t){if(!this.hasControls||!this.active)return!1;var e,i,r=t.x,n=t.y;this.__corner=0;for(var s in this.oCoords)if(this.isControlVisible(s)&&("mtr"!==s||this.hasRotatingPoint)&&(!this.get("lockUniScaling")||"mt"!==s&&"mr"!==s&&"mb"!==s&&"ml"!==s)&&(i=this._getImageLines(this.oCoords[s].corner),e=this._findCrossPoints({x:r,y:n},i),0!==e&&e%2===1))return this.__corner=s,s;return!1},_setCornerCoords:function(){var e,i,r=this.oCoords,n=t(45-this.angle),s=.707106*this.cornerSize,o=s*Math.cos(n),a=s*Math.sin(n);for(var h in r)e=r[h].x,i=r[h].y,r[h].corner={tl:{x:e-a,y:i-o},tr:{x:e+o,y:i-a},bl:{x:e-o,y:i+a},br:{x:e+a,y:i+o}}},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width,i=this.height,r=!0,n=!0;return"line"===this.type&&"butt"===this.strokeLineCap&&(n=e,r=i),n&&(i+=i<0?-t:t),r&&(e+=e<0?-t:t),{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return new i.Line(s,r(n,e))},void(i.Line.fromObject=function(t,e){var r=[t.x1,t.y1,t.x2,t.y2],n=new i.Line(r,t);return e&&e(n),n}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;return i.Circle?void i.warn("fabric.Circle is already defined."):(i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("radius",t.radius||0),this.startAngle=t.startAngle||this.startAngle,this.endAngle=t.endAngle||this.endAngle},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return n(this.callSuper("toObject",t),{radius:this.get("radius"),startAngle:this.startAngle,endAngle:this.endAngle})},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)},complexity:function(){return 1}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},void(i.Circle.fromObject=function(t,e){var r=new i.Circle(t);return e&&e(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("width",t.width||100).set("height",t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),void(e.Triangle.fromObject=function(t,i){var r=new e.Triangle(t);return i&&i(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;return e.Ellipse?void e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,initialize:function(t){t=t||{},this.callSuper("initialize",t),this.set("rx",t.rx||0),this.set("ry",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 r(this.callSuper("toObject",t),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)},complexity:function(){return 1}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},void(e.Ellipse.fromObject=function(t,i){var r=new e.Ellipse(t);return i&&i(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(t){t=t||{},this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){var e=i(this.callSuper("toObject",t),{rx:this.get("rx")||0,ry:this.get("ry")||0});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i){var r=new e.Rect(t);return i&&i(r),r}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Polyline?void e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,initialize:function(t,i){return e.Polygon.prototype.initialize.call(this,t,i)},_calcDimensions:function(){return e.Polygon.prototype._calcDimensions.call(this)},toObject:function(t){return e.Polygon.prototype.toObject.call(this,t)},toSVG:function(t){return e.Polygon.prototype.toSVG.call(this,t)},_render:function(t,i){e.Polygon.prototype.commonRender.call(this,t,i)&&(this._renderFill(t),this._renderStroke(t))},_renderDashedStroke:function(t){var i,r;t.beginPath();for(var n=0,s=this.points.length;n\n'),t?t(r.join("")):r.join("")},_render:function(t,e){this.commonRender(t,e)&&(this._renderFill(t),(this.stroke||this.strokeDashArray)&&(t.closePath(),this._renderStroke(t)))},commonRender:function(t,e){var i,r=this.points.length;if(!r||isNaN(this.points[r-1].y))return!1;e||t.translate(-this.pathOffset.x,-this.pathOffset.y),t.beginPath(),t.moveTo(this.points[0].x,this.points[0].y);for(var n=0;n"},toObject:function(t){var e=n(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(e.sourcePath=this.sourcePath),this.transformMatrix&&(e.transformMatrix=this.transformMatrix),e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){"string"==typeof t.paths?e.loadSVGFromURL(t.paths,function(r){var n=t.paths;delete t.paths;var s=e.util.groupSVGElements(r,t,n);i(s)}):e.util.enlivenObjects(t.paths,function(r){delete t.paths,i(new e.PathGroup(r,t))})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.array.invoke;if(!e.Group){var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this._objects.length;e--;)this._updateObjectCoords(this._objects[e],t)},_updateObjectCoords:function(t,e){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!e){var i=t.getLeft(),r=t.getTop(),n=this.getCenterPoint();t.set({originalLeft:i,originalTop:r,left:i-n.x,top:r-n.y}),t.setCoords()}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(t){t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){return i(this.callSuper("toObject",t),{objects:s(this._objects,"toObject",t)})},render:function(t){if(this.visible){t.save(),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.transform(t),this._setShadow(t),this.clipTo&&e.util.clipContext(this,t),this._transformDone=!0;for(var i=0,r=this._objects.length;i\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in o){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[C*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=function(t){return new e.Image.filters.Convolute(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,j,M,A,P,I,D;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;h=e)){I=r(1e3*s(c-T.x)),O[I]||(O[I]={});for(var E=k.y-w;E<=k.y+w;E++)E<0||E>=o||(D=r(1e3*s(E-T.y)),O[I][D]||(O[I][D]=m(n(i(I*x,2)+i(D*S,2))/1e3)),u=O[I][D],u>0&&(d=4*(E*e+c),g+=u,j+=u*v[d],M+=u*v[d+1],A+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=j/g,b[d+1]=M/g,b[d+2]=A/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(E=4*(D+M*e),k+=x*p[E+3],C+=x,p[E+3]<255&&(x=x*p[E+3]/250),w+=x*p[E],O+=x*p[E+1],T+=x*p[E+2],S+=x))}b[_]=w/S,b[_+1]=O/S,b[_+2]=T/S,b[_+3]=k/C}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=function(t){return new e.Image.filters.Resize(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_render:function(t){this.clipTo&&e.util.clipContext(this,t),this._setOpacity(t),this._setShadow(t),this._setupCompositeOperation(t),this._renderTextBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._renderText(t),this._renderTextDecoration(t),this.clipTo&&t.restore()},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_getNonTransformedDimensions:function(){return{x:this.width,y:this.height}},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearCache:function(){var t=!1;if(this._forceClearCache)return this._forceClearCache=!1,!0;for(var e in this._dimensionAffectingProps)this["__"+e]!==this[e]&&(this["__"+e]=this[e],t=!0);return t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(t.save(),this._setTextStyles(t),this._shouldClearCache()&&this._initDimensions(t),this.drawSelectionBackground(t),e||this.transform(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._render(t),t.restore())},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=i(this.callSuper("toObject",t),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,textBackgroundColor:this.textBackgroundColor,charSpacing:this.charSpacing});return this.includeDefaultValues||this._removeDefaultValues(e),e},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,i,r,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,i,r,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),t in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,i){var n=new e.Text(t.text,r(t));return i&&i(n),n},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(e,r)):t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);for(var e,i,r,n,s,o,a=0,h=this._getLeftOffset(),c=this._getTopOffset(),l=0,u=this._textLines.length;l0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(this.ctx,r)):e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor +}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(s[parseInt(o,10)-i]=this.styles[e][o],delete this.styles[e][o]);this.styles[e+1]=s}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}this.styles[e][i]=r||t(n[i-1]),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this._fireSelectionChanged(),this._updateTextarea()},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.clone;e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,initialize:function(t,i){this.ctx=e.util.createCanvasElement().getContext("2d"),this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this._dimensionAffectingProps.width=!0},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t)),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(){var t=this.textAlign;this.ctx.save(),this._setTextStyles(this.ctx),this.textAlign="left";var e=this._wrapText(this.ctx,this.text);return this.textAlign=t,this.ctx.restore(),this._textLines=e,this._styleMap=this._generateStyleMap(),e},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())};var e=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,i){var r=e(this.styles),n=this._styleMap[t];t=n.line;for(var s in this.styles){var o=parseInt(s,10);o>t&&(this.styles[o+i]=r[o],r[o-i]||delete this.styles[o])}},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index af922952fb674601cabdef5a0c2f9fadb2e70efa..1702e9e6b3f73b4180aecc0a7046c448c58e95da 100644 GIT binary patch delta 66325 zcmV(yKU#6(2YfsGv~bfdy}z<-nZ)N>grmq!gOyQo~O|?5I@`P?G;b6D2aV%(0$f@ z=In;fI-c=)6!V$0ALN@APv(34W|gFQc5vXzudY>%$Lb2rlIi-A$N9lQUFvld&wrBZ zkt=HGs?34DP6R_FsKCKK=ah_1+@C zTs}XNe|b22e$*2`=gDjX0r^829FLV6=uT4}=KNPN2D_(sWpzFO?#!z&g&&bww;E-q z$$GjtS+8*J`7CgfILDYQ57XR<;(xtzHR|K_lACiGW$&V|e7X54nem`*QC_a+bDmlY z7T61>syg}c#i!S=&R(3JetP@z=hN3G!PuEa*=iYX9OmR{7-#b&y@c<1v|P%cPO=K8 zQNB^ZbiL&8UBqU2ntbK@qcaP$MVO{xk=9v4ucqP3j`$;q;v(iU%6Yns;D4uxE4R_P zj%N7+g3-*Gs6oB@_%`_dnF^)+r}bsvxFdhuX-`J*`{m25y@fxmFJHR&?Li!;L<)^O zN0pt!3VjUoMHbxdRNNGX@+-EQ9f#8eH&SN&Dw^_-(G6dI3iBulEFh^QZ?|^(H9!9v z<*)9^b(#FDnq|P|>v#&Ev488`s?WXL%^CM@qq&z0u&U43Dcbl`YaA2Ih0{~6c5vO z+l!!E2M74q>=c}GJAbQNwTl@cFaqLm^^VBBTUBU30QlXB)!xCV1R#Gn&v<$jo-biD zC-lvI&aymNiIgb5@FO;dlgLjQoUxoG^Et%iX>@VHQ$OA9T#eeU{gbQ8r%cy~_LWzNVCHu7aLCn7T?=Sp>ks1c+AVRe@?A zaE%^|`AiX`0DrJ`20&{;HLx^lm^mAi2PwK;8K#W3tG#!fqQ>FFU|++DB`UYptC)zW zW*QncsYDpC*w8P)B_))>iaPx2R;;5;@{tAjzP&%nyPE4=&AV6upvHXX0YK*bvZlek z%D4dNA$Rura+PmPn2`AqZCA?3IoPo*`WLS$)LdW+lz&7Bo8>`W(-4(=&pQJwe7Rck zo2a&<)zT@StpU>P6;`?10I)@UBQpSGZGXr5aE3Fpmk1X;cn@SyH~TZqVO!95n1}Hp z00#wDKvKps{ybxu`26^`H~6kUH0XukR&2sIX>$1jNrw^~N*FXK4vjG6cFNU8ifAJd zoP7#`G=I8$8<(M47Nx$-mkGc)eWsM%^;$0P8HsnQKB|u4>Kk?+!#IrOW!NHL5O%3TkIstZIbYNq;TnG{Lg4ntAu8m3H#(rWL`0Vkl~3 zD3!gqz42qV@!=q4`l3)jT8;B7{pLWTw4mxXA0Oh!21t^Dig`>io_~KS_;@m@7KM+e z6PSj}@GF0r0Lp=r{AF^3z(*C?YbW4*oI~X>n>kcQKZoMyG5kyb_N&D2rJBB)r0_<} zrGMHPZq!LVm`%~jMzpdKt!zXqn+Z!AS^*LuY-k0N7DX#bCseROLs*Fx7MPUg z#D)?V;3vmr+rZCL#KmmCUu<_s2|5VY5q~7&*M>y^XvrJ6_RQ+{Io!H4{$`nkxeHgm zb2u$>uPaNyG5{b@j-TVGj3~rr=zV#0+h>QnzxTTQhEI{gNCTtN+#6=sQ9gzH09+@y z8rvzq$-A#!zj^WVyVJ9iUw$}y^Wi7>c>BL!!xSM2eme~_?p$6vzU*k)DsHO1!+)pU zCqv3HZOYMoDs#Z~xGslCT;=t}|9L3Wr%matfy~0q9`GR?(cyZT>nJ=J0JZQpa`LLD z5m48NkpFWTW?B6rQO znS~>HmMpLMPf$a)3XzT!Cwn>GH-9MypuYFHCwnAnBlH`=f(uG5cb%?-J2#a_IHJJP zU3`dCQxx=v5s*afcI0IN&}eWMohT@VQve`m_VzNo;3cfcQqhfEb>k|D07?%IxS*?G z$9m#Sh^-kDd?>0BsOcCkz}P}ytb|!dj6=|w@Pnsmk_Pd5x!kcLY|_M{v43T9;X1D| zaSzMFD(yM#xSOR@k6A51O}KIIYNropcX6gWGawxt@8BQ>;y8u@C0X_Xu2K<9HdKR6 z04c|Kyo}&>SEV7^xtj*)@1pPRxioH5kDp0LHsWll2Oal4K#4=TY9%)NH_l z8D}k=CO=?tnu=Q9FkCj^{>Jl@WSveq7J%D5O99a)tM!ujrTOAxnt#AH&LduJ9Jv7p z2hLa!`FlhWPT)omh%t6oK)@u}79fKYg(?v2JnsQ41Z1xuuX~IExNC}En3P!>UcU;n z1)sfx@tD0zSqdU64G zJwgkBuEHyhcQ0}5;eTYfDelL-iv;j#;`V{mhLE7q+%;XahRf&a&`aAvIG(lJ|CqxO z`g{pvNP{Kh9bb$bb9Eb5$n90?zB~_6# z*1+wS#aw4fwKyL37a;r?E;DfGZMSvTxF620E|;R&_hAfZDu3N>t8su0BE{FHtGw!P z30LZV*6_ZOoOJaYf$C$IYS0||rXfX_7ml8#7t<-vvLvk`2ocu^pa=|jq&4QSAv2=! zHH0fLm3cQ(>8-##1iRryKya13SxUr*QH(7vd`!XUNIKpP*(far3IP*?m;H zAG*$?cHVyEcz=()9d00~EEbi;_gCgzh08T}m{n<3RLb@!gQ^?mbs4QBn3U)Mu673R zo^wF@gf$Sbun24mjw$$!Kzs@0N3>dQGp04HsPjG6`3`kHh>J#jU*>(H^FGC|Cn|BE6Cdlur+*V5LHo4A1Ioy{Q5V4ifQom+3z!rs(ursxek98G&-#78W7B-y&N|U%)jw~0d5v| z?mUEpu73qb5*y%AJjRKDR7~fdrkBi4)97N+OzDNE21+XxUIv6nd`B{A8 z$N^o8ug~-~2ax*>Iey~vv-pGtUf>kE*dFX6wIg08vrP>;b;T)#7mv#jZwft?XZ-u^ zr1j<29e>HboJ?BYmtD^zjy5bB@}Xz|;@z-@)(1(S_wgiqo|7638X7Agwvb834qGWc z6p0@Ms<4ZMn8H|y(Bk0nlTHj4EE9cA3yH#GiM(2U#1%=e_={|X3`~5SdXdA7oUilh z7JyC#&Ls!T1}M>aACr&_J}W1lFXFLN)eKMBcRIr@Ht-=m!34Nzhs)?9{>@Lt$7esr zZL{QI`i7wU4U_o{90j|B|G9UQ8Vx>aR{(40KnZ09J0n8`Sui&Qv|k3DRV#0GpLQ-< zDg3YvM&MWbg5ud(khL;)6C|yKodlcKh8+i&txI+toV9K`XRVXYP3xF_zzf{my*}!T zv7HvIPIu6`?zxZ|Zem$0IAsa^+0k>^hm*k#7k`IV*4p$E_D9h9&`MgDfN?5Fc#GUSC=c@;~-A(5YuLmc=TSzEHGPk25Ix^c3dDqi} zgSXH7qqm*lur>DwGUf=;$lEr?c|%1)zmoIMqou27`E76BI)v@<8t+c;g15a_>{IYv z?|*SiuiU%d6VDFyj1U}OZ-S5QckCt1@5`fC!6?3&3NJ-7I#mqFBuTUVVF)%s%5 zoKqxbT~StuJP9r_5;LB+G2@j7AiKdh%y-_2C~j!@kEOR>M8+{0~Qm!*=_F2YviNXDn94v7!_z%0xvRDoUZE3@VyZMJdL@g2A=z zXn@)2E_>q6RS@5MqIk`R7eQy%o3sAWf5pMU#nIs4;8=(hTzCSJoCovPyz`_rYpvP& zQ6C8M%V6W4BLKRcdHd4qxrZ&d9QKb^2L~&of)zp~Wa$`Lt_}{aj4W4PvB^)_SM~?s zonv)feG$ALzQ=3IMQ}WRKLPAC=v=VV;Exvmm%~u;_W~yLG5ub^JYLZ6f?Wg6e+gv( zBYu_nxz3;J{F%%@h5Q4`|8+8 zortYF#Yr6EoxcxIGE)@X#nEbb0Z4W}zL-FJ!A$(NBStX;88eu`MUr9;Wz3<@^H|0_ z)_I=Dm?t{VQyKFV^WYusUlCki*C}!%FrpFGe&PP*@t;$x+K#@e~}n!;s8Ow z5CvZareX!tFzs-LQ-LKgf1(J6m70dDqx0bvOv4(kRES?z<13s7@jH;ehw}Ha{Cy&S zp8~X8h|L3_w5F$^HU|Kr&rLhp+3ABKeW23kfvR#A$VwHcT{KP!O<<6cAW5?*SMf}r zm9Q*c7gL<17)kYl%^4phe?YOfy%cZxic2=iAvER_C2xXMe&qQoR><5yKpzKbMXF03 z$8-wRGy0zgeCL%8qX!i{vdX0u2?aH_2(cH+eg#~M9u(zFCS!hZAb8MH{7Olu$Z%%> z)5c*|QXIdJzj$bIVloa>;^nw96*e}qtpgd9(o^M(X0GDZcDEDgf1r$0=t?mx$4Y)V zoCpmm7S{&)OKfQ+x3JwJu9E>TU!=)3v2;$M0%GeA#p9mhCesBV3b>q-=g*%LS&Y?1 z^5pIeU3~0Ip>zOny3of<7(-vaR7q9jap69^-F6h=ZM^Lx>6&_UuX}EGT!Bv;Y_KmNyU(P=l(_~+=`h0H zC}}|yfsm3n7zFSK1WLJTZGz^mF-QANljNy~O4+;peogPPO;<%iP{$A| z^^G+ln}KHte>(z>G0^akkf8=s?^ek6jRANk!}FAfUw4q+ZWDs2L5w?r%mE9O!JR8u zCo-}b;Q7veqb4zp;1;E%{S*Z*lCRv)8C-7shyf1r`R=ZRU%eHl2uJ%h4I7x+kWT@h)E5^=e};a6Bd~#)L>$QhB>>E%N~l=% zpe`@wtU0&2Ysw7eE>PhZu`?%BycY(y{3hq|45o6rOk#fbG!|6?{H>NKD$wh+-L5z4 zUDOjI$nCS9XMD#oDHEF%Y8G8^fwa)?I)3p9+1@4BDw|Cz)%ErOI_eyRm#d-U6|oM* z{<%(ae=GWt$h=B2EBc6{mv-Lg6nTM>JNe9Nyu7B-CG6qacvEh`mP?g2|BmeLn-_2k z=`qJ_Qpf+D5=t9Jh=l~VN-hLfI9x?}NCD1x20{MY<mW0RPa*?wHo(qk+!AI$cfXuAcm=k%O ze@FBm29@T3cyv^yhB^jZ9p#fswut618$f6qLk%(to>PF6tO_1B#%pt6PJL9G`kZA( z>Ed8kD0cy8{!~jT3>Qb!;R4RJ#En=uUO-y~on~Dz)Jy=(*CzzAXLiP1NPKrOQ(&4- zaJ&I@e<$t`^*c1SwjpexI$?bP+*>6Nf8qm;1m}~Z!j3_vn>3z_PYC5_%93u3IO>Z& z9URoGrjbrsDlY!C5w~giCOupS#kWUxiMpru68cK-+8Dz-(%`fecO2X_^$Tux zfc}P6skvh@Np}(nTIi!5LaP|YkP);50wvwgHQ)%*K(^oe-5qJ%ycML(b{&6>lk3>~ zd#{`GEJtzGDiGIG9=D4yo-KI_=i+q=i_T|1$_T-7*){QC3JEln%AkQI_}CGZbq-0( z%ByOD)zkwcUeTK+{zd*sA*Ur{f8-@3EjUz}=1>{xUiWuGyqlWhOIA+F-^jZ;tQMzy zY6oZORMN-*VvCU(;UjMMN^;&%{A8LY%jG*h&rg$8p_Xua<6l8H+Q?a(=WOGji%_1d zjGkt;T!cefzd*PWvLZRbkpskIe8Fd=BFr<#mzgq0lgNZ_i0#y$jN~uOe`m)vzSUC#rQ+-C%xR;x z84_i~{Yw2nSQ$vzAf2J>$ZI!w!mzX?4oOwf%M!lo1$kLXyrLxSpbCVk7U(cXD4p1` zaE;ZKNu}rq7bTAT{T<2ke{i~>qEOL{7opm=n{%@Ze2ZA&{LM%1vT}~)-Ezn2x{m6& zY+aMPW=y((=g&$_81IKD6F&^y7~c*rg!mZ#kjgH80IbO<PN1AOIUzP(n;X0%t21!>%6EQB zchP#aO93YZLu;L)JmLw)3YNMN0q8P&7jBX@%GgKUehH z{x@=90cfzU>XOqQ^!qK|c07lvGFpF!U$cu4xp}^d24LK4t|c$?lDOz^kUxMqSXnGB zm!}~C_N@eimz%e!hVJJT!d%Sf-7u7U<(=Tr6->Z%)TIEbFA;qD4rEqIXwK#h+_EVl zA{kXBW$7xT4*Kn-O#I_=IeS2-6)m(;%CgwmkSL-8slje$4b0F8a`|xgZS#N9gRKx+ zt)J3}o)=JoHzkDvA@nNv*k(wr{_!GO&PX2$AOsKJcqXDSqI4ZlGfD!o^dxg1l@?cW zpv|D|_BPWLzYq5n3IOSkM@KGhpSq(!X?GV%mgAFe9@M3<9Hz3=4sHxMJ#{PFZEA&Z z04g0CE|MwG2QmW|BQF;zqGW$IHlT;^7!=m3ncT&C|oAWv!f#~)q-aQPYgF)=p|$1fKA#$$@70LY)YVuP^)Lq zhwGER4RN@vR*3r=q1s#vbU-JL>Dd1SCpqEUhBV>@1|(uAW+S7Eq`XgdTrNo#xxQXI z5f@FIvJ7vT;;va_l&cQ;=n5(?ehu8VMcsiS<@a(l1Tf6g&217aDtDbJZa{?a%qzbu z?WRNpK!rP0YO~uY_9uU`E-AmOr7~Dqwu9p>0xz(}!y1u_)8Vwbv4yhgFA={!IJhHG zC@@{F09nom)<<<`;kQ%(<%skzY@0+VMk2&9cD1U;@~DMuin|lhyRdcO;v=jTMS6bG z?%qSJ7B-VO<7k7Y!j%w+0gYgz7-UZPCb#@SXR`zkV)fu;YB^S2Fii z$ySN>o&Uu1zLK#V3+J%K@qVF@8YC*@l$q1f#4h`xMjP>e`FfNGN-PWe*MQ3<(udx$R46%@=$X`h?{J8(a>r;og9Z7sF zApw@ze2)r))J4^)SQ3db(s}^pa4E_3BjugY>fJs;J#`E2+{6t%R$C5@xKO{K5Wcc3 z#M@&9&dq<0h=T*?z=%YNIA{TY&CP_R4d#6OaB_;E4ketAKa0=pHpKhHC;sOe=KDwJ z4^Lf(G&$qEgA}C09DG@drl{Q&_ij4Z*Vi4?yz8t}IJ~C`ZZB*sL-qxn>Y;q`t9!}| z#??n^q6{GJivK2s6P@=FS_w$zdH1*X?|wWz{fK|8mxqp*g;E#LH`lWa7km@QEdB#Lg z8~4z6Cg|?vM_N3Zdm|TVh%|_LPdq;jP&gb`ltj))5o#exz<-u<*|;rG6@s(l7OGi)hybM7JB($RujFz^gDM3=Xs4s0E-Wi;8#yQ{J$f;Gsf z%m!e2{-a?~rCV7!oXQdaUy+f8C4Pe}dSOf}jAHSidPH-ryIkc*&;00_KYw}bD zl_z5hhuD2Yb$>Uj`s6{qq<(fv9fi8=u7>w?)$Z)#-U+Rl)ae7eTQ{*ale_$8q^par zYr0=3f0m0H1?SZ^v7fqGS*!(hc%{XfRoWE02!>h)aWRWl>5J;z5o?&YBPj27j2b#n z1-4(B{Z(W8MNMvLLCXCSy%K9vZnD$KJz61S-(A(gw125=tstyCS?7%lq{?Yfv&voG z1!Bfp$!c=dvR_G3pjV#8jVm=^#ho|_2Hk)52T#8PilUGAgt7|FUP{DY53WW7E4m#I zL!e#4p!>L$NhTK%@e8OsEX;XyxI2aMWM13Q$T}-D4#h=B^+8y?N>v~9+g?PAr zIxMGP*PuTXjs3wNkyA#N@*Z{%jm+Oa7TL>ro>`f`dm^$G9sgQGS;3T!01iI@JQZX0 zA%Er+V>+pdgBUun43ZA696Y$izi;FJT8Fbbn=$2s8!sAI;=?+>vq(o5aV1^AL__x# ztU19ou>l8ys7~N^S>y5gJeoeF?^f?csi^3ch)9{9k2LpVW2_L&tT8}DqI09k+OWut z!G)O{Bc?Lq1P#V5Rb~pUi@X$`%kb-)Re$2oR8|UI6j>>}QqvHnQ~yd24@2k1=rDY# zYF&m|4ujq3ie|OQk%6Z9{5ob;;vNRxr(yre91+dE;q~U%J3#ABq~o@aS`$t} z7CC=Y9T)5g48i2lYpd@_308;{H{)3_zHq&2*5k zX>A@<7VOJ*3K@xYx^x{+y@VhG3KznwB$`2zDrd097b*bwOn(f4!G!|g z_|wHXMD7Y1B>T!}sd2KH6hzQK(h=8kc_?chaFS#U8XjUIVWL$k4Ba8zo_dDHx^*Ef zHt5h$OB;U4T0)CU+3Z5)vO0F6pz^e7FW>QoF`BqT+X|>o=9X3BV4RT~vjmMRhzuSh zO9q+ACra$DsmV%&o0xhCN`EFq;6UT`O=1q!mRGtLt5rvFTvLMQ3Z>;ft(Rox5rG%) z#i?P)%(HbSt^6poL(*vFSVK!PDqXo{M_|ph&Mo_$iDr&qyVF+v#4q6Zb)DbQrlu1?2@~^22+F9_VoaP}?r%;zYdh{}e;juH z^`i5?zkKOT+Md%;73{mBF7FmMp<&xjLu(;rn+W5fW{Y3Gbe(n#F!}IicXv+f+L%_- z2`b68N$G=6aes}JJa#qTHIKh7Il?#~HFK@=A#`KXfHchU>`7}DOyBM-j*BHk z0;3os-GL6lt}cB1BE$6kVX=5ofhU#VxVAPEpoj@u2GdgWH_Isg>Mv40N36C!2XX;z zvd*g+9h4Me7nOvKNLU3p(@U>Q8p;UwF22281@5X;pm4SZ1%FYd&eFdRFd>00l~W93vKQ3t-QHR3$dbL|3JSf7`1Q*K z;GHGG0G4FHgl1_Uwof^)@XCi~vdbyL@dUbJtR%^;G=HlkY}6hrC#U^a8%8S+_&v)BXI&1kR^dYAO3UNA>~}O68fFCLVqei$B0nN(;#yz4zT=w{Fz(WEw+V~ zE$o(CX|c2g2#r98Jy~J87F$93q2Y3SHNKSY z47`c$fnevcTjj2cGg+f07`#$XczDpFA*E=77x!O&AX#rzQ+o6zKUx8H=g`tk;Pjon z4S)TOW`Xkvu+gKBBGK7<#2yKdg?OqcBew$rRM{hEPr`61S;S(xYz7^`WKx6=U4wjx ze+K;e{7VcCe956Z5gJamI`eNgU7R=NJXt!049|~x)GG7>I?$6n#XgC*?JHO@W|tt+1b_kO18s}!mLGO1L zy1&>?qjb9D+f}mMTqH65qVs|+UoN9n#Rr9(UzO)Wy(eIm{C}(T3yeV3nek~Ngnm%38e(1*5i&~{PZvq*6nw88 z`y;p&byb=qLr&J3?S{p*9qELt?gfGmoD8o39z{$8%g&OEtCh3mLU{JEagiIL69XU3 zw3T8HA$Eu^0Sbe~kw=~l3Y*0gaX1M&cFf~)nJ1GV?Fjz@sc?OO?n}@BXn))x9|aWs z7^53Bpk&VvD?P^q(alJ-oR-+ZsQ!H@JA}RiB;F}|=_6NgKwkf^ifw{o$oCho@Y`tY z)OoY(C_0X#=VU)tIu;s`7X$i>CSI?EziA+w9P%`swb=;%wzdra!qsg-2`+gc@G$Pn z7Z-m7aUx?p5B2kP#?N6s`kNVJ-wO?`jJchSlPla4GHe~Y%G`rQ&Y?-t#?o!_Z@n6zp;BWmUE4xG3K$L1V} zFf)9?h(aveS4hN834=^AW>LI&Oy)=TlkFCWrUe^+t>933*8 z8#HadHJNA5D}@ON9iLYdaN9V3RGaYG@zY9zfGfujgY|A9D9%vNHM&?SW`0+2yMg^<5ak&v5_97&&j(=>N*Hy6D}8=q!-5 zW=Ivzebno<#xd5__4Wh0N=_b`mbk_f$uQ9jtm)BmIBmDR#dtaie?s^(41>i^`PgW7 zdQ2lbmbQZKT?ClE4+!3fRo2_>8sgT9A#F&0pfk3}g-*h~0wKqwVbJ2k6;9j_MkIE^ zc&|`dj!#Y~LL?LXsp)ptwr^pr3xsSF)ZL6Oxn9&xOiz>mnu)h#8)WXK-cIkO7s2f! zEW4THE}1=nUYPdpe|9V@MeNu|Yb&}j?B5VB9C%5ZiUUf;W$(%Z&%Z8 z6vKH#L_|+DXcQ4=Xxr_=nFI*Wy<)clRVTPK(`6{=+Xn4Jf5HCxC{+=pQIH4^fEa!r z;{zjlV1+G&?pI+8MdN3aVM=zs^gV*yHR`BeC2NUZcMU#N3_Xo~J3?9vQ#X|W{nx@q z)sf;}6NDa1C=Ra?Kgt`nmWnEpGZI%0Cnb=`f2HV{m6^JR^wjj=V5)%)b@J`@ zi_5dO-Co_{&sW%?3gU`~byI{cDUUA}P>hew_$gkr8F`PS_vM5`i>?)Lw^;bNM)pbwGpG#2&MpMtMMJLg zrEGVqf5vw-?24$m;KYS6^rfqco6!g^p@6acgnsagD<@;*y1Twn%cCx;$_rv1aOkDl34|&7LkilPQdApni-w_WW}J{#=e00_ zdfKj`QRLJq7bW;MR=gV@h4dIEU6aTl2ze^PsIyVWtnMX)GlTK#MPkC^^%E)ov z?>p%>kHuo}DSAzpD~TAlkVvt_QDA9XD5KKzSc5H8<+*6Qm>6YzQDzPMc1ib?Ic(iE ze_P@yNfASGMm68%&=d6JsGjv%gZPUDiuhdHqlbDm1V;+3x!E|MjOv)Wlme*6$KN_8 zE}pHZE~inqbU+PQ44vNp{OMiARinW-(PrN8^)OqZvi)!G-wol2-;c|h@Q8DyR+6PU ziFVXfVML^a`0mr_eD&cyDt!w-$$>-Ge+L{0W7i?swW~CYS?|C4aD4jt<7)*f?w7Ir z{4()cqvv9Rg#<=r2-_{WNfuTFs@Ej9QowZC40H8@9H8dK3&@pW?Y%3kyrU>ao`^x? z%c*=JL2LQcI99Yn>*h9We2EeEOyGEd=9Vn4(SYnmFUYZL&dPW<3h>!y2=y0Fe?IEL z2gMTwiZ^w`a2!G_+9zkTtWeU!-ok$-AW7T1Wmv*Ni2e%EkYR%WAFQ`HRusSy!LK5R zv{(X%>b3~~RASLg4dS!j&E*o-S-he(0j8Ti5D?Q6Af_4+{|fBY+`!$cJsD#v@v)44 z2r#6FVw`v)jHf(%AEsZ|tJQlSa;f{<=k~R|M!pMZ4pBNM-=m z%)}uZVpQy*gRBr6Pt3+^>qk4Va>z45{Vv)--s9`t|0ADCrhM=A3-b3dA@WOZJf8S_ zj~q5*&ZD7`o~2WN52ZRGZ8@GzAlWO@cVCmcGaG;Yh&f05qd8IxBVMjgbE!5n>q}tL?oHd;4)W`GhuTYuF=@TK)B9O7%33`Phf9d!OjFSLIfof zhJ=$r)_qi0EQonPMX<9Uw1mY3nK%r2<(*C$ed1e! zjezZ7^Scz?-{CmgdG_g1s?ReGv)rYIL=U@I^hTXWn}F}s`qT>76rM4N=|JWzAb=KA zTt`k5rR+u7UbrOlJ$rxZB=vk(mV@(-*z4SI-EoV5eP@N~K%^Dk7<|sc*{sI5JQ#}+^qh&>^)CS%Dk{vQfrl()GE49k=L&sP%1~) z?f?n{mBp+b2l#*JMj+K2uNA3n1hE?tyMb6*Fo6#7Zd`LwF!qx4u}8Z};kUxn0dMhk zL^WPUGeTaK8qF!e(YpkoQQQn+dW51I47%YlI}$c03RmojYzOzgmQhFqJI=Hx&rQ%9+Yj+Q>N#jPj~X z$7n~D8A?T4{gN5>rfeN7dedS5C|DjGERTZ0!2x`)4-VGwJ#v#k0H$M(7x}DRV=i5C zP$wuc>{feO^aJ5ughe0Vf4;0#TnbeSBnYzIl8S%A$T^0(rf@*UD6rua^uj@@Z{;QeEPFVeia*i?H= z@6_h3WNsqiM|V3^0A)CI4%JpHPjT2hMmfH^VVW;JVtBFULrSIQn6#Odt}v=Jhw$TO zIL3c?0@J~3XVXQ7Cn}TLgIuUVsuz*8W{_#qAk&>7-0vAFTJjF#i)DFZDT6#Iopbc~ zo6<=YdvbXdSSEm05vQWr8zUOAZGzF$rcq}w>Kvu_8q!06q?{hHnr3Z*>GP&^SQSj4 ziPch&GP5UnswSD05|&K~>!yUckx*TzS<`<)&HjhZqLE-F<>^MsCrKTD&lkrO&re8; z!yWg99Pp%SXRfeja)e`u+UO=DdXB~x$ixtfjt0GFqrCkL&DrHZ&-u|&_bHkJJ38z= zh6EAqLZB0Qt!I9|(=4I8&cRezBoGH+Y9D}>0J?pJU)E-l&OFC^ctZTN_Gx&8I-z@nb4E z@d%xpX@D418p$38ZrEOUy+f!3jv9YJ^N1BS8*mzgorRLa&4T1Pz{#}d9(Eww^Wh5% zvrq`=?&W?Q0PI9wZwfGU6pfzweN#Agk7I@ifD1Alnh6mm!U`15rbY>vPw+iO-SfLOl=cAekRt5DB*HWMHb3DL5}1-tg~5{V4r_eHrxBHQ}*ZxQr%2ZI(ZxzYi2`{WA+ zuaMA*p*b+)=;Mq_-o@N6v)ciCyhFL-?w48H8-4i)Nm#MJoQM%ROS?$MG|1%r zy=Qdj$CG#1A;cwihsw=-`A2_!%(u11Z=kWijetDsd>?k^liTlhTmAja_b_G4X9N=R7;V>_4$ls$ej zlg2$U8xNp5+whM*dhib@YAX-Sy*a_Du}E-@wz57hlM+5J0gsbHJ~$=DEB35-<<1Ln zvcEZK8CGgIE0S!xePV=QD}L9Um@OLRQpy0OItz2ZpCWBf0R?dd@gKUA_**A1DCu!DCBc{Gw>^B zp$5YI)25oVkx4g))l!Ev8)U_aZK~-TO7HJ1Zrxqon3H*`ip4>Sb)HfyHH9{{g*HW@ zbl}(a->SGK*{q_Poa)qF$uNTHJiQM)WB~XO9mgpUm!4?f#<0mH9CCo~5&j7VzSAkE zf1rLIrqT7xfCY>sLL{s4fK26jzXRc}w=Kqbqi%oT4;ZewcyGaVlwYa%8o603aD-I5 z@~4Sr$?!ZF<-#BjR1x2iXDOU%`fxfR22TW@P)7tk+7zHeYX5C zp&FQYeU4_T`jW0Tr4oZ#%nK~I(87d)1Y$o6WUkYosSB!Ww(`TLOvz6&H35gx6F4ij$2&1_ML13K=(zvlbZm9|< zkv^A5KdK;o(*p8N1EAs=34o~bf6;`XoL(&^X5Tkff)!oyOI>3MX05qW;A_qet4zFK zzec0_Xl+HJq1cWjQhxcNUOCy?be2Y!F;2Ral;=JJn#(ocCk&-KF|-bsA3KksJqEZ& z0CsZFMpuUdq<1Fbg_SqUN^$B*bR27R9BXt81n)SWv;%W`I}!``4i$Qhe>HkVpNy3f zpF0Yz_6}i;!6P*N22=I+)!C!AL>ui#&Yqgndi!mUSpCF{C$~p?)y*btgSfJh>XHf_ zi9NWUJo22qM;=o+$wVJOyp5eBTV;IDLBn->Hv=^GmIBH`6L1?D+ED1`P^KMHnhb3) zgjU}seiN#~)@)sL+1m8Rf2?u3F=~X%HU&}&%x}zY%{NB3sOf^@6)*B-kTZ;qbFufG zBcv&zACJU}VvYFnQz|*mCUVK!4iGNTI1&7TLBslw%2*W(QHaTtvaV8rVMfl-q;35@ zDc@C_*>{H6g&x`1)4X;$p1O5*j(YYgqxOyuvG!_UtfgQ8MnJj01N;6RvVY}j9pHz)Ae#VwSbukOUXVT1${`zih2MZh;U55%70mP7yoycn(N~?Q(Qdc1 z{RP`v#3h1{-5P2F1(cd%VPw-GZd6H6Rt{cq%Z5uWd`&l!Ds{`&jm1t2yQgf9s%}8$ zmMnAN38YOzK>hFD{`C6AryoAOc=h)6Pp5YBNP(sXFcY08qmb+~n19fh(DFp6RIPz% z7EBe$%#a5#moj|rbUZ^tbc-M*nVhAdd@sz^)etL4nnaN@p-I5ZHObP+=%%8n6$nEP zE#Bdx#bQ#?N9FvB8e&p5+vF-lRN%E209hA128m@7%%mm+^8pQx(mhg|Vc&4|Kt!o-AMBn>hh$-TwXVa>#G1`pa&7%acHw0* z+qk-{(AJYu3pg_>oBOch1=m@;n-0zTs}=xy>CUNpEC*F#za2+p3;1e z2=1Gi;#=KPBs?IiPn`P1NFv**#PZW8JH-nNO!UBQcGE7DS(JULAn}@%{0t4eL&o}z znE+}dPC9bm+kZ*K%p3p}E{krysc3{n#bTqJEH1IVbQo(b*duM1y5T~CbaXq$FQlQ{ z8Gb1<(e0>hnuTtsZKAGgY)k7BauMuuY6;q9Bhu}pZJCX>j7HZGo&PSBknuR>EK*p( zuYC=`nH7e3@Q@HDB&<@xAxRuUOt>Vl5pvZ!PJoLpqkkC%63NNKL#e<@1hm`TA=Rnu zpVwQ^M({T+Ul*5wlSMd7u7v<4w*@FgQj-LwDynL>4mWYpF*)@pHjwJW%|7PB`5e&D ziLgYxKY(Lzx?IorD?Sg`OW__o^Yy15~5WA=()MP!PN4g^;ZZ=}EAp54bG z5-PWARILcO-<#ctN=Q`z3+&A{DrO^NQl0@$2%H4VLqD-fQCw99*TrPEH^;w%;eu5Z z(AX9X5z318f08W9ktKYn>r7TW4Rb6P#edG8&itOI(s@Aqk6g(6hVV9Xm_7gmdC z>eQ6cF?7(0MONorm0VQ3k~&oBSy-YNx!CQ+4t+S|*h0{hV#e%-LK2e<;c0B9<>{3G zfFoXTnS+hPk8DwYeTFZyT4z!WETu+z1AlrA zdL(GK{oQjrBOz$Fy75L7Iokf+gU_b;BG!n9kH2rfWM1ztOA%NHI;^ldhXKz;)8jC{ z3NzD|t-7DthqjTq{^*vg)yOowgmSv`WA=&v(P zmf4GQNckh;{8usO`?XC1@&2zO)nEO4f3Dg1x%(QlzDvRg^aY zx6*A@(#*u7!XC*~?0QrLIEylSxvL5R13=4ig=at*O!-IH{!4P3C0nim8&Wa2uV%R} zS!q>94Xycu9jmUQS#Lvyif^+l;Oh0VWPnQeVG&bA->rsT$Z5Q*E`RAQPGl5;dul@j zAx)l!fYQ^hkc((2#F{EYyL)ocJZ1?QThd?El|-Uv+BcL`0~QqGLE@p941Op zwWa;>?KPLSlU2D1|94nLuGF2)PS)+QEvB4`w zYC-OQw3KDA`Bm0b_!W+j-A~|;rpwbV+SklJkXt3xEk)lE2x0OBlD5ULO0G()%~Jyi z6)?w_P^waJdX;E7^2!^ARN;c7?e5Z$6pu;qY-7c<F`X>x-n4C zRH%Z{D${5JgOr}*H2kI%#lL>JPMX zU+aoj`_tG+rGLJ*v$}DbvsbG&3REc9pgvm3pLrUv3}UdVS!?y9e8nN(&$*}Qzj~;% z9-Z)=nywzz%9%sKj=0h|RWei3LTBM>wcLnOWM;ncl&u{4LCw?}_}@94IYM=lxX(?; zJ1rGu6AbC5d}4{{j4RbwIoTk~s|e;RBh+^*gjJ!aJbxm~?c7&h%Ayt(6p3}$iy;pH zA(Xw==N@WzrW1VA1w0)uH^?7XmjXPsvmCBEx@tFNm>qCiJ3z2hL^$OV#dYc9EHleR z7RIZ;NZfNBF^O)o$MPvaUXWaUg47P-jv2OqM&N3SUkjyQ5wEa@6-k+OFQ*G$&TT~+ zxrdvghInpCI=uo81P8K^u3QZE_a!isB z#px{!6c_QV0T%xS({-AZ?LrwgLX|3U6E5!q;eTo~kW>a~+sHz}Q4C~LQAfjKc&JI% zN3g;7jetwHT6eaR78XXvPbTdk5~iG>hNl!FV^3N;xw4jSDi+xWpOTp?W3pV6E~5y1 z?qP-5tn(~cuJK(kt|6E1n^CP~|6~%7eLRjX9y|G+BS3VU@@0sSS8moEh0(R@C_37* zUw?HYJejbLHt|jS;2g4I+`pT0oWyp1+)CcY{q9*B0#a?q(RyB3K>yCh8+=; z>&P=(v5~7#KaWzpvkH!Uh^;v6HV;#D$3=!*We$<#8C??mzM4*1RSJe`L!~OwV>6Dg z&iGJU%Oge%7KQQ=sB@W`+td(*1&z0y6lNBQzWtn&71@a7X`8dr5k!c zEKo`@xdKLX>5`1*|IO@n^S7zrma}(p<7RKK7)Ko?r><`pwZGQlV zTf2M~bc??0X=%jwI;MdmQEtSdjYMI^x@8uW*bP)DdTr;}9+x$Sb7Einq6SCL12WnV z4y+p{#FE~n$9ZhQ^;pU>^f|{~2 z`(Iucsuze^8eSjE0($srjAq?d2Y*DRMgD)gMTzj{kXg?++LkiMTUx!szDS>hCM1Ot z9i_u|JMuWW!XO{=q875iT3L_}YB2TG2Hnuxj^L(EhG?1=5$SR%eEXsL4oVP>)CU?p ziw zQ8jj^8t2lroNSmYS()nx)g>{rypJApgsD0msAMJeiVA7E-XTNzU>z?d@Op2jVZ7@epsWwtbZQVEN`g!$A7=-ni1VJEFb${;!vsU$uIu{J*iz~E&$1> z_6}~oY_{|w|G;aH_Ak+V(Lt#x0RS7HRC)!Q<*WhZEX_N>gdb6M1|_;Tg7@um=7^$> z{%E8fgdFOUXW4(8eE6wxFBRF;MAr&Xmv^Ab@tz!hxrK)^Cd%8Det%0nc1clRDO*up zp^P4AA8K~R8Rgk&$a1CR96k)BLZCrE51=Ov>jJz=R%`T5j<&r%rYN_RM_h0u8NK4B zM&HUuaLI<7_VIIv8+8;BArS|Z_jpZWEIZHkh**A>Q>`oaG~!}qbgS~*A^fUI`lBjP zA?-cXC9(QwB!lIpAAgzkZiz?N&`3jF=nz;u+mu(Q&NXOpj{0@C7fDo=V!LW;Mt7!a z6Ro8TJ8N|ICH&DJLAHqBJ8_9{n>m9KYo8O_SomBrl`M7*XkYW{ zqQcP-zM}X075P)TOjyeNk>PbrKrz~h`Q?X?DGx8tm*~?_-+vKA%8xumx~vjkdg6`h z+?Unn7Y}(>e))vW?GkF+M&*QR(Iqr3c%C*?mqPhYJ1A(gc-7u)5iL zwE_Y)QyK7Kn5uhpG`hK5?m=T2$&e1ZeP@ry(*(8WP{)>cRcO0)em;HE`A%xp!W}n6 z9a40c?d*+ERDY5^(k=`4pp$zae}4Jy?eU(|>GghneBA53I(@YVz1$mg2fg0wpPW4? z;Vkle<@b8m*Vo0_7pa+BQET54AaWQ1E^0k_;vC=t_yn87e ztW{2Aw0v4if=76Uzf4eZVz0j^Wme^Dn$q(vG$kIfuz#fURU<7uKHXIxNqzDnS!$IlfGL#|izEaXX+(a8s*Hhy`;n(toZy)` zM>C#HpC8k^=WOp92#UQo0=oXlV8$e*$uXjLN6Js$BcbR#d#>{|dGpj)Elp{7l_C|7 zkU|7dv_iz@N@e*RT3Og_^UPLl_5r2sS)cOXLR-tc3sqb*w!Ypv0i;T;N*_w0;uJftOAAo_Yj?V}YHz4TfYv#Pb>%o%GMVr`f7{6kc!FZkRP z&rTEM!IX7{3wQBYTsnX!rzkb=i>O!t1IWm(LL3wb)>*Hn9M)-JNlA?+uAO@E?5 zZ!sIpLq-Jbee-TKoO=(RekImWX}95GEA02C0oO0~Kqqzv!}vMOZKtC>s^o>Yk__+n z>gX}MJdP)1d@st>6Uz*z8_)HB5%x(u9_f!#O#m#ghRp&I&4 zly6+P4SD|F?VjQ{s;i^L;}Z)9_om%*2UX?rI%Ts$F^B1!Cf*rP9Q(mVfPW^Euip0-T&mg)*Y7``em*1i@uOS$4xc&x-gv_H%qJ|E0y69F?BM3LUJ32HZx=iE zgnfYRcHa^qR{jIwiY2*6ydsK8B_k`V^l+04M>fud6bHnyJAPXBuc?&?$-=h zAjQ$@)T=OC++EbjC`xK$5Px@-Gi*kbO5x7?uXVUYW2rv6CD&#J3M&&13G?^c|47l zcW;{V?qc;?xk`3NX!I({pTYwwOXBw^{`4xjj;qDaR&bXOQw{{@t2DeOJ4otuo`x&f zG+f5Ry?x=9gn95Rmes#cuIl`6-BE{{>Z&kRc?}vH{dr|Bqkkp_X^LLNvlp`&wTMt$ z8E4IrRrBV2L*9Xhs(m3wE~)I9bQj7?1JeEO3ZjS}(K)#y*M;g}IZ*rAFfKfmMqSfkHu5v_?w{*$mJ;S(r)KpmQGPv3 z^AlI*CvFcWJ8^Uv-DB!xaxE#j9qPxU_=9k!d5Rp+27jmkDln=64Rl!m(1AZ2G}u#< zV<2)2Fvn2YOMSoRFj?49pBwzF%;bZoPgVV2Xx>)V8;MG3{=~0nq<$>1=xI!2fr&iI zHDI{4L&M1yMcOnxZBbM8P6{Gt0fh_ z9e;2tU?V4<$do(jznY9T%~sv36_YN*J5vL=?rL3PaZ2^oqT1&#N<&BL0Ex{U;|STF zrdeeIX7^UCiyx~6BJo+&Tte|$)LFV0_c4LFY3X)yYbykpHQ+cVPmj#oN%uphh1_Jl zayh$w2-Z#X)+uI?m9b0m&@G?r{>LznxqqH{6J{c36jkE+9-_5mU zyo|3_(ooUE@ppzDKVGckuMfDM8kzt5u^52UiLT$Z8PE6LY#&(o|3hq7ohyy<3X-~< zQ=mSyb00TYwm0COv^XRX#b~NtP@3}H--r=-62mv`fk2iR*g)Wc7_-=1Wvm(AgEd2M zN6|HaO5QL8FkA?OBA8+JNeB*mf`24i{AF~zcnG>(JQUq7{;#9k>Lk@$@BkpZ-6{E? z8tv$DIw7(6wuAn@QF*G-bMwW%qk8~m?A5j7UIGF{BJc;`v@**U$rB-D72AaR1 z#|pr*i2o+??=SEghPF0VX~%uMmnJFaMO(Uc4+*hyBS9Ka7t7>4T+$&F=zkQ?RKG&H z1!xRy-x>35FrS?0@)0(=|L`9$t7NCP9?#CyuFvFK(ZdS$Ci!M)*CLTdUgSw{owH=2 zRxV-l@C}Nhe6oHt=!Qh%Lx1yl&~k5;GM+(VNJ*^+5g7(Uo83Y;W!aN-THU2UbnxJ5 zv9hydy2d9#S+9B^RLbMzO0xO}sJ)Jgd5p9boHl1^?S_YF^AeWQB`gORRsYKOuhhDK zrTYFw3P;5Vl`Dpt=V;TlfK|rR2CJQ-gD8t#GOqi`GaGAs@UC#4ZGX$>VyQ_=Pd@%z zopH5^d?gRs@c1PggQ;DwfXs19S)E2kc;#8FXrH){cd^6DjTV_vU5Je2;z{)mP8euP zF-gddUzox{M+U7liwu1ZX|h|y-(|<^o|${2=ce$&g8V-1f+gy1c8YK>?}O6LrVYr` zl6qR%#&+3YtcX2LUVn*vuvdhI>^zJQ0T(NC*(|Gl*KK$j1ah$ZRGCA&$5w2uEWuy3 zA8W+EEwrWeYle~|&~|YUc-C=5W>pK@FK|s!k^jjzzC!|#@a0JDPd?KoRtGwYtg@0) zOA$wc0#7vSe*UGSget#_w(T+IVqd$jFpR&Dv z_p#>`ISbY-+y!*(OV|QDHEW@=#h+3w@6_8gT=*6!e0#i3Gc1b~qC=uRc8ruSP?0hS zq&tA1d|Xm#WXx|7Mu6N>Im0zcQ)SbDV9J-MzoVla23w!ZZJv@Dk2g^~!-dLq=rmcv zD&VCRX8milvVZeMne5j4WJXRAl)SzWW&jABewFZm-l^nC^Pb0Rj6x#)6CN(d%V_!) zW6BU(eWjbO)6{aVWLTCU<3M8llhjPWT7OkGl%$x91^Pc12AN!Qv%J27yzinc=P+4z zQmwr#W1+0$-8jY%4otLI#7i9lg_TWhfLd#BAz)^KLC<>V>Rt_0@l%Yt!8l??3K!gg5-mXf1&jKSEX#u*7YcyAa zSH|JLWq)9#cEw$7k5iO6O&XaX#T~68zgM-yAc%k@iXt>Khdm~49{eKYNr9&F8)0@8kzsP4yn~X9_R1!an_j1AjRjX{KqjWs^gUBEl1!;$74GL3efp*9# zKYx@^LK!j2C5cfB5J@Ukn=HmM&%eF#Gax%R@OQIg1)>rc&eTIobR@1Uj>Y37h3)N< z=6JcNNoaFTH$$GAmGVa0MR0l!~jAuReB?$4uB2 z#drje)vhNQS5ZiMqrX2Z`wY${xqo0qr>?pFIu~Cf6zlqb$$QuCwvA*_^!xr5GWXgJ zK{hE;wv!oBFqdN|Gu}5&ax5of9SyGzL_#7a6rcd4EN)rnx8Hj78x4wWwFuk zXLVI|J>=~KBn;g)uqdsS4xMob8Pb>)?^VDMteP%Yy7p4lxrx;^HNuu;RezUfp-Ley zd%ewg%uGo(j9Ho~H_r0_tGQ??8TVAmxL-m~l$^O-9~LNwnHX_EXV}Yl-`X_nbkZWM z0(viZj4ZxV#m{yq{$3S7Zh2zoa&O)-M`?Z4jAO0jfDJJA@6CvOywz{8`UU%F5NV&1 zp^0v1B1g7SVLb$S`wz1yVSmRO8K>+>W`fVbr~;gTRxlS5{mVS8FLRN-%)#+8iP|al zQQ5!gWv(CJvcKtN^k|}9p-3E1K0u*JTY7`#1RO2MD}aRNiYRo1)XVIt*exgO7pzS8>o~aFpSk}B#5Si#{(|2gFLVrQu;zuR!-*#(R z%znd{W+eLGqi}vna{vG&7fCSJG3SEmL7h!?a~2p!lqUf(q&gEFg&+vfMNxeGm=L`V z%bp&=Ea{H(S!lqKT7PmXq1O0zV4gn73WuVDXax!hL!s*u?utdMfM}l&3_{hV9Wfb> zdP6abhhreOo)7r5McVIZ_0MYrCyxh|XgDl%ACJ+o^hs|xjR6rnfuBU^(#kR5jC}w) z@y8|}U5r)}4EZF}!?*&{txS(Ofh$Iky%#w<*Ct9T44{?x1sf4ISPUTsxOr1`FvcsZx4_*uC}wdn4wN9R7Q>>CF=n zry>tpg_||h&)2M}JK)QO9+{P{Fs`>)i*qs8=Sp1Q2D^&QMpnob@198;j@pKf@^K61 zpaqa%9S>lY=X@mLJV1^c%JH6Z9Al2TgbL^J059J8mVcFm4n?pJO zGi98Rs`onAVoES++hDNa61!8upN`!pUAc@9)CF8ZjQDIYVM78&;osAvPCfp(201wX zdw_)uJb$Xkj|&e}G;jU@{0Q#W*~5`pABh7-65_iOE(K&-BI1X)vGN>-^OXpY}G9=|#Mxv<7Ci&y=d&RU{A`-sLYA!?(d zj`tA-Ok$M-Ht7rwph|_$rGQ189mWIvtFpoFg@5+oKtkG*(v~U>FTpvbwbI|$$#O}K z(}A#q`=gxXlh%#=UYmXM3qQD_lc;FY+HBA8@gq>lB_^9w0FYvd{^BlTAVC+==$x9f zb09>~ITC<1_hu3IHbd<|F8G!k!W_Wwcgd|MAYq>ksK5Tev zEVbq+2NGbq7Nl!saaaRW*2EvP3Wr%2t90a~9ouQgY!K2+pl@}_)N(i=RECLdiSBy5 zXUz{*w11sLO~O+;9~1t_3DX^-W^Qydh<|ZHr#+Z_u6XbSn>j-tc3whK>|ZT zhq38=Y7LQmTWeI@PNWtg`Jj_pOm~#4!XdR&hcj<~!T7Baq}E6`O^xyJHdbTDvayZb z*s;^tv1}~Ien!u;{#7zZ(}WZ1BK}3^ATn}f*CgcQKIxHU5Agx;sRZW;5S2FL z?x^plRnQ%=3C}8hAcrjznc{M^GoauGqaL|;g_UZT{0(RVT+)&M{-~uTwD;G#*hPe$ z^L75~HHd)0fKYW_546;We7Al+eEj%P#Zx(paZKGpjVeKe35SJIJg^0-nt$4oaE`nY zYV1J$=^T3rrvY)4Sr^curcT^nzPmuW9_ygcgX`hC9$LPeK-)|8yR9BaN6=E8Wy?3N znNVXHuUI4;o=A=nbWVbfr;?8=qBB5t~=u$*PQqC4YCsf(lGUX0bHA7gMCegffTLcWK z$%I~>l1I$$f@?rMQib)>e1u899+O;GDkm9V+m!;Yn}4EWSz?0y=oIUf z)uiySy9b~RW_qpMeyIYqCH>3g?j#vih^{l*Cm57ZhH?YDul6JtmZDuUYa7?3;OMEb9*qzFS@qo*v>(PHczT44l>4oXb}>?PmKsy$ywg| zOhN}NNZR-fG7)6BJKuUPGsm=~5+{;Jn?%q79PLGnA%M8}~EsNGAaiOeg4}So$Dzq`}fkrzYKZZmm zd@_1pP{aX$wHI2*xLqKc)+_p)0qF>)S!6k)u4JjiE=9SZ93j9_K)6s;fbLhy{hjoq z&d6Z}*nFit->DSRFoIq;N|{u|6+{+)0%Ju3i4&zAsr1=~cOw~9N^O=zC6&r9_To;k z=uJmy)sP4de1AzNuiBZeCArxkT;}@coS`7>kI7}K6$SSHT6JtsxbV3z&=x^`11QQR zWOi+f+g+y)(V|b;7@ECPYO&hMC;sO1my2vU4^*HfSBtBAyz+|X!eO7jp{z!hFmNIQ z-hAuAhkr7>g<6hFEN86L_c%~bV6=77 z;@WWa!aCe?jMYw?>r2;~XV-AA(smu`&KX(mJ9opOVxn0`-J()WR_La5O~r1kZM)Kz zJ1b7SlHA!*OZnGqc}-p>zbT!fUveXqy|ypUEHYFh`!h&8XTvP0neX~ zw^eF>o>jA?oO_b}R%Q3qBD2j?Jr5S5pcT@*VM&KlfyV0^8((CT#ce$j!RM!TfV{p0 z&kyDCcT}yQ>v)qCZdn1ZlWuMx2z~#0sD;h$NRyUsBO&qAU8h!7edb~OSj^d7i2hOp zR8y@URpT~dFjStTtzNm4+HOGs_mdoNHzkH&MG8u(O8uy=U(i_+Qj(dZC%IDEMXT-F zMOwiA&gjKMKfeQ$cyA(q-0vHT-7M_3+-U%7v@2H&E_PVy6ju7~&RBd&&}vOUAwFv9 zXCf3NNKp31R<1uurXlrwh>jHPm{sqJ^=xs(3j4@1cB}9nqWA@v9B(0uIkq5{A&(^i z7CRM@O-CPXc{X|~&X%KR;&M6qTCA3Tqi^m!>jlYtuC4&z zaDj6_I21CU`96R^IPguQ6u10v{U*5@owV{^nO3moa0K$ygsos@hppfT6Sji64o^iu z!MaX7oWUlMZ!>_#s7~Y7DL$Za4X#(hwEQi7W5y8QjUF1HTy6?z6KPw^uyVdr28G49 zmZ4`6r^rw1Ra1$74~sNidfESiaZLr}RR+6kZHigi^-bkgxYsMdUHr~%n*%D;I0r#r z47g%{s~$gY!A3>Sw2o-Y5ZUYsHFg0Q{JON7`V&V$=k6&<$~?N*EBLy6 zjVX;YN5?m=M>Q4z@DTeEq0H7Pj{|X55qw*7hy};d#ICS3djKrmQl=4(Y$?+KOT#6$ zz|wGm`(bH+xZFLkbW5QJ!ctz%FgWG32SU^>g|`9KEyX?+u5PJnJ80cf@LuSuXCmN% zw0{c88Znjm6!8>DYO~vTIY&(uVwzP6ewu=2rv|uxPCAol<|s7sKpjbnvBlL0h;F#- z&bkbS&BipRl6h0i_x6{!X%=c3ttqLcnfalWZ>p1j60LgZ+mzJ{-&9^_u^s^8MOmrq!R0^-6mw~;H-1^i_10EGB_rk==4wN zO(64smc?wUddtFm;_81nl4zIJ$5HCFw;4@ipu68?mk4m$76y~H%Pm`@boa%bcsdx6 z@^O>(X%+-amdoM;a|C8(v0RdMWB;tyV>DCTu3mv@#-u|0U)#tR+pq9#d);Sw!`Q+J z8{T--re~dgRzZ*03I)nRLb*qfknzu>Ou2J^_ibNkkcz|2U|>?z#~0BiRfHSuQ`F1d zzd^CNO=I$g&Q-&~QuaC?X`{a(CA~oJQLQ&;AtY7-c>I{d0E@MdyJOc&4K}N!-uiMQ zQ|pdLOmAQ3Ru$wCS&M)we=2n~cpOkEO@92GmaJ}v4>j3DUeii&mu)YMlop~ie#`ZL z+j|BD{^V9L<{hFjI)bdEtm2(M=1E z+eUe(tS?VA%G3sw!j2z5qSeUQekX!|-Kb1Beua}5kE>LO)<-iE{n*&l5e3ZT{=Gl4XJl5koyPgJ_8cA<&c2~lewt`51KPeTj zQ1r1zuA9_!S9LYrVEw_^V^kl}7SzJUj1jd^1%gF4(9xKuhZo6X7+bg`VhEQNT6QGP`Cp=#w(Q!2806uxZJae3V8+&em z5G}$VA{SF=9>3l~flK4|VZ9@N+#yxw#T9UC`(-$~VGx9CIoRq$mT>4UjW_$Y0km!7 z`NhZ#c)i3M!MgctG!M@ox<#HXkngdYJRuB`B1YtGuz$8*t%@8kbjLlIff~lbtUA`A z1sB;Q<9i_rBL~eWK<$7?_uh}faMi)*oQp&REHvTeKMtZzF?(9bL%2YHW@#VE6e;I} zPp)>fYx0fKCAKiDr9h>l%ILSyEK;>(iyhzg8n9H7k!U~4EZc2>mSh?Yc>EadOj#|9 zaafO?=FKo@?us%%1CJWsVcEu97)w@T@dZKbj%rlbEt?4=QGd^d(z*~fhJ)OFccdZK zgnc)ny+XPi@g-~*n_ZEAl8-6!Z>cF#ye5U(lplX*&G!B@detb(L+l6Yn4YUiaH>$( zW>ljWLTKl0dNaz{;1+syB!OHhoqH!At6l4YsN8t@4 zp}p3s(kR+U8KQLWsI4^DHf+SAysQOjV0hc4k$ln7tY)vPTcorsJBN)1KgsK3x{Fl$Ngp~jy!WcG z47Xq}MC+!tOEt&$RkOLb8Zxix)uOG)HTH!~zuA@4y5d!T66lFji7x0FM5IMQ^MY-= z>?LhUE~>?wC2dgkjWY>JR-1^3EbMqYFixbBbNJSG$n92lgaIL~2!>s9LcNEt!4e5_0rW47ju1v#p|trW*rR9m*LW|9Xh!QTrx$@lf&$sTh> z(#n$Jt!0ZX#*o zI?%J)_?Sp0t!Of--X^DKY(pnP>puHWpJ_4VoQwhG-S`jash;F=MHw*C3}79S{tH;|7y^<4uy1tqtZE96uPKwkj_7fci zvp-2`Za<3XZN=6`$W&|S6GntaxNR>tY?fPpO0OVM{R>r2_;p<$Zb(KO@DZ`?nr{gx zMgX>HsFfPiqMxnO%Qnm)!;K6@6P@PmhY3sdMY~YdR=QaSEDPwM)hE3U!R^`Bnt}R# z(2n=)K~vRAWo_*DKdknZxeIP-6gDVcHH`Kyq;Y3=X$vJ{bg}Rvg8iJ{{1lpo=+H`k zB@d00lX@<(nvPCZfl*Dzjk>AEY)McFGrh@HG99ls-&JoZZrNY~9W284EJ8J%%kecz zBF%~=X4KO#9ug|WG;jmk2))6=NlqlY` zt=4A|a;yVxk2a*Gmnr940iqv?`6`@$ut8(9-B1#-gp#-lCZgGnMZlLkS#uKTJtT?9 zcx=t3D(6ULj%A!9#q;=ag$6#fu~$ziY2E7~eD-{Ot*7Eqn^fiOdnGegdk{JyDpX;1 zTr@JJvJf-8W?=U!_gS={S?;8|7Je3ixEWs>wG%9~w=l7Ui)C#52*Enm9?S!Oj(c}< zpA|YQ2*9=~mC;kHwj5X)51iI>tMdf!Q-uNaN`b;pd+u*SVYa)zTotd9Rr1T*A8^6` z7Z3&63aEnnaU7>Q3)9i{xvPLL2k7}y^I@^u3DP}RNG_w^>+jt7$B#pNV(DMPd}LS4 z3~l8P(dNGN|AjwjuZKNgCcqjVk2+O%CA#fwlEF65D_4?$aY4D=>fy}@hh%GnSO z0pn1iz8^v95P01B+tmfJCg_5Muk=Ey62rckAoy3~X=RtmMY@kNA{ogP1yT$xbSHM( zrLO#|sq>ak;%Ftzi5sPVLY_uq8%e`@Jk~uO8u*GFsRsVhT(~ny_rwU+3nSLki z$dJRJm3Guok>BZ-76)2Quna0iSBO220t1;Xi`-z=^y1czte0CCcBJ_dHdU^!h_bIt zs#&l%C-%U%7igYvnQQgOto-q!*&sVB zew!>-YUGF!@QBoc*$V1@11Py=H-O*Xh^#EisBY#+!pPR7eAubG&MmJ&d^+?Ol{m-2 z!gkl_9nxO)=3?G|2;4UBZ%!AI-&}&6lb<$k4FBTO8q^b7liEa}APC&|&JZzfBF`hm z^v~gl>nCYj1)KISG>ShcW(v!Mo0x8i6ZGKS>N=LD2nYc1y~Qd?VynszBB87Sw+#EQ^`HIRH#y9 zfVQoR&_mhiQ4<@XVnOIdHvsR6?0nOfcOYFbPw!Jqds5QC``Zlm5Q}IY_0AGas!?mBlk3L6l5%i$atxi&JF7u!NYzQYg$& z!8@oECcwURW80yu{i>Wf$H|o##A(SQ;y`%?f4WL$fL+9)N@ZHT(9sHx(`*qeB+~#K z$VTrX=TNlPRl0}kKU=j74MKB-q=^h7g+jcaI+8N*OA3G!Wk;&9R4K6RmuG}ZvxB@6s(tUWLC z|4GZDB`%i5S+aatT#{8pI0HbsPz9~3SeLVZw8xgBedG&$0wb$;`3taC^Qc;5H1R|C4U!l?9yx=wGlHwbhvl7tsg>k%-642FWBVh>@&9zlpb zh7WrT9r)*Xk01m6J>HWbNB$n~c`Lbp#~WqO+J1Z9=G$}j-JZMQ_WX^uN1$gHsoyh?j=x9oYxX^)`U9!rh%D?l#bHr_+OwRyJ62(-IgEhBdN)76SN z2PRofeKv|=+Cg(Bbf3EX&V{~AZaUf2aQ_geN~In!a%-%DCTMr z^WUUPw;!mUs{ATYBOLUakt=dTgH1DWqyN}xUVxDWRme>ME5pA5n0E##eAb{h{hpt#7yzAB-)1E zRK)>DT-~%#r23A`Ny^<9HcaM!iVcv-`E;t}%k8ad1P85EbtBbe&^}*n6N;Ahw;q`f zOMLMapvdyDb9>?20sAQdWUM=%y!o{lYMz#Ey#ubt^v&? zXCy3d*Otb>*&}eI9Q{aNJM1w`DlH%gob-kxrBf%pg_+c2PK}f+dFuCn5KsUTBtY+t zvN3`>kZ(xnftNj$`4}<}WOii#HHcW^#*+_+KmPLO^!v9jUcP(%(~qaGUjOO!yCY<& z6Y|Kk5OV4i_DC^G=vv{BR^%}wk@D?=9<`8@1n6a{D61=skp|?Yv1zsx9ceT29L--C zPk54i(pxUI)yO4c+&qkbNj*v}Ge#BQZ@fy^r9u{V0kx@QI=H(gJ(E^_X0?^BSsnEjiq$pZz zISBXEh5P@og9iXaK)b&-e^+2VN}z1Ehx+O_<)8&fyfjh5hwOGLBdPE)mX8i6OoH#x z8J;3zv*sgfRU9c!0s67MeupRnSDY;<;GQOuDpD&uFQlCSQt@$^>gr z6w@k&wQHz~d{ZSLC(~>*gi+UrXy>eu;wQcp%lKBA80oOqyY3w%Y=h+oJew-Z+ zCKj?2Ke7OOMsDJ5e`)_(fn%${u_-_hnnsR7s2@LOE~0)!=>Th(jj1B2dvd$QnX>iD zuDq0iSgw;h;IIy~6lc3X6vKTb$Z6vx7A~SR1{t%?Yxd3Y6kS|wb&x>@CU}>e6~!`5 z+~wD}_)0uVt;UXsgh9`H&321)mUtx#LVLgZ&)SXNCA-%=+&ih@Q3j@Y!(k^l0TGCynF)PAtir6&Lzq5SN zs6F%Hd=4L{8dXV2!cU%x6fe7CLZZB?20+3_D48fXgliAo13x5OAZ97n?5r^5~(RG;VW9t!0Zk(u-pt4N)LFC`dj6B%!xNWcsXlch8q z76r~Flm2zCY#@}Vo7Bjd@rvQDFp-v-d>iaZG>`#H&_D=dCk_(2)0KHLm`b_D-HSY# zvS6dyRy8EIsjAbgdYi7YJkfa(tLwn#nWxvVf1Bvl;w@g7q722-hN6KI(2i|_dM3d* ze}21MyUAw|(P?MhGU~K*iGg=z;5gcUs!Q@S%6q3UyC;0#$vUd2m;E@9{kT)A?8kSS z01Pal!#HTWBW$(2A^E-Zx-l>i1|el|s}PW5MzD>#5Kz33997Sphz&?CyejX z@ad8l=|I6;>;Cl5pkf`%&5)d*NupnJCq-4kJV;lPwX$7TZruJ_pD}9 zrmgGg+|&22sLXxOnmW07RgL#?&Ae==FkYaNtalU{<6$eL_PQ;c7w#1x@c2vcwk z8I-Kdi;ATJLlmtnqhyJUl&`!fQ6`7QQ!M$)OiJW%>zs_uDN1V>5%tUyw(wkD8jVxs zSe9MNj-_mOTq=II64g;&Qx%WQ_AHsPBS|G1Ch1;FN(6G;ra3-)JAfZfVjvbqf1qTI zm6$!Fa}-pP$AW*|Ou3KH$F2W7KR=f}tKwV6ru55-R?>+0ML@;lOH7+z1XL86x46?< zqXA!X73$ftOUQ3GY#Br@p>zpti9i7fk=ue#`v))}WvfL6BHIk3l)}!no&QLBG0z=Y zHHQm|{j6M74y&%XfIdj4P^4^3e{cWEoye+p_^#5((1b*scG&)a;w@39YZIW?2e?r^ zVdpKJQRrmg$(fL0Vy38#UB5lZyE zBv5S{=OVtn8KN1Wq1fQ>W+-kB@cTe)@ON`?C#;$fLs2CmGR72PA`W88e*~wc21co1 zEjAA1GzJ)RWaeeot2cv_N}ep**=;-hBu9>_6~XF8w+u^1xuBF0PWju5Geq|#Ey`#v zV$dW|?Qb4D?P^ucWrKmK}S2usn#FV8p*j9d|*z%RS;&l=2 z{*GJu^QW-NxCpP}pDmXUcS51}FF(Cfw`izxZuZxQ_Vm{+J^iFgLp}X9(9?%@bW1-! zx0_DYj5vNum6its%X8)r1>Cqb|MU!WW5sYVF5YOxR?E#UJlJ~AhdzdM$*Y44s3w?*6^rFI7d@rytODv z?>hL`i`gu#ssiYIg-&9I+Cv%7K^#a?U`k}|dMZ^_rR6o56cO8`CgKB=e0sXh=140B z&55NXVpmP%?}+zKf0K4*SXwxhT93W{Gj+5Eq9pN&{xd){;#)+qoYb>owJI(#`FK?-GS;OCrdiC%nqRI*E)01*KDtj^Xww7K^ zDoC%Uql(g#xayVlT=^uAGq|fqdAOEhQb2k!9Tk+mh>Kn>f7;2%j|;>eRYCPQqgg1_=J)f|pSStxAo-RwssKK}i<7~kR=8Pc>wszzv_Nv-vo{Y~p zOtMk#^w2UJ_@ExvdPhY+yN9lTR{i0)t`LtE7~_hl#Oib+yeNtV;MkH>cn9@@vMI`A ztJx4&psb;7f7?o9CfGR%(EIwz2(JO2t?ljPaf7sAD7u_%ThpRpO-H-Txu^n`2+%Aj z$9F15i67|VMN&@4!3zdZQKLo+_JvY?Zqm$Y!r)r zWep3sH*M6D^eo^8g&rsKzpX3X>567r&^{l9X5bYEI(&)Q_ z#l!D$NZZxw{3JcGKc|jlA6^@Iy?h3Rvgs(pWWDU&IO(+Wo-$+&!|cWjJEle>E3=~6 zc8jpuQ68lyOUEFrYxmX7a_mqJwoB%^#HZaKW6{+r?!`(2t~YwHcondfdNq;;0hcB# zt)YGee}~mDSZ@$pO1kD+y=t}$FWej3=!8H2(rBxXr#7M0pENbf)i0i>sBYLo1@~5l zL_Mhkt^R7sc4?QvI~=*LoL)AhpK;J=hV@VH9Ob?+Lg%`HZF~-V21Vag znvIsQ!2&6T$wd(`DqUPv9ts$PFFzN{%|$^*e_aS-0jRVrFSP7JEpp<55_W5#mE7+5 zVp#fq-KBB))AqZLmyh~r>`^9rgmxKgwrXrbQPOTrdGIc8NOOjz4GGm|x{L?o^6=@n z>~LesIf%_-<0ap>`>rt&69Nvfe~xtC>8aZBv!O^pNJ zl29ywto#ib9+?UQtSls%kefNWEzo|UlmJQ!c7)n5Gh|?;vfrTnCy2bkH29>&1`>%rM(r#{XH9J?)}xA|efqkguN%UXASvtMT~Sf7O|R@w zBH$`Lxc)0BlJ(GHQ6aZdd(n-DkvM>5SpYV72ITv1YONN8XWRRc1hvt>m?3}V7dlQR^#IHW2a3Czjra4_lB<42*WJC@rGvZ2GWtH_Ne zo1m0hmsZt5S0;5uGO3pOⅈ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 DQSz2I delta 65897 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

L9`+XgGXY83-Yvrt4np)-h=vRs1o&XR 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index a0cfce29175..6767b8e38e3 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,5 +1,5 @@ var fabric = fabric || { - version: "1.6.5" + version: "1.6.6" }; if (typeof exports !== "undefined") { @@ -551,15 +551,17 @@ fabric.Collection = { } }; fabric.util.getBoundsOfArc = function(fx, fy, rx, ry, rot, large, sweep, tx, ty) { - var fromX = 0, fromY = 0, bound = [], bounds = [], segs = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot), boundCopy = [ [], [] ]; + var fromX = 0, fromY = 0, bound, bounds = [], segs = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot); for (var i = 0, len = segs.length; i < len; i++) { bound = getBoundsOfCurve(fromX, fromY, segs[i][0], segs[i][1], segs[i][2], segs[i][3], segs[i][4], segs[i][5]); - boundCopy[0].x = bound[0].x + fx; - boundCopy[0].y = bound[0].y + fy; - boundCopy[1].x = bound[1].x + fx; - boundCopy[1].y = bound[1].y + fy; - bounds.push(boundCopy[0]); - bounds.push(boundCopy[1]); + bounds.push({ + x: bound[0].x + fx, + y: bound[0].y + fy + }); + bounds.push({ + x: bound[1].x + fx, + y: bound[1].y + fy + }); fromX = segs[i][4]; fromY = segs[i][5]; } @@ -795,7 +797,9 @@ fabric.Collection = { (function() { function extend(destination, source, deep) { if (deep) { - if (source instanceof Array) { + if (!fabric.isLikelyNode && source instanceof Element) { + destination = source; + } else if (source instanceof Array) { destination = source.map(function(v) { return clone(v, deep); }); @@ -3437,6 +3441,13 @@ fabric.Pattern = fabric.util.createClass({ this.overlayImage = null; this.backgroundColor = ""; this.overlayColor = ""; + if (this._hasITextHandlers) { + this.off("selection:cleared", this._canvasITextSelectionClearedHanlder); + this.off("object:selected", this._canvasITextSelectionClearedHanlder); + this.off("mouse:up", this._mouseUpITextHandler); + this._iTextInstances = null; + this._hasITextHandlers = false; + } this.clearContext(this.contextContainer); this.fire("canvas:cleared"); this.renderAll(); @@ -5577,7 +5588,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { return this.__toDataURLWithMultiplier(format, quality, cropping, multiplier); }, __toDataURLWithMultiplier: function(format, quality, cropping, multiplier) { - var origWidth = this.getWidth(), origHeight = this.getHeight(), scaledWidth = (cropping.width || this.getWidth()) * multiplier, scaledHeight = (cropping.width || this.getHeight()) * multiplier, zoom = this.getZoom(), newZoom = zoom * multiplier, vp = this.viewportTransform, translateX = (vp[4] - cropping.left) * multiplier, translateY = (vp[5] - cropping.top) * multiplier, newVp = [ newZoom, 0, 0, newZoom, translateX, translateY ], originalInteractive = this.interactive; + var origWidth = this.getWidth(), origHeight = this.getHeight(), scaledWidth = (cropping.width || this.getWidth()) * multiplier, scaledHeight = (cropping.height || this.getHeight()) * multiplier, zoom = this.getZoom(), newZoom = zoom * multiplier, vp = this.viewportTransform, translateX = (vp[4] - cropping.left) * multiplier, translateY = (vp[5] - cropping.top) * multiplier, newVp = [ newZoom, 0, 0, newZoom, translateX, translateY ], originalInteractive = this.interactive; this.viewportTransform = newVp; this.interactive && (this.interactive = false); if (origWidth !== scaledWidth || origHeight !== scaledHeight) { @@ -6680,7 +6691,9 @@ fabric.util.object.extend(fabric.Object.prototype, { extend(origin[destination], tmpObj, deep); } function _isEqual(origValue, currentValue) { - if (origValue instanceof Array) { + if (!fabric.isLikelyNode && origValue instanceof Element) { + return origValue === currentValue; + } else if (origValue instanceof Array) { if (origValue.length !== currentValue.length) { return false; } @@ -9833,6 +9846,66 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ }; })(typeof exports !== "undefined" ? exports : this); +(function(global) { + "use strict"; + var fabric = global.fabric || (global.fabric = {}), extend = fabric.util.object.extend, filters = fabric.Image.filters, createClass = fabric.util.createClass; + filters.Contrast = createClass(filters.BaseFilter, { + type: "Contrast", + initialize: function(options) { + options = options || {}; + this.contrast = options.contrast || 0; + }, + applyTo: function(canvasEl) { + var context = canvasEl.getContext("2d"), imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), data = imageData.data, contrastF = 259 * (this.contrast + 255) / (255 * (259 - this.contrast)); + for (var i = 0, len = data.length; i < len; i += 4) { + data[i] = contrastF * (data[i] - 128) + 128; + data[i + 1] = contrastF * (data[i + 1] - 128) + 128; + data[i + 2] = contrastF * (data[i + 2] - 128) + 128; + } + context.putImageData(imageData, 0, 0); + }, + toObject: function() { + return extend(this.callSuper("toObject"), { + contrast: this.contrast + }); + } + }); + fabric.Image.filters.Contrast.fromObject = function(object) { + return new fabric.Image.filters.Contrast(object); + }; +})(typeof exports !== "undefined" ? exports : this); + +(function(global) { + "use strict"; + var fabric = global.fabric || (global.fabric = {}), extend = fabric.util.object.extend, filters = fabric.Image.filters, createClass = fabric.util.createClass; + filters.Saturate = createClass(filters.BaseFilter, { + type: "Saturate", + initialize: function(options) { + options = options || {}; + this.saturate = options.saturate || 0; + this.loadProgram(); + }, + applyTo: function(canvasEl) { + var context = canvasEl.getContext("2d"), imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), data = imageData.data, max, adjust = -this.saturate * .01; + for (var i = 0, len = data.length; i < len; i += 4) { + max = Math.max(data[i], data[i + 1], data[i + 2]); + data[i] += max !== data[i] ? (max - data[i]) * adjust : 0; + data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0; + data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0; + } + context.putImageData(imageData, 0, 0); + }, + toObject: function() { + return extend(this.callSuper("toObject"), { + saturate: this.saturate + }); + } + }); + fabric.Image.filters.Saturate.fromObject = function(object) { + return new fabric.Image.filters.Saturate(object); + }; +})(typeof exports !== "undefined" ? exports : this); + (function(global) { "use strict"; var fabric = global.fabric || (global.fabric = {}), extend = fabric.util.object.extend, clone = fabric.util.object.clone, toFixed = fabric.util.toFixed, NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS, MIN_TEXT_WIDTH = 2; @@ -10875,6 +10948,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ this.initRemovedHandler(); this.initCursorSelectionHandlers(); this.initDoubleClickSimulation(); + this.mouseMoveHandler = this.mouseMoveHandler.bind(this); }, initSelectedHandler: function() { this.on("selected", function() { @@ -10887,40 +10961,50 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ initAddedHandler: function() { var _this = this; this.on("added", function() { - if (this.canvas && !this.canvas._hasITextHandlers) { - this.canvas._hasITextHandlers = true; - this._initCanvasHandlers(); - } - if (_this.canvas) { - _this.canvas._iTextInstances = _this.canvas._iTextInstances || []; - _this.canvas._iTextInstances.push(_this); + var canvas = _this.canvas; + if (canvas) { + if (!canvas._hasITextHandlers) { + canvas._hasITextHandlers = true; + _this._initCanvasHandlers(canvas); + } + canvas._iTextInstances = canvas._iTextInstances || []; + canvas._iTextInstances.push(_this); } }); }, initRemovedHandler: function() { var _this = this; this.on("removed", function() { - if (_this.canvas) { - _this.canvas._iTextInstances = _this.canvas._iTextInstances || []; - fabric.util.removeFromArray(_this.canvas._iTextInstances, _this); + var canvas = _this.canvas; + if (canvas) { + canvas._iTextInstances = canvas._iTextInstances || []; + fabric.util.removeFromArray(canvas._iTextInstances, _this); + if (canvas._iTextInstances.length === 0) { + canvas._hasITextHandlers = false; + _this._removeCanvasHandlers(canvas); + } } }); }, - _initCanvasHandlers: function() { - var _this = this; - this.canvas.on("selection:cleared", function() { - fabric.IText.prototype.exitEditingOnOthers(_this.canvas); - }); - this.canvas.on("mouse:up", function() { - if (_this.canvas._iTextInstances) { - _this.canvas._iTextInstances.forEach(function(obj) { + _initCanvasHandlers: function(canvas) { + canvas._canvasITextSelectionClearedHanlder = function() { + fabric.IText.prototype.exitEditingOnOthers(canvas); + }.bind(this); + canvas._mouseUpITextHandler = function() { + if (canvas._iTextInstances) { + canvas._iTextInstances.forEach(function(obj) { obj.__isMousedown = false; }); } - }); - this.canvas.on("object:selected", function() { - fabric.IText.prototype.exitEditingOnOthers(_this.canvas); - }); + }.bind(this); + canvas.on("selection:cleared", canvas._canvasITextSelectionClearedHanlder); + canvas.on("object:selected", canvas._canvasITextSelectionClearedHanlder); + canvas.on("mouse:up", canvas._mouseUpITextHandler); + }, + _removeCanvasHandlers: function(canvas) { + canvas.off("selection:cleared", canvas._canvasITextSelectionClearedHanlder); + canvas.off("object:selected", canvas._canvasITextSelectionClearedHanlder); + canvas.off("mouse:up", canvas._mouseUpITextHandler); }, _tick: function() { this._currentTickState = this._animateCursor(this, 1, this.cursorDuration, "_onTickComplete"); @@ -11091,8 +11175,8 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ this.canvas.fire("text:editing:entered", { target: this }); - this.canvas.renderAll(); this.initMouseMoveHandler(); + this.canvas.renderAll(); return this; }, exitEditingOnOthers: function(canvas) { @@ -11106,7 +11190,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ } }, initMouseMoveHandler: function() { - this.canvas.on("mouse:move", this.mouseMoveHandler.bind(this)); + this.canvas.on("mouse:move", this.mouseMoveHandler); }, mouseMoveHandler: function(options) { if (!this.__isMousedown || !this.isEditing) { diff --git a/package.json b/package.json index cae5715c329..5aa4aea960b 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", "homepage": "http://fabricjs.com/", - "version": "1.6.5", + "version": "1.6.6", "author": "Juriy Zaytsev ", "contributors": [ { diff --git a/src/mixins/stateful.mixin.js b/src/mixins/stateful.mixin.js index f97d9505a5a..a51d2cb2f86 100644 --- a/src/mixins/stateful.mixin.js +++ b/src/mixins/stateful.mixin.js @@ -14,7 +14,11 @@ } function _isEqual(origValue, currentValue) { - if (origValue instanceof Array) { + if (!fabric.isLikelyNode && origValue instanceof Element) { + // avoid checking deep html elements + return origValue === currentValue; + } + else if (origValue instanceof Array) { if (origValue.length !== currentValue.length) { return false } diff --git a/src/util/lang_object.js b/src/util/lang_object.js index b9da32003fd..8961651afc3 100644 --- a/src/util/lang_object.js +++ b/src/util/lang_object.js @@ -1,5 +1,4 @@ (function() { - /** * Copies all enumerable properties of one object to another * @memberOf fabric.util.object @@ -7,12 +6,17 @@ * @param {Object} source Where to copy from * @return {Object} */ + function extend(destination, source, deep) { // JScript DontEnum bug is not taken care of // the deep clone is for internal use, is not meant to avoid // javascript traps or cloning html element or self referenced objects. if (deep) { - if (source instanceof Array) { + if (!fabric.isLikelyNode && source instanceof Element) { + // avoid cloning deep images, canvases, + destination = source; + } + else if (source instanceof Array) { destination = source.map(function(v) { return clone(v, deep) }) diff --git a/test/unit/object.js b/test/unit/object.js index 6b9090617cd..c3449ce9d7b 100644 --- a/test/unit/object.js +++ b/test/unit/object.js @@ -375,7 +375,6 @@ equal(boundingRect.top, 0); equal(boundingRect.width, 0); equal(boundingRect.height, 0); - cObj.set('width', 123).setCoords(); boundingRect = cObj.getBoundingRect(); equal(boundingRect.left, 0); @@ -803,19 +802,14 @@ var onChange = function(){ onChangeFired = true; }; var callbacks = { onComplete: onComplete, onChange: onChange }; - ok(typeof object.fxStraighten == 'function'); equal(object.fxStraighten(callbacks), object, 'should be chainable'); - equal(fabric.util.toFixed(object.get('angle'), 0), 43); - setTimeout(function(){ ok(onCompleteFired); ok(onChangeFired); - equal(object.get('angle'), 0, 'angle should be set to 0 by the end of animation'); equal(object.fxStraighten(), object, 'should work without callbacks'); - start(); }, 1000); });