From 19f9eb503c581563aaf14bfd5aa8532e6341d5df Mon Sep 17 00:00:00 2001 From: Asturur Date: Sun, 2 Jul 2017 23:03:49 +0200 Subject: [PATCH 1/2] update to 1715 --- CHANGELOG.md | 5 +++++ HEADER.js | 2 +- dist/fabric.js | 48 ++++++++++++++++++++++++++++-------------------- dist/fabric.min.js | 14 +++++++------- dist/fabric.min.js.gz | Bin 71048 -> 71068 bytes dist/fabric.require.js | 34 +++++++++++++++++----------------- package.json | 2 +- 7 files changed, 59 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0983635a6..e6051345d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +**Version 1.7.15** + +- Improvement: Made iText keymap public. [#4053](https://github.com/kangax/fabric.js/pull/4053) +- Improvement: Fix a bug in updateCacheCanvas that was returning always true [#4051](https://github.com/kangax/fabric.js/pull/4051) + **Version 1.7.14** - Improvement: Avoid cache canvas to resize each mouse move step. [#4037](https://github.com/kangax/fabric.js/pull/4037) diff --git a/HEADER.js b/HEADER.js index 48ba7bc8c..42f7c87a5 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.14" }; +var fabric = fabric || { version: "1.7.15" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/dist/fabric.js b/dist/fabric.js index 6c9ab5e48..765df964d 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.14" }; +var fabric = fabric || { version: "1.7.15" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -6850,14 +6850,14 @@ fabric.ElementsParser.prototype.checkIfDone = function() { * @chainable true */ setViewportTransform: function (vpt) { - var activeGroup = this._activeGroup, object, ingoreVpt = false, skipAbsolute = true; + var activeGroup = this._activeGroup, object, ignoreVpt = false, skipAbsolute = true; this.viewportTransform = vpt; for (var i = 0, len = this._objects.length; i < len; i++) { object = this._objects[i]; - object.group || object.setCoords(ingoreVpt, skipAbsolute); + object.group || object.setCoords(ignoreVpt, skipAbsolute); } if (activeGroup) { - activeGroup.setCoords(ingoreVpt, skipAbsolute); + activeGroup.setCoords(ignoreVpt, skipAbsolute); } this.calcViewportBoundaries(); this.renderAll(); @@ -12654,8 +12654,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati if (shouldResizeCanvas) { this._cacheCanvas.width = Math.max(Math.ceil(width) + additionalWidth, minCacheSize); this._cacheCanvas.height = Math.max(Math.ceil(height) + additionalHeight, minCacheSize); - this.cacheWidth = width; - this.cacheHeight = height; this.cacheTranslationX = (width + additionalWidth) / 2; this.cacheTranslationY = (height + additionalHeight) / 2; } @@ -12663,6 +12661,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati this._cacheContext.setTransform(1, 0, 0, 1, 0, 0); this._cacheContext.clearRect(0, 0, this._cacheCanvas.width, this._cacheCanvas.height); } + this.cacheWidth = width; + this.cacheHeight = height; this._cacheContext.translate(this.cacheTranslationX, this.cacheTranslationY); this._cacheContext.scale(zoomX, zoomY); this.zoomX = zoomX; @@ -12981,7 +12981,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @return {Boolean} */ willDrawShadow: function() { - return !!this.shadow; + return !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0); }, /** @@ -18611,7 +18611,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ willDrawShadow: function() { if (this.shadow) { - return true; + return this.callSuper('willDrawShadow'); } for (var i = 0, len = this._objects.length; i < len; i++) { if (this._objects[i].willDrawShadow()) { @@ -25389,9 +25389,17 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot }, /** - * @private + * For functionalities on keyDown + * Map a special key to a function of the instance/prototype + * If you need different behaviour for ESC or TAB or arrows, you have to change + * this map setting the name of a function that you build on the fabric.Itext or + * your prototype. + * the map change will affect all Instances unless you need for only some text Instances + * in that case you have to clone this object and assign your Instance. + * this.keysMap = fabric.util.object.clone(this.keysMap); + * The function must be in fabric.Itext.prototype.myFunction And will receive event as args[0] */ - _keysMap: { + keysMap: { 8: 'removeChars', 9: 'exitEditing', 27: 'exitEditing', @@ -25408,17 +25416,17 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot }, /** - * @private + * For functionalities on keyUp + ctrl || cmd */ - _ctrlKeysMapUp: { + ctrlKeysMapUp: { 67: 'copy', 88: 'cut' }, /** - * @private + * For functionalities on keyDown + ctrl || cmd */ - _ctrlKeysMapDown: { + ctrlKeysMapDown: { 65: 'selectAll' }, @@ -25435,11 +25443,11 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot if (!this.isEditing) { return; } - if (e.keyCode in this._keysMap) { - this[this._keysMap[e.keyCode]](e); + if (e.keyCode in this.keysMap) { + this[this.keysMap[e.keyCode]](e); } - else if ((e.keyCode in this._ctrlKeysMapDown) && (e.ctrlKey || e.metaKey)) { - this[this._ctrlKeysMapDown[e.keyCode]](e); + else if ((e.keyCode in this.ctrlKeysMapDown) && (e.ctrlKey || e.metaKey)) { + this[this.ctrlKeysMapDown[e.keyCode]](e); } else { return; @@ -25467,8 +25475,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot this._copyDone = false; return; } - if ((e.keyCode in this._ctrlKeysMapUp) && (e.ctrlKey || e.metaKey)) { - this[this._ctrlKeysMapUp[e.keyCode]](e); + if ((e.keyCode in this.ctrlKeysMapUp) && (e.ctrlKey || e.metaKey)) { + this[this.ctrlKeysMapUp[e.keyCode]](e); } else { return; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index fc257a6c7..3cd031019 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,9 +1,9 @@ -var fabric=fabric||{version:"1.7.14"};"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.canvasModule="canvas",fabric.perfLimitSizeTotal=2097152,fabric.maxCacheSideLimit=4096,fabric.minCacheSideLimit=256,fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);"undefined"!=typeof e&&(this.clipTo=new Function("ctx",e))}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?A-=2*f:1===c&&A<0&&(A+=2*f);for(var E=Math.ceil(Math.abs(A/f*2)),I=[],L=A/E,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=P+L,R=0;R=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){for(var e=null,i=this;i.constructor.superclass;){var n=i.constructor.superclass.prototype[t];if(i[t]!==n){e=n;break}i=i.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=e}(),function(){function t(t,e,i,r){return t-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},fabric.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof fabric.Gradient||this.set(e,new fabric.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof fabric.Pattern?i&&i():this.set(e,new fabric.Pattern(t,i))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var e=fabric.util.getFunctionBody(t.clipTo);"undefined"!=typeof e&&(this.clipTo=new Function("ctx",e))}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?A-=2*f:1===c&&A<0&&(A+=2*f);for(var E=Math.ceil(Math.abs(A/f*2)),I=[],L=A/E,F=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),B=P+L,R=0;R=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){for(var e=null,i=this;i.constructor.superclass;){var n=i.constructor.superclass.prototype[t];if(i[t]!==n){e=n;break}i=i.constructor.superclass.prototype}return e?arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this):console.log("tried to callSuper "+t+", method not found in prototype chain",this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return _;if((f||d)&&(x=" translate("+y(f)+" "+y(d)+") "),r=x+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),_}function g(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}var p=t.fabric||(t.fabric={}),v=p.util.object.extend,b=p.util.object.clone,m=p.util.toFixed,y=p.util.parseUnit,_=p.util.multiplyTransformMatrices,x=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,C=/^(symbol|image|marker|pattern|view|svg)$/i,S=/^(?:pattern|defs|symbol|metadata|clipPath|mask)$/i,w=/^(symbol|g|a|svg)$/i,O={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX",opacity:"opacity"},T={stroke:"strokeOpacity",fill:"fillOpacity"};p.cssRules={},p.gradientDefs={},p.parseTransformAttribute=function(){function t(t,e){var i=Math.cos(e[0]),r=Math.sin(e[0]),n=0,s=0;3===e.length&&(n=e[1],s=e[2]),t[0]=i,t[1]=r,t[2]=-r,t[3]=i,t[4]=n-(i*n-r*s),t[5]=s-(r*n+i*s)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e,i){t[i]=Math.tan(p.util.degreesToRadians(e[0]))}function r(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var n=[1,0,0,1,0,0],s=p.reNum,o="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+s+")\\s*\\))",h="(?:(skewY)\\s*\\(\\s*("+s+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+")"+o+"("+s+"))?\\s*\\))",l="(?:(scale)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",u="(?:(translate)\\s*\\(\\s*("+s+")(?:"+o+"("+s+"))?\\s*\\))",f="(?:(matrix)\\s*\\(\\s*("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")"+o+"("+s+")\\s*\\))",d="(?:"+f+"|"+u+"|"+l+"|"+c+"|"+a+"|"+h+")",g="(?:"+d+"(?:"+o+"*"+d+")*)",v="^\\s*(?:"+g+"?)\\s*$",b=new RegExp(v),m=new RegExp(d,"g");return function(s){var o=n.concat(),a=[];if(!s||s&&!b.test(s))return o;s.replace(m,function(s){var h=new RegExp(d).exec(s).filter(function(t){return!!t}),c=h[1],l=h.slice(2).map(parseFloat);switch(c){case"translate":r(o,l);break;case"rotate":l[0]=p.util.degreesToRadians(l[0]),t(o,l);break;case"scale":e(o,l);break;case"skewX":i(o,l,2);break;case"skewY":i(o,l,1);break;case"matrix":o=l}a.push(o.concat()),o=n.concat()});for(var h=a[0];a.length>1;)a.shift(),h=p.util.multiplyTransformMatrices(h,a[0]);return h}}();var j=new RegExp("^\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*,?\\s*("+p.reNum+"+)\\s*$");p.parseSVGDocument=function(t,e,i,r){if(t){f(t);var n=p.Object.__uid++,s=d(t),o=p.util.toArray(t.getElementsByTagName("*"));if(s.crossOrigin=r&&r.crossOrigin,s.svgUid=n,0===o.length&&p.isLikelyNode){o=t.selectNodes('//*[name(.)!="svg"]');for(var a=[],h=0,c=o.length;h/i,""))),n&&n.documentElement||e&&e(null),p.parseSVGDocument(n.documentElement,function(t,i){e&&e(t,i)},i,r)}t=t.replace(/^\n\s*/,"").trim(),new p.util.request(t,{method:"get",onComplete:n})},loadSVGFromString:function(t,e,i,r){t=t.trim();var n;if("undefined"!=typeof DOMParser){var s=new DOMParser;s&&s.parseFromString&&(n=s.parseFromString(t,"text/xml"))}else p.window.ActiveXObject&&(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t.replace(//i,"")));p.parseSVGDocument(n.documentElement,function(t,i){e(t,i)},i,r)}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r,n){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0,this.parsingOptions=n},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}var n=fabric.util.object.clone;fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,i,r=n(this.coords,!0),s=n(this.colorStops,!0),o=r.r1>r.r2;if(s.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var a in r)"x1"===a||"x2"===a?r[a]+=this.offsetX-t.width/2:"y1"!==a&&"y2"!==a||(r[a]+=this.offsetY-t.height/2);if(i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']),"radial"===this.type){if(o){s=s.concat(),s.reverse();for(var h=0;h0)for(var l=Math.max(r.r1,r.r2),u=c/l,h=0;h\n')}return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:"y1"!==r&&"y2"!==r||(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;s\n\n\n'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=fabric.util.transformPoint,s=fabric.util.invertTransform,o=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass(fabric.CommonMethods,{initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:fabric.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!1,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw o;if("undefined"==typeof e.getContext)throw o;return e},_initOptions:function(t){this._setOptions(t),this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(t),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i=this._activeGroup,r=!1,n=!0;this.viewportTransform=t;for(var s=0,o=this._objects.length;s"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),"\n")},createSVGRefElementsMarkup:function(){var t=this,e=["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)});return e.join("")},createSVGFontFacesMarkup:function(){for(var t,e,i,r,n,s,o,a="",h={},c=fabric.fontPaths,l=this.getObjects(),u=0,f=l.length;u',"\n",a,"","\n"].join("")),a},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(this.targets=[],s&&!e&&s===this._searchPossibleTargets([s],n))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&o===this._searchPossibleTargets([o],n)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){var i,r,n=this._hoveredTarget;n!==t&&(i={e:e,target:t,previousTarget:this._hoveredTarget},r={e:e,target:this._hoveredTarget,nextTarget:t},this._hoveredTarget=t),t?n!==t&&(n&&(this.fire("mouse:out",r),n.fire("mouseout",r)),this.fire("mouse:over",i),t.fire("mouseover",i)):n&&(this.fire("mouse:out",r),n.fire("mouseout",r))},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl?this.upperCanvasEl.className="":this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":"none"}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){var e=this._activeObject;e&&(e.set("active",!1),t!==e&&e.onDeselect&&"function"==typeof e.onDeselect&&e.onDeselect()),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){var i=this.getActiveObject();return i&&i!==t&&i.fire("deselected",{e:e}),this._setActiveObject(t),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this.renderAll(),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this._hoveredTarget===t&&(this._hoveredTarget=null),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){var t=this._activeObject;t&&(t.set("active",!1),t.onDeselect&&"function"==typeof t.onDeselect&&t.onDeselect()),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return e&&(this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e.fire("deselected",{e:t})),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return e&&(this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t})),this},deactivateAll:function(){for(var t,e=this.getObjects(),i=0,r=e.length;i1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!0},_setCornerCursor:function(t,i,r){if(t in e)this.setCursor(this._getRotatedCornerCursor(t,i,r));else{if("mtr"!==t||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(t,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=e[t],r[this.altActionKey]&&e[t]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0),e)}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i,e),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e,e:t}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t),n=this,s=this.renderOnAddRemove;return this.renderOnAddRemove=!1,this._enlivenObjects(r.objects,function(t){n.clear(),n._setBgOverlay(r,function(){t.forEach(function(t,e){n.insertAt(t,e)}),n.renderOnAddRemove=s,delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),n.renderAll(),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,r),this.__setBgOverlay("overlayImage",t.overlayImage,i,r),this.__setBgOverlay("backgroundColor",t.background,i,r),this.__setBgOverlay("overlayColor",t.overlay,i,r)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_enlivenObjects:function(t,e,i){return t&&0!==t.length?void fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,i):void(e&&e([]))},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode,c=2;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY fillRule".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height strokeLineCap strokeLineJoin strokeMiterLimit backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,r=e.cacheSideLimit,n=t.width,s=t.height,o=n/s,a=e.util.limitDimsByArea(o,i,r),h=e.util.capValue,c=e.maxCacheSideLimit,l=e.minCacheSideLimit,u=h(l,a.x,c),f=h(l,a.y,c);return n>u?(t.zoomX/=n/u,t.width=u):nf?(t.zoomY/=s/f,t.height=f):sg||s>p,b=(n<.9*g||s<.9*p)&&g>r&&p>r;d=v||b,v&&(u=.1*n&-2,f=.1*s&-2)}return!!l&&(d?(this._cacheCanvas.width=Math.max(Math.ceil(n)+u,r),this._cacheCanvas.height=Math.max(Math.ceil(s)+f,r),this.cacheWidth=n,this.cacheHeight=s,this.cacheTranslationX=(n+u)/2,this.cacheTranslationY=(s+f)/2):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,this._cacheCanvas.width,this._cacheCanvas.height)),this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(o,a),this.zoomX=o,this.zoomY=a,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),this.angle&&t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),this.skewX&&t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),this.skewY&&t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||0===this.width&&0===this.height||!this.visible},render:function(t,i){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache(i)?(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)):(this.dirty=!1,this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},needsItsOwnCache:function(){return!1},shouldCache:function(t){return!t&&this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isCaching())},willDrawShadow:function(){return!!this.shadow},drawObject:function(t,e){this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._render(t,e)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t){if(this.active&&(!this.group||this.group===this.canvas.getActiveGroup())){var i,r=this.getViewportTransform(),n=this.calcTransformMatrix();n=e.util.multiplyTransformMatrices(r,n),i=e.util.qrDecompose(n),t.save(),t.translate(i.translateX,i.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(i.angle)),this.drawBordersInGroup(t,i)):(t.rotate(o(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore())},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation); -}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]);var e=o?new a(i[o],i):new a(i);n&&n(e)})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")},onDeselect:function(){}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return 6.123233995736766e-17!==i&&i!==-1.8369701987210297e-16||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,r)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed,o=e.Object.NUM_FRACTION_DIGITS;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var a=e.Object.prototype.cacheProperties.concat();a.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:a,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){var e=[],i=0,r=0,n=this._createBaseSVGMarkup();this.group&&"path-group"===this.group.type||(i=this.pathOffset.x,r=this.pathOffset.y);for(var a=0,h=this.points.length;a\n'),t?t(n.join("")):n.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){var r=t.paths;delete t.paths,"string"==typeof r?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max;if(!e.Group){var s={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,cacheProperties:[],initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isCaching());if(this.caching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,k,M,D,P,A,E;for(T.x=(t+.5)*y,j.x=r(T.x),h=0;h=e)){A=r(1e3*s(c-T.x)),O[A]||(O[A]={});for(var I=j.y-w;I<=j.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[A][E]||(O[A][E]=m(n(i(A*x,2)+i(E*C,2))/1e3)),u=O[A][E],u>0&&(d=4*(I*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],D+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=D/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(I=4*(E+M*e),j+=x*p[I+3],S+=x,p[I+3]<255&&(x=x*p[I+3]/250),w+=x*p[I],O+=x*p[I+1],T+=x*p[I+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=j/S}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;t.fillStyle=s,this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e)))},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",e)},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,n,s,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,n,s,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),this._dimensionAffectingProps.indexOf(t)>-1&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,i,r){return e.Object._fromObject("Text",t,i,r,"text")},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&(this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(o=!0,s[h-i]=this.styles[e][a],delete this.styles[e][a])}o&&(this.styles[e+1]=s)}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}var h=r||t(n[i-1]);h&&(this.styles[e][i]=h),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in r){var s=parseInt(n,10);s<=e&&delete r[s]}for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e,t.e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable&&(!t.e.button||1===t.e.button)){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,!this.editable||this._isObjectMoved(t.e)||t.e.button&&1!==t.e.button||(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="white-space: nowrap; position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 1px; height: 1px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.set("dirty",!0),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())},fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,e){var i=this._styleMap[t];t=i.line,fabric.IText.prototype.shiftLineStyles.call(this,t,e)},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file +delete this.wrapperEl,this},clear:function(){return this.discardActiveGroup(),this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var e=this.getActiveGroup();e?e._renderControls(t):this._drawObjectsControls(t)},_drawObjectsControls:function(t){for(var e=0,i=this._objects.length;e1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!0},_setCornerCursor:function(t,i,r){if(t in e)this.setCursor(this._getRotatedCornerCursor(t,i,r));else{if("mtr"!==t||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(t,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=e[t],r[this.altActionKey]&&e[t]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0),e)}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i,e),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e,e:t}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t),n=this,s=this.renderOnAddRemove;return this.renderOnAddRemove=!1,this._enlivenObjects(r.objects,function(t){n.clear(),n._setBgOverlay(r,function(){t.forEach(function(t,e){n.insertAt(t,e)}),n.renderOnAddRemove=s,delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),n.renderAll(),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,r),this.__setBgOverlay("overlayImage",t.overlayImage,i,r),this.__setBgOverlay("backgroundColor",t.background,i,r),this.__setBgOverlay("overlayColor",t.overlay,i,r)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_enlivenObjects:function(t,e,i){return t&&0!==t.length?void fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,i):void(e&&e([]))},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode,c=2;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY fillRule".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height strokeLineCap strokeLineJoin strokeMiterLimit backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,r=e.cacheSideLimit,n=t.width,s=t.height,o=n/s,a=e.util.limitDimsByArea(o,i,r),h=e.util.capValue,c=e.maxCacheSideLimit,l=e.minCacheSideLimit,u=h(l,a.x,c),f=h(l,a.y,c);return n>u?(t.zoomX/=n/u,t.width=u):nf?(t.zoomY/=s/f,t.height=f):sg||s>p,b=(n<.9*g||s<.9*p)&&g>r&&p>r;d=v||b,v&&(u=.1*n&-2,f=.1*s&-2)}return!!l&&(d?(this._cacheCanvas.width=Math.max(Math.ceil(n)+u,r),this._cacheCanvas.height=Math.max(Math.ceil(s)+f,r),this.cacheTranslationX=(n+u)/2,this.cacheTranslationY=(s+f)/2):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,this._cacheCanvas.width,this._cacheCanvas.height)),this.cacheWidth=n,this.cacheHeight=s,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(o,a),this.zoomX=o,this.zoomY=a,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),this.angle&&t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),this.skewX&&t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),this.skewY&&t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||0===this.width&&0===this.height||!this.visible},render:function(t,i){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache(i)?(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)):(this.dirty=!1,this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},needsItsOwnCache:function(){return!1},shouldCache:function(t){return!t&&this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isCaching())},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},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.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t){if(this.active&&(!this.group||this.group===this.canvas.getActiveGroup())){var i,r=this.getViewportTransform(),n=this.calcTransformMatrix();n=e.util.multiplyTransformMatrices(r,n),i=e.util.qrDecompose(n),t.save(),t.translate(i.translateX,i.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(i.angle)),this.drawBordersInGroup(t,i)):(t.rotate(o(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore())},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){ +this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]);var e=o?new a(i[o],i):new a(i);n&&n(e)})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")},onDeselect:function(){}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return 6.123233995736766e-17!==i&&i!==-1.8369701987210297e-16||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,r)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed,o=e.Object.NUM_FRACTION_DIGITS;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var a=e.Object.prototype.cacheProperties.concat();a.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:a,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){var e=[],i=0,r=0,n=this._createBaseSVGMarkup();this.group&&"path-group"===this.group.type||(i=this.pathOffset.x,r=this.pathOffset.y);for(var a=0,h=this.points.length;a\n'),t?t(n.join("")):n.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){var r=t.paths;delete t.paths,"string"==typeof r?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max;if(!e.Group){var s={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,cacheProperties:[],initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isCaching());if(this.caching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,k,M,D,P,A,E;for(T.x=(t+.5)*y,j.x=r(T.x),h=0;h=e)){A=r(1e3*s(c-T.x)),O[A]||(O[A]={});for(var I=j.y-w;I<=j.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[A][E]||(O[A][E]=m(n(i(A*x,2)+i(E*C,2))/1e3)),u=O[A][E],u>0&&(d=4*(I*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],D+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=D/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(I=4*(E+M*e),j+=x*p[I+3],S+=x,p[I+3]<255&&(x=x*p[I+3]/250),w+=x*p[I],O+=x*p[I+1],T+=x*p[I+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=j/S}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;t.fillStyle=s,this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e)))},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",e)},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,n,s,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,n,s,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),this._dimensionAffectingProps.indexOf(t)>-1&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,i,r){return e.Object._fromObject("Text",t,i,r,"text")},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&(this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(o=!0,s[h-i]=this.styles[e][a],delete this.styles[e][a])}o&&(this.styles[e+1]=s)}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}var h=r||t(n[i-1]);h&&(this.styles[e][i]=h),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in r){var s=parseInt(n,10);s<=e&&delete r[s]}for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e,t.e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable&&(!t.e.button||1===t.e.button)){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,!this.editable||this._isObjectMoved(t.e)||t.e.button&&1!==t.e.button||(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="white-space: nowrap; position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 1px; height: 1px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this.keysMap)this[this.keysMap[t.keyCode]](t);else{if(!(t.keyCode in this.ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this.ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this.ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this.ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.set("dirty",!0),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())},fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,e){var i=this._styleMap[t];t=i.line,fabric.IText.prototype.shiftLineStyles.call(this,t,e)},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 011287d9dc4b6b8f6a035714060826a27662457d..0eb90ae08fb6de8c09d08646af7e2633088b37eb 100644 GIT binary patch delta 45726 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 delta 45713 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 ZAF-M(", "contributors": [ { From 66f72248460942b19e1bc4d4c0cb04337e043e1e Mon Sep 17 00:00:00 2001 From: Asturur Date: Sun, 2 Jul 2017 23:13:51 +0200 Subject: [PATCH 2/2] fixed bug --- dist/fabric.js | 4 ++-- dist/fabric.min.js | 2 +- dist/fabric.min.js.gz | Bin 71068 -> 71069 bytes dist/fabric.require.js | 4 ++-- src/shapes/group.class.js | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 765df964d..023a92b7b 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -18610,8 +18610,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {Boolean} */ willDrawShadow: function() { - if (this.shadow) { - return this.callSuper('willDrawShadow'); + if (this.callSuper('willDrawShadow')) { + return true; } for (var i = 0, len = this._objects.length; i < len; i++) { if (this._objects[i].willDrawShadow()) { diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 3cd031019..174e27c67 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -3,7 +3,7 @@ _.height=y(u),o=_.width/e,a=_.height/i),g=p.util.parsePreserveAspectRatioAttribu this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),t.save(),t.transform.apply(t,this.viewportTransform),this._renderObjects(t,e),t.restore(),!this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render")},_renderObjects:function(t,e){for(var i=0,r=e.length;i"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),"\n")},createSVGRefElementsMarkup:function(){var t=this,e=["backgroundColor","overlayColor"].map(function(e){var i=t[e];if(i&&i.toLive)return i.toSVG(t,!1)});return e.join("")},createSVGFontFacesMarkup:function(){for(var t,e,i,r,n,s,o,a="",h={},c=fabric.fontPaths,l=this.getObjects(),u=0,f=l.length;u',"\n",a,"","\n"].join("")),a},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&cs?t.x<0?t.x+=s:t.x-=s:t.x=0,n(t.y)>s?t.y<0?t.y+=s:t.y-=s:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(this.targets=[],s&&!e&&s===this._searchPossibleTargets([s],n))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&o===this._searchPossibleTargets([o],n)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){var i,r,n=this._hoveredTarget;n!==t&&(i={e:e,target:t,previousTarget:this._hoveredTarget},r={e:e,target:this._hoveredTarget,nextTarget:t},this._hoveredTarget=t),t?n!==t&&(n&&(this.fire("mouse:out",r),n.fire("mouseout",r)),this.fire("mouse:over",i),t.fire("mouseover",i)):n&&(this.fire("mouse:out",r),n.fire("mouseout",r))},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl?this.upperCanvasEl.className="":this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":"none"}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){var e=this._activeObject;e&&(e.set("active",!1),t!==e&&e.onDeselect&&"function"==typeof e.onDeselect&&e.onDeselect()),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){var i=this.getActiveObject();return i&&i!==t&&i.fire("deselected",{e:e}),this._setActiveObject(t),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this.renderAll(),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this._hoveredTarget===t&&(this._hoveredTarget=null),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){var t=this._activeObject;t&&(t.set("active",!1),t.onDeselect&&"function"==typeof t.onDeselect&&t.onDeselect()),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return e&&(this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e.fire("deselected",{e:t})),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return e&&(this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t})),this},deactivateAll:function(){for(var t,e=this.getObjects(),i=0,r=e.length;i1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this._handleEvent(t,"wheel")},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));return n?this._setCornerCursor(n,e,t):this.setCursor(i),!0},_setCornerCursor:function(t,i,r){if(t in e)this.setCursor(this._getRotatedCornerCursor(t,i,r));else{if("mtr"!==t||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(t,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=e[t],r[this.altActionKey]&&e[t]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0),e)}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i,e),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e,e:t}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t),n=this,s=this.renderOnAddRemove;return this.renderOnAddRemove=!1,this._enlivenObjects(r.objects,function(t){n.clear(),n._setBgOverlay(r,function(){t.forEach(function(t,e){n.insertAt(t,e)}),n.renderOnAddRemove=s,delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay,n._setOptions(r),n.renderAll(),e&&e()})},i),this}},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,r),this.__setBgOverlay("overlayImage",t.overlayImage,i,r),this.__setBgOverlay("backgroundColor",t.background,i,r),this.__setBgOverlay("overlayColor",t.overlay,i,r)},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):(i[t]=!0,void(r&&r()))},_enlivenObjects:function(t,e,i){return t&&0!==t.length?void fabric.util.enlivenObjects(t,function(t){e&&e(t)},null,i):void(e&&e([]))},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,s=e.util.string.capitalize,o=e.util.degreesToRadians,a=e.StaticCanvas.supports("setLineDash"),h=!e.isLikelyNode,c=2;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:h,statefullCache:!1,noScaleCache:!0,dirty:!0,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY fillRule".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height strokeLineCap strokeLineJoin strokeMiterLimit backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,r=e.cacheSideLimit,n=t.width,s=t.height,o=n/s,a=e.util.limitDimsByArea(o,i,r),h=e.util.capValue,c=e.maxCacheSideLimit,l=e.minCacheSideLimit,u=h(l,a.x,c),f=h(l,a.y,c);return n>u?(t.zoomX/=n/u,t.width=u):nf?(t.zoomY/=s/f,t.height=f):sg||s>p,b=(n<.9*g||s<.9*p)&&g>r&&p>r;d=v||b,v&&(u=.1*n&-2,f=.1*s&-2)}return!!l&&(d?(this._cacheCanvas.width=Math.max(Math.ceil(n)+u,r),this._cacheCanvas.height=Math.max(Math.ceil(s)+f,r),this.cacheTranslationX=(n+u)/2,this.cacheTranslationY=(s+f)/2):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,this._cacheCanvas.width,this._cacheCanvas.height)),this.cacheWidth=n,this.cacheHeight=s,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(o,a),this.zoomX=o,this.zoomY=a,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initClipping(t),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),this.angle&&t.rotate(o(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),this.skewX&&t.transform(1,0,Math.tan(o(this.skewX)),1,0,0),this.skewY&&t.transform(1,Math.tan(o(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():null,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.group&&this.group.set("dirty",!0),this.dirty=!0),this.group&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||0===this.width&&0===this.height||!this.visible},render:function(t,i){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.shouldCache(i)?(this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)):(this.dirty=!1,this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},needsItsOwnCache:function(){return!1},shouldCache:function(t){return!t&&this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isCaching())},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},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.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),a?t.setLineDash(e):i&&i(t))},_renderControls:function(t){if(this.active&&(!this.group||this.group===this.canvas.getActiveGroup())){var i,r=this.getViewportTransform(),n=this.calcTransformMatrix();n=e.util.multiplyTransformMatrices(r,n),i=e.util.qrDecompose(n),t.save(),t.translate(i.translateX,i.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(o(i.angle)),this.drawBordersInGroup(t,i)):(t.rotate(o(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(e.toLive){var i=e.gradientTransform||e.patternTransform;i&&t.transform.apply(t,i);var r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;t.translate(r,n)}},_renderFill:function(t){this.fill&&(t.save(),this._applyPatternGradientTransform(t,this.fill),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){this.stroke&&0!==this.strokeWidth&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this._applyPatternGradientTransform(t,this.stroke),t.stroke(),t.restore())},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};return r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),r.gradientTransform=i.gradientTransform,e.Gradient.prototype.addColorStop.call(r,i.colorStops),this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,o(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){ this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,s,o){var a=e[t];if(i=r(i,!0),!s){var h=o?new a(i[o],i):new a(i);return n&&n(h),h}e.util.enlivenPatterns([i.fill,i.stroke],function(t){"undefined"!=typeof t[0]&&(i.fill=t[0]),"undefined"!=typeof t[1]&&(i.stroke=t[1]);var e=o?new a(i[o],i):new a(i);n&&n(e)})},e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")},onDeselect:function(){}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,aCoords:null,getCoords:function(e,i){this.oCoords||this.setCoords();var r=e?this.aCoords:this.oCoords;return t(i?this.calcCoords(e):r)},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r),s=fabric.Intersection.intersectPolygonRectangle(n,t,e);return"Intersection"===s.status},intersectsWithObject:function(t,e,i){var r=fabric.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i));return"Intersection"===r.status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=0,s=t._getImageLines(i?t.calcCoords(e):e?t.aCoords:t.oCoords);n<4;n++)if(!t.containsPoint(r[n],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var e=e||this._getImageLines(r?this.calcCoords(i):i?this.aCoords:this.oCoords),n=this._findCrossPoints(t,e);return 0!==n&&n%2===1},isOnScreen:function(t){if(!this.canvas)return!1;for(var e,i=this.canvas.vptCoords.tl,r=this.canvas.vptCoords.br,n=this.getCoords(!0,t),s=0;s<4;s++)if(e=n[s],e.x<=r.x&&e.x>=i.x&&e.y<=r.y&&e.y>=i.y)return!0;if(this.intersectsWithRect(i,r,!0))return!0;var o={x:(i.x+r.x)/2,y:(i.y+r.y)/2};return!!this.containsPoint(o,null,!0)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return fabric.util.makeBoundingBoxFromPoints(i)},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||(this.aCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return 6.123233995736766e-17!==i&&i!==-1.8369701987210297e-16||(i=0),[i,r,-r,i,0,0]}return fabric.iMatrix.concat()},calcTransformMatrix:function(t){var e=this.getCenterPoint(),r=[1,0,0,1,e.x,e.y],n=this._calcRotateMatrix(),s=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),o=this.group&&!t?this.group.calcTransformMatrix():fabric.iMatrix.concat();return o=i(o,r),o=i(o,n),o=i(o,s)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)},_getNonTransformedDimensions:function(){var t=this.strokeWidth,e=this.width+t,i=this.height+t;return{x:e,y:i}},_getTransformedDimensions:function(t,e){"undefined"==typeof t&&(t=this.skewX),"undefined"==typeof e&&(e=this.skewY);var i,r,n=this._getNonTransformedDimensions(),s=n.x/2,o=n.y/2,a=[{x:-s,y:-o},{x:s,y:-o},{x:-s,y:o},{x:s,y:o}],h=this._calcDimensionsTransformMatrix(t,e,!1);for(i=0;i\n'),t?t(e.join("")):e.join("")}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){e=e||{};var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return e.originX="left",e.originY="top",new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e,r){function s(t){delete t.points,e&&e(t)}var o=n(t,!0);o.points=[t.x1,t.y1,t.x2,t.y2];var a=i.Object._fromObject("Line",o,s,r,"points");return a&&delete a.points,a}}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},i.Circle.fromObject=function(t,e,r){return i.Object._fromObject("Circle",t,e,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")}}),void(e.Triangle.fromObject=function(t,i,r){return e.Object._fromObject("Triangle",t,i,r)}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},e.Ellipse.fromObject=function(t,i,r){return e.Object._fromObject("Ellipse",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i,r){return e.Object._fromObject("Rect",t,i,r)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.toFixed,o=e.Object.NUM_FRACTION_DIGITS;if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var a=e.Object.prototype.cacheProperties.concat();a.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:a,initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._calcDimensions(),"top"in e||(this.top=this.minY),"left"in e||(this.left=this.minX),this.pathOffset={x:this.minX+this.width/2,y:this.minY+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x"),i=r(t,"y"),s=n(t,"x"),o=n(t,"y");this.width=s-e||0,this.height=o-i||0,this.minX=e||0,this.minY=i||0},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},toSVG:function(t){var e=[],i=0,r=0,n=this._createBaseSVGMarkup();this.group&&"path-group"===this.group.type||(i=this.pathOffset.x,r=this.pathOffset.y);for(var a=0,h=this.points.length;a\n'),t?t(n.join("")):n.join("")},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){var r=t.paths;delete t.paths,"string"==typeof r?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max;if(!e.Group){var s={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,cacheProperties:[],initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isCaching());if(this.caching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()}),top:this.top,left:this.left});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){var r=t.paths;delete t.paths,"string"==typeof r?e.loadSVGFromURL(r,function(n){var s=r,o=e.util.groupSVGElements(n,t,s);t.paths=r,i(o)}):e.util.enlivenObjects(r,function(n){var s=new e.PathGroup(n,t);t.paths=r,i(s)})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max;if(!e.Group){var s={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,cacheProperties:[],initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0,o=!0;t.set({left:r-e.x,top:n-e.y}),t.setCoords(s,o)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},toDatalessObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toDatalessObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=this.objectCaching&&(!this.group||this.needsItsOwnCache()||!this.group.isCaching());if(this.caching=t,t)for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),fabric.Image.filters.BaseFilter.fromObject=function(t,e){var i=new fabric.Image.filters[t.type](t);return e&&e(i),i},function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,k,M,D,P,A,E;for(T.x=(t+.5)*y,j.x=r(T.x),h=0;h=e)){A=r(1e3*s(c-T.x)),O[A]||(O[A]={});for(var I=j.y-w;I<=j.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[A][E]||(O[A][E]=m(n(i(A*x,2)+i(E*C,2))/1e3)),u=O[A][E],u>0&&(d=4*(I*e+c),g+=u,k+=u*v[d],M+=u*v[d+1],D+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=k/g,b[d+1]=M/g,b[d+2]=D/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(I=4*(E+M*e),j+=x*p[I+3],S+=x,p[I+3]<255&&(x=x*p[I+3]/250),w+=x*p[I],O+=x*p[I+1],T+=x*p[I+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=j/S}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;t.fillStyle=s,this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),t},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e)))},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",e)},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,n,s,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,n,s,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),this._dimensionAffectingProps.indexOf(t)>-1&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,i,r){return e.Object._fromObject("Text",t,i,r,"text")},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a,h,c,l,u=0,f=this._getLeftOffset(),d=this._getTopOffset(),g="";t.save();for(var p=0,v=this._textLines.length;p0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&(this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null),this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(o=!0,s[h-i]=this.styles[e][a],delete this.styles[e][a])}o&&(this.styles[e+1]=s)}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}var h=r||t(n[i-1]);h&&(this.styles[e][i]=h),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in r){var s=parseInt(n,10);s<=e&&delete r[s]}for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e,t.e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable&&(!t.e.button||1===t.e.button)){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,!this.editable||this._isObjectMoved(t.e)||t.e.button&&1!==t.e.button||(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="white-space: nowrap; position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 1px; height: 1px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this.keysMap)this[this.keysMap[t.keyCode]](t);else{if(!(t.keyCode in this.ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this.ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this.ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this.ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.set("dirty",!0),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={});e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())},fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,e){var i=this._styleMap[t];t=i.line,fabric.IText.prototype.shiftLineStyles.call(this,t,e)},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 0eb90ae08fb6de8c09d08646af7e2633088b37eb..b458e07df8e9044bfb90c3a0b933d0af8e9db436 100644 GIT binary patch delta 22211 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

VZZyZvxpD9E5eiu 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 WGOll!jE`Jn^#1{PBKAs;{{sL$xKMEb delta 22210 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 VT;DJmAGyZp{{tRLsvDXA0|3*`GN}Ln diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 32aed3356..0e5e39b4d 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -8983,8 +8983,8 @@ fabric.util.object.extend(fabric.Object.prototype, { return parentCache; }, willDrawShadow: function() { - if (this.shadow) { - return this.callSuper("willDrawShadow"); + if (this.callSuper("willDrawShadow")) { + return true; } for (var i = 0, len = this._objects.length; i < len; i++) { if (this._objects[i].willDrawShadow()) { diff --git a/src/shapes/group.class.js b/src/shapes/group.class.js index ff445e0d7..4c1cdd76b 100644 --- a/src/shapes/group.class.js +++ b/src/shapes/group.class.js @@ -330,8 +330,8 @@ * @return {Boolean} */ willDrawShadow: function() { - if (this.shadow) { - return this.callSuper('willDrawShadow'); + if (this.callSuper('willDrawShadow')) { + return true; } for (var i = 0, len = this._objects.length; i < len; i++) { if (this._objects[i].willDrawShadow()) {