From c38e4bcbac972bd045b7a0310b43a54f542b357a Mon Sep 17 00:00:00 2001 From: Asturur Date: Sat, 25 Mar 2017 18:00:40 +0100 Subject: [PATCH 1/4] fixes --- src/mixins/itext_behavior.mixin.js | 2 +- src/mixins/itext_click_behavior.mixin.js | 1 - src/mixins/itext_key_behavior.mixin.js | 4 ++-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index ddd48ae5b74..c4faeb1fea3 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -345,7 +345,7 @@ } this.isEditing = true; - + this.selected = true; this.initHiddenTextarea(e); this.hiddenTextarea.focus(); this._updateTextarea(); diff --git a/src/mixins/itext_click_behavior.mixin.js b/src/mixins/itext_click_behavior.mixin.js index eb539207746..9152293658d 100644 --- a/src/mixins/itext_click_behavior.mixin.js +++ b/src/mixins/itext_click_behavior.mixin.js @@ -87,7 +87,6 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot return; } var pointer = this.canvas.getPointer(options.e); - this.__mousedownX = pointer.x; this.__mousedownY = pointer.y; this.__isMousedown = true; diff --git a/src/mixins/itext_key_behavior.mixin.js b/src/mixins/itext_key_behavior.mixin.js index a475b5213e7..5d207c028c9 100644 --- a/src/mixins/itext_key_behavior.mixin.js +++ b/src/mixins/itext_key_behavior.mixin.js @@ -7,8 +7,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.hiddenTextarea = fabric.document.createElement('textarea'); this.hiddenTextarea.setAttribute('autocapitalize', 'off'); var style = this._calcTextareaPosition(); - this.hiddenTextarea.style.cssText = 'position: absolute; top: ' + style.top + '; left: ' + style.left + ';' - + ' opacity: 0; width: 0px; height: 0px; z-index: -999;'; + this.hiddenTextarea.style.cssText = 'white-space: nowrap; position: absolute; top: ' + style.top + + '; left: ' + style.left + '; opacity: 0; width: 1px; height: 1px; z-index: -999;'; fabric.document.body.appendChild(this.hiddenTextarea); fabric.util.addListener(this.hiddenTextarea, 'keydown', this.onKeyDown.bind(this)); From d844beac0b40dfb32e39b3640c369c2d6330273a Mon Sep 17 00:00:00 2001 From: Asturur Date: Sat, 25 Mar 2017 18:11:23 +0100 Subject: [PATCH 2/4] fix style typer egressions --- src/mixins/itext_behavior.mixin.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/mixins/itext_behavior.mixin.js b/src/mixins/itext_behavior.mixin.js index c4faeb1fea3..af1397df768 100644 --- a/src/mixins/itext_behavior.mixin.js +++ b/src/mixins/itext_behavior.mixin.js @@ -730,7 +730,7 @@ } } } - var newStyle = style || currentLineStyles[charIndex - 1]; + var newStyle = style || clone(currentLineStyles[charIndex - 1]); newStyle && (this.styles[lineIndex][charIndex] = newStyle); this._forceClearCache = true; }, @@ -766,8 +766,14 @@ * @param {Number} offset Can be -1 or +1 */ shiftLineStyles: function(lineIndex, offset) { - // shift all line styles by 1 upward + // shift all line styles by 1 upward or downward var clonedStyles = clone(this.styles); + for (var line in clonedStyles) { + var numericLine = parseInt(line, 10); + if (numericLine <= lineIndex) { + delete clonedStyles[numericLine]; + } + } for (var line in this.styles) { var numericLine = parseInt(line, 10); if (numericLine > lineIndex) { From d61d56bb2a2d131133993a4b3ba17ecaa2bdbe3d Mon Sep 17 00:00:00 2001 From: Asturur Date: Sat, 25 Mar 2017 18:44:09 +0100 Subject: [PATCH 3/4] support svg crossorigin on images --- src/elements_parser.js | 3 ++- src/parser.js | 32 +++++++++++++++++++------------- src/shapes/image.class.js | 2 +- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/elements_parser.js b/src/elements_parser.js index 30aa7eedb26..6e79e996d3f 100644 --- a/src/elements_parser.js +++ b/src/elements_parser.js @@ -1,9 +1,10 @@ -fabric.ElementsParser = function(elements, callback, options, reviver) { +fabric.ElementsParser = function(elements, callback, options, reviver, parsingOptions) { this.elements = elements; this.callback = callback; this.options = options; this.reviver = reviver; this.svgUid = (options && options.svgUid) || 0; + this.parsingOptions = parsingOptions; }; fabric.ElementsParser.prototype.parse = function() { diff --git a/src/parser.js b/src/parser.js index 3c71c44b762..5918f00a5a1 100644 --- a/src/parser.js +++ b/src/parser.js @@ -602,8 +602,10 @@ * @param {Function} callback Callback to call when parsing is finished; * It's being passed an array of elements (parsed from a document). * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created. + * @param {Object} [parsingOptions] options for parsing document + * @param {String} [parsingOptions.crossOrigin] crossOrigin settings */ - fabric.parseSVGDocument = function(doc, callback, reviver) { + fabric.parseSVGDocument = function(doc, callback, reviver, parsingOptions) { if (!doc) { return; } @@ -613,7 +615,7 @@ var svgUid = fabric.Object.__uid++, options = applyViewboxTransform(doc), descendants = fabric.util.toArray(doc.getElementsByTagName('*')); - + options.crossOrigin = parsingOptions.crossOrigin; options.svgUid = svgUid; if (descendants.length === 0 && fabric.isLikelyNode) { @@ -645,7 +647,7 @@ if (callback) { callback(instances, options); } - }, clone(options), reviver); + }, clone(options), reviver, parsingOptions); }; var reFontDeclaration = new RegExp( @@ -797,8 +799,8 @@ * @param {Object} [options] Options object * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created. */ - parseElements: function(elements, callback, options, reviver) { - new fabric.ElementsParser(elements, callback, options, reviver).parse(); + parseElements: function(elements, callback, options, reviver, parsingOptions) { + new fabric.ElementsParser(elements, callback, options, reviver, parsingOptions).parse(); }, /** @@ -924,8 +926,10 @@ * @param {String} url * @param {Function} callback * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created. + * @param {Object} [options] Object containing options for parsing + * @param {String} [options.crossOrigin] crossOrigin crossOrigin setting to use for external resources */ - loadSVGFromURL: function(url, callback, reviver) { + loadSVGFromURL: function(url, callback, reviver, options) { url = url.replace(/^\n\s*/, '').trim(); new fabric.util.request(url, { @@ -946,9 +950,9 @@ callback && callback(null); } - fabric.parseSVGDocument(xml.documentElement, function (results, options) { - callback && callback(results, options); - }, reviver); + fabric.parseSVGDocument(xml.documentElement, function (results, _options) { + callback && callback(results, _options); + }, reviver, options); } }, @@ -958,8 +962,10 @@ * @param {String} string * @param {Function} callback * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created. + * @param {Object} [options] Object containing options for parsing + * @param {String} [options.crossOrigin] crossOrigin crossOrigin setting to use for external resources */ - loadSVGFromString: function(string, callback, reviver) { + loadSVGFromString: function(string, callback, reviver, options) { string = string.trim(); var doc; if (typeof DOMParser !== 'undefined') { @@ -975,9 +981,9 @@ doc.loadXML(string.replace(//i, '')); } - fabric.parseSVGDocument(doc.documentElement, function (results, options) { - callback(results, options); - }, reviver); + fabric.parseSVGDocument(doc.documentElement, function (results, _options) { + callback(results, _options); + }, reviver, options); } }); diff --git a/src/shapes/image.class.js b/src/shapes/image.class.js index fecbedc6dc3..51fc5556069 100644 --- a/src/shapes/image.class.js +++ b/src/shapes/image.class.js @@ -655,7 +655,7 @@ * @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement} */ fabric.Image.ATTRIBUTE_NAMES = - fabric.SHARED_ATTRIBUTES.concat('x y width height preserveAspectRatio xlink:href'.split(' ')); + fabric.SHARED_ATTRIBUTES.concat('x y width height preserveAspectRatio xlink:href crossOrigin'.split(' ')); /** * Returns {@link fabric.Image} instance from an SVG element From f80d27edcc8c08dd174bea1c1f4500fe2c7678aa Mon Sep 17 00:00:00 2001 From: Asturur Date: Sat, 25 Mar 2017 18:53:47 +0100 Subject: [PATCH 4/4] rebuilt --- CHANGELOG.md | 7 ++++++ HEADER.js | 2 +- dist/fabric.js | 56 +++++++++++++++++++++++++---------------- dist/fabric.min.js | 18 ++++++------- dist/fabric.min.js.gz | Bin 69911 -> 69961 bytes dist/fabric.require.js | 43 ++++++++++++++++++------------- package.json | 2 +- src/parser.js | 2 +- 8 files changed, 79 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8d6332b7dd..5a83531800c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +**Version 1.7.9** + +- Fix: Avoid textarea wrapping from chome v57+ [#3804](https://github.com/kangax/fabric.js/pull/3804) +- Fix: double click needed to move cursor when enterEditing is called programatically [#3804](https://github.com/kangax/fabric.js/pull/3804) +- Fix: Style regression when inputing new style objects [#3804](https://github.com/kangax/fabric.js/pull/3804) +- Add: try to support crossOrigin for svg image tags [#3804](https://github.com/kangax/fabric.js/pull/3804) + **Version 1.7.8** - Fix: Fix dirty flag propagation [#3782](https://github.com/kangax/fabric.js/pull/3782) diff --git a/HEADER.js b/HEADER.js index 295c7cd0294..3d06b294af2 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.7.8" }; +var fabric = fabric || { version: "1.7.9" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/dist/fabric.js b/dist/fabric.js index 24d67f348c9..13b54c4722d 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=json,gestures minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.7.8" }; +var fabric = fabric || { version: "1.7.9" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -3803,8 +3803,10 @@ if (typeof console !== 'undefined') { * @param {Function} callback Callback to call when parsing is finished; * It's being passed an array of elements (parsed from a document). * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created. + * @param {Object} [parsingOptions] options for parsing document + * @param {String} [parsingOptions.crossOrigin] crossOrigin settings */ - fabric.parseSVGDocument = function(doc, callback, reviver) { + fabric.parseSVGDocument = function(doc, callback, reviver, parsingOptions) { if (!doc) { return; } @@ -3814,7 +3816,7 @@ if (typeof console !== 'undefined') { var svgUid = fabric.Object.__uid++, options = applyViewboxTransform(doc), descendants = fabric.util.toArray(doc.getElementsByTagName('*')); - + options.crossOrigin = parsingOptions && parsingOptions.crossOrigin; options.svgUid = svgUid; if (descendants.length === 0 && fabric.isLikelyNode) { @@ -3846,7 +3848,7 @@ if (typeof console !== 'undefined') { if (callback) { callback(instances, options); } - }, clone(options), reviver); + }, clone(options), reviver, parsingOptions); }; var reFontDeclaration = new RegExp( @@ -3998,8 +4000,8 @@ if (typeof console !== 'undefined') { * @param {Object} [options] Options object * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created. */ - parseElements: function(elements, callback, options, reviver) { - new fabric.ElementsParser(elements, callback, options, reviver).parse(); + parseElements: function(elements, callback, options, reviver, parsingOptions) { + new fabric.ElementsParser(elements, callback, options, reviver, parsingOptions).parse(); }, /** @@ -4125,8 +4127,10 @@ if (typeof console !== 'undefined') { * @param {String} url * @param {Function} callback * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created. + * @param {Object} [options] Object containing options for parsing + * @param {String} [options.crossOrigin] crossOrigin crossOrigin setting to use for external resources */ - loadSVGFromURL: function(url, callback, reviver) { + loadSVGFromURL: function(url, callback, reviver, options) { url = url.replace(/^\n\s*/, '').trim(); new fabric.util.request(url, { @@ -4147,9 +4151,9 @@ if (typeof console !== 'undefined') { callback && callback(null); } - fabric.parseSVGDocument(xml.documentElement, function (results, options) { - callback && callback(results, options); - }, reviver); + fabric.parseSVGDocument(xml.documentElement, function (results, _options) { + callback && callback(results, _options); + }, reviver, options); } }, @@ -4159,8 +4163,10 @@ if (typeof console !== 'undefined') { * @param {String} string * @param {Function} callback * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created. + * @param {Object} [options] Object containing options for parsing + * @param {String} [options.crossOrigin] crossOrigin crossOrigin setting to use for external resources */ - loadSVGFromString: function(string, callback, reviver) { + loadSVGFromString: function(string, callback, reviver, options) { string = string.trim(); var doc; if (typeof DOMParser !== 'undefined') { @@ -4176,21 +4182,22 @@ if (typeof console !== 'undefined') { doc.loadXML(string.replace(//i, '')); } - fabric.parseSVGDocument(doc.documentElement, function (results, options) { - callback(results, options); - }, reviver); + fabric.parseSVGDocument(doc.documentElement, function (results, _options) { + callback(results, _options); + }, reviver, options); } }); })(typeof exports !== 'undefined' ? exports : this); -fabric.ElementsParser = function(elements, callback, options, reviver) { +fabric.ElementsParser = function(elements, callback, options, reviver, parsingOptions) { this.elements = elements; this.callback = callback; this.options = options; this.reviver = reviver; this.svgUid = (options && options.svgUid) || 0; + this.parsingOptions = parsingOptions; }; fabric.ElementsParser.prototype.parse = function() { @@ -19222,7 +19229,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement} */ fabric.Image.ATTRIBUTE_NAMES = - fabric.SHARED_ATTRIBUTES.concat('x y width height preserveAspectRatio xlink:href'.split(' ')); + fabric.SHARED_ATTRIBUTES.concat('x y width height preserveAspectRatio xlink:href crossOrigin'.split(' ')); /** * Returns {@link fabric.Image} instance from an SVG element @@ -24209,7 +24216,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { } this.isEditing = true; - + this.selected = true; this.initHiddenTextarea(e); this.hiddenTextarea.focus(); this._updateTextarea(); @@ -24594,7 +24601,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { } } } - var newStyle = style || currentLineStyles[charIndex - 1]; + var newStyle = style || clone(currentLineStyles[charIndex - 1]); newStyle && (this.styles[lineIndex][charIndex] = newStyle); this._forceClearCache = true; }, @@ -24630,8 +24637,14 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { * @param {Number} offset Can be -1 or +1 */ shiftLineStyles: function(lineIndex, offset) { - // shift all line styles by 1 upward + // shift all line styles by 1 upward or downward var clonedStyles = clone(this.styles); + for (var line in clonedStyles) { + var numericLine = parseInt(line, 10); + if (numericLine <= lineIndex) { + delete clonedStyles[numericLine]; + } + } for (var line in this.styles) { var numericLine = parseInt(line, 10); if (numericLine > lineIndex) { @@ -24846,7 +24859,6 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot return; } var pointer = this.canvas.getPointer(options.e); - this.__mousedownX = pointer.x; this.__mousedownY = pointer.y; this.__isMousedown = true; @@ -25003,8 +25015,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.hiddenTextarea = fabric.document.createElement('textarea'); this.hiddenTextarea.setAttribute('autocapitalize', 'off'); var style = this._calcTextareaPosition(); - this.hiddenTextarea.style.cssText = 'position: absolute; top: ' + style.top + '; left: ' + style.left + ';' - + ' opacity: 0; width: 0px; height: 0px; z-index: -999;'; + this.hiddenTextarea.style.cssText = 'white-space: nowrap; position: absolute; top: ' + style.top + + '; left: ' + style.left + '; opacity: 0; width: 1px; height: 1px; z-index: -999;'; fabric.document.body.appendChild(this.hiddenTextarea); fabric.util.addListener(this.hiddenTextarea, 'keydown', this.onKeyDown.bind(this)); diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 6f4e02dab3c..3e909662409 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,9 +1,9 @@ -var fabric=fabric||{version:"1.7.8"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E")),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.iMatrix=[1,0,0,1,0,0],fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);"undefined"!=typeof e&&(this.clipTo=new Function("ctx",e))}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?D-=2*f:1===c&&D<0&&(D+=2*f);for(var E=Math.ceil(Math.abs(D/f*2)),I=[],L=D/E,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=A+L,R=0;R=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){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){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return _;if((f||d)&&(x=" translate("+y(f)+" "+y(d)+") "),r=x+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r), -_}function g(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}var p=t.fabric||(t.fabric={}),v=p.util.object.extend,b=p.util.object.clone,m=p.util.toFixed,y=p.util.parseUnit,_=p.util.multiplyTransformMatrices,x=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,C=/^(symbol|image|marker|pattern|view|svg)$/i,S=/^(?:pattern|defs|symbol|metadata|clipPath|mask)$/i,w=/^(symbol|g|a|svg)$/i,O={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX",opacity:"opacity"},T={stroke:"strokeOpacity",fill:"fillOpacity"};p.cssRules={},p.gradientDefs={},p.parseTransformAttribute=function(){function t(t,e){var i=Math.cos(e[0]),r=Math.sin(e[0]),n=0,s=0;3===e.length&&(n=e[1],s=e[2]),t[0]=i,t[1]=r,t[2]=-r,t[3]=i,t[4]=n-(i*n-r*s),t[5]=s-(r*n+i*s)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e,i){t[i]=Math.tan(p.util.degreesToRadians(e[0]))}function r(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var n=[1,0,0,1,0,0],s=p.reNum,o="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+s+")\\s*\\))",h="(?:(skewY)\\s*\\(\\s*("+s+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+")"+o+"("+s+"))?\\s*\\))",l="(?:(scale)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",u="(?:(translate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",f="(?:(matrix)\\s*\\(\\s*("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")\\s*\\))",d="(?:"+f+"|"+u+"|"+l+"|"+c+"|"+a+"|"+h+")",g="(?:"+d+"(?:"+o+"*"+d+")*)",v="^\\s*(?:"+g+"?)\\s*$",b=new RegExp(v),m=new RegExp(d,"g");return function(s){var o=n.concat(),a=[];if(!s||s&&!b.test(s))return o;s.replace(m,function(s){var h=new RegExp(d).exec(s).filter(function(t){return!!t}),c=h[1],l=h.slice(2).map(parseFloat);switch(c){case"translate":r(o,l);break;case"rotate":l[0]=p.util.degreesToRadians(l[0]),t(o,l);break;case"scale":e(o,l);break;case"skewX":i(o,l,2);break;case"skewY":i(o,l,1);break;case"matrix":o=l}a.push(o.concat()),o=n.concat()});for(var h=a[0];a.length>1;)a.shift(),h=p.util.multiplyTransformMatrices(h,a[0]);return h}}();var j=new RegExp("^\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*$");p.parseSVGDocument=function(t,e,i){if(t){f(t);var r=p.Object.__uid++,n=d(t),s=p.util.toArray(t.getElementsByTagName("*"));if(n.svgUid=r,0===s.length&&p.isLikelyNode){s=t.selectNodes('//*[name(.)!="svg"]');for(var o=[],a=0,h=s.length;a/i,""))),r&&r.documentElement||e&&e(null),p.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)}t=t.replace(/^\n\s*/,"").trim(),new p.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 p.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));p.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)}})}("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(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,i,r=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'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=fabric.util.transformPoint,s=fabric.util.invertTransform,o=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass(fabric.CommonMethods,{initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!1,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw o;if("undefined"==typeof e.getContext)throw o;return e},_initOptions:function(t){this._setOptions(t),this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(t),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i=this._activeGroup,r=!1,n=!0;this.viewportTransform=t;for(var s=0,o=this._objects.length;s"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),"\n")},createSVGRefElementsMarkup:function(){var t=this,e=["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)});return e.join("")},createSVGFontFacesMarkup:function(){for(var t,e,i,r,n,s,o,a="",h={},c=fabric.fontPaths,l=this.getObjects(),u=0,f=l.length;u',"\n",a,"","\n"].join("")),a},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(a<0&&(a=360+a),a%=360,n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&s===this._searchPossibleTargets([s],n))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&o===this._searchPossibleTargets([o],n)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout")),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,"touch-action":"none"}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){var e=this._activeObject;e&&(e.set("active",!1),t!==e&&e.onDeselect&&"function"==typeof e.onDeselect&&e.onDeselect()),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){var i=this.getActiveObject();return i&&i!==t&&i.fire("deselected",{e:e}),this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this._hoveredTarget===t&&(this._hoveredTarget=null),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){var t=this._activeObject;t&&(t.set("active",!1),t.onDeselect&&"function"==typeof t.onDeselect&&t.onDeselect()),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return e&&(this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e.fire("deselected",{e:t})),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return e&&(this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t})),this},deactivateAll:function(){for(var t,e=this.getObjects(),i=0,r=e.length;i1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e||!e.selectable)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}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,n._setOptions(r),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!1,needsItsOwnCache:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t),this.objectCaching&&(this._createCacheCanvas(),this.setupState({propertySet:"cacheProperties"}))},_createCacheCanvas:function(){this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this._getNonTransformedDimensions(),n=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,s=i.scaleX*t*n,o=i.scaleY*t*n,a=r.x*s,h=r.y*o;return{width:a+2,height:h+2,zoomX:s,zoomY:o}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.action;if("scale"===t.slice(0,5))return!1}var e=this._getCacheCanvasDimensions(),i=e.width,r=e.height,n=e.zoomX,s=e.zoomY;return(i!==this.cacheWidth||r!==this.cacheHeight)&&(this._cacheCanvas.width=Math.ceil(i),this._cacheCanvas.height=Math.ceil(r),this._cacheContext.translate(i/2,r/2),this._cacheContext.scale(n,s),this.cacheWidth=i,this.cacheHeight=r,this.zoomX=n,this.zoomY=s,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),this.angle&&t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),this.skewX&&t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),this.skewY&&t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},render:function(t,i){0===this.width&&0===this.height||!this.visible||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),!this.objectCaching||this.group&&!this.needsItsOwnCache?(this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})):(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)),this.clipTo&&t.restore(),t.restore())},drawObject:function(t,e){this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._render(t,e)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheWidth/2,-this.cacheHeight/2)},isCacheDirty:function(t){if(!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),s=this.calcTransformMatrix();s=e.util.multiplyTransformMatrices(n,s),r=e.util.qrDecompose(s),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(o(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore())},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]);var e=o?new a(i[o],i):new a(i);n&&n(e)})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){ -var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,r)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var o=e.Object.prototype.cacheProperties.concat();o.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:o,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){for(var e,i=[],r=this._createBaseSVGMarkup(),n=0,o=this.points.length;n\n'),t?t(r.join("")):r.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){var r=t.paths;delete t.paths,"string"==typeof r?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max;if(!e.Group){var s={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;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.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},drawObject:function(t){for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,k,M,P,A,D,E;for(T.x=(t+.5)*y,j.x=r(T.x),h=0;h=e)){D=r(1e3*s(c-T.x)),O[D]||(O[D]={});for(var I=j.y-w;I<=j.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[D][E]||(O[D][E]=m(n(i(D*x,2)+i(E*C,2))/1e3)),u=O[D][E],u>0&&(d=4*(I*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],P+=u*v[d+2],A+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=P/g,b[d+3]=A/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(I=4*(E+M*e),j+=x*p[I+3],S+=x,p[I+3]<255&&(x=x*p[I+3]/250),w+=x*p[I],O+=x*p[I+1],T+=x*p[I+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=j/S}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=2*this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;t.fillStyle=s,this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e)))},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",e)},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,n,s,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,n,s,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),this._dimensionAffectingProps.indexOf(t)>-1&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,i,r){return e.Object._fromObject("Text",t,i,r,"text")},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&(this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(o=!0,s[h-i]=this.styles[e][a],delete this.styles[e][a])}o&&(this.styles[e+1]=s)}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}var h=r||n[i-1];h&&(this.styles[e][i]=h),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="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(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.set("dirty",!0),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())},fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,e){var i=this._styleMap[t];t=i.line,fabric.IText.prototype.shiftLineStyles.call(this,t,e)},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(), -0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file +var fabric=fabric||{version:"1.7.9"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E")),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.iMatrix=[1,0,0,1,0,0],fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);"undefined"!=typeof e&&(this.clipTo=new Function("ctx",e))}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?D-=2*f:1===c&&D<0&&(D+=2*f);for(var E=Math.ceil(Math.abs(D/f*2)),I=[],L=D/E,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=A+L,R=0;R=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){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){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return _;if((f||d)&&(x=" translate("+y(f)+" "+y(d)+") "),r=x+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r), +_}function g(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}var p=t.fabric||(t.fabric={}),v=p.util.object.extend,b=p.util.object.clone,m=p.util.toFixed,y=p.util.parseUnit,_=p.util.multiplyTransformMatrices,x=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,C=/^(symbol|image|marker|pattern|view|svg)$/i,S=/^(?:pattern|defs|symbol|metadata|clipPath|mask)$/i,w=/^(symbol|g|a|svg)$/i,O={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX",opacity:"opacity"},T={stroke:"strokeOpacity",fill:"fillOpacity"};p.cssRules={},p.gradientDefs={},p.parseTransformAttribute=function(){function t(t,e){var i=Math.cos(e[0]),r=Math.sin(e[0]),n=0,s=0;3===e.length&&(n=e[1],s=e[2]),t[0]=i,t[1]=r,t[2]=-r,t[3]=i,t[4]=n-(i*n-r*s),t[5]=s-(r*n+i*s)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e,i){t[i]=Math.tan(p.util.degreesToRadians(e[0]))}function r(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var n=[1,0,0,1,0,0],s=p.reNum,o="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+s+")\\s*\\))",h="(?:(skewY)\\s*\\(\\s*("+s+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+")"+o+"("+s+"))?\\s*\\))",l="(?:(scale)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",u="(?:(translate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",f="(?:(matrix)\\s*\\(\\s*("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")\\s*\\))",d="(?:"+f+"|"+u+"|"+l+"|"+c+"|"+a+"|"+h+")",g="(?:"+d+"(?:"+o+"*"+d+")*)",v="^\\s*(?:"+g+"?)\\s*$",b=new RegExp(v),m=new RegExp(d,"g");return function(s){var o=n.concat(),a=[];if(!s||s&&!b.test(s))return o;s.replace(m,function(s){var h=new RegExp(d).exec(s).filter(function(t){return!!t}),c=h[1],l=h.slice(2).map(parseFloat);switch(c){case"translate":r(o,l);break;case"rotate":l[0]=p.util.degreesToRadians(l[0]),t(o,l);break;case"scale":e(o,l);break;case"skewX":i(o,l,2);break;case"skewY":i(o,l,1);break;case"matrix":o=l}a.push(o.concat()),o=n.concat()});for(var h=a[0];a.length>1;)a.shift(),h=p.util.multiplyTransformMatrices(h,a[0]);return h}}();var j=new RegExp("^\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*$");p.parseSVGDocument=function(t,e,i,r){if(t){f(t);var n=p.Object.__uid++,s=d(t),o=p.util.toArray(t.getElementsByTagName("*"));if(s.crossOrigin=r&&r.crossOrigin,s.svgUid=n,0===o.length&&p.isLikelyNode){o=t.selectNodes('//*[name(.)!="svg"]');for(var a=[],h=0,c=o.length;h/i,""))),n&&n.documentElement||e&&e(null),p.parseSVGDocument(n.documentElement,function(t,i){e&&e(t,i)},i,r)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:n})},loadSVGFromString:function(t,e,i,r){t=t.trim();var n;if("undefined"!=typeof DOMParser){var s=new DOMParser;s&&s.parseFromString&&(n=s.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t.replace(//i,"")));p.parseSVGDocument(n.documentElement,function(t,i){e(t,i)},i,r)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r,n){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0,this.parsingOptions=n},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}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(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,i,r=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'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=fabric.util.transformPoint,s=fabric.util.invertTransform,o=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass(fabric.CommonMethods,{initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!1,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw o;if("undefined"==typeof e.getContext)throw o;return e},_initOptions:function(t){this._setOptions(t),this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(t),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i=this._activeGroup,r=!1,n=!0;this.viewportTransform=t;for(var s=0,o=this._objects.length;s"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),"\n")},createSVGRefElementsMarkup:function(){var t=this,e=["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)});return e.join("")},createSVGFontFacesMarkup:function(){for(var t,e,i,r,n,s,o,a="",h={},c=fabric.fontPaths,l=this.getObjects(),u=0,f=l.length;u',"\n",a,"","\n"].join("")),a},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(a<0&&(a=360+a),a%=360,n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&s===this._searchPossibleTargets([s],n))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&o===this._searchPossibleTargets([o],n)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout")),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,"touch-action":"none"}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){var e=this._activeObject;e&&(e.set("active",!1),t!==e&&e.onDeselect&&"function"==typeof e.onDeselect&&e.onDeselect()),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){var i=this.getActiveObject();return i&&i!==t&&i.fire("deselected",{e:e}),this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this._hoveredTarget===t&&(this._hoveredTarget=null),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){var t=this._activeObject;t&&(t.set("active",!1),t.onDeselect&&"function"==typeof t.onDeselect&&t.onDeselect()),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return e&&(this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e.fire("deselected",{e:t})),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return e&&(this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t})),this},deactivateAll:function(){for(var t,e=this.getObjects(),i=0,r=e.length;i1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e||!e.selectable)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}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,n._setOptions(r),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!1,needsItsOwnCache:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t),this.objectCaching&&(this._createCacheCanvas(),this.setupState({propertySet:"cacheProperties"}))},_createCacheCanvas:function(){this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this._getNonTransformedDimensions(),n=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,s=i.scaleX*t*n,o=i.scaleY*t*n,a=r.x*s,h=r.y*o;return{width:a+2,height:h+2,zoomX:s,zoomY:o}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.action;if("scale"===t.slice(0,5))return!1}var e=this._getCacheCanvasDimensions(),i=e.width,r=e.height,n=e.zoomX,s=e.zoomY;return(i!==this.cacheWidth||r!==this.cacheHeight)&&(this._cacheCanvas.width=Math.ceil(i),this._cacheCanvas.height=Math.ceil(r),this._cacheContext.translate(i/2,r/2),this._cacheContext.scale(n,s),this.cacheWidth=i,this.cacheHeight=r,this.zoomX=n,this.zoomY=s,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),this.angle&&t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),this.skewX&&t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),this.skewY&&t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},render:function(t,i){0===this.width&&0===this.height||!this.visible||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),!this.objectCaching||this.group&&!this.needsItsOwnCache?(this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})):(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)),this.clipTo&&t.restore(),t.restore())},drawObject:function(t,e){this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._render(t,e)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheWidth/2,-this.cacheHeight/2)},isCacheDirty:function(t){if(!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),s=this.calcTransformMatrix();s=e.util.multiplyTransformMatrices(n,s),r=e.util.qrDecompose(s),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(o(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore())},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]);var e=o?new a(i[o],i):new a(i);n&&n(e)})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))), +s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,r)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var o=e.Object.prototype.cacheProperties.concat();o.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:o,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){for(var e,i=[],r=this._createBaseSVGMarkup(),n=0,o=this.points.length;n\n'),t?t(r.join("")):r.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){var r=t.paths;delete t.paths,"string"==typeof r?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max;if(!e.Group){var s={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;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.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},drawObject:function(t){for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,k,M,P,A,D,E;for(T.x=(t+.5)*y,j.x=r(T.x),h=0;h=e)){D=r(1e3*s(c-T.x)),O[D]||(O[D]={});for(var I=j.y-w;I<=j.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[D][E]||(O[D][E]=m(n(i(D*x,2)+i(E*C,2))/1e3)),u=O[D][E],u>0&&(d=4*(I*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],P+=u*v[d+2],A+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=P/g,b[d+3]=A/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(I=4*(E+M*e),j+=x*p[I+3],S+=x,p[I+3]<255&&(x=x*p[I+3]/250),w+=x*p[I],O+=x*p[I+1],T+=x*p[I+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=j/S}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=2*this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;t.fillStyle=s,this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e)))},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",e)},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,n,s,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,n,s,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),this._dimensionAffectingProps.indexOf(t)>-1&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,i,r){return e.Object._fromObject("Text",t,i,r,"text")},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&(this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(o=!0,s[h-i]=this.styles[e][a],delete this.styles[e][a])}o&&(this.styles[e+1]=s)}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}var h=r||t(n[i-1]);h&&(this.styles[e][i]=h),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in r){var s=parseInt(n,10);s<=e&&delete r[s]}for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="white-space: nowrap; position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 1px; height: 1px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.set("dirty",!0),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())},fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,e){var i=this._styleMap[t];t=i.line,fabric.IText.prototype.shiftLineStyles.call(this,t,e)},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t); +},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 7aa2a3652f0aacfcb77079c309194ad4b53a2525..81fb2f8b5b5cdd56e3ccb846b7d40f71cddd6266 100644 GIT binary patch delta 65519 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 A?D+-4!E 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 ClYZ#{ diff --git a/dist/fabric.require.js b/dist/fabric.require.js index c43dd4f6a1d..36f05f01fb0 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,5 +1,5 @@ var fabric = fabric || { - version: "1.7.8" + version: "1.7.9" }; if (typeof exports !== "undefined") { @@ -2089,12 +2089,13 @@ if (typeof console !== "undefined") { } return false; } - fabric.parseSVGDocument = function(doc, callback, reviver) { + fabric.parseSVGDocument = function(doc, callback, reviver, parsingOptions) { if (!doc) { return; } parseUseDirectives(doc); var svgUid = fabric.Object.__uid++, options = applyViewboxTransform(doc), descendants = fabric.util.toArray(doc.getElementsByTagName("*")); + options.crossOrigin = parsingOptions && parsingOptions.crossOrigin; options.svgUid = svgUid; if (descendants.length === 0 && fabric.isLikelyNode) { descendants = doc.selectNodes('//*[name(.)!="svg"]'); @@ -2118,7 +2119,7 @@ if (typeof console !== "undefined") { if (callback) { callback(instances, options); } - }, clone(options), reviver); + }, clone(options), reviver, parsingOptions); }; var reFontDeclaration = new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*" + "(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*(" + fabric.reNum + "(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|" + fabric.reNum + "))?\\s+(.*)"); extend(fabric, { @@ -2197,8 +2198,8 @@ if (typeof console !== "undefined") { var mergedAttrs = extend(parentAttributes, normalizedStyle); return reAllowedParents.test(element.nodeName) ? mergedAttrs : _setStrokeFillOpacity(mergedAttrs); }, - parseElements: function(elements, callback, options, reviver) { - new fabric.ElementsParser(elements, callback, options, reviver).parse(); + parseElements: function(elements, callback, options, reviver, parsingOptions) { + new fabric.ElementsParser(elements, callback, options, reviver, parsingOptions).parse(); }, parseStyleAttribute: function(element) { var oStyle = {}, style = element.getAttribute("style"); @@ -2263,7 +2264,7 @@ if (typeof console !== "undefined") { } return allRules; }, - loadSVGFromURL: function(url, callback, reviver) { + loadSVGFromURL: function(url, callback, reviver, options) { url = url.replace(/^\n\s*/, "").trim(); new fabric.util.request(url, { method: "get", @@ -2279,12 +2280,12 @@ if (typeof console !== "undefined") { if (!xml || !xml.documentElement) { callback && callback(null); } - fabric.parseSVGDocument(xml.documentElement, function(results, options) { - callback && callback(results, options); - }, reviver); + fabric.parseSVGDocument(xml.documentElement, function(results, _options) { + callback && callback(results, _options); + }, reviver, options); } }, - loadSVGFromString: function(string, callback, reviver) { + loadSVGFromString: function(string, callback, reviver, options) { string = string.trim(); var doc; if (typeof DOMParser !== "undefined") { @@ -2297,19 +2298,20 @@ if (typeof console !== "undefined") { doc.async = "false"; doc.loadXML(string.replace(//i, "")); } - fabric.parseSVGDocument(doc.documentElement, function(results, options) { - callback(results, options); - }, reviver); + fabric.parseSVGDocument(doc.documentElement, function(results, _options) { + callback(results, _options); + }, reviver, options); } }); })(typeof exports !== "undefined" ? exports : this); -fabric.ElementsParser = function(elements, callback, options, reviver) { +fabric.ElementsParser = function(elements, callback, options, reviver, parsingOptions) { this.elements = elements; this.callback = callback; this.options = options; this.reviver = reviver; this.svgUid = options && options.svgUid || 0; + this.parsingOptions = parsingOptions; }; fabric.ElementsParser.prototype.parse = function() { @@ -9285,7 +9287,7 @@ fabric.util.object.extend(fabric.Object.prototype, { callback && callback(new fabric.Image(img, imgOptions)); }, null, imgOptions && imgOptions.crossOrigin); }; - fabric.Image.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href".split(" ")); + fabric.Image.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin".split(" ")); fabric.Image.fromElement = function(element, callback, options) { var parsedAttributes = fabric.parseAttributes(element, fabric.Image.ATTRIBUTE_NAMES), preserveAR; if (parsedAttributes.preserveAspectRatio) { @@ -11421,6 +11423,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this.exitEditingOnOthers(this.canvas); } this.isEditing = true; + this.selected = true; this.initHiddenTextarea(e); this.hiddenTextarea.focus(); this._updateTextarea(); @@ -11685,7 +11688,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { } } } - var newStyle = style || currentLineStyles[charIndex - 1]; + var newStyle = style || clone(currentLineStyles[charIndex - 1]); newStyle && (this.styles[lineIndex][charIndex] = newStyle); this._forceClearCache = true; }, @@ -11702,6 +11705,12 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { }, shiftLineStyles: function(lineIndex, offset) { var clonedStyles = clone(this.styles); + for (var line in clonedStyles) { + var numericLine = parseInt(line, 10); + if (numericLine <= lineIndex) { + delete clonedStyles[numericLine]; + } + } for (var line in this.styles) { var numericLine = parseInt(line, 10); if (numericLine > lineIndex) { @@ -11930,7 +11939,7 @@ fabric.util.object.extend(fabric.IText.prototype, { this.hiddenTextarea = fabric.document.createElement("textarea"); this.hiddenTextarea.setAttribute("autocapitalize", "off"); var style = this._calcTextareaPosition(); - this.hiddenTextarea.style.cssText = "position: absolute; top: " + style.top + "; left: " + style.left + ";" + " opacity: 0; width: 0px; height: 0px; z-index: -999;"; + this.hiddenTextarea.style.cssText = "white-space: nowrap; position: absolute; top: " + style.top + "; left: " + style.left + "; opacity: 0; width: 1px; height: 1px; z-index: -999;"; fabric.document.body.appendChild(this.hiddenTextarea); fabric.util.addListener(this.hiddenTextarea, "keydown", this.onKeyDown.bind(this)); fabric.util.addListener(this.hiddenTextarea, "keyup", this.onKeyUp.bind(this)); diff --git a/package.json b/package.json index abf020e260b..2f346fd3abf 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", "homepage": "http://fabricjs.com/", - "version": "1.7.8", + "version": "1.7.9", "author": "Juriy Zaytsev ", "contributors": [ { diff --git a/src/parser.js b/src/parser.js index 5918f00a5a1..9ad08962ccf 100644 --- a/src/parser.js +++ b/src/parser.js @@ -615,7 +615,7 @@ var svgUid = fabric.Object.__uid++, options = applyViewboxTransform(doc), descendants = fabric.util.toArray(doc.getElementsByTagName('*')); - options.crossOrigin = parsingOptions.crossOrigin; + options.crossOrigin = parsingOptions && parsingOptions.crossOrigin; options.svgUid = svgUid; if (descendants.length === 0 && fabric.isLikelyNode) {