From 17ad6c6a0aff7b9081fa28a23448c1ca4b976810 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Wed, 14 Jun 2017 22:46:51 +0200 Subject: [PATCH] version 1.7.13 (#4008) * Minimize delay between clear and re render. (#4007) * moved clear later * moved clear later * v1713 * changed readme * try to fix tests --- CHANGELOG.md | 9 ++++++++ HEADER.js | 2 +- ISSUE_TEMPLATE.md | 2 +- README.md | 4 ++-- dist/fabric.js | 58 +++++++++++++++++++++---------------------------- dist/fabric.min.js | 16 +++++++------- dist/fabric.min.js.gz | Bin 70484 -> 70499 bytes dist/fabric.require.js | 38 +++++++++++++++----------------- package.json | 2 +- test/unit/gradient.js | 4 ++-- test/unit/util.js | 9 -------- 11 files changed, 66 insertions(+), 78 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfacf9781..ab987cb2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +**Version 1.7.13** + +- Fix: Try to minimize delay in loadFroJson [#4007](https://github.com/kangax/fabric.js/pull/4007) +- Fix: allow fabric.Color to parse rgba(x,y,z,.a) without leading 0 [#4006](https://github.com/kangax/fabric.js/pull/4006) +- Allow path to execute Object.initialize, make extensions easier [#4005](https://github.com/kangax/fabric.js/pull/4005) +- Fix: properly set options from path fromDatalessObjects [#3995](https://github.com/kangax/fabric.js/pull/3995) +- Check for slice before action.slice. Avoid conflicts with heavy customized code. [#3992](https://github.com/kangax/fabric.js/pull/3992) + + **Version 1.7.12** - Fix: removed possible memleaks from window resize event. [#3984](https://github.com/kangax/fabric.js/pull/3984) diff --git a/HEADER.js b/HEADER.js index 92535526f..9982e80b1 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.12" }; +var fabric = fabric || { version: "1.7.13" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index d9b9eaf5d..b7724c672 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -25,7 +25,7 @@ Remove the template from below and provide thoughtful commentary *and code sampl ## Version -1.7.12 +1.7.13 ## Test Case http://jsfiddle.net/fabricjs/Da7SP/ diff --git a/README.md b/README.md index b7794455f..8d8c88373 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Fabric.js allows you to easily create simple shapes like rectangles, circles, tr ### Goals -- Unit tested (2400+ tests at the moment) +- Unit tested (4200+ tests at the moment, 75% coverage) - Modular (~60 small ["classes", modules, mixins](http://fabricjs.com/docs/)) - Cross-browser - [Fast](https://github.com/kangax/fabric.js/wiki/Focus-on-speed) @@ -269,11 +269,11 @@ Get help in Fabric's IRC channel — irc://irc.freenode.net/#fabric.js ### Credits +- [Andrea Bogazzi](https://twitter.com/AndreaBogazzi) for help with bugs, features, documentation, github issues, and much more. - Ernest Delgado for the original idea of [manipulating images on canvas](http://www.ernestdelgado.com/archive/canvas/) - [Maxim "hakunin" Chernyak](http://twitter.com/hakunin) for ideas, and help with various parts of the library throughout its life - [Sergey Nisnevich](http://nisnya.com) for help with geometry logic - [Stefan Kienzle](https://twitter.com/kienzle_s) for help with bugs, features, documentation, github issues -- [Andrea Bogazzi](https://twitter.com/AndreaBogazzi) for help with bugs, features, documentation, github issues, and much more. - [And all the other GitHub contributors](https://github.com/kangax/fabric.js/graphs/contributors) ### MIT License diff --git a/dist/fabric.js b/dist/fabric.js index 21b9de07f..033469e15 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.12" }; +var fabric = fabric || { version: "1.7.13" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -5094,7 +5094,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { * @memberOf fabric.Color */ // eslint-disable-next-line max-len - fabric.Color.reRGBa = /^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/; + fabric.Color.reRGBa = /^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*((?:\d*\.?\d+)?)\s*)?\)$/; /** * Regex matching color in HSL or HSLA formats (ex: hsl(200, 80%, 10%), hsla(300, 50%, 80%, 0.5), hsla( 300 , 50% , 80% , 0.5 )) @@ -11489,11 +11489,19 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati ? JSON.parse(json) : fabric.util.object.clone(json); - this.clear(); + var _this = this, + renderOnAddRemove = this.renderOnAddRemove; + this.renderOnAddRemove = false; - var _this = this; - this._enlivenObjects(serialized.objects, function () { + this._enlivenObjects(serialized.objects, function (enlivenedObjects) { + _this.clear(); _this._setBgOverlay(serialized, function () { + enlivenedObjects.forEach(function(obj, index) { + // we splice the array just in case some custom classes restored from JSON + // will add more object to canvas at canvas init. + _this.insertAt(obj, index); + }); + _this.renderOnAddRemove = renderOnAddRemove; // remove parts i cannot set as options delete serialized.objects; delete serialized.backgroundImage; @@ -11505,6 +11513,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati // create the Object instance. Here the Canvas is // already an instance and we are just loading things over it _this._setOptions(serialized); + _this.renderAll(); callback && callback(); }); }, reviver); @@ -11517,13 +11526,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Function} callback Invoked after all background and overlay images/patterns loaded */ _setBgOverlay: function(serialized, callback) { - var _this = this, - loaded = { - backgroundColor: false, - overlayColor: false, - backgroundImage: false, - overlayImage: false - }; + var loaded = { + backgroundColor: false, + overlayColor: false, + backgroundImage: false, + overlayImage: false + }; if (!serialized.backgroundImage && !serialized.overlayImage && !serialized.background && !serialized.overlay) { callback && callback(); @@ -11532,7 +11540,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati var cbIfLoaded = function () { if (loaded.backgroundImage && loaded.overlayImage && loaded.backgroundColor && loaded.overlayColor) { - _this.renderAll(); callback && callback(); } }; @@ -11581,25 +11588,13 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Function} [reviver] */ _enlivenObjects: function (objects, callback, reviver) { - var _this = this; - if (!objects || objects.length === 0) { - callback && callback(); + callback && callback([]); return; } - var renderOnAddRemove = this.renderOnAddRemove; - this.renderOnAddRemove = false; - fabric.util.enlivenObjects(objects, function(enlivenedObjects) { - enlivenedObjects.forEach(function(obj, index) { - // we splice the array just in case some custom classes restored from JSON - // will add more object to canvas at canvas init. - _this.insertAt(obj, index); - }); - - _this.renderOnAddRemove = renderOnAddRemove; - callback && callback(); + callback && callback(enlivenedObjects); }, null, reviver); }, @@ -12546,7 +12541,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati _updateCacheCanvas: function() { if (this.noScaleCache && this.canvas && this.canvas._currentTransform) { var action = this.canvas._currentTransform.action; - if (action.slice(0, 5) === 'scale') { + if (action.slice && action.slice(0, 5) === 'scale') { return false; } } @@ -16928,10 +16923,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ initialize: function(path, options) { options = options || { }; - - if (options) { - this.setOptions(options); - } + this.callSuper('initialize', options); if (!path) { path = []; @@ -17776,7 +17768,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot path = elements[0]; delete object.path; - fabric.util.object.extend(path, object); + path.setOptions(object); path.setSourcePath(pathUrl); callback && callback(path); diff --git a/dist/fabric.min.js b/dist/fabric.min.js index fbf651be3..3755a5895 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,9 +1,9 @@ -var fabric=fabric||{version:"1.7.12"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E")),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.iMatrix=[1,0,0,1,0,0],fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);"undefined"!=typeof e&&(this.clipTo=new Function("ctx",e))}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?A-=2*f:1===c&&A<0&&(A+=2*f);for(var E=Math.ceil(Math.abs(A/f*2)),I=[],L=A/E,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=P+L,R=0;R=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){for(var e=null,i=this;i.constructor.superclass;){var n=i.constructor.superclass.prototype[t];if(i[t]!==n){e=n;break}i=i.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return _;if((f||d)&&(x=" translate("+y(f)+" "+y(d)+") "),r=x+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ", -"svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),_}function g(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}var p=t.fabric||(t.fabric={}),v=p.util.object.extend,b=p.util.object.clone,m=p.util.toFixed,y=p.util.parseUnit,_=p.util.multiplyTransformMatrices,x=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,C=/^(symbol|image|marker|pattern|view|svg)$/i,S=/^(?:pattern|defs|symbol|metadata|clipPath|mask)$/i,w=/^(symbol|g|a|svg)$/i,O={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX",opacity:"opacity"},T={stroke:"strokeOpacity",fill:"fillOpacity"};p.cssRules={},p.gradientDefs={},p.parseTransformAttribute=function(){function t(t,e){var i=Math.cos(e[0]),r=Math.sin(e[0]),n=0,s=0;3===e.length&&(n=e[1],s=e[2]),t[0]=i,t[1]=r,t[2]=-r,t[3]=i,t[4]=n-(i*n-r*s),t[5]=s-(r*n+i*s)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e,i){t[i]=Math.tan(p.util.degreesToRadians(e[0]))}function r(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var n=[1,0,0,1,0,0],s=p.reNum,o="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+s+")\\s*\\))",h="(?:(skewY)\\s*\\(\\s*("+s+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+")"+o+"("+s+"))?\\s*\\))",l="(?:(scale)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",u="(?:(translate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",f="(?:(matrix)\\s*\\(\\s*("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")\\s*\\))",d="(?:"+f+"|"+u+"|"+l+"|"+c+"|"+a+"|"+h+")",g="(?:"+d+"(?:"+o+"*"+d+")*)",v="^\\s*(?:"+g+"?)\\s*$",b=new RegExp(v),m=new RegExp(d,"g");return function(s){var o=n.concat(),a=[];if(!s||s&&!b.test(s))return o;s.replace(m,function(s){var h=new RegExp(d).exec(s).filter(function(t){return!!t}),c=h[1],l=h.slice(2).map(parseFloat);switch(c){case"translate":r(o,l);break;case"rotate":l[0]=p.util.degreesToRadians(l[0]),t(o,l);break;case"scale":e(o,l);break;case"skewX":i(o,l,2);break;case"skewY":i(o,l,1);break;case"matrix":o=l}a.push(o.concat()),o=n.concat()});for(var h=a[0];a.length>1;)a.shift(),h=p.util.multiplyTransformMatrices(h,a[0]);return h}}();var j=new RegExp("^\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*$");p.parseSVGDocument=function(t,e,i,r){if(t){f(t);var n=p.Object.__uid++,s=d(t),o=p.util.toArray(t.getElementsByTagName("*"));if(s.crossOrigin=r&&r.crossOrigin,s.svgUid=n,0===o.length&&p.isLikelyNode){o=t.selectNodes('//*[name(.)!="svg"]');for(var a=[],h=0,c=o.length;h/i,""))),n&&n.documentElement||e&&e(null),p.parseSVGDocument(n.documentElement,function(t,i){e&&e(t,i)},i,r)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:n})},loadSVGFromString:function(t,e,i,r){t=t.trim();var n;if("undefined"!=typeof DOMParser){var s=new DOMParser;s&&s.parseFromString&&(n=s.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t.replace(//i,"")));p.parseSVGDocument(n.documentElement,function(t,i){e(t,i)},i,r)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r,n){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0,this.parsingOptions=n},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}var n=fabric.util.object.clone;fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,i,r=n(this.coords,!0),s=n(this.colorStops,!0),o=r.r1>r.r2;if(s.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var a in r)"x1"===a||"x2"===a?r[a]+=this.offsetX-t.width/2:"y1"!==a&&"y2"!==a||(r[a]+=this.offsetY-t.height/2);if(i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']),"radial"===this.type){if(o){s=s.concat(),s.reverse();for(var h=0;h0)for(var l=Math.max(r.r1,r.r2),u=c/l,h=0;h\n')}return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:"y1"!==r&&"y2"!==r||(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;s\n\n\n'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=fabric.util.transformPoint,s=fabric.util.invertTransform,o=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass(fabric.CommonMethods,{initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!1,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw o;if("undefined"==typeof e.getContext)throw o;return e},_initOptions:function(t){this._setOptions(t),this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(t),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i=this._activeGroup,r=!1,n=!0;this.viewportTransform=t;for(var s=0,o=this._objects.length;s-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);"undefined"!=typeof e&&(this.clipTo=new Function("ctx",e))}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?A-=2*f:1===c&&A<0&&(A+=2*f);for(var E=Math.ceil(Math.abs(A/f*2)),I=[],L=A/E,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=P+L,R=0;R=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){for(var e=null,i=this;i.constructor.superclass;){var n=i.constructor.superclass.prototype[t];if(i[t]!==n){e=n;break}i=i.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return _;if((f||d)&&(x=" translate("+y(f)+" "+y(d)+") "),r=x+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ", +"svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),_}function g(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}var p=t.fabric||(t.fabric={}),v=p.util.object.extend,b=p.util.object.clone,m=p.util.toFixed,y=p.util.parseUnit,_=p.util.multiplyTransformMatrices,x=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,C=/^(symbol|image|marker|pattern|view|svg)$/i,S=/^(?:pattern|defs|symbol|metadata|clipPath|mask)$/i,w=/^(symbol|g|a|svg)$/i,O={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX",opacity:"opacity"},T={stroke:"strokeOpacity",fill:"fillOpacity"};p.cssRules={},p.gradientDefs={},p.parseTransformAttribute=function(){function t(t,e){var i=Math.cos(e[0]),r=Math.sin(e[0]),n=0,s=0;3===e.length&&(n=e[1],s=e[2]),t[0]=i,t[1]=r,t[2]=-r,t[3]=i,t[4]=n-(i*n-r*s),t[5]=s-(r*n+i*s)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e,i){t[i]=Math.tan(p.util.degreesToRadians(e[0]))}function r(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var n=[1,0,0,1,0,0],s=p.reNum,o="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+s+")\\s*\\))",h="(?:(skewY)\\s*\\(\\s*("+s+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+")"+o+"("+s+"))?\\s*\\))",l="(?:(scale)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",u="(?:(translate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",f="(?:(matrix)\\s*\\(\\s*("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")\\s*\\))",d="(?:"+f+"|"+u+"|"+l+"|"+c+"|"+a+"|"+h+")",g="(?:"+d+"(?:"+o+"*"+d+")*)",v="^\\s*(?:"+g+"?)\\s*$",b=new RegExp(v),m=new RegExp(d,"g");return function(s){var o=n.concat(),a=[];if(!s||s&&!b.test(s))return o;s.replace(m,function(s){var h=new RegExp(d).exec(s).filter(function(t){return!!t}),c=h[1],l=h.slice(2).map(parseFloat);switch(c){case"translate":r(o,l);break;case"rotate":l[0]=p.util.degreesToRadians(l[0]),t(o,l);break;case"scale":e(o,l);break;case"skewX":i(o,l,2);break;case"skewY":i(o,l,1);break;case"matrix":o=l}a.push(o.concat()),o=n.concat()});for(var h=a[0];a.length>1;)a.shift(),h=p.util.multiplyTransformMatrices(h,a[0]);return h}}();var j=new RegExp("^\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*$");p.parseSVGDocument=function(t,e,i,r){if(t){f(t);var n=p.Object.__uid++,s=d(t),o=p.util.toArray(t.getElementsByTagName("*"));if(s.crossOrigin=r&&r.crossOrigin,s.svgUid=n,0===o.length&&p.isLikelyNode){o=t.selectNodes('//*[name(.)!="svg"]');for(var a=[],h=0,c=o.length;h/i,""))),n&&n.documentElement||e&&e(null),p.parseSVGDocument(n.documentElement,function(t,i){e&&e(t,i)},i,r)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:n})},loadSVGFromString:function(t,e,i,r){t=t.trim();var n;if("undefined"!=typeof DOMParser){var s=new DOMParser;s&&s.parseFromString&&(n=s.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t.replace(//i,"")));p.parseSVGDocument(n.documentElement,function(t,i){e(t,i)},i,r)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r,n){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0,this.parsingOptions=n},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}var n=fabric.util.object.clone;fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,i,r=n(this.coords,!0),s=n(this.colorStops,!0),o=r.r1>r.r2;if(s.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var a in r)"x1"===a||"x2"===a?r[a]+=this.offsetX-t.width/2:"y1"!==a&&"y2"!==a||(r[a]+=this.offsetY-t.height/2);if(i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']),"radial"===this.type){if(o){s=s.concat(),s.reverse();for(var h=0;h0)for(var l=Math.max(r.r1,r.r2),u=c/l,h=0;h\n')}return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:"y1"!==r&&"y2"!==r||(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;s\n\n\n'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=fabric.util.transformPoint,s=fabric.util.invertTransform,o=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass(fabric.CommonMethods,{initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!1,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw o;if("undefined"==typeof e.getContext)throw o;return e},_initOptions:function(t){this._setOptions(t),this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(t),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i=this._activeGroup,r=!1,n=!0;this.viewportTransform=t;for(var s=0,o=this._objects.length;s"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),"\n")},createSVGRefElementsMarkup:function(){var t=this,e=["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)});return e.join("")},createSVGFontFacesMarkup:function(){for(var t,e,i,r,n,s,o,a="",h={},c=fabric.fontPaths,l=this.getObjects(),u=0,f=l.length;u',"\n",a,"","\n"].join("")),a},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(this.targets=[],s&&!e&&s===this._searchPossibleTargets([s],n))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&o===this._searchPossibleTargets([o],n)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){var i,r,n=this._hoveredTarget;n!==t&&(i={e:e,target:t,previousTarget:this._hoveredTarget},r={e:e,target:this._hoveredTarget,nextTarget:t},this._hoveredTarget=t),t?n!==t&&(n&&(this.fire("mouse:out",r),n.fire("mouseout",r)),this.fire("mouse:over",i),t.fire("mouseover",i)):n&&(this.fire("mouse:out",r),n.fire("mouseout",r))},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl?this.upperCanvasEl.className="":this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":"none"}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){var e=this._activeObject;e&&(e.set("active",!1),t!==e&&e.onDeselect&&"function"==typeof e.onDeselect&&e.onDeselect()),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){var i=this.getActiveObject();return i&&i!==t&&i.fire("deselected",{e:e}),this._setActiveObject(t),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this.renderAll(),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this._hoveredTarget===t&&(this._hoveredTarget=null),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){var t=this._activeObject;t&&(t.set("active",!1),t.onDeselect&&"function"==typeof t.onDeselect&&t.onDeselect()),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return e&&(this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e.fire("deselected",{e:t})),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return e&&(this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t})),this},deactivateAll:function(){for(var t,e=this.getObjects(),i=0,r=e.length;i1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!0},_setCornerCursor:function(t,i,r){if(t in e)this.setCursor(this._getRotatedCornerCursor(t,i,r));else{if("mtr"!==t||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(t,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=e[t],r[this.altActionKey]&&e[t]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0),e)}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i,e),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e,e:t}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this._getNonTransformedDimensions(),n=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,s=i.scaleX*t*n,o=i.scaleY*t*n,a=r.x*s,h=r.y*o;return{width:a+2,height:h+2,zoomX:s,zoomY:o}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.action;if("scale"===t.slice(0,5))return!1}var e=this._getCacheCanvasDimensions(),i=e.width,r=e.height,n=e.zoomX,s=e.zoomY;return(i!==this.cacheWidth||r!==this.cacheHeight)&&(this._cacheCanvas.width=Math.ceil(i),this._cacheCanvas.height=Math.ceil(r),this._cacheContext.translate(i/2,r/2),this._cacheContext.scale(n,s),this.cacheWidth=i,this.cacheHeight=r,this.zoomX=n,this.zoomY=s,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),this.angle&&t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),this.skewX&&t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),this.skewY&&t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},render:function(t,i){0===this.width&&0===this.height||!this.visible||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache(i)?(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)):(this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},needsItsOwnCache:function(){return!1},shouldCache:function(t){return!t&&this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isCaching())},willDrawShadow:function(){return!!this.shadow},drawObject:function(t,e){this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._render(t,e)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheWidth/2,-this.cacheHeight/2)},isCacheDirty:function(t){if(!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t){if(this.active&&(!this.group||this.group===this.canvas.getActiveGroup())){var i,r=this.getViewportTransform(),n=this.calcTransformMatrix();n=e.util.multiplyTransformMatrices(r,n),i=e.util.qrDecompose(n),t.save(),t.translate(i.translateX,i.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(i.angle)),this.drawBordersInGroup(t,i)):(t.rotate(o(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore())},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]);var e=o?new a(i[o],i):new a(i);n&&n(e)})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n; -},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")},onDeselect:function(){}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return 6.123233995736766e-17!==i&&i!==-1.8369701987210297e-16||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,r)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed,o=e.Object.NUM_FRACTION_DIGITS;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var a=e.Object.prototype.cacheProperties.concat();a.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:a,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){var e=[],i=0,r=0,n=this._createBaseSVGMarkup();this.group&&"path-group"===this.group.type||(i=this.pathOffset.x,r=this.pathOffset.y);for(var a=0,h=this.points.length;a\n'),t?t(n.join("")):n.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){var r=t.paths;delete t.paths,"string"==typeof r?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max;if(!e.Group){var s={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isCaching());if(this.caching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,k,M,D,P,A,E;for(T.x=(t+.5)*y,j.x=r(T.x),h=0;h=e)){A=r(1e3*s(c-T.x)),O[A]||(O[A]={});for(var I=j.y-w;I<=j.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[A][E]||(O[A][E]=m(n(i(A*x,2)+i(E*C,2))/1e3)),u=O[A][E],u>0&&(d=4*(I*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],D+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=D/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(I=4*(E+M*e),j+=x*p[I+3],S+=x,p[I+3]<255&&(x=x*p[I+3]/250),w+=x*p[I],O+=x*p[I+1],T+=x*p[I+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=j/S}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;t.fillStyle=s,this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e)))},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",e)},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,n,s,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,n,s,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),this._dimensionAffectingProps.indexOf(t)>-1&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,i,r){return e.Object._fromObject("Text",t,i,r,"text")},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&(this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(o=!0,s[h-i]=this.styles[e][a],delete this.styles[e][a])}o&&(this.styles[e+1]=s)}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}var h=r||t(n[i-1]);h&&(this.styles[e][i]=h),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in r){var s=parseInt(n,10);s<=e&&delete r[s]}for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e,t.e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable&&(!t.e.button||1===t.e.button)){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,!this.editable||this._isObjectMoved(t.e)||t.e.button&&1!==t.e.button||(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="white-space: nowrap; position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 1px; height: 1px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.set("dirty",!0),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())},fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i]); -},shiftLineStyles:function(t,e){var i=this._styleMap[t];t=i.line,fabric.IText.prototype.shiftLineStyles.call(this,t,e)},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file +},_drawObjectsControls:function(t){for(var e=0,i=this._objects.length;e1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!0},_setCornerCursor:function(t,i,r){if(t in e)this.setCursor(this._getRotatedCornerCursor(t,i,r));else{if("mtr"!==t||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(t,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=e[t],r[this.altActionKey]&&e[t]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0),e)}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i,e),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e,e:t}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t),n=this,s=this.renderOnAddRemove;return this.renderOnAddRemove=!1,this._enlivenObjects(r.objects,function(t){n.clear(),n._setBgOverlay(r,function(){t.forEach(function(t,e){n.insertAt(t,e)}),n.renderOnAddRemove=s,delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),n.renderAll(),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,r),this.__setBgOverlay("overlayImage",t.overlayImage,i,r),this.__setBgOverlay("backgroundColor",t.background,i,r),this.__setBgOverlay("overlayColor",t.overlay,i,r)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_enlivenObjects:function(t,e,i){return t&&0!==t.length?void fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,i):void(e&&e([]))},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this._getNonTransformedDimensions(),n=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,s=i.scaleX*t*n,o=i.scaleY*t*n,a=r.x*s,h=r.y*o;return{width:a+2,height:h+2,zoomX:s,zoomY:o}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.action;if(t.slice&&"scale"===t.slice(0,5))return!1}var e=this._getCacheCanvasDimensions(),i=e.width,r=e.height,n=e.zoomX,s=e.zoomY;return(i!==this.cacheWidth||r!==this.cacheHeight)&&(this._cacheCanvas.width=Math.ceil(i),this._cacheCanvas.height=Math.ceil(r),this._cacheContext.translate(i/2,r/2),this._cacheContext.scale(n,s),this.cacheWidth=i,this.cacheHeight=r,this.zoomX=n,this.zoomY=s,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),this.angle&&t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),this.skewX&&t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),this.skewY&&t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},render:function(t,i){0===this.width&&0===this.height||!this.visible||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache(i)?(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)):(this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},needsItsOwnCache:function(){return!1},shouldCache:function(t){return!t&&this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isCaching())},willDrawShadow:function(){return!!this.shadow},drawObject:function(t,e){this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._render(t,e)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheWidth/2,-this.cacheHeight/2)},isCacheDirty:function(t){if(!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t){if(this.active&&(!this.group||this.group===this.canvas.getActiveGroup())){var i,r=this.getViewportTransform(),n=this.calcTransformMatrix();n=e.util.multiplyTransformMatrices(r,n),i=e.util.qrDecompose(n),t.save(),t.translate(i.translateX,i.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(i.angle)),this.drawBordersInGroup(t,i)):(t.rotate(o(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore())},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]);var e=o?new a(i[o],i):new a(i);n&&n(e)})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){ +var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")},onDeselect:function(){}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return 6.123233995736766e-17!==i&&i!==-1.8369701987210297e-16||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,r)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed,o=e.Object.NUM_FRACTION_DIGITS;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var a=e.Object.prototype.cacheProperties.concat();a.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:a,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){var e=[],i=0,r=0,n=this._createBaseSVGMarkup();this.group&&"path-group"===this.group.type||(i=this.pathOffset.x,r=this.pathOffset.y);for(var a=0,h=this.points.length;a\n'),t?t(n.join("")):n.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){var r=t.paths;delete t.paths,"string"==typeof r?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max;if(!e.Group){var s={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isCaching());if(this.caching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,k,M,D,P,A,E;for(T.x=(t+.5)*y,j.x=r(T.x),h=0;h=e)){A=r(1e3*s(c-T.x)),O[A]||(O[A]={});for(var I=j.y-w;I<=j.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[A][E]||(O[A][E]=m(n(i(A*x,2)+i(E*C,2))/1e3)),u=O[A][E],u>0&&(d=4*(I*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],D+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=D/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(I=4*(E+M*e),j+=x*p[I+3],S+=x,p[I+3]<255&&(x=x*p[I+3]/250),w+=x*p[I],O+=x*p[I+1],T+=x*p[I+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=j/S}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;t.fillStyle=s,this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e)))},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",e)},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,n,s,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,n,s,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),this._dimensionAffectingProps.indexOf(t)>-1&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,i,r){return e.Object._fromObject("Text",t,i,r,"text")},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&(this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(o=!0,s[h-i]=this.styles[e][a],delete this.styles[e][a])}o&&(this.styles[e+1]=s)}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}var h=r||t(n[i-1]);h&&(this.styles[e][i]=h),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in r){var s=parseInt(n,10);s<=e&&delete r[s]}for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e,t.e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable&&(!t.e.button||1===t.e.button)){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,!this.editable||this._isObjectMoved(t.e)||t.e.button&&1!==t.e.button||(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="white-space: nowrap; position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 1px; height: 1px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.set("dirty",!0),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())},fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,e){var i=this._styleMap[t]; +t=i.line,fabric.IText.prototype.shiftLineStyles.call(this,t,e)},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 5fafd6094bd70f0ffef4556c318ff80bdde71a24..9847bbeb5b98cc3d53c1a44a03694545c02d4d66 100644 GIT binary patch delta 65131 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 A5&!@I delta 65142 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 L2je9I)A<7cZ&RK6 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 7a66db783..1670407b1 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,5 +1,5 @@ var fabric = fabric || { - version: "1.7.12" + version: "1.7.13" }; if (typeof exports !== "undefined") { @@ -2751,7 +2751,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { return this; } }; - fabric.Color.reRGBa = /^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/; + fabric.Color.reRGBa = /^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*((?:\d*\.?\d+)?)\s*)?\)$/; fabric.Color.reHSLa = /^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/; fabric.Color.reHex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i; fabric.Color.colorNameMap = { @@ -5868,23 +5868,29 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { return; } var serialized = typeof json === "string" ? JSON.parse(json) : fabric.util.object.clone(json); - this.clear(); - var _this = this; - this._enlivenObjects(serialized.objects, function() { + var _this = this, renderOnAddRemove = this.renderOnAddRemove; + this.renderOnAddRemove = false; + this._enlivenObjects(serialized.objects, function(enlivenedObjects) { + _this.clear(); _this._setBgOverlay(serialized, function() { + enlivenedObjects.forEach(function(obj, index) { + _this.insertAt(obj, index); + }); + _this.renderOnAddRemove = renderOnAddRemove; delete serialized.objects; delete serialized.backgroundImage; delete serialized.overlayImage; delete serialized.background; delete serialized.overlay; _this._setOptions(serialized); + _this.renderAll(); callback && callback(); }); }, reviver); return this; }, _setBgOverlay: function(serialized, callback) { - var _this = this, loaded = { + var loaded = { backgroundColor: false, overlayColor: false, backgroundImage: false, @@ -5896,7 +5902,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { } var cbIfLoaded = function() { if (loaded.backgroundImage && loaded.overlayImage && loaded.backgroundColor && loaded.overlayColor) { - _this.renderAll(); callback && callback(); } }; @@ -5926,19 +5931,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { } }, _enlivenObjects: function(objects, callback, reviver) { - var _this = this; if (!objects || objects.length === 0) { - callback && callback(); + callback && callback([]); return; } - var renderOnAddRemove = this.renderOnAddRemove; - this.renderOnAddRemove = false; fabric.util.enlivenObjects(objects, function(enlivenedObjects) { - enlivenedObjects.forEach(function(obj, index) { - _this.insertAt(obj, index); - }); - _this.renderOnAddRemove = renderOnAddRemove; - callback && callback(); + callback && callback(enlivenedObjects); }, null, reviver); }, _toDataURL: function(format, callback) { @@ -6079,7 +6077,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { _updateCacheCanvas: function() { if (this.noScaleCache && this.canvas && this.canvas._currentTransform) { var action = this.canvas._currentTransform.action; - if (action.slice(0, 5) === "scale") { + if (action.slice && action.slice(0, 5) === "scale") { return false; } } @@ -8068,9 +8066,7 @@ fabric.util.object.extend(fabric.Object.prototype, { cacheProperties: cacheProperties, initialize: function(path, options) { options = options || {}; - if (options) { - this.setOptions(options); - } + this.callSuper("initialize", options); if (!path) { path = []; } @@ -8547,7 +8543,7 @@ fabric.util.object.extend(fabric.Object.prototype, { var pathUrl = object.path; path = elements[0]; delete object.path; - fabric.util.object.extend(path, object); + path.setOptions(object); path.setSourcePath(pathUrl); callback && callback(path); }); diff --git a/package.json b/package.json index 903f5e2dc..919434796 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.12", + "version": "1.7.13", "author": "Juriy Zaytsev ", "contributors": [ { diff --git a/test/unit/gradient.js b/test/unit/gradient.js index 4e70c6b8c..e3f9ec541 100644 --- a/test/unit/gradient.js +++ b/test/unit/gradient.js @@ -179,7 +179,7 @@ var canvas = fabric.isLikelyNode ? fabric.createCanvasForNode() : new fabric.StaticCanvas(el); var gradient = createLinearGradient(); ok(typeof gradient.toLive === 'function'); - var gradientCtx = gradient.toLive(canvas.contextContainer); + var gradientCtx = gradient.toLive(canvas.contextContainer, {}); equal(gradientCtx.toString(), '[object CanvasGradient]', 'is a gradient for canvas radial'); }); @@ -188,7 +188,7 @@ var canvas = fabric.isLikelyNode ? fabric.createCanvasForNode() : new fabric.StaticCanvas(el); var gradient = createRadialGradient(); ok(typeof gradient.toLive === 'function'); - var gradientCtx = gradient.toLive(canvas.contextContainer); + var gradientCtx = gradient.toLive(canvas.contextContainer, {}); equal(gradientCtx.toString(), '[object CanvasGradient]', 'is a gradient for canvas radial'); }); diff --git a/test/unit/util.js b/test/unit/util.js index 2ce4eb9a2..51c6958ca 100644 --- a/test/unit/util.js +++ b/test/unit/util.js @@ -133,15 +133,6 @@ equal(camelize('--double'), 'Double'); }); - test('fabric.util.string.graphemeSplit', function() { - var gSplit = fabric.util.string.graphemeSplit; - - ok(typeof gSplit === 'function'); - - deepEqual(gSplit('foo'), ['f', 'o', 'o'], 'normal test get splitted by char'); - deepEqual(gSplit('f🙂o'), ['f', '🙂', 'o'], 'normal test get splitted by char'); - }); - test('fabric.util.string.escapeXml', function() { var escapeXml = fabric.util.string.escapeXml;