From 75e5a78431047a6b6de93b14f3df2a7b301d6cea Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Thu, 1 Dec 2016 23:56:21 +0100 Subject: [PATCH] v171 (#3478) --- CHANGELOG.md | 11 +++++++++-- HEADER.js | 2 +- dist/fabric.js | 39 +++++++++++++++++++++++++-------------- dist/fabric.min.js | 16 ++++++++-------- dist/fabric.min.js.gz | Bin 68755 -> 68816 bytes dist/fabric.require.js | 34 ++++++++++++++++++++-------------- package.json | 2 +- 7 files changed, 64 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 585fcaabedb..2f27cdfc7e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,12 @@ -**Version 1.7.0** +**Version 1.7.1** + +- Add: Gradients/Patterns support customAttributes in toObject method [#3477](https://github.com/kangax/fabric.js/pull/3477) +- Fix: IText/Textbox not blurring keyboard on ios 10 [#3476](https://github.com/kangax/fabric.js/pull/3476) +- Fix: Shadow on freedrawing and zoomed canvas [#3475](https://github.com/kangax/fabric.js/pull/3475) +- Fix: Fix for group returning negative scales [#3474](https://github.com/kangax/fabric.js/pull/3474) +- Fix: hotfix for textbox [#3441](https://github.com/kangax/fabric.js/pull/3441)[#3473](https://github.com/kangax/fabric.js/pull/3473) + +**Version 1.7.0** - Add: Object Caching [#3417](https://github.com/kangax/fabric.js/pull/3417) - Improvement: group internal objects have coords not affected by canvas zoom [#3420](https://github.com/kangax/fabric.js/pull/3420) @@ -45,7 +53,6 @@ - Fix: Error in dataURL with multiplier was outputting very big canvas with retina [#3314](https://github.com/kangax/fabric.js/pull/3314) - Fix: Error in style map was not respecting style if textbox started with space [#3315](https://github.com/kangax/fabric.js/pull/3315) - **Version 1.6.4** - Improvement: Ignore svg: namespace during svg import. [#3081](https://github.com/kangax/fabric.js/pull/3081) diff --git a/HEADER.js b/HEADER.js index b5b1a49b90a..6dde21bd31a 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.0" }; +var fabric = fabric || { version: "1.7.1" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/dist/fabric.js b/dist/fabric.js index 6734526c962..f6506401a5b 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.0" }; +var fabric = fabric || { version: "1.7.1" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -5362,10 +5362,11 @@ fabric.ElementsParser.prototype.checkIfDone = function() { /** * Returns object representation of a gradient + * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output * @return {Object} */ - toObject: function() { - return { + toObject: function(propertiesToInclude) { + var object = { type: this.type, coords: this.coords, colorStops: this.colorStops, @@ -5373,6 +5374,9 @@ fabric.ElementsParser.prototype.checkIfDone = function() { offsetY: this.offsetY, gradientTransform: this.gradientTransform ? this.gradientTransform.concat() : this.gradientTransform }; + fabric.util.populateWithProperties(this, object, propertiesToInclude); + + return object; }, /* _TO_SVG_START_ */ @@ -5719,11 +5723,12 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ /** * Returns object representation of a pattern + * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output * @return {Object} Object representation of a pattern instance */ - toObject: function() { + toObject: function(propertiesToInclude) { - var source; + var source, object; // callback if (typeof this.source === 'function') { @@ -5738,12 +5743,15 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ source = this.source.toDataURL(); } - return { + object = { source: source, repeat: this.repeat, offsetX: this.offsetX, offsetY: this.offsetY }; + fabric.util.populateWithProperties(this, object, propertiesToInclude); + + return object; }, /* _TO_SVG_START_ */ @@ -7687,12 +7695,13 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype return; } - var ctx = this.canvas.contextTop; + var ctx = this.canvas.contextTop, + zoom = this.canvas.getZoom(); ctx.shadowColor = this.shadow.color; - ctx.shadowBlur = this.shadow.blur; - ctx.shadowOffsetX = this.shadow.offsetX; - ctx.shadowOffsetY = this.shadow.offsetY; + ctx.shadowBlur = this.shadow.blur * zoom; + ctx.shadowOffsetX = this.shadow.offsetX * zoom; + ctx.shadowOffsetY = this.shadow.offsetY * zoom; }, /** @@ -18095,13 +18104,13 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot var matrix = object.calcTransformMatrix(), options = fabric.util.qrDecompose(matrix), center = new fabric.Point(options.translateX, options.translateY); - object.scaleX = options.scaleX; - object.scaleY = options.scaleY; + object.flipX = false; + object.flipY = false; + object.set('scaleX', options.scaleX); + object.set('scaleY', options.scaleY); object.skewX = options.skewX; object.skewY = options.skewY; object.angle = options.angle; - object.flipX = false; - object.flipY = false; object.setPositionByOrigin(center, 'center', 'center'); return object; }, @@ -24117,6 +24126,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag this.selectable = true; this.selectionEnd = this.selectionStart; + this.hiddenTextarea.blur && this.hiddenTextarea.blur(); this.hiddenTextarea && this.canvas && this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea); this.hiddenTextarea = null; @@ -25785,6 +25795,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot * @override */ _splitTextIntoLines: function(ctx) { + ctx = ctx || this.ctx; var originalAlign = this.textAlign; ctx.save(); this._setTextStyles(ctx); diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 0295c0ed746..457f1d4cb06 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,8 +1,8 @@ -var fabric=fabric||{version:"1.7.0"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(""),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?D-=2*f:1===c&&D<0&&(D+=2*f);for(var I=Math.ceil(Math.abs(D/f*2)),E=[],L=D/I,R=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),F=P+L,B=0;B=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){var e=this.constructor.superclass.prototype[t];return arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return y;if((f||d)&&(_=" translate("+x(f)+" "+x(d)+") "),r=_+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),y}function g(t){var e=t.objects,i=t.options;return e=e.map(function(t){return v[m(t.type)].fromObject(t)}),{objects:e,options:i}}function p(t,e,i){e[i]&&e[i].toSVG&&t.push('\t\n','\t\t\n\t\n')}var v=t.fabric||(t.fabric={}),b=v.util.object.extend,m=v.util.string.capitalize,y=v.util.object.clone,_=v.util.toFixed,x=v.util.parseUnit,C=v.util.multiplyTransformMatrices,S=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,w=/^(symbol|image|marker|pattern|view|svg)$/i,O=/^(?:pattern|defs|symbol|metadata)$/i,T=/^(symbol|g|a|svg)$/i,k={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},j={stroke:"strokeOpacity",fill:"fillOpacity"};v.cssRules={},v.gradientDefs={},v.parseTransformAttribute=function(){function t(t,e){var i=e[0],r=3===e.length?e[1]:0,n=3===e.length?e[2]:0;t[0]=Math.cos(i),t[1]=Math.sin(i),t[2]=-Math.sin(i),t[3]=Math.cos(i),t[4]=r-(t[0]*r+t[2]*n),t[5]=n-(t[1]*r+t[3]*n)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0]; -t[0]=i,t[3]=r}function i(t,e){t[2]=Math.tan(v.util.degreesToRadians(e[0]))}function r(t,e){t[1]=Math.tan(v.util.degreesToRadians(e[0]))}function n(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var s=[1,0,0,1,0,0],o=v.reNum,a="(?:\\s+,?\\s*|,\\s*)",h="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",c="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+")"+a+"("+o+"))?\\s*\\))",u="(?:(scale)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",f="(?:(translate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")\\s*\\))",g="(?:"+d+"|"+f+"|"+u+"|"+l+"|"+h+"|"+c+")",p="(?:"+g+"(?:"+a+"*"+g+")*)",b="^\\s*(?:"+p+"?)\\s*$",m=new RegExp(b),y=new RegExp(g,"g");return function(o){var a=s.concat(),h=[];if(!o||o&&!m.test(o))return a;o.replace(y,function(o){var c=new RegExp(g).exec(o).filter(function(t){return!!t}),l=c[1],u=c.slice(2).map(parseFloat);switch(l){case"translate":n(a,u);break;case"rotate":u[0]=v.util.degreesToRadians(u[0]),t(a,u);break;case"scale":e(a,u);break;case"skewX":i(a,u);break;case"skewY":r(a,u);break;case"matrix":a=u}h.push(a.concat()),a=s.concat()});for(var c=h[0];h.length>1;)h.shift(),c=v.util.multiplyTransformMatrices(c,h[0]);return c}}();var M=new RegExp("^\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*$");v.parseSVGDocument=function(){function t(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}return function(e,i,r){if(e){f(e);var n=new Date,s=v.Object.__uid++,o=d(e),a=v.util.toArray(e.getElementsByTagName("*"));if(o.svgUid=s,0===a.length&&v.isLikelyNode){a=e.selectNodes('//*[name(.)!="svg"]');for(var h=[],c=0,l=a.length;c/i,""))),n&&n.documentElement||e&&e(null),v.parseSVGDocument(n.documentElement,function(i,r){A.set(t,{objects:v.util.array.invoke(i,"toObject"),options:r}),e&&e(i,r)},i)}t=t.replace(/^\n\s*/,"").trim(),A.has(t,function(i){i?A.get(t,function(t){var i=g(t);e(i.objects,i.options)}):new v.util.request(t,{method:"get",onComplete:r})})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else v.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));v.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)},createSVGFontFacesMarkup:function(t){for(var e,i,r,n,s,o,a,h="",c={},l=v.fontPaths,u=0,f=t.length;u',"","\n"].join("")),h},createSVGRefElementsMarkup:function(t){var e=[];return p(e,t,"backgroundColor"),p(e,t,"overlayColor"),e.join("")}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(){return{type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform}},toSVG:function(t){var e,i,r=fabric.util.object.clone(this.coords);if(this.colorStops.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var n in r)"x1"===n||"x2"===n||"r2"===n?r[n]+=this.offsetX-t.width/2:"y1"!==n&&"y2"!==n||(r[n]+=this.offsetY-t.height/2);i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']);for(var s=0;s\n');return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:"y1"!==r&&"y2"!==r||(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;s\n\n\n'},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){if(e&&e.source){var r=this;fabric.util.loadImage(e.source,function(n){r[t]=new fabric.Pattern({source:n,repeat:e.repeat,offsetX:e.offsetX,offsetY:e.offsetY}),i&&i()})}else this[t]=e,i&&i();return this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw n;if("undefined"==typeof e.getContext)throw n;return e},_initOptions:function(t){for(var e in t)this[e]=t[e];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(t),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i=this._activeGroup;this.viewportTransform=t;for(var r=0,n=this._objects.length;r"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"\n")},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop;t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur,t.shadowOffsetX=this.shadow.offsetX,t.shadowOffsetY=this.shadow.offsetY}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&ci.padding?t.x<0?t.x+=i.padding:t.x-=i.padding:t.x=0,n(t.y)>i.padding?t.y<0?t.y+=i.padding:t.y-=i.padding:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(a<0&&(a=360+a),a%=360,n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&this._checkTarget(n,s))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&this._checkTarget(n,o)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout")),this.fire("mouse:over",{target:t,e:e}),t.fire("mouseover"),this._hoveredTarget=t):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){return this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e&&e.fire("deselected",{e:t}),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t}),this},deactivateAll:function(){for(var t,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.fire("mouse:wheel",{e:t})},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor;if(e.selectable){var r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this._setCornerCursor(n,e,t):this.setCursor(i)}else this.setCursor(i);return!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay;for(var t in r)n[t]=r[t];e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n),n()},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.Image.fromObject(e,function(e){n[t]=e,i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):void(i[t]=!0)},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.toFixed,n=e.util.string.capitalize,s=e.util.degreesToRadians,o=e.StaticCanvas.supports("setLineDash"),a=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:a,statefullCache:!1,noScaleCache:!0,dirty:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t),this.objectCaching&&(this._createCacheCanvas(),this.setupState({propertySet:"cacheProperties"}))},_createCacheCanvas:function(){this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_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 i=this.getViewportTransform()[0],r=this.getObjectScaling(),n=this._getNonTransformedDimensions(),s=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,o=r.scaleX*i*s,a=r.scaleY*i*s,h=n.x*o,c=n.y*a;return(h!==this.cacheWidth||c!==this.cacheHeight)&&(this._cacheCanvas.width=h,this._cacheCanvas.height=c,this._cacheContext.translate(h/2,c/2),this._cacheContext.scale(o,a),this.cacheWidth=h,this.cacheHeight=c,this.zoomX=o,this.zoomY=a,!0)},_initGradient:function(t){!t.fill||!t.fill.colorStops||t.fill instanceof e.Gradient||this.set("fill",new e.Gradient(t.fill)),!t.stroke||!t.stroke.colorStops||t.stroke instanceof e.Gradient||this.set("stroke",new e.Gradient(t.stroke))},_initPattern:function(t){!t.fill||!t.fill.source||t.fill instanceof e.Pattern||this.set("fill",new e.Pattern(t.fill)),!t.stroke||!t.stroke.source||t.stroke instanceof e.Pattern||this.set("stroke",new e.Pattern(t.stroke))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var i=e.util.getFunctionBody(t.clipTo);"undefined"!=typeof i&&(this.clipTo=new Function("ctx",i))}},setOptions:function(t){for(var e in t)this.set(e,t[e]);this._initGradient(t),this._initPattern(t),this._initClipping(t)},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),t.rotate(s(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),t.transform(1,0,Math.tan(s(this.skewX)),1,0,0),t.transform(1,Math.tan(s(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,n={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,i),top:r(this.top,i),width:r(this.width,i),height:r(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,i),scaleX:r(this.scaleX,i),scaleY:r(this.scaleY,i),angle:r(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():this.transformMatrix,skewX:r(this.skewX,i),skewY:r(this.skewY,i)};return e.util.populateWithProperties(this,n,t),this.includeDefaultValues||(n=this._removeDefaultValues(n)),n},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},get:function(t){return this[t]},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow||(i=new e.Shadow(i)),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.dirty=!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(t,i){0===this.width&&0===this.height||!this.visible||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.objectCaching&&!this.group?(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())},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._getNonTransformedDimensions();this._cacheContext.clearRect(-e.x/2,-e.y/2,e.x,e.y)}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),o?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),o=this.calcTransformMatrix();o=e.util.multiplyTransformMatrices(n,o),r=e.util.qrDecompose(o),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(s(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(s(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_renderFill:function(t){if(this.fill){if(t.save(),this.fill.gradientTransform){var e=this.fill.gradientTransform;t.transform.apply(t,e)}this.fill.toLive&&t.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore()}},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this.stroke.gradientTransform){var e=this.stroke.gradientTransform;t.transform.apply(t,e)}this.stroke.toLive&&t.translate(-this.width/2+this.stroke.offsetX||0,-this.height/2+this.stroke.offsetY||0),t.stroke(),t.restore()}},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 0},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),i.gradientTransform&&(r.gradientTransform=i.gradientTransform);for(var n in i.colorStops){var s=new e.Color(i.colorStops[n]);r.colorStops.push({offset:n,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,e.util.degreesToRadians(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,i){var r=t(this.oCoords),n=fabric.Intersection.intersectPolygonRectangle(r,e,i);return"Intersection"===n.status},intersectsWithObject:function(e){var i=fabric.Intersection.intersectPolygonPolygon(t(this.oCoords),t(e.oCoords));return"Intersection"===i.status||e.isContainedWithinObject(this)||this.isContainedWithinObject(e)},isContainedWithinObject:function(e){ -for(var i=t(this.oCoords),r=0;r<4;r++)if(!e.containsPoint(i[r]))return!1;return!0},isContainedWithinRect:function(t,e){var i=this.getBoundingRect();return i.left>=t.x&&i.left+i.width<=e.x&&i.top>=t.y&&i.top+i.height<=e.y},containsPoint:function(t){this.oCoords||this.setCoords();var e=this._getImageLines(this.oCoords),i=this._findCrossPoints(t,e);return 0!==i&&i%2===1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t){var e=this.calcCoords(t);return fabric.util.makeBoundingBoxFromPoints([e.tl,e.tr,e.br,e.bl])},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),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);return{tl:p,tr:v,br:m,bl:b,ml:y,mt:_,mr:x,mb:C,mtr:S}},setCoords:function(t){return this.oCoords=this.calcCoords(t),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return[1,0,0,1,0,0]},calcTransformMatrix:function(){var t=this.getCenterPoint(),e=[1,0,0,1,t.x,t.y],r=this._calcRotateMatrix(),n=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),s=this.group?this.group.calcTransformMatrix():[1,0,0,1,0,0];return s=i(s,e),s=i(s,r),s=i(s,n)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas.moveTo(this,t),this}}),function(){function t(t,e){if(e){if(e.toLive)return t+": url(#SVGID_"+e.id+"); ";var i=new fabric.Color(e),r=t+": "+i.toRgb()+"; ",n=i.getAlpha();return 1!==n&&(r+=t+"-opacity: "+n.toString()+"; "),r}return t+": none; "}fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(e){var i=this.fillRule,r=this.strokeWidth?this.strokeWidth:"0",n=this.strokeDashArray?this.strokeDashArray.join(" "):"none",s=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",a=this.strokeMiterLimit?this.strokeMiterLimit:"4",h="undefined"!=typeof this.opacity?this.opacity:"1",c=this.visible?"":" visibility: hidden;",l=e?"":this.getSvgFilter(),u=t("fill",this.fill),f=t("stroke",this.stroke);return[f,"stroke-width: ",r,"; ","stroke-dasharray: ",n,"; ","stroke-linecap: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",a,"; ",u,"fill-rule: ",i,"; ","opacity: ",h,";",l,c].join("")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgId:function(){return this.id?'id="'+this.id+'" ':""},getSvgTransform:function(){if(this.group&&"path-group"===this.group.type)return"";var t=fabric.util.toFixed,e=this.getAngle(),i=this.getSkewX()%360,r=this.getSkewY()%360,n=this.getCenterPoint(),s=fabric.Object.NUM_FRACTION_DIGITS,o="path-group"===this.type?"":"translate("+t(n.x,s)+" "+t(n.y,s)+")",a=0!==e?" rotate("+t(e,s)+")":"",h=1===this.scaleX&&1===this.scaleY?"":" scale("+t(this.scaleX,s)+" "+t(this.scaleY,s)+")",c=0!==i?" skewX("+t(i,s)+")":"",l=0!==r?" skewY("+t(r,s)+")":"",u="path-group"===this.type?this.width:0,f=this.flipX?" matrix(-1 0 0 1 "+u+" 0) ":"",d="path-group"===this.type?this.height:0,g=this.flipY?" matrix(1 0 0 -1 0 "+d+")":"";return[o,a,h,f,g,c,l].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.join(" ")+") ":""},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t}})}(),function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i,r){if(!fabric.isLikelyNode&&t instanceof Element)return t===i;if(t instanceof Array){if(t.length!==i.length)return!1;for(var n=0,s=t.length;n\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return new i.Line(s,r(n,e))},void(i.Line.fromObject=function(t,e){var r=[t.x1,t.y1,t.x2,t.y2],n=new i.Line(r,t);return e&&e(n),n}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;return i.Circle?void i.warn("fabric.Circle is already defined."):(i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,initialize:function(t){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)},complexity:function(){return 1}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},void(i.Circle.fromObject=function(t,e){var r=new i.Circle(t);return e&&e(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){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("")},complexity:function(){return 1}}),void(e.Triangle.fromObject=function(t,i){var r=new e.Triangle(t);return i&&i(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;return e.Ellipse?void e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,initialize:function(t){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)},complexity:function(){return 1}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},void(e.Ellipse.fromObject=function(t,i){var r=new e.Ellipse(t);return i&&i(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(t){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("")},complexity:function(){return 1}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i){var r=new e.Rect(t);return i&&i(r),r}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Polyline?void e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,initialize:function(t,i){return e.Polygon.prototype.initialize.call(this,t,i)},_calcDimensions:function(){return e.Polygon.prototype._calcDimensions.call(this)},toObject:function(t){return e.Polygon.prototype.toObject.call(this,t)},toSVG:function(t){return e.Polygon.prototype.toSVG.call(this,t)},_render:function(t,i){e.Polygon.prototype.commonRender.call(this,t,i)&&(this._renderFill(t),this._renderStroke(t))},_renderDashedStroke:function(t){var i,r;t.beginPath();for(var n=0,s=this.points.length;n\n'),t?t(r.join("")):r.join("")},_render:function(t,e){this.commonRender(t,e)&&(this._renderFill(t),(this.stroke||this.strokeDashArray)&&(t.closePath(),this._renderStroke(t)))},commonRender:function(t,e){var i,r=this.points.length;if(!r||isNaN(this.points[r-1].y))return!1;e||t.translate(-this.pathOffset.x,-this.pathOffset.y),t.beginPath(),t.moveTo(this.points[0].x,this.points[0].y);for(var n=0;n"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()})});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){"string"==typeof t.paths?e.loadSVGFromURL(t.paths,function(r){var n=t.paths;delete t.paths;var s=e.util.groupSVGElements(r,t,n);i(s)}):e.util.enlivenObjects(t.paths,function(r){delete t.paths,i(new e.PathGroup(r,t))})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.array.invoke;if(!e.Group){var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.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;t.set({originalLeft:r,originalTop:n,left:r-e.x,top:n-e.y}),t.setCoords(s)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){return i(this.callSuper("toObject",t),{objects:s(this._objects,"toObject",t)})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},drawObject:function(t){for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in o){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[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=function(t){return new e.Image.filters.Convolute(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,j,M,A,P,D,I;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;h=e)){D=r(1e3*s(c-T.x)),O[D]||(O[D]={});for(var E=k.y-w;E<=k.y+w;E++)E<0||E>=o||(I=r(1e3*s(E-T.y)),O[D][I]||(O[D][I]=m(n(i(D*x,2)+i(I*C,2))/1e3)),u=O[D][I],u>0&&(d=4*(E*e+c),g+=u,j+=u*v[d],M+=u*v[d+1],A+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=j/g,b[d+1]=M/g,b[d+2]=A/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(E=4*(I+M*e),k+=x*p[E+3],S+=x,p[E+3]<255&&(x=x*p[E+3]/250),w+=x*p[E],O+=x*p[E+1],T+=x*p[E+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=k/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=function(t){return new e.Image.filters.Resize(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_render:function(t){this._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=!1;return this._forceClearCache?(this._forceClearCache=!1,this.dirty=!0,!0):(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._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,i,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,i,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,r){var n=new e.Text(t.text,i(t));return r&&r(n),n},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(e,r)):t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a=0,h=this._getLeftOffset(),c=this._getTopOffset();t.save();for(var l=0,u=this._textLines.length;l0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(this.ctx,r)):e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(s[parseInt(o,10)-i]=this.styles[e][o],delete this.styles[e][o]);this.styles[e+1]=s}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}this.styles[e][i]=r||t(n[i-1]),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this._fireSelectionChanged(),this._updateTextarea()},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=fabric.util.object.clone(this.getSelectionStyles(this.selectionStart,this.selectionEnd)),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.clone;e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,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){var e=this.textAlign;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())};var e=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,i){var r=e(this.styles),n=this._styleMap[t];t=n.line;for(var s in this.styles){var o=parseInt(s,10);o>t&&(this.styles[o+i]=r[o],r[o-i]||delete this.styles[o])}},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file +var fabric=fabric||{version:"1.7.1"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(""),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?D-=2*f:1===c&&D<0&&(D+=2*f);for(var I=Math.ceil(Math.abs(D/f*2)),E=[],L=D/I,R=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),F=P+L,B=0;B=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){var e=this.constructor.superclass.prototype[t];return arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return y;if((f||d)&&(_=" translate("+x(f)+" "+x(d)+") "),r=_+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),y}function g(t){var e=t.objects,i=t.options;return e=e.map(function(t){return v[m(t.type)].fromObject(t)}),{objects:e,options:i}}function p(t,e,i){e[i]&&e[i].toSVG&&t.push('\t\n','\t\t\n\t\n')}var v=t.fabric||(t.fabric={}),b=v.util.object.extend,m=v.util.string.capitalize,y=v.util.object.clone,_=v.util.toFixed,x=v.util.parseUnit,C=v.util.multiplyTransformMatrices,S=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,w=/^(symbol|image|marker|pattern|view|svg)$/i,O=/^(?:pattern|defs|symbol|metadata)$/i,T=/^(symbol|g|a|svg)$/i,k={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},j={stroke:"strokeOpacity",fill:"fillOpacity"};v.cssRules={},v.gradientDefs={},v.parseTransformAttribute=function(){function t(t,e){var i=e[0],r=3===e.length?e[1]:0,n=3===e.length?e[2]:0;t[0]=Math.cos(i),t[1]=Math.sin(i),t[2]=-Math.sin(i),t[3]=Math.cos(i),t[4]=r-(t[0]*r+t[2]*n),t[5]=n-(t[1]*r+t[3]*n)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0]; +t[0]=i,t[3]=r}function i(t,e){t[2]=Math.tan(v.util.degreesToRadians(e[0]))}function r(t,e){t[1]=Math.tan(v.util.degreesToRadians(e[0]))}function n(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var s=[1,0,0,1,0,0],o=v.reNum,a="(?:\\s+,?\\s*|,\\s*)",h="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",c="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+")"+a+"("+o+"))?\\s*\\))",u="(?:(scale)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",f="(?:(translate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")\\s*\\))",g="(?:"+d+"|"+f+"|"+u+"|"+l+"|"+h+"|"+c+")",p="(?:"+g+"(?:"+a+"*"+g+")*)",b="^\\s*(?:"+p+"?)\\s*$",m=new RegExp(b),y=new RegExp(g,"g");return function(o){var a=s.concat(),h=[];if(!o||o&&!m.test(o))return a;o.replace(y,function(o){var c=new RegExp(g).exec(o).filter(function(t){return!!t}),l=c[1],u=c.slice(2).map(parseFloat);switch(l){case"translate":n(a,u);break;case"rotate":u[0]=v.util.degreesToRadians(u[0]),t(a,u);break;case"scale":e(a,u);break;case"skewX":i(a,u);break;case"skewY":r(a,u);break;case"matrix":a=u}h.push(a.concat()),a=s.concat()});for(var c=h[0];h.length>1;)h.shift(),c=v.util.multiplyTransformMatrices(c,h[0]);return c}}();var M=new RegExp("^\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*$");v.parseSVGDocument=function(){function t(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}return function(e,i,r){if(e){f(e);var n=new Date,s=v.Object.__uid++,o=d(e),a=v.util.toArray(e.getElementsByTagName("*"));if(o.svgUid=s,0===a.length&&v.isLikelyNode){a=e.selectNodes('//*[name(.)!="svg"]');for(var h=[],c=0,l=a.length;c/i,""))),n&&n.documentElement||e&&e(null),v.parseSVGDocument(n.documentElement,function(i,r){A.set(t,{objects:v.util.array.invoke(i,"toObject"),options:r}),e&&e(i,r)},i)}t=t.replace(/^\n\s*/,"").trim(),A.has(t,function(i){i?A.get(t,function(t){var i=g(t);e(i.objects,i.options)}):new v.util.request(t,{method:"get",onComplete:r})})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else v.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));v.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)},createSVGFontFacesMarkup:function(t){for(var e,i,r,n,s,o,a,h="",c={},l=v.fontPaths,u=0,f=t.length;u',"","\n"].join("")),h},createSVGRefElementsMarkup:function(t){var e=[];return p(e,t,"backgroundColor"),p(e,t,"overlayColor"),e.join("")}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,i,r=fabric.util.object.clone(this.coords);if(this.colorStops.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var n in r)"x1"===n||"x2"===n||"r2"===n?r[n]+=this.offsetX-t.width/2:"y1"!==n&&"y2"!==n||(r[n]+=this.offsetY-t.height/2);i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']);for(var s=0;s\n');return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:"y1"!==r&&"y2"!==r||(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;s\n\n\n'},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){if(e&&e.source){var r=this;fabric.util.loadImage(e.source,function(n){r[t]=new fabric.Pattern({source:n,repeat:e.repeat,offsetX:e.offsetX,offsetY:e.offsetY}),i&&i()})}else this[t]=e,i&&i();return this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw n;if("undefined"==typeof e.getContext)throw n;return e},_initOptions:function(t){for(var e in t)this[e]=t[e];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(t),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i=this._activeGroup;this.viewportTransform=t;for(var r=0,n=this._objects.length;r"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"\n")},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop,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&&ci.padding?t.x<0?t.x+=i.padding:t.x-=i.padding:t.x=0,n(t.y)>i.padding?t.y<0?t.y+=i.padding:t.y-=i.padding:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(a<0&&(a=360+a),a%=360,n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&this._checkTarget(n,s))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&this._checkTarget(n,o)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout")),this.fire("mouse:over",{target:t,e:e}),t.fire("mouseover"),this._hoveredTarget=t):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){return this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e&&e.fire("deselected",{e:t}),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t}),this},deactivateAll:function(){for(var t,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.fire("mouse:wheel",{e:t})},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor;if(e.selectable){var r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this._setCornerCursor(n,e,t):this.setCursor(i)}else this.setCursor(i);return!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay;for(var t in r)n[t]=r[t];e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n),n()},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.Image.fromObject(e,function(e){n[t]=e,i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):void(i[t]=!0)},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.toFixed,n=e.util.string.capitalize,s=e.util.degreesToRadians,o=e.StaticCanvas.supports("setLineDash"),a=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:a,statefullCache:!1,noScaleCache:!0,dirty:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t),this.objectCaching&&(this._createCacheCanvas(),this.setupState({propertySet:"cacheProperties"}))},_createCacheCanvas:function(){this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_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 i=this.getViewportTransform()[0],r=this.getObjectScaling(),n=this._getNonTransformedDimensions(),s=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,o=r.scaleX*i*s,a=r.scaleY*i*s,h=n.x*o,c=n.y*a;return(h!==this.cacheWidth||c!==this.cacheHeight)&&(this._cacheCanvas.width=h,this._cacheCanvas.height=c,this._cacheContext.translate(h/2,c/2),this._cacheContext.scale(o,a),this.cacheWidth=h,this.cacheHeight=c,this.zoomX=o,this.zoomY=a,!0)},_initGradient:function(t){!t.fill||!t.fill.colorStops||t.fill instanceof e.Gradient||this.set("fill",new e.Gradient(t.fill)),!t.stroke||!t.stroke.colorStops||t.stroke instanceof e.Gradient||this.set("stroke",new e.Gradient(t.stroke))},_initPattern:function(t){!t.fill||!t.fill.source||t.fill instanceof e.Pattern||this.set("fill",new e.Pattern(t.fill)),!t.stroke||!t.stroke.source||t.stroke instanceof e.Pattern||this.set("stroke",new e.Pattern(t.stroke))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var i=e.util.getFunctionBody(t.clipTo);"undefined"!=typeof i&&(this.clipTo=new Function("ctx",i))}},setOptions:function(t){for(var e in t)this.set(e,t[e]);this._initGradient(t),this._initPattern(t),this._initClipping(t)},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),t.rotate(s(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),t.transform(1,0,Math.tan(s(this.skewX)),1,0,0),t.transform(1,Math.tan(s(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,n={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,i),top:r(this.top,i),width:r(this.width,i),height:r(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,i),scaleX:r(this.scaleX,i),scaleY:r(this.scaleY,i),angle:r(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():this.transformMatrix,skewX:r(this.skewX,i),skewY:r(this.skewY,i)};return e.util.populateWithProperties(this,n,t),this.includeDefaultValues||(n=this._removeDefaultValues(n)),n},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},get:function(t){return this[t]},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow||(i=new e.Shadow(i)),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.dirty=!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(t,i){0===this.width&&0===this.height||!this.visible||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.objectCaching&&!this.group?(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())},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._getNonTransformedDimensions();this._cacheContext.clearRect(-e.x/2,-e.y/2,e.x,e.y)}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),o?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),o=this.calcTransformMatrix();o=e.util.multiplyTransformMatrices(n,o),r=e.util.qrDecompose(o),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(s(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(s(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_renderFill:function(t){if(this.fill){if(t.save(),this.fill.gradientTransform){var e=this.fill.gradientTransform;t.transform.apply(t,e)}this.fill.toLive&&t.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore()}},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this.stroke.gradientTransform){var e=this.stroke.gradientTransform;t.transform.apply(t,e)}this.stroke.toLive&&t.translate(-this.width/2+this.stroke.offsetX||0,-this.height/2+this.stroke.offsetY||0),t.stroke(),t.restore()}},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 0},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),i.gradientTransform&&(r.gradientTransform=i.gradientTransform);for(var n in i.colorStops){var s=new e.Color(i.colorStops[n]);r.colorStops.push({offset:n,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,e.util.degreesToRadians(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,i){var r=t(this.oCoords),n=fabric.Intersection.intersectPolygonRectangle(r,e,i);return"Intersection"===n.status},intersectsWithObject:function(e){var i=fabric.Intersection.intersectPolygonPolygon(t(this.oCoords),t(e.oCoords));return"Intersection"===i.status||e.isContainedWithinObject(this)||this.isContainedWithinObject(e); +},isContainedWithinObject:function(e){for(var i=t(this.oCoords),r=0;r<4;r++)if(!e.containsPoint(i[r]))return!1;return!0},isContainedWithinRect:function(t,e){var i=this.getBoundingRect();return i.left>=t.x&&i.left+i.width<=e.x&&i.top>=t.y&&i.top+i.height<=e.y},containsPoint:function(t){this.oCoords||this.setCoords();var e=this._getImageLines(this.oCoords),i=this._findCrossPoints(t,e);return 0!==i&&i%2===1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t){var e=this.calcCoords(t);return fabric.util.makeBoundingBoxFromPoints([e.tl,e.tr,e.br,e.bl])},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),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);return{tl:p,tr:v,br:m,bl:b,ml:y,mt:_,mr:x,mb:C,mtr:S}},setCoords:function(t){return this.oCoords=this.calcCoords(t),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return[1,0,0,1,0,0]},calcTransformMatrix:function(){var t=this.getCenterPoint(),e=[1,0,0,1,t.x,t.y],r=this._calcRotateMatrix(),n=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),s=this.group?this.group.calcTransformMatrix():[1,0,0,1,0,0];return s=i(s,e),s=i(s,r),s=i(s,n)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas.moveTo(this,t),this}}),function(){function t(t,e){if(e){if(e.toLive)return t+": url(#SVGID_"+e.id+"); ";var i=new fabric.Color(e),r=t+": "+i.toRgb()+"; ",n=i.getAlpha();return 1!==n&&(r+=t+"-opacity: "+n.toString()+"; "),r}return t+": none; "}fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(e){var i=this.fillRule,r=this.strokeWidth?this.strokeWidth:"0",n=this.strokeDashArray?this.strokeDashArray.join(" "):"none",s=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",a=this.strokeMiterLimit?this.strokeMiterLimit:"4",h="undefined"!=typeof this.opacity?this.opacity:"1",c=this.visible?"":" visibility: hidden;",l=e?"":this.getSvgFilter(),u=t("fill",this.fill),f=t("stroke",this.stroke);return[f,"stroke-width: ",r,"; ","stroke-dasharray: ",n,"; ","stroke-linecap: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",a,"; ",u,"fill-rule: ",i,"; ","opacity: ",h,";",l,c].join("")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgId:function(){return this.id?'id="'+this.id+'" ':""},getSvgTransform:function(){if(this.group&&"path-group"===this.group.type)return"";var t=fabric.util.toFixed,e=this.getAngle(),i=this.getSkewX()%360,r=this.getSkewY()%360,n=this.getCenterPoint(),s=fabric.Object.NUM_FRACTION_DIGITS,o="path-group"===this.type?"":"translate("+t(n.x,s)+" "+t(n.y,s)+")",a=0!==e?" rotate("+t(e,s)+")":"",h=1===this.scaleX&&1===this.scaleY?"":" scale("+t(this.scaleX,s)+" "+t(this.scaleY,s)+")",c=0!==i?" skewX("+t(i,s)+")":"",l=0!==r?" skewY("+t(r,s)+")":"",u="path-group"===this.type?this.width:0,f=this.flipX?" matrix(-1 0 0 1 "+u+" 0) ":"",d="path-group"===this.type?this.height:0,g=this.flipY?" matrix(1 0 0 -1 0 "+d+")":"";return[o,a,h,f,g,c,l].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.join(" ")+") ":""},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t}})}(),function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i,r){if(!fabric.isLikelyNode&&t instanceof Element)return t===i;if(t instanceof Array){if(t.length!==i.length)return!1;for(var n=0,s=t.length;n\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return new i.Line(s,r(n,e))},void(i.Line.fromObject=function(t,e){var r=[t.x1,t.y1,t.x2,t.y2],n=new i.Line(r,t);return e&&e(n),n}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;return i.Circle?void i.warn("fabric.Circle is already defined."):(i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,initialize:function(t){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)},complexity:function(){return 1}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},void(i.Circle.fromObject=function(t,e){var r=new i.Circle(t);return e&&e(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){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("")},complexity:function(){return 1}}),void(e.Triangle.fromObject=function(t,i){var r=new e.Triangle(t);return i&&i(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;return e.Ellipse?void e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,initialize:function(t){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)},complexity:function(){return 1}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},void(e.Ellipse.fromObject=function(t,i){var r=new e.Ellipse(t);return i&&i(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(t){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("")},complexity:function(){return 1}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i){var r=new e.Rect(t);return i&&i(r),r}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Polyline?void e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,initialize:function(t,i){return e.Polygon.prototype.initialize.call(this,t,i)},_calcDimensions:function(){return e.Polygon.prototype._calcDimensions.call(this)},toObject:function(t){return e.Polygon.prototype.toObject.call(this,t)},toSVG:function(t){return e.Polygon.prototype.toSVG.call(this,t)},_render:function(t,i){e.Polygon.prototype.commonRender.call(this,t,i)&&(this._renderFill(t),this._renderStroke(t))},_renderDashedStroke:function(t){var i,r;t.beginPath();for(var n=0,s=this.points.length;n\n'),t?t(r.join("")):r.join("")},_render:function(t,e){this.commonRender(t,e)&&(this._renderFill(t),(this.stroke||this.strokeDashArray)&&(t.closePath(),this._renderStroke(t)))},commonRender:function(t,e){var i,r=this.points.length;if(!r||isNaN(this.points[r-1].y))return!1;e||t.translate(-this.pathOffset.x,-this.pathOffset.y),t.beginPath(),t.moveTo(this.points[0].x,this.points[0].y);for(var n=0;n"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()})});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){"string"==typeof t.paths?e.loadSVGFromURL(t.paths,function(r){var n=t.paths;delete t.paths;var s=e.util.groupSVGElements(r,t,n);i(s)}):e.util.enlivenObjects(t.paths,function(r){delete t.paths,i(new e.PathGroup(r,t))})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.array.invoke;if(!e.Group){var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.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;t.set({originalLeft:r,originalTop:n,left:r-e.x,top:n-e.y}),t.setCoords(s)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){return i(this.callSuper("toObject",t),{objects:s(this._objects,"toObject",t)})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},drawObject:function(t){for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in o){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[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=function(t){return new e.Image.filters.Convolute(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,j,M,A,P,D,I;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;h=e)){D=r(1e3*s(c-T.x)),O[D]||(O[D]={});for(var E=k.y-w;E<=k.y+w;E++)E<0||E>=o||(I=r(1e3*s(E-T.y)),O[D][I]||(O[D][I]=m(n(i(D*x,2)+i(I*C,2))/1e3)),u=O[D][I],u>0&&(d=4*(E*e+c),g+=u,j+=u*v[d],M+=u*v[d+1],A+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=j/g,b[d+1]=M/g,b[d+2]=A/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(E=4*(I+M*e),k+=x*p[E+3],S+=x,p[E+3]<255&&(x=x*p[E+3]/250),w+=x*p[E],O+=x*p[E+1],T+=x*p[E+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=k/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=function(t){return new e.Image.filters.Resize(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_render:function(t){this._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=!1;return this._forceClearCache?(this._forceClearCache=!1,this.dirty=!0,!0):(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._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,i,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,i,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,r){var n=new e.Text(t.text,i(t));return r&&r(n),n},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(e,r)):t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a=0,h=this._getLeftOffset(),c=this._getTopOffset();t.save();for(var l=0,u=this._textLines.length;l0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(this.ctx,r)):e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.hiddenTextarea&&this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(s[parseInt(o,10)-i]=this.styles[e][o],delete this.styles[e][o]);this.styles[e+1]=s}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}this.styles[e][i]=r||t(n[i-1]),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this._fireSelectionChanged(),this._updateTextarea()},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=fabric.util.object.clone(this.getSelectionStyles(this.selectionStart,this.selectionEnd)),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.clone;e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,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;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())};var e=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,i){var r=e(this.styles),n=this._styleMap[t];t=n.line;for(var s in this.styles){var o=parseInt(s,10);o>t&&(this.styles[o+i]=r[o],r[o-i]||delete this.styles[o])}},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 57f9b462e304324c9f4b90d58b252a62e0e8bb83..3ac3e64ef4fa05bf62eeb09c28294d0989944267 100644 GIT binary patch delta 58946 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�?lWq&JZmG9y&ZQV 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 VaXnx%5ps>={|AY8mH%Po0{}HeP3`~y diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 8ab78d31101..75d5924b103 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,5 +1,5 @@ var fabric = fabric || { - version: "1.7.0" + version: "1.7.1" }; if (typeof exports !== "undefined") { @@ -2872,8 +2872,8 @@ fabric.ElementsParser.prototype.checkIfDone = function() { } return this; }, - toObject: function() { - return { + toObject: function(propertiesToInclude) { + var object = { type: this.type, coords: this.coords, colorStops: this.colorStops, @@ -2881,6 +2881,8 @@ fabric.ElementsParser.prototype.checkIfDone = function() { offsetY: this.offsetY, gradientTransform: this.gradientTransform ? this.gradientTransform.concat() : this.gradientTransform }; + fabric.util.populateWithProperties(this, object, propertiesToInclude); + return object; }, toSVG: function(object) { var coords = fabric.util.object.clone(this.coords), markup, commonAttributes; @@ -3044,8 +3046,8 @@ fabric.Pattern = fabric.util.createClass({ this.offsetY = options.offsetY; } }, - toObject: function() { - var source; + toObject: function(propertiesToInclude) { + var source, object; if (typeof this.source === "function") { source = String(this.source); } else if (typeof this.source.src === "string") { @@ -3053,12 +3055,14 @@ fabric.Pattern = fabric.util.createClass({ } else if (typeof this.source === "object" && this.source.toDataURL) { source = this.source.toDataURL(); } - return { + object = { source: source, repeat: this.repeat, offsetX: this.offsetX, offsetY: this.offsetY }; + fabric.util.populateWithProperties(this, object, propertiesToInclude); + return object; }, toSVG: function(object) { var patternSource = typeof this.source === "function" ? this.source() : this.source, patternWidth = patternSource.width / object.getWidth(), patternHeight = patternSource.height / object.getHeight(), patternOffsetX = this.offsetX / object.getWidth(), patternOffsetY = this.offsetY / object.getHeight(), patternImgSrc = ""; @@ -3863,11 +3867,11 @@ fabric.BaseBrush = fabric.util.createClass({ if (!this.shadow) { return; } - var ctx = this.canvas.contextTop; + var ctx = this.canvas.contextTop, zoom = this.canvas.getZoom(); ctx.shadowColor = this.shadow.color; - ctx.shadowBlur = this.shadow.blur; - ctx.shadowOffsetX = this.shadow.offsetX; - ctx.shadowOffsetY = this.shadow.offsetY; + ctx.shadowBlur = this.shadow.blur * zoom; + ctx.shadowOffsetX = this.shadow.offsetX * zoom; + ctx.shadowOffsetY = this.shadow.offsetY * zoom; }, _resetShadow: function() { var ctx = this.canvas.contextTop; @@ -8706,13 +8710,13 @@ fabric.util.object.extend(fabric.Object.prototype, { }, realizeTransform: function(object) { var matrix = object.calcTransformMatrix(), options = fabric.util.qrDecompose(matrix), center = new fabric.Point(options.translateX, options.translateY); - object.scaleX = options.scaleX; - object.scaleY = options.scaleY; + object.flipX = false; + object.flipY = false; + object.set("scaleX", options.scaleX); + object.set("scaleY", options.scaleY); object.skewX = options.skewX; object.skewY = options.skewY; object.angle = options.angle; - object.flipX = false; - object.flipY = false; object.setPositionByOrigin(center, "center", "center"); return object; }, @@ -11400,6 +11404,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ this.isEditing = false; this.selectable = true; this.selectionEnd = this.selectionStart; + this.hiddenTextarea.blur && this.hiddenTextarea.blur(); this.hiddenTextarea && this.canvas && this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea); this.hiddenTextarea = null; this.abortCursorAnimation(); @@ -12299,6 +12304,7 @@ fabric.util.object.extend(fabric.IText.prototype, { return lines; }, _splitTextIntoLines: function(ctx) { + ctx = ctx || this.ctx; var originalAlign = this.textAlign; ctx.save(); this._setTextStyles(ctx); diff --git a/package.json b/package.json index 7a7c1117626..56a7b21efa7 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.0", + "version": "1.7.1", "author": "Juriy Zaytsev ", "contributors": [ {