From 430697a37858fd5f527d53b62d7a1129cdc7205e Mon Sep 17 00:00:00 2001 From: Asturur Date: Thu, 16 Feb 2017 16:41:13 -0500 Subject: [PATCH] build 175 --- CHANGELOG.md | 7 ++++ HEADER.js | 2 +- ISSUE_TEMPLATE.md | 2 +- dist/fabric.js | 72 +++++++++++++++++++++++++++++------------ dist/fabric.min.js | 14 ++++---- dist/fabric.min.js.gz | Bin 69594 -> 69696 bytes dist/fabric.require.js | 50 +++++++++++++++++++++------- package.json | 2 +- 8 files changed, 107 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d448d29320b..c4dd797e1b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +**Version 1.7.5** + +- Improvement: draw textbackgroundColor in one single pass when possible @stefanhayden [#3698](https://github.com/kangax/fabric.js/pull/3698) +- Improvement: fire selection changed event just if text is editing [#3702](https://github.com/kangax/fabric.js/pull/3702) +- Improvement: Add object property 'needsItsOwnCache' [#3703](https://github.com/kangax/fabric.js/pull/3703) +- Improvement: Skip unnecessary transform if they can be detected with a single if [#3704](https://github.com/kangax/fabric.js/pull/3704) + **Version 1.7.4** - Fix: Moved all the touch event to passive false so that they behave as before chrome changes [#3690](https://github.com/kangax/fabric.js/pull/3690) diff --git a/HEADER.js b/HEADER.js index 03df591185e..55477b3ff97 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.7.4" }; +var fabric = fabric || { version: "1.7.5" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 7425a26f8c5..3a0cbccbb22 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -25,7 +25,7 @@ Remove the template from below and provide thoughtful commentary *and code sampl ## Version -1.7.4 +1.7.5 ## Test Case http://jsfiddle.net/fabricjs/Da7SP/ diff --git a/dist/fabric.js b/dist/fabric.js index b3f66631e1d..51d7165ee93 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=json,gestures minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.7.4" }; +var fabric = fabric || { version: "1.7.5" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -12338,6 +12338,16 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati */ dirty: false, + /** + * When set to `true`, force the object to have its own cache, even if it is inside a group + * it may be needed when your object behave in a particular way on the cache and always needs + * its own isolated canvas to render correctly. + * since 1.7.5 + * @type Boolean + * @default false + */ + needsItsOwnCache: false, + /** * List of properties to consider when checking if state * of an object is changed (fabric.Object#hasStateChanged) @@ -12466,13 +12476,13 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati } var center = fromLeft ? this._getLeftTopCoords() : this.getCenterPoint(); ctx.translate(center.x, center.y); - ctx.rotate(degreesToRadians(this.angle)); + this.angle && ctx.rotate(degreesToRadians(this.angle)); ctx.scale( this.scaleX * (this.flipX ? -1 : 1), this.scaleY * (this.flipY ? -1 : 1) ); - ctx.transform(1, 0, Math.tan(degreesToRadians(this.skewX)), 1, 0, 0); - ctx.transform(1, Math.tan(degreesToRadians(this.skewY)), 0, 1, 0, 0); + this.skewX && ctx.transform(1, 0, Math.tan(degreesToRadians(this.skewX)), 1, 0, 0); + this.skewY && ctx.transform(1, Math.tan(degreesToRadians(this.skewY)), 0, 1, 0, 0); }, /** @@ -12679,7 +12689,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati ctx.transform.apply(ctx, this.transformMatrix); } this.clipTo && fabric.util.clipContext(this, ctx); - if (this.objectCaching && !this.group) { + if (this.objectCaching && (!this.group || this.needsItsOwnCache)) { if (this.isCacheDirty(noTransform)) { this.statefullCache && this.saveState({ propertySet: 'cacheProperties' }); this.drawObject(this._cacheContext, noTransform); @@ -23402,7 +23412,9 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { lineWidth, lineLeftOffset, leftOffset = this._getLeftOffset(), topOffset = this._getTopOffset(), - line, _char, style; + colorCache = '', + line, _char, style, leftCache, + topCache, widthCache, heightCache; ctx.save(); for (var i = 0, len = this._textLines.length; i < len; i++) { heightOfLine = this._getHeightOfLine(ctx, i); @@ -23415,22 +23427,40 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { lineWidth = this._getLineWidth(ctx, i); lineLeftOffset = this._getLineLeftOffset(lineWidth); - + leftCache = topCache = widthCache = heightCache = 0; for (var j = 0, jlen = line.length; j < jlen; j++) { - style = this._getStyleDeclaration(i, j); - if (!style || !style.textBackgroundColor) { + style = this._getStyleDeclaration(i, j) || {}; + + if (colorCache !== style.textBackgroundColor) { + if (heightCache && widthCache) { + ctx.fillStyle = colorCache; + ctx.fillRect(leftCache, topCache, widthCache, heightCache); + } + leftCache = topCache = widthCache = heightCache = 0; + colorCache = style.textBackgroundColor || ''; + } + + if (!style.textBackgroundColor) { + colorCache = ''; continue; } _char = line[j]; - ctx.fillStyle = style.textBackgroundColor; - - ctx.fillRect( - leftOffset + lineLeftOffset + this._getWidthOfCharsAt(ctx, i, j), - topOffset + lineTopOffset, - this._getWidthOfChar(ctx, _char, i, j), - heightOfLine / this.lineHeight - ); + if (colorCache === style.textBackgroundColor) { + colorCache = style.textBackgroundColor; + if (!leftCache) { + leftCache = leftOffset + lineLeftOffset + this._getWidthOfCharsAt(ctx, i, j); + } + topCache = topOffset + lineTopOffset; + widthCache += this._getWidthOfChar(ctx, _char, i, j); + heightCache = heightOfLine / this.lineHeight; + } + } + // if a textBackgroundColor ends on the last character of a line + if (heightCache && widthCache) { + ctx.fillStyle = colorCache; + ctx.fillRect(leftCache, topCache, widthCache, heightCache); + leftCache = topCache = widthCache = heightCache = 0; } lineTopOffset += heightOfLine; } @@ -24117,7 +24147,7 @@ fabric.Image.filters.BaseFilter.fromObject = function(object, callback) { this._tick(); this.fire('editing:entered'); - + this._fireSelectionChanged(); if (!this.canvas) { return this; } @@ -24814,8 +24844,10 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this.selectionStart = newSelection; this.selectionEnd = newSelection; } - this._fireSelectionChanged(); - this._updateTextarea(); + if (this.isEditing) { + this._fireSelectionChanged(); + this._updateTextarea(); + } }, /** diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 4c5341a2b39..be11d3ba553 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,9 +1,9 @@ -var fabric=fabric||{version:"1.7.4"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E")),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.iMatrix=[1,0,0,1,0,0],fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);"undefined"!=typeof e&&(this.clipTo=new Function("ctx",e))}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?D-=2*f:1===c&&D<0&&(D+=2*f);for(var E=Math.ceil(Math.abs(D/f*2)),I=[],L=D/E,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=A+L,R=0;R=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,_=Math.sqrt,y=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){var e=this.constructor.superclass.prototype[t];return arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return y;if((f||d)&&(x=" translate("+_(f)+" "+_(d)+") "),r=x+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),y}function g(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0; +var fabric=fabric||{version:"1.7.5"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E")),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.iMatrix=[1,0,0,1,0,0],fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);"undefined"!=typeof e&&(this.clipTo=new Function("ctx",e))}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?D-=2*f:1===c&&D<0&&(D+=2*f);for(var E=Math.ceil(Math.abs(D/f*2)),I=[],L=D/E,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=A+L,R=0;R=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,_=Math.sqrt,y=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){var e=this.constructor.superclass.prototype[t];return arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return y;if((f||d)&&(x=" translate("+_(f)+" "+_(d)+") "),r=x+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),y}function g(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0; return!1}var p=t.fabric||(t.fabric={}),v=p.util.object.extend,b=p.util.object.clone,m=p.util.toFixed,_=p.util.parseUnit,y=p.util.multiplyTransformMatrices,x=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,C=/^(symbol|image|marker|pattern|view|svg)$/i,S=/^(?:pattern|defs|symbol|metadata|clipPath|mask)$/i,w=/^(symbol|g|a|svg)$/i,O={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},T={stroke:"strokeOpacity",fill:"fillOpacity"};p.cssRules={},p.gradientDefs={},p.parseTransformAttribute=function(){function t(t,e){var i=Math.cos(e[0]),r=Math.sin(e[0]),n=0,s=0;3===e.length&&(n=e[1],s=e[2]),t[0]=i,t[1]=r,t[2]=-r,t[3]=i,t[4]=n-(i*n-r*s),t[5]=s-(r*n+i*s)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e,i){t[i]=Math.tan(p.util.degreesToRadians(e[0]))}function r(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var n=[1,0,0,1,0,0],s=p.reNum,o="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+s+")\\s*\\))",h="(?:(skewY)\\s*\\(\\s*("+s+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+")"+o+"("+s+"))?\\s*\\))",l="(?:(scale)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",u="(?:(translate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",f="(?:(matrix)\\s*\\(\\s*("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")\\s*\\))",d="(?:"+f+"|"+u+"|"+l+"|"+c+"|"+a+"|"+h+")",g="(?:"+d+"(?:"+o+"*"+d+")*)",v="^\\s*(?:"+g+"?)\\s*$",b=new RegExp(v),m=new RegExp(d,"g");return function(s){var o=n.concat(),a=[];if(!s||s&&!b.test(s))return o;s.replace(m,function(s){var h=new RegExp(d).exec(s).filter(function(t){return!!t}),c=h[1],l=h.slice(2).map(parseFloat);switch(c){case"translate":r(o,l);break;case"rotate":l[0]=p.util.degreesToRadians(l[0]),t(o,l);break;case"scale":e(o,l);break;case"skewX":i(o,l,2);break;case"skewY":i(o,l,1);break;case"matrix":o=l}a.push(o.concat()),o=n.concat()});for(var h=a[0];a.length>1;)a.shift(),h=p.util.multiplyTransformMatrices(h,a[0]);return h}}();var j=new RegExp("^\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*$");p.parseSVGDocument=function(t,e,i){if(t){f(t);var r=p.Object.__uid++,n=d(t),s=p.util.toArray(t.getElementsByTagName("*"));if(n.svgUid=r,0===s.length&&p.isLikelyNode){s=t.selectNodes('//*[name(.)!="svg"]');for(var o=[],a=0,h=s.length;a/i,""))),r&&r.documentElement||e&&e(null),p.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:r})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));p.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,i,r=fabric.util.object.clone(this.coords);if(this.colorStops.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var n in r)"x1"===n||"x2"===n||"r2"===n?r[n]+=this.offsetX-t.width/2:"y1"!==n&&"y2"!==n||(r[n]+=this.offsetY-t.height/2);i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']);for(var s=0;s\n');return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:"y1"!==r&&"y2"!==r||(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;s\n\n\n'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=fabric.util.transformPoint,s=fabric.util.invertTransform,o=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass(fabric.CommonMethods,{initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw o;if("undefined"==typeof e.getContext)throw o;return e},_initOptions:function(t){this._setOptions(t),this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(t),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i=this._activeGroup,r=!1,n=!0;this.viewportTransform=t;for(var s=0,o=this._objects.length;s"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),"\n")},createSVGRefElementsMarkup:function(){var t=this,e=["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)});return e.join("")},createSVGFontFacesMarkup:function(){for(var t,e,i,r,n,s,o,a="",h={},c=fabric.fontPaths,l=this.getObjects(),u=0,f=l.length;u',"\n",a,"","\n"].join("")),a},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(a<0&&(a=360+a),a%=360,n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&s===this._searchPossibleTargets([s],n))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&o===this._searchPossibleTargets([o],n)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout")),this.fire("mouse:over",{target:t,e:e}),t.fire("mouseover"),this._hoveredTarget=t):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":"none"}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){var e=this._activeObject;e&&(e.set("active",!1),t!==e&&e.onDeselect&&"function"==typeof e.onDeselect&&e.onDeselect()),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){var i=this.getActiveObject();return i&&i!==t&&i.fire("deselected",{e:e}),this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this._hoveredTarget===t&&(this._hoveredTarget=null),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){var t=this._activeObject;t&&(t.set("active",!1),t.onDeselect&&"function"==typeof t.onDeselect&&t.onDeselect()),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return e&&(this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e.fire("deselected",{e:t})),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return e&&(this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t})),this},deactivateAll:function(){for(var t,e=this.getObjects(),i=0,r=e.length;i1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e||!e.selectable)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t),this.objectCaching&&(this._createCacheCanvas(),this.setupState({propertySet:"cacheProperties"}))},_createCacheCanvas:function(){this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this._getNonTransformedDimensions(),n=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,s=i.scaleX*t*n,o=i.scaleY*t*n,a=r.x*s,h=r.y*o;return{width:Math.ceil(a)+2,height:Math.ceil(h)+2,zoomX:s,zoomY:o}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.action;if("scale"===t.slice(0,5))return!1}var e=this._getCacheCanvasDimensions(),i=e.width,r=e.height,n=e.zoomX,s=e.zoomY;return(i!==this.cacheWidth||r!==this.cacheHeight)&&(this._cacheCanvas.width=i,this._cacheCanvas.height=r,this._cacheContext.translate(i/2,r/2),this._cacheContext.scale(n,s),this.cacheWidth=i,this.cacheHeight=r,this.zoomX=n,this.zoomY=s,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},render:function(t,i){0===this.width&&0===this.height||!this.visible||(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.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),s=this.calcTransformMatrix();s=e.util.multiplyTransformMatrices(n,s),r=e.util.qrDecompose(s),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(o(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore())},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){i.fill=t[0],i.stroke=t[1];var e=o?new a(i[o],i):new a(i);n&&n(e)})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x, -this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;return!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,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var _=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),y=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(y.x+a*this.rotatingPointOffset,y.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=_,g.mt=y,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,r)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry"),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("")}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var o=e.Object.prototype.cacheProperties.concat();o.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:o,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){for(var e,i=[],r=this._createBaseSVGMarkup(),n=0,o=this.points.length;n\n'),t?t(r.join("")):r.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){var r=t.paths;delete t.paths,"string"==typeof orignalPaths?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max;if(!e.Group){var s={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},drawObject:function(t){for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);_[s]=e,_[s+1]=i,_[s+2]=r,_[s+3]=n+y*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,k,M,P,A,D,E;for(T.x=(t+.5)*_,j.x=r(T.x),h=0;h=e)){D=r(1e3*s(c-T.x)),O[D]||(O[D]={});for(var I=j.y-w;I<=j.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[D][E]||(O[D][E]=m(n(i(D*x,2)+i(E*C,2))/1e3)),u=O[D][E],u>0&&(d=4*(I*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],P+=u*v[d+2],A+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=P/g,b[d+3]=A/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(I=4*(E+M*e),j+=x*p[I+3],S+=x,p[I+3]<255&&(x=x*p[I+3]/250),w+=x*p[I],O+=x*p[I+1],T+=x*p[I+2],C+=x))}b[y]=w/C,b[y+1]=O/C,b[y+2]=T/C,b[y+3]=j/S}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=2*Math.ceil(this.fontSize);return t.width+=e,t.height+=e,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;t.fillStyle=s,this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e))},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",e)},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,n,s,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,n,s,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),this._dimensionAffectingProps.indexOf(t)>-1&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,i,r){return e.Object._fromObject("Text",t,i,r,"text")},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=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,_=0,y=g.length;_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.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=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.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(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.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(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.set("dirty",!0),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())};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 +}});for(var a in fabric.StaticCanvas)"prototype"!==a&&(fabric.Canvas[a]=fabric.StaticCanvas[a]);fabric.isTouchSupported&&(fabric.Canvas.prototype._setCursorFromEvent=function(){}),fabric.Element=fabric.Canvas}(),function(){var t={mt:0,tr:1,mr:2,br:3,mb:4,bl:5,ml:6,tl:7},e=fabric.util.addListener,i=fabric.util.removeListener;fabric.util.object.extend(fabric.Canvas.prototype,{cursorMap:["n-resize","ne-resize","e-resize","se-resize","s-resize","sw-resize","w-resize","nw-resize"],_initEventListeners:function(){this._bindEvents(),e(fabric.window,"resize",this._onResize),e(this.upperCanvasEl,"mousedown",this._onMouseDown),e(this.upperCanvasEl,"mousemove",this._onMouseMove),e(this.upperCanvasEl,"mouseout",this._onMouseOut),e(this.upperCanvasEl,"mouseenter",this._onMouseEnter),e(this.upperCanvasEl,"wheel",this._onMouseWheel),e(this.upperCanvasEl,"contextmenu",this._onContextMenu),e(this.upperCanvasEl,"touchstart",this._onMouseDown,{passive:!1}),e(this.upperCanvasEl,"touchmove",this._onMouseMove,{passive:!1}),"undefined"!=typeof eventjs&&"add"in eventjs&&(eventjs.add(this.upperCanvasEl,"gesture",this._onGesture),eventjs.add(this.upperCanvasEl,"drag",this._onDrag),eventjs.add(this.upperCanvasEl,"orientation",this._onOrientationChange),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,{passive:!1}),e(fabric.document,"touchmove",this._onMouseMove,{passive:!1}),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,{passive:!1}),"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(!i||!i.isEditing||t!==i)&&!!(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="undefined"==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._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e||!e.selectable)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!1,needsItsOwnCache:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t),this.objectCaching&&(this._createCacheCanvas(),this.setupState({propertySet:"cacheProperties"}))},_createCacheCanvas:function(){this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this._getNonTransformedDimensions(),n=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,s=i.scaleX*t*n,o=i.scaleY*t*n,a=r.x*s,h=r.y*o;return{width:Math.ceil(a)+2,height:Math.ceil(h)+2,zoomX:s,zoomY:o}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.action;if("scale"===t.slice(0,5))return!1}var e=this._getCacheCanvasDimensions(),i=e.width,r=e.height,n=e.zoomX,s=e.zoomY;return(i!==this.cacheWidth||r!==this.cacheHeight)&&(this._cacheCanvas.width=i,this._cacheCanvas.height=r,this._cacheContext.translate(i/2,r/2),this._cacheContext.scale(n,s),this.cacheWidth=i,this.cacheHeight=r,this.zoomX=n,this.zoomY=s,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),this.angle&&t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),this.skewX&&t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),this.skewY&&t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},render:function(t,i){0===this.width&&0===this.height||!this.visible||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),!this.objectCaching||this.group&&!this.needsItsOwnCache?(this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})):(this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)),this.clipTo&&t.restore(),t.restore())},drawObject:function(t,e){this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._render(t,e)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheWidth/2,-this.cacheHeight/2)},isCacheDirty:function(t){if(!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),s=this.calcTransformMatrix();s=e.util.multiplyTransformMatrices(n,s),r=e.util.qrDecompose(s),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(o(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore())},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){i.fill=t[0],i.stroke=t[1];var e=o?new a(i[o],i):new a(i);n&&n(e)})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX, +this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;return!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,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var _=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),y=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(y.x+a*this.rotatingPointOffset,y.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=_,g.mt=y,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,r)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry"),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("")}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var o=e.Object.prototype.cacheProperties.concat();o.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:o,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){for(var e,i=[],r=this._createBaseSVGMarkup(),n=0,o=this.points.length;n\n'),t?t(r.join("")):r.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){var r=t.paths;delete t.paths,"string"==typeof orignalPaths?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max;if(!e.Group){var s={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},drawObject:function(t){for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);_[s]=e,_[s+1]=i,_[s+2]=r,_[s+3]=n+y*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,k,M,P,A,D,E;for(T.x=(t+.5)*_,j.x=r(T.x),h=0;h=e)){D=r(1e3*s(c-T.x)),O[D]||(O[D]={});for(var I=j.y-w;I<=j.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[D][E]||(O[D][E]=m(n(i(D*x,2)+i(E*C,2))/1e3)),u=O[D][E],u>0&&(d=4*(I*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],P+=u*v[d+2],A+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=P/g,b[d+3]=A/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(I=4*(E+M*e),j+=x*p[I+3],S+=x,p[I+3]<255&&(x=x*p[I+3]/250),w+=x*p[I],O+=x*p[I+1],T+=x*p[I+2],C+=x))}b[y]=w/C,b[y+1]=O/C,b[y+2]=T/C,b[y+3]=j/S}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=2*Math.ceil(this.fontSize);return t.width+=e,t.height+=e,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;t.fillStyle=s,this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e))},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",e)},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,n,s,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,n,s,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),this._dimensionAffectingProps.indexOf(t)>-1&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,i,r){return e.Object._fromObject("Text",t,i,r,"text")},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=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,_=0,y=g.length;_0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=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.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(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.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.set("dirty",!0),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())};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 9775f8db45b1de83e09b8bc7eea3591a4e704e4c..c529fd8da3450357e3060e42aa1dacbde0d8594d 100644 GIT binary patch delta 43863 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", "contributors": [ {