From 3785dccacfbddd8d9796278df9e5d030eb3d44b2 Mon Sep 17 00:00:00 2001 From: Asturur Date: Sun, 27 Nov 2016 14:12:13 +0100 Subject: [PATCH] rebuilt dist --- dist/fabric.js | 29 +++++++++++++++++++++-------- dist/fabric.min.js | 10 +++++----- dist/fabric.min.js.gz | Bin 68749 -> 68755 bytes dist/fabric.require.js | 14 ++++++++------ src/shapes/object.class.js | 2 +- 5 files changed, 35 insertions(+), 20 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index db06e928..6734526c 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -12108,7 +12108,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * default to false * since 1.7.0 * @type Boolean - * @default + * @default false */ statefullCache: false, @@ -12119,10 +12119,17 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * default to false * since 1.7.0 * @type Boolean - * @default + * @default true */ noScaleCache: true, + /** + * When set to `true`, object's cache will be rerendered next render call. + * @type Boolean + * @default false + */ + dirty: false, + /** * List of properties to consider when checking if state * of an object is changed (fabric.Object#hasStateChanged) @@ -25508,6 +25515,12 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot */ lockScalingFlip: true, + /** + * Override standard Object class values + * Textbox needs this on false + */ + noScaleCache: false, + /** * Constructor. Some scaling related property values are forced. Visibility * of controls is also fixed; only the rotation and width controls are @@ -25547,7 +25560,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.dynamicMinWidth = 0; // wrap lines - this._textLines = this._splitTextIntoLines(); + this._textLines = this._splitTextIntoLines(ctx); // if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap if (this.dynamicMinWidth > this.width) { this._set('width', this.dynamicMinWidth); @@ -25771,14 +25784,14 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot * @returns {Array} Array of lines in the Textbox. * @override */ - _splitTextIntoLines: function() { + _splitTextIntoLines: function(ctx) { var originalAlign = this.textAlign; - this.ctx.save(); - this._setTextStyles(this.ctx); + ctx.save(); + this._setTextStyles(ctx); this.textAlign = 'left'; - var lines = this._wrapText(this.ctx, this.text); + var lines = this._wrapText(ctx, this.text); this.textAlign = originalAlign; - this.ctx.restore(); + ctx.restore(); this._textLines = lines; this._styleMap = this._generateStyleMap(); return lines; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index f76c2bd5..0295c0ed 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,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,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(),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(){var t=this.textAlign;this.ctx.save(),this._setTextStyles(this.ctx),this.textAlign="left";var e=this._wrapText(this.ctx,this.text);return this.textAlign=t,this.ctx.restore(),this._textLines=e,this._styleMap=this._generateStyleMap(),e},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())};var e=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,i){var r=e(this.styles),n=this._styleMap[t];t=n.line;for(var s in this.styles){var o=parseInt(s,10);o>t&&(this.styles[o+i]=r[o],r[o-i]||delete this.styles[o])}},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file +eventjs.add(this.upperCanvasEl,"shake",this._onShake),eventjs.add(this.upperCanvasEl,"longpress",this._onLongPress))},_bindEvents:function(){this._onMouseDown=this._onMouseDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this)},removeListeners:function(){i(fabric.window,"resize",this._onResize),i(this.upperCanvasEl,"mousedown",this._onMouseDown),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"mouseout",this._onMouseOut),i(this.upperCanvasEl,"mouseenter",this._onMouseEnter),i(this.upperCanvasEl,"wheel",this._onMouseWheel),i(this.upperCanvasEl,"contextmenu",this._onContextMenu),i(this.upperCanvasEl,"touchstart",this._onMouseDown),i(this.upperCanvasEl,"touchmove",this._onMouseMove),"undefined"!=typeof eventjs&&"remove"in eventjs&&(eventjs.remove(this.upperCanvasEl,"gesture",this._onGesture),eventjs.remove(this.upperCanvasEl,"drag",this._onDrag),eventjs.remove(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.remove(this.upperCanvasEl,"shake",this._onShake),eventjs.remove(this.upperCanvasEl,"longpress",this._onLongPress))},_onGesture:function(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t){this.__onMouseWheel(t)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t})},_onMouseEnter:function(t){this.findTarget(t)||(this.fire("mouse:over",{target:null,e:t}),this._hoveredTarget=null)},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e)},_onContextMenu:function(t){return this.stopContextMenu&&(t.stopPropagation(),t.preventDefault()),!1},_onMouseDown:function(t){this.__onMouseDown(t),e(fabric.document,"touchend",this._onMouseUp),e(fabric.document,"touchmove",this._onMouseMove),i(this.upperCanvasEl,"mousemove",this._onMouseMove),i(this.upperCanvasEl,"touchmove",this._onMouseMove),"touchstart"===t.type?i(this.upperCanvasEl,"mousedown",this._onMouseDown):(e(fabric.document,"mouseup",this._onMouseUp),e(fabric.document,"mousemove",this._onMouseMove))},_onMouseUp:function(t){if(this.__onMouseUp(t),i(fabric.document,"mouseup",this._onMouseUp),i(fabric.document,"touchend",this._onMouseUp),i(fabric.document,"mousemove",this._onMouseMove),i(fabric.document,"touchmove",this._onMouseMove),e(this.upperCanvasEl,"mousemove",this._onMouseMove),e(this.upperCanvasEl,"touchmove",this._onMouseMove),"touchend"===t.type){var r=this;setTimeout(function(){e(r.upperCanvasEl,"mousedown",r._onMouseDown)},400)}},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t,e){var i=this.getActiveGroup()||this.getActiveObject();return!!(t&&(t.isMoving||t!==i)||!t&&i||!t&&!i&&!this._groupSelector||e&&this._previousPointer&&this.selection&&(e.x!==this._previousPointer.x||e.y!==this._previousPointer.y))},__onMouseUp:function(t){var e,i=!0,r=this._currentTransform,n=this._groupSelector,s=!n||0===n.left&&0===n.top;if(this.isDrawingMode&&this._isCurrentlyDrawing)return void this._onMouseUpInDrawingMode(t);r&&(this._finalizeCurrentTransform(),i=!r.actionPerformed),e=i?this.findTarget(t,!0):r.target;var o=this._shouldRender(e,this.getPointer(t));e||!s?this._maybeGroupObjects(t):(this._groupSelector=null,this._currentTransform=null),e&&(e.isMoving=!1),this._handleCursorAndEvent(t,e,"up"),e&&(e.__corner=0),o&&this.renderAll()},_handleCursorAndEvent:function(t,e,i){this._setCursorFromEvent(t,e),this._handleEvent(t,i,e?e:null)},_handleEvent:function(t,e,i){var r=void 0===typeof i?this.findTarget(t):i,n=this.targets||[],s={e:t,target:r,subTargets:n};this.fire("mouse:"+e,s),r&&r.fire("mouse"+e,s);for(var o=0;o1)){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 diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index e9e9daeee6b5c7e628479c4f95d4057fbe9c7c43..57f9b462e304324c9f4b90d58b252a62e0e8bb83 100644 GIT binary patch delta 42477 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 N{|AY8mH%Po0|0tjdZYjV delta 42397 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 l4$O-|%mN#pw5Rex?H this.width) { this._set("width", this.dynamicMinWidth); } @@ -12296,14 +12298,14 @@ fabric.util.object.extend(fabric.IText.prototype, { } return lines; }, - _splitTextIntoLines: function() { + _splitTextIntoLines: function(ctx) { var originalAlign = this.textAlign; - this.ctx.save(); - this._setTextStyles(this.ctx); + ctx.save(); + this._setTextStyles(ctx); this.textAlign = "left"; - var lines = this._wrapText(this.ctx, this.text); + var lines = this._wrapText(ctx, this.text); this.textAlign = originalAlign; - this.ctx.restore(); + ctx.restore(); this._textLines = lines; this._styleMap = this._generateStyleMap(); return lines; diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index 0d7d1461..4da3838b 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -792,7 +792,7 @@ * @default false */ dirty: false, - + /** * List of properties to consider when checking if state * of an object is changed (fabric.Object#hasStateChanged)