From 8d8cd16f6c3045b414ce150fa2270b364be9fa96 Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 9 Dec 2013 15:35:08 +0100 Subject: [PATCH] Add "mouse:over" and "mouse:out" events --- dist/all.js | 59 ++++++++++++++++++++++++++++++++++---------- dist/all.min.js | 14 +++++------ dist/all.min.js.gz | Bin 52993 -> 53095 bytes dist/all.require.js | 59 ++++++++++++++++++++++++++++++++++---------- src/canvas.class.js | 17 ++++++++++--- 5 files changed, 112 insertions(+), 37 deletions(-) diff --git a/dist/all.js b/dist/all.js index 60654199..53364ca4 100644 --- a/dist/all.js +++ b/dist/all.js @@ -170,12 +170,12 @@ fabric.Collection = { /** * Adds objects to collection, then renders canvas (if `renderOnAddRemove` is not `false`) * Objects should be instances of (or inherit from) fabric.Object - * @param [...] Zero or more fabric instances + * @param {...fabric.Object} object Zero or more fabric instances * @return {Self} thisArg */ add: function () { this._objects.push.apply(this._objects, arguments); - for (var i = arguments.length; i--; ) { + for (var i = 0, length = arguments.length; i < length; i++) { this._onObjectAdded(arguments[i]); } this.renderOnAddRemove && this.renderAll(); @@ -189,6 +189,7 @@ fabric.Collection = { * @param {Number} index Index to insert object at * @param {Boolean} nonSplicing When `true`, no splicing (shifting) of objects occurs * @return {Self} thisArg + * @chainable */ insertAt: function (object, index, nonSplicing) { var objects = this.getObjects(); @@ -204,22 +205,27 @@ fabric.Collection = { }, /** - * Removes an object from a collection, then renders canvas (if `renderOnAddRemove` is not `false`) - * @param {Object} object Object to remove + * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`) + * @param {...fabric.Object} object Zero or more fabric instances * @return {Self} thisArg + * @chainable */ - remove: function(object) { + remove: function() { var objects = this.getObjects(), - index = objects.indexOf(object); + index; - // only call onObjectRemoved if an object was actually removed - if (index !== -1) { - objects.splice(index, 1); - this._onObjectRemoved(object); + for (var i = 0, length = arguments.length; i < length; i++) { + index = objects.indexOf(arguments[i]); + + // only call onObjectRemoved if an object was actually removed + if (index !== -1) { + objects.splice(index, 1); + this._onObjectRemoved(arguments[i]); + } } this.renderOnAddRemove && this.renderAll(); - return object; + return this; }, /** @@ -7196,6 +7202,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @fires mouse:down * @fires mouse:move * @fires mouse:up + * @fires mouse:over + * @fires mouse:out * */ fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas, /** @lends fabric.Canvas.prototype */ { @@ -7899,7 +7907,31 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab return activeGroup; } - return this._searchPossibleTargets(e); + var target = this._searchPossibleTargets(e); + this._fireOverOutEvents(target); + return target; + }, + + /** + * @private + */ + _fireOverOutEvents: function(target) { + if (target) { + if (this._hoveredTarget !== target) { + this.fire('mouse:over', { target: target }); + target.fire('mouseover'); + if (this._hoveredTarget) { + this.fire('mouse:out', { target: this._hoveredTarget }); + this._hoveredTarget.fire('mouseout'); + } + this._hoveredTarget = target; + } + } + else if (this._hoveredTarget) { + this.fire('mouse:out', { target: this._hoveredTarget }); + this._hoveredTarget.fire('mouseout'); + this._hoveredTarget = null; + } }, /** @@ -10910,7 +10942,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @chainable */ remove: function() { - return this.canvas.remove(this); + this.canvas.remove(this); + return this; }, /** diff --git a/dist/all.min.js b/dist/all.min.js index ba863649..a4b0e724 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.0"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.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(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),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(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}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",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();return n&&!t&&this.containsPoint(e,n)?n:this._searchPossibleTargets(e)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",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,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow -)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this)},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=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,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),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(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.0"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r},populateWithProperties:function(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sin_th:a,cos_th:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=l*u,h=-f*a,p=f*u,d=l*a,v=.5*(o-s),m=8/3*Math.sin(v*.5)*Math.sin(v*.5)/Math.sin(v),g=e+Math.cos(s)-m*Math.sin(s),y=i+Math.sin(s)+m*Math.cos(s),b=e+Math.cos(o),w=i+Math.sin(o),E=b+m*Math.sin(o),S=w-m*Math.cos(o);return t[r]=[c*g+h*y,p*g+d*y,c*E+h*S,p*E+d*S,c*b+h*w,p*b+d*w],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n={left:0,top:0},r=e&&e.ownerDocument,i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=r.documentElement,typeof e.getBoundingClientRect!="undefined"&&(n=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:n.left+s.left-(t.clientLeft||0)+i.left,top:n.top+s.top-(t.clientTop||0)+i.top}}function l(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return y(t,e,"backgroundColor"),y(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser={parse:function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r,this.instances=new Array(e.length),this.numElements=e.length,this.createObjects()},createObjects:function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.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(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),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(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}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",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;rn.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset)},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_searchPossibleTargets:function(e){var t=[],n,r=this.getPointer(e);for(var i=this._objects.length;i--;)if(this._objects[i]&&this._objects[i].visible&&this._objects[i].evented&&this.containsPoint(e,this._objects[i])){if(!this.perPixelTargetFind&&!this._objects[i].perPixelTargetFind){n=this._objects[i],this.relatedTarget=n;break}t[t.length]=this._objects[i]}for(var s=0,o=t.length;s1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center"}),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this._setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width&&(n.width*=r),n.height&&(n.height*=r),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;e.length===0&&t&&t();var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",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,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this +[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getCenterPoint(),r=fabric.Object.NUM_FRACTION_DIGITS,i="translate("+e(n.x,r)+" "+e(n.y,r)+")",s=t!==0?" rotate("+e(t,r)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+e(this.scaleX,r)+" "+e(this.scaleY,r)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_createBaseSVGMarkup:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians,n=typeof G_vmlCanvasManager!="undefined";fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(!this.isControlVisible(a))continue;if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o=this.padding/this.scaleX,u=this.padding/this.scaleY,a=n/this.scaleY,f=n/this.scaleX,l=(n-t)/this.scaleX,c=(n-t)/this.scaleY,h=this.height,p=this.width,d=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,d,i-f-r-o,s-a-r-u),this._drawControl("tr",e,d,i+p-f+r+o,s-a-r-u),this._drawControl("tr",e,d,i-f-r-o,s+h+c+r+u),this._drawControl("br",e,d,i+p+l+r+o,s+h+c+r+u),this.get("lockUniScaling")||(this._drawControl("mt",e,d,i+p/2-f,s-a-r-u),this._drawControl("mb",e,d,i+p/2-f,s+h+c+r+u),this._drawControl("mb",e,d,i+p+l+r+o,s+h/2-a),this._drawControl("ml",e,d,i-f-r-o,s+h/2-a)),this.hasRotatingPoint&&this._drawControl("mtr",e,d,i+p/2-f,this.flipY?s+h+this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleX/2+r+u:s-this.rotatingPointOffset/this.scaleY-this.cornerSize/this.scaleY/2-r-u),e.restore(),this},_drawControl:function(e,t,r,i,s){var o=this.cornerSize/this.scaleX,u=this.cornerSize/this.scaleY;this.isControlVisible(e)&&(n||this.transparentCorners||t.clearRect(i,s,o,u),t[r](i,s,o,u))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type==="path-group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0] +.y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e),this.clipTo&&t.util.clipContext(this,e);for(var r=0,i=this._objects.length;r'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type==="path-group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=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,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObjects(e,t,this.copiedStyles):this.selectionEnd-this.selectionStart>1&&console.log("replacing MORE than 1 char"),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),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(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&(this.setCursorByClick(e.e),this.__selectionStartOnMouseDown=this.selectionStart)})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.selected&&this.enterEditing()})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initKeyHandlers:function(){fabric.util.addListener(fabric.document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(fabric.document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f,l=this._getWidthOfLine(this.ctx,r.lineIndex,u);f=this._getLineLeftOffset(l);var c=f,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index ed43b2871e63f0e014f0a31471763d9b4d6a05cd..e3fb872dc67fc5364fc119d60a8d4c0ce2c53853 100644 GIT binary patch delta 46219 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
C-36_4H4w8MNgJq<1Cp44sds(94Z)cm|QIL56(c z_u<$AW4HAze6qVHYZU0qdO7i&pmnDWpcX&YF>98OQv4zi7`e?7Vg?#^}`qN*1%`DE7RAyq$T znlBwW(%fvcPtH?Y^Y_tYglXBw6EZ2VjnE;J_{pZY;zQWj;+LZH$tUI3VC~)j1+k1w zAbf6#r4$CD(neGI?vkt-eZ&>nN>CVfn96{KqPMpr{0YN{UlF^t?AoE7Q8*=95hknh zvN0@GfAN~xtMER7f71?b0$tR2x!tAf*+)!Fnkh?jU`2%SKuW@3VhC$!h8+vRhOQ8h zIDK3S`mvW#T7%mtq`xACKuc-tZjw_Oq?F7*Dg9Img|mwlhpiEYD$+m&g$O*U(`b^4 z4Qss!`O?~kiSl&Ii_*Xqj1H_L!aF86?Yxs(e?eosU&ZjBCSw?Qxe2^l&rLi-I}`i9 zXidu@zx=5>&d^65%k|3~=p1#@_r&d&vG+e6vZ)rOYu3^gDB!aLJG zf6o`0F=v8;k>vE&8rzncY_7WiQlmltOisp~8HMKlgvGK<7r4r}UzS;2|Hs?!UvJ!6 zvH}(q`FF9I*s6_WY-TDpz~#*v_8AI4De6mbgjI*D6!{ZiW@Pj=JT0LaYSlI(&59+Q zxk3_zm6&^N3Y2n=h<+xF`2bC#dRJlEe>bblPC*6SS~n-@{FgJ5cX8YcjKRm%)VD4| z_mNRVev{McN3hs-Npdf47NrDT$jk?#2#|>#95*-Z?W%U`mD9Lcghp=^5#M29t4>g# zkqE)`!G>wzbcl!6NirXSoXY0V=$mF!B!3)W^VfH$mTW zl|hGUI8Rr3Lu#8WJ)D`Xsxhn9VB+?H+TikdnrXqr2(||ANP}+bh^Ocaq-bF;=SXL< zjU)vE4ef)9%x|4l&2xG$CP5NDf10;D%f&th1b`eHJFWIIA5xEeSr(b@4LK5`qZC~d zG2nK+rG1UUhJt^FT?`bxfMX|A&5NQ4dGey?r`MsN0SHAmQpuTWW7Fljq43=1{%UNz zUYOei{S}~cp&oc>MX(7-MCPhJXA#3Pc~>g{X`ZoWmOeY{cBNRQ56e@~pp9&X~E+{r!OIXwnq zPb_B7B?^Z%T%vI6^n$1>G_@yi-3N>-3>5Va%OeJhk@yLUd%T|J8iIy;t8A7#JFA27Dh zzpNg_3UBR$f6KLd;dC{>7qEEF)41Rl#T9;gD_KR6@JMltj;g%!v++ta^<}xZ4rR4S zMguO~D8L52K$L~74unc`6`&?LIja&o!|&P#RXVar&Ay4z|B=+AH@A^~95z_ zJ=k>UciEwfsj@gE5*$ZLujE@e;P1+neDP4;09_?yf2H*nqP}1;Bv;X_1{exQmmH`j zlCI2!Pht*pAk453TO19>6Y0@RggDT-?>QGIS9Yjj;%W*vX|I3$?!&7$&tJUz=KI$l zzWU}b-@JQ^j}}A@FqMl^3`q|#AcW$uqza5g5h_r;>(G-2$^kGij-;7am?9$agr*QW zk~D-!e-_ebNY~NP`CzJ_Lpj5vc9L8OOq6#n156x0{`KSya{^bK0E74fFVNM|}2yw2;)fx{!vUZw8VB@(QAN_MFiAE{m7B_?nAQ?+o zTRnS^yhPytNhCi9T#O7^B|aQEB#e59Y|8}@O9B>7lB9q?j~`3xqgDRFsVdtjQDbUNIt*VsGk1plBkRSb5g_35z~G`ipszSqj3Lp&4vH_K62?xEJB_ z5QKM#wpV5Yj~^F@qa)*bNFEtyv%t_Pf56uoeYh3g8x`JL75GU~j8HsDGBhkUAgMyB zPZ$oz@pxZ_us0CAfz)9F2XaVslmm_n85TC-^OiCr0tFK~oI)TV$y_!|3L$51%CobL zj&V&d_sOmrq`Fy-$~JQQ}=>b=#`KlBNp-Hw3bPms8 z{~$KgcozEyQEd3&3oBHgs*cC_&jJ4P6#w}Q|M`3tnSDlDVVuOVMDO{0YY$-0!Ih9v={=9wegC;D1BW^Oqx|qG@A63dCy8HywqA_(&)K`3ncMr zuH!I0Jq60)t;r#{I77jJe@k_23*Mt%?;l0p{kge^nU=NzqL7edM%1(FHq@wuN|GPc}u% z!#gy$Chb%G_;<7+Pco`fD?LKpU#31f3dmtRulW($Lwj=#`KD!re_p4%4WEYimBe@# zD#XJOcP+B%WX%XJ={jJ0!ogalPce>+=uv)h(mJ}nyY5Dl&Rf@g~@mP|Il(v%(g&mZ)=J?MPH6SJCzwAyJ&| zI6}PVau`@0IjR|64NxY14Zp78*Y(}qof2G0Q>b}Xf7c~2MCw^NRzhU$sGP;wi6=(} zp4+!u zM7Ab!W2}b(dn2BgrQkFq3!5RD(-^dv$^NjQS?WFY3LRaTs`u4O%fLkC9@pmB#`}N* ztysfUe`~O{77_-3sus|90G=1%Pv3s4H|;mB<=JhmT2wHagyP5vD?zmncHfM6dK-K@&EtW+ zBZu|+1eQ_6s;}EsF_x|%l^mLWgC6FFU5Nt6eB&)#ZP>a7+rhUotcT`0Le{lHpxwpk zM&f_gwHmZPHlzlG!Pbe@2lhmG6PTCCi|tjgFX_8Reg?nGmX_e!s!_(NRim7mGqc@` zs0}Pg7*ELi#;9?m5yL=Qo1j~hgLEu^^L5H)7kiAbR1CUk%?D9}l0ohA6Y;6Zqf*R) zIMlX5Z8!E774ebMJ=ef5E=i*T{#+CL>nTxj33S#R*S-=b+{OvDQF=>o8zq zISClGHWB`zTwb4*WCl#9GCW5ANM&5lV)LDFO%JYXG-D3ThJrf>IGzV#`McMDXfErf zSx(yK)eN6Zz^AFaMJg^rlRNRYa>A`JgigGzoNy}yqPsh>e4)93gr1R&En$>r_}Q0oF37${ zxshST-syA!dMEiM%AIRxH^@hBbj0$aDr;`4wqDcG|H}vl@P7`_O9P`s-JnO-FBOQ!|pQrjcX+I z;0_(dr%JlCWKTsmr%7|XByR+#!*Y0iNYFkVF8HVAgn$Y>OLPhPt&3p(6#xnIuCNGv zVv(yOpuFe{5LZT&SOH_Hl8{;%P`lASeO=Ml6`srt#Q}R6F-%lsQ0;LmWikl!K@C-k zL50{b?-zR|AWrHHZoIUApRiMy6ozvkTo;J-Oo?naHzZTT9T!_`^YR95HNw>A?yU%8 zd$*ZZr~|QA1)*Ww)l(5l%`C;Z)=sJ1l#_M})WWc7Rwy)j>OrLn3>V?cO0U@G3Q=b1 z37o9~(WI>rUAIPb-5Qab0<~sw-7%sZ?@0fMaz#7hi0VP9Buy-Tk0%j)Ep-5;*5CS$ z7GmQ@U`uL)k)bM^mtB}y8|(=AL@_mLe9}ra{wzAAx|YJrQFb^w8nn|Vo}}!Kb?kh- zC};k*h7Ue+ky9_qZR_-?pSI>sMw&Z@TIf$g8%0c9eL2*o7~s3o0e(w^rgdV0wQ$%5 z`_+PHv#%F#ADL-?(VM$&8@rR7rRq=FEOmA$-eVdmmv(7qqcejge>V1U>Ef0W7ANTF z!{oSx{TKTsVT}qy&!^u+=AH#Sc@UcwcqWOd^=emn->O1==pAD9tZ{*x70IVLX5{`} zHLSL^Dt~Pk2A=UC>U;CQ77txeAd-w^3S@4W*RN2+I`fqwZja_@mr|1vA{xbs*8M8l z%O!q6UR0zQ+$lO#&^0RM29rs6DgtyLlXZAmf56ep_@bFyU^vnB80v z)Cnr*zAIl&Z)NWFC1_C&6a{O6i5R zG~rm*SFoR0&74Uv4y30hp~QR?1e1Ub2y=3Z(>u=>i>#Oi(sPq#34-0B_C2cl21lqZ zfbZiy&vLQS9xc}tx{%8A$HF>p(hD$@`m~2Jt0`r`Oa~+scKQOAgE$z>tL!{vlS_Iq ze-@Z|0;OTO;jT~G>~s)7D!%qcW3WJLY6g8aUaO)$>{$A^rjLmBB8q8_f}XHx!~90% z;@*~9k2#Yh8B5(pW=_!49c>gQ;;FVSue&tr$gagh65GZF7o=Vt4#vF^{Ga}fdNhJm zmwT_uaWO6(nY%~{ZOj!B-c!F!>kRhde|Ks1i|NEj1y`S0gh|_MO)905c959?jWU{j zG>$BVQP*It-Ga*UwIL3eRbCob$?~W{`#`krgpKPWCmiddVO?HiVdou2CL7YDF29JR zOX`NqfN01-HpsX?-AYGJuWc76Qqbe{VVaJJ{$gRcYqjV}`nXOcLDZ~Q&eZIge_3rM zH-eNkBO$4)dK2c*%0-R@s^x#8ke9(b4H%}8CB{XWe<*pHm-^=|XY*$1N1|14tc2U!l-<@tTl}k1zfRPz zWnc_oy;UrK3^UShvmS9!9HD+oVR2leaS-l$lRtMK5%168mD)1DJ)n2 zUg1n;zx=6}B>l`Ce)jpmOfp3q2YZh2Lb(`0xyAkgENs4KiU~^jErbYbfAhgx3K;k~ zd`fR=Vp7O%0x8w6xnYDC-eK^VdMAz!M(mhvB z&z0`E5mn7236@nRWztOe))5IKGAbN5pzBFPe7GjqbT|dTw;jjni|Zdv2Vb8{KoGdv5Qr3k{qLXNO(rg}87Q;zBRP zg|iSBdLb?<-SbJi=M&xYiPQ6m?)k*&`9$}8;`Dr?dpgd)^1If8=E|_M!8#){Vh#equg!c{f!d`*c#T9erqZ14amGTOxNR5?haSL z-T@%~fBd86cwzq_+B=vU_GK*x9?}mvv#VXckj6gaM8m(75TTD*RPDap7#s_V#AS?k)gJw|eA6WW;gW=~f<*$AD z?`3}3FZz{Lu|LN2wUhoH(jyhh&!ueyC)1*lh#-oTQLH3(q)Vni`oA%#Jf;)U#Poi$ zwujP(9WxoM2Ug+$5`hE&0G(v0D3uZfrARCs#c3q0T=}bSe|FHd*C&In95PLuFUvYp zJxLok`6TYzC-SjTKC`;cjRHi+!7+#)I6M2@X9q~9f$?UADYZ<|hE1h)9QRHBeBG7x z9wR261Pw_Gdi$N1vY4cXv`&ig13kx)1n#^i63quXlavXOQ=pz8kJvq0+pGE{C zi7?D#Xge?ve`7K?_@_fKE&F7{Pn~$0Ft$P%G-x{$FXDV~I;h}c1oR7k*O9kuCCc_! zgVTQ1-?6l8xqsfDLoI*l6Ww-y$!$C3JNT8*(-^QXva$Vx!Rf|f0$XF3-8f96v>qnZ zOZ}x?;EJ-Ma0e=L=Tg}NG;jxwwF^s_dwt-XUh{11e;?pvCv_*f*|DMbFgSv78~2zK zvUQ_Lmx7p1PKJfQE_1^#)x%x028(3!dSTiL z`mE}1?u7ZA0h2p&&sr8Q$PBiDl_6TfTAJ-Vg(ROA;ZZM&(Pv|IsOqP7E*pjo`0in;WerTT*| zsg*Uk4YB0;1Ul>Cdft`;qw-oXwA~HfWO-a zM%m-NK&dQYGaHZ(dvp-+FgrlmYIR0#vFqc}4DM$ZSDT53hcNYAgT_3Bb_wO0r6c)d zf1=THm5fL?R)iO;4)bZ%??+9N!A%5oHb!mA2Qt`|T(u@Pn+42me4~?}h@%}^l?)dj zy0nY&TVU{b(U0pX`hAuz+3-#9$kr$oFlW!{MKnP>{rDf5itQH+kpT-aEQj#;3JH=I zt&bGJM=(3aDb2J?hAf%}=wSon8IcnJfAY7Hlu`T-9X&8eg6OD8%030Dc(p9khGOci zmgzjh+&Bo(c}QaB+Z)GsLbxvjmBc64GUwzv&e9sG@?yw8^r0z+@@Jd^E#E)_{eAqn zeVK|Z)}_e1PELK4A0v2X44$N!m?V%oN$Nh-WiXJ~x0}Td&|63UmuWY=kupgR3#H0LQ8d zrCn3n*h;%Pz_bIq9Hl*#X&+>0eYFB_ut*{M{u9K~>c7&ZW!UQn-JXXY=aAc5?9^~<$ z?(iXI2{Jo;Ov_s_bn&GuP2OMdqR?_8z?czU7&_$|Q{Wyk${b)BGX-!ZMNJ_kmhPax zZJiy{2N%(I!69y&UJyUI8YjV%*csWApm*)0UyJms1E>6fDDR|Se~WaARBvV}g~$-| z_n$ohC?5gAsML-y_OMn#+UTok%${3tF^A9Jy?gV`mp{IH`Qi2R?_R#e8~E$zZ(e@& zL1nx}A87NGCJFO{slcdBm;S0Pq@jePuf#yGhEolq%APlX(oWV*Mh1M|VW437IET%T ze*JRT?ELrYKz!q0e=909Hxt%z5$5dd$QY9dY0^Gn#~EHY8D19|`htRA2fk(t*ot=# z@*v~VOUfQM*Jps-R;_Eg&BzHMeLfrAZ6mJe&immTdhPNNT1+Rs$gBCXO(}7*hgKSz z#1fa9v!iSkaP&ge>DEE!b>SqC%PQM0XBpaB%4z+N0ZyL|pl0mV@qmg^a zR7h;hfAcej2Fh37KuvnQThU-ZK7e;T4nBvQ3xp5C-6-;I{m1)} zFXnzxr77<;#g;sB;nQS(ZASnZll)vvdtbnU;%4s309+~Jf9DI(aTC7->J#VwlaPlQ z2zd@)X)-q_x0A7lCjl*!*@rSxPjNU&f*z^Ox0(Na<*VD{@cr zuUVZ()mb^F_G2~o-;_19w|wPpdGk@qet+7LZ$tnT{rvt6Al0FN`(3Y88|y-?;vscq z&D}W94+VxYLHsAYw;K4jeJkq6b2G{>KdfiMWuzcWlShdkACzp9Yr!SAPn)uO(^kl5bck0SyVwr9A7}XC3 zLBaNZ&yz)qDFIEBZ;LSo`=my&tJssKi%@?zy@3nk1}=WX8~ERThbvflE|6-#-rKBO z`tmP!Yuf<)xGQ|>2syT2=+?mXO^$T$11@r`b|3byf(xcalOcthESyud&5qE>GxsriONCUZ&fHPk#F&nDTiw0s*J%n~ zWbp(+8T8KjV=DSvTZa~ z=K>i~RCoiM4S$s1%I zfQeZqLUJxX;@ai1F8jRvJ zK8=_0JU(|^-1MEvVa%JA>-45o=sJoQ>W03A<}Wmm`M+mzQ7P9#0&PmOM0Wy{VIhgro_Z9~sh9Cw&-9shny0c?@o-P0hNMi=l!OZON@BUf4 zL-jnp?y^|_*MFUkr=5q6ypbax%aOx4aRaNn_y7L=T{GLqdmB+8Tq+4JVh+rhpv5qV zB?EXV06f>3f9J@-7Wgr4N*&LW@;(4*gVUVGI|k91L3H3-@dtrE4JK>k0C=az$J7ON zK1YtkULgZm;VddTlsJnDXHmf{;PN+JFHr?0 zk4EB38@kq3#w%$fYbU=Y|KciXzRXweN_0ZNv@d+3qaq-{Ra^;2Z@^%wUBUQf)jz90 z*SnQ`9e>utdnEmMvGWs2RvCUPRima;K1g)53?<9Z=7obl9GWabC?XhW_Bo9DPohch zrbp!Cr1wObb@!jdJti`N0Zc^SBot-$@ zQHLfHRC3b1yH`Bef0Z^V?5(vO6_h`yBuCEoJAlZ7iKqv@~b`7#U3q#kBh**siFkyzRiIfUtHa$F7P=V|r42}jXP4Py?& zKp}$Ye0~W3LFc(?Q&t?$0i);j>-2S)M}N1sr`&MP+iI1ZBK3e_?SDnj_cdb21zcAv z5r!M^LER)ZFi0~P&+u9j#sA91uSIbb(oIhN#i2mf z+7m<;J{nm*hjH{jy@yfOF@^f1^?&=OXhMt&JBG5n>DI96#BN?Y#jdeftcz8$7=z}g z0XH&t|$2&N~2jI z=NGn;oJ|N)`Qk{>n=HC9g*M@oEdb}^3jX-!+mK6WajNo+Kr|Qn9KrmlxM@UbpDcee z%<*#09dQ;01wqeJ(FBfm_G^#FEql$-D}tDcD^)MLrRvAQBA8h)@W|C0?c|~Gh{FB7 zM(FOw8fiXU#4P_d#+ugG#T@q6zs$>WUR=T@MUTrKfiNeDXJr`wU+}7JKP=0fZBNUx zod0o|h!8^M*h_hpl-sH3NS;$=OIB zq?5ZllUDQk^Vp(koLh=<%)!(XVWJ2(2Uo@2Xt6pU!N2?_3`pJ4(FWCIYjQxk20;4* zS-p*Be-c00?I9oO@Mpoy-ODb=A}(}vxhw*QWl>xGU^^+lE2qqO)XOdh#4aQ4)eAJU z9K=1M(qx*+DjVClBh-)yWu$+FNE?j~gT1C^xnXvhRo9vdHQd&i^^v@~+nI?$N2!bT z+zgIp_`}KiAs$Tw9!HG@oC!W9kJw#_80f~{#Jju%cn3LDIOI@m&_j)%9;!VAk;t)0 zp;~df9FYu%0j&vo1ohwGR*t3x5JE@;ajC3W0tPJPQuw;GJBf=>Je+^asba$sYxo%R z|CggnwrRYX)C5SS9c;<@}fL;37eg{)GOy&4l+dK?dBA-@bGoEvlP{)MU`4f$kvsdRMME&D=_*>qb|41O| zjvgRLDX|P@z(u_Q=|UvQw%%=V=lawVTR$h#ju+?NJMEktm^y7ao=k0D-y?f~NShBpfE&=Pw_hN<5T@oRs8Dy5|^{5*v{`zpQ2m+I?pEF}_O7%oHoMrw{wEnGTZt76E2e3i}1 zN}*~@dA`ig=;I`v|8hnWRwj2IjXLRl6~@vtdW+U~u_`8#OI?@nS4b9Ue?|H$=jK%9 z<8*aJ`xEiNA^UTQe&2gqv7O88Vh$h13AXMcDf>UyFIRuoInXy0w%ExSJ}N%Zqm?xV zXMaeIyLLdbigB?O4M&FG+!Qy7wbR<5Z}pJmak~dV@-%qjoEv&DY}G4#^(vZY3m&6t4ES#RDNq-wOnQ$VbU4Wh)@|RhKTU!;1?HGC8a{XNeH!Qge->EVY__ubU+!=z$qz zWK*N=uGt)CT3=y5lyxpjw5XbMi=JuGII+5C+F5_?JI86=xuaZCKn`nzkU>#*GJyy@ zWoC%(FDbhFLRhxqE)pArT!BqY04h6k8Hk=~zGsy|1?sM1~l}6iU{09dz$|Bblz9df@MjDtZzoj$Gus6 zbHjh;5IP&i*qa$XyLQKa^5eM{9FI~rR*xS5_-J8K5=&WjRzc5+x|cQ!5CBC{3SW>MxQ-?xJ-DsJd)?kH12 zDHZT%GNv2E5ki?RknHjaO!Y3BD&=93ku-l&cb5t44X?1fQaLE{zHw+r3Xo%hMKx9< z9a^YZ>f)tXB^=i?RL^ZZ$=A`HrmngSNEnecVm^P@waO#Y=ndt@} zN$3NsFL(DQ?&ZjCio!uTDIz-2L=2VXpxb1i9l}S+g?Pn}GP6KA5X&H2^2gsy_ShL) zYr4U=ulyc|j#YwqUX^vtWa;K-Pc&=L zac_X_25Pt_wAC%g)6zIh6w+pD&qxOP>oh-Os}s?z#GbMjl_8$yFl^T=P6;DEH=^;* zTPx#yx_DY;+aV`KacMoQZnKw8x-kJ8GUDi=S1rj&nxj^}^ATAaOVCC98q0sA`W9pK z0W|zQ6d}l3NsjqfTi)vM=8x@*fFcWw8Zthq&6 zX2htv1{_{oba+YIT$wBO*}dCC8^Ed$Za`Mw#mSqi{k_52&lZVhUCk$6JU)aRmtm1v zA0RIl*nDE4_KS4o@9!#5!O2~e-<0pr7srP@bmU;2Z|$oy}}0q6uT!uQ5IQ%niGfn zG_hyFj?M#2xjH@&Ow}(oVf=VsbD!9E965S026^`&-T{_(gX14{(;J)KO2!Sp>5=b= zdgLQ=6ZJ#zVD*A0N)mrX8?65XHA0@;#pJ=wr6cJWlm#r=8U@M*BOpy`dl#Eq5IM;NFffQ8(K^-zwi(#&2A9@ZVB@yxln=}Aw?v?l<)CJ42J7R`*6WmIy z;si?Zg%!w*z6_HYoeqDqAo9!#>AP46yy_FBGp`}V_&=db_z{H+`Tb3I#Pqe_id zQv=it2&&S3yiDuHGbqzF!jaqsp2{+g&S)10q8&?{1ap7FYJ>dZEO5@U($iLy zM6#g(Qcf1+x(oo!rNPt9M=~1{?IlYVs+`-GxgmsejX1MJL~7NNigcNTs(tor&uo(7 z6tYr%PU0dW6Ebu6L1Jr4fO2eI{-Se6_WlZ613=lA>=&h2o4R&w5Jcu?@2{rcSA#;d zUBI?x==12OEf#-7@wVB*rr}0Y9~{H{I50*vLlz;dtfTAk3!6tSY@~c|(^Zs=?eQDW|lI3>{G*lPp>6LHzIyQfS6ocvx@95D)M?(i{lV06r ztabdhiK1;`<|UBAfMb+JM#TB86VXxUsqCwtK794#o9FMo`Tn&hk~~tD8cJ|MRU0D1 z+tJ{;;9DGZtCX$FB%iD9cGzB4Tz6xW>9y`=j7e~!;Xu=8a_BkWO5Xx+YRfDa-YC%7 ztqxCe7(0I*o%SrPdo=MSk`k&fV~AG3jOsfD-9ogjO9mdXf%1?;g_-AoU-XXjA8)^Z z-F0#d&i?Kb>mviV@65GAC>MaP{EEI^kdeZDU4OS|ekZ!W%=n?&P$hpKvFgKeTKALBqUyMw^^-h?zx}cL zb%4J}Y-03XP#h$m@MsrpxG28S!HcF;s=m&qnQ6c7Jo-G`N*(=O=q5~xmdkuu97yJjc@dt zbH{%jwBe12TNyePSRHf2kujztmDB74RPn&J9U!3%$P@r;t^B=eLTOV(&J`*7bO{$! znBz+ao+dhUXgJRerb(rk{bY^C*zw$QzM#i(8ZV>xJehM7LVtu8>1aF|sdKwXM$^UN za=PgE4eR#N^z!g@dWly2m~fFS;y9luLf49|yDKCH;6hOWyWZd*Q+7pAUd@E^O>H|5)tAz@Hck5%bQP7`x1m zsMMi+0G?8H|FzK6UogBg9CMP315c6_^XrFUEMH5zA+H9wm-@V1E-(t3{QWy#qpDAI z6(w&@d1laC-&!Y^hwEv{7ix(+HSa9LHr)&BK^g7WpZq3OBb(R*^>0t#3Orz^`kMKD zHmz@WUX$wJgSRAC4}R;D%Ap+rDU;}-9}QDnW>rV9z-oslb)wp~pAyQAM7fOND8`NsWhHsKS1BYkErl>$#etL}a`nzyZhAMXiAzus_2lSj z_RGXmwKelrU7(bgG;=zCN+}$r6iD0@k5Yb|;*~mwKkM1lq5GcLgoq zcJQg{ZYRH>UNZjsJCcpmUtDjc6ze1$e$HkZKv6Bqi!h4zQ2tVrKBE|a4q5jRoHlM7$qZ|-D4%AQt#enkn?d@m3`7V^iCPfes_&r{0-{Q10*MMQyK&-6$ zi9Om#xci#eVz`SbSn;GZBIuttL(qJgN- z0p}BLPfuz-dX7)b%Jzu~7eWe$W%e|?SGQ&;cd3c(}x`Zs`@)}rE%HjOUq>V zbdLlM!_WV`Cxi~e@pzB9P$6~b1GS_i5B<+aO89_ct=&0Qn(+M@RjT$+Tib(=Slol( zb#?Jl_pLCA9M*|{kTj%;xwK)qH+=f%r~UQb@Q+{o8E*06_)mY1_Q%7gpO58=Q<=~H zjAg#~(-&0ci$7tRgV9sD6R^y|9}lq1=TASQGEc|R{=sm357`vM?13BP;9ux&e21PJ z9<*(+=5Dv)9NnY9Kn-JXdA2PQIqc_Mg8_LQjGkBC=)zFeKB z;fANTPbA{VF=qkMIu{>sI!^oNd#g__s-XE#G$@p# z9&-}@TNk%~*#oXytoBc(LbZ1}Q)5j#m=p0+$-SJV+*7YtG^jABvj#0@(4s-uJPhAK z<1J^nn7Gjou5c{fcDGxjV*zcLJV9%xOiDR< zD$3S>i2Qpu=YrU~vSIyD|B|nicY4&@bXCWdt*~2kY?$DhA>CTOlZD>6-v_=jiMN|K zW#caE=u;_CCY!A*W=D6dbdom)F2QZ1jcxF=|0IZe=0VljI#F5UbOv_2kNs^Utxz2+ z-lLtYa>*}Ew@GeOu2{9+)4^7|UvIlnEbf4R7i)k>V%`A40!nRlnCYX@k-3WdHX=d3 zWlLa{kro)L&~^uGmOb%13yB!*d{E2us-#kcmt1pX%rGh`{Dol^2!qLOU}pT!x^D7+ z)9b+R#9KD2F{5X8?TWQL?DLE+ zLbbS!R5Mw>euh4milkO<@C$WZU!13oy_gID(;R2Bkbhf;8@G+8LR7P`3yqLvRe?>EkSAAzN zm@PW*pKG6`-N50Er4O)AH{Z5S9Zf6?PO&q~Rabo{{%!1_=`KGfXr?VmA)*}ljN^fR zah}bUZiNrO3EZ|V7=YOF>ICyq`~Fn8Qm9}&fDeYbq3<0CZ{!GN=Y~dXG@;iJ^ zkj1FMaC_@Uj+c&|7O&j8cxA`paqkaWKDm0EJf1iM>h`_ozXz?2p=m(x)ov6luS|Ne zP5j_cYKx?7Y^-dx;MZ$^ay&D)oDY+jh%e*BS3wkbqa6nC0`U!QXWEWtJX7sDRvt!u z`;0u5wvkkLfdS=&*H-Yc^wl;1_Un#KySJJ4%HxgsxZ#~GZjY_gwU(EnH6oc0vPe?3 zR#7t6F=^jHhH7^f$Tpdem~Ba7!Dwyb&^qGYw6>8U19Hr&#aAzXhb6hO4XPU3pi1B> z)b?qwc0G&8Ld3JwYip^i_ByBWKmHNs{d%wRVL*)3FaSDr9ius`TMXzBZ9^ zzclqUp)@6l^{;Tl1gIabGaczFL76CmNPn)?c>@HR#$=Bz!R^u>dC}OGorSBdiQhas`ZhU z90^+B-IH;vQvu48#j7g;Jd^RO9e+OH5gbSvF`H8iAyMk8C zmD|Tu9obu*Ephgppe)R(0)K8I4V+{=)toz(zrB6rN-CtA=}Kzr0O?q`q$4y_0Fh`g z4r$^xB%PD$6sU3JNu%eX$!J>19p2P1>mK>$%fqxUG;xLh(~_{qPYAOboxZv6IY;Qe z@5u!IU0lP8a3fBUY_E3Q7q)wNKgs$b^>F0N97VKhxatZ8qv*qMhks*MV|5S=1{sTY z77p<@%<6f%%6__75O%UC6>%^_-R-mR*Qvs2(8gJaRPt z3tQtKc!T1&#to0KsI5u~8i&{H&l?J?cN$ojUNvd;E(h2w=@8uSWi zAXGXTfJY4shry>~&woIzLjl8u!yuWT9X4$-I}#hnPUTn4gQ#QYu6c75-aQ&z2a{lN z9dzu^de4zhPU^jKxBZ5k+2(zgS(~f{uuYeba-6ww2tMgW{6wDTqThmLqhP6gZvuAQ zYaB0poUJ@?dKLv5Vqpvy)m}OMWrgVh6@GTOk8^wWL__3DPk(?NM{LyIF33pS16How zO2f%^NN9m(C%9|`MCZ&~!}O`s!K{Ubl^MF-(16P#xG-f@fdWo^Vd}wQ0DG;t2j^o9 z_c*#gg$p<%M(~N$5QG%7EZ)VkB*nYn^l>z7$~R{xRN#p>Bpb(H)*2IH;Z`Dku>7sV zFKb#S9PS-O;eYXe{k%Whi^89Yy!d(eKXtSp2md|}`b|Ih_oveBq(A<0tOF`^=_|=m zY*%a97VUP-I(2xSTOQ+@EzaT$`md)6vYtU@^%QB>bLc1AqnsE(moGWy-6g}`Lp7qQ z2sP?)E9ak0H1+G@g~gFa4-eQY^c+{o@LarKSsj5;7E>ub6lRDncHng*!f~mXKz;hn z!ZH*>ag;6@TxdW)g_sJmVKMSM6CB&L8jT^v6Ckk? z?Fa0;mJ#z9EUm|YZ#Eey&>U;npr7_F)m2}13mO0-R-9*3*|66fg(hB5BhhyZqN#C0 z7&6NoX!Q}U6cU9U`nEFYq}&&iLTf;&{V^$yb@EL7x__e?yb!lD6n!OMSGr$%#Xiht zN^M1aA2%dc8ciDLU}L5dn+gen{B%ddw99Wi6rgFuFbsl;c}90<+z+`ZA^fJN6U**}kcYaW`Upu5w zg|D;`dw=*_xq&0b>IJMuyMEQ`AR0^c=D2 zDM|q`VBPWQ42SeHobVg;#K4Yo>V9aAbUYbF$^`?#0jbV~ehdkhus;1h&QuCDbzvd^ zzdyy%>)Bz?B&&-{lqvd}7E6y0PaDOVWT!=5Du$U=p@2+FHek?821xQOrrUdRED;m2&#k@j%_R>Ba<}aZ;IS zdw2q{t?}vfPR%6pu5aFIUC)j%k7?u48|Xq<=HWs=ChB;}N7;@;i8{yA##P?(pmQn- ztbhO6vOGzbB}!B|KgwZfgI&EiXmPdAv!hFpOeU0Z4}m)q}*b&@MgmwM^x)I(3F{J@nRrwZ{k z1}GDZ!lS_0?>LhME?y4!4(;6u-yx4ABYz^(poPQU8^*(4Tv)_73f8J#cJ6WS;e-JI z>WnbBZVuB}11+^oMsiJ9PmlMBIl2ClC)YQo7@x-7bHsgOR8LM3$=?+o{l_kCd{V9# z?3BgP!;NmC0;8E%Y26t5{DK%Z%_PvIuo^h#5u0sSHf#A!_~zSb*ZHv}-(_hR5`X9H z)6P|1;}$414*)E5a!O%iB-XN>wk&O@Ep63(0$?4_<0ZOs!Iel6Gj*&Sg4}OQ;eq`) zW`VoZMHiGMYtMJES=0+jltjzihM^K|sekX@jx`VO2E@m4@r+I0Z*;IZ+=n()2yK&uK*j5=74)TE#}I)9zSlXB5XhaE@B2jDMK%8W`jIMmd_0&@E>)x<@j z7?tFQ67XTpyK0V!8j>>E-4TWbT@$ASm(zHS?!Oz;e9o{9J4G)6gx zqu7p6*)k2bR_2-5W4CQo@<lZOyu4Up#MXnwxi^2^5?Vw^FoAP_dc7MoQE!@Q{LelpmDRnU#DhKo#Fv)1=$#yl#S3xgZ4Y_Ro#_=hj@qA zil!lWR?Y%dGXU|lJSvkcETc)O#UmWdRSu$t+^Mta)l7k_DD{qVFp@;`&g16sdZx%h zdWf|dhj!_y5I2_s8h=`k1rCi$G=lXBLwuPP@%YoEY!P+JJXP<(6nLp`QLjt>2%Bh< z#-$>TLP?x)d7UAD$p)NnY)2*$BPInYs)@gGY)OL@`1w+R za7!J*HlUTfrk&Mc^DO&pS3sR|Uk$mH_5N~VzUm{wj-1q|#()0&EzRdy;vVV``G)t*DBB^mqu7(H>VOEEs%}2->pQa{j`8pkrX>_kE(->&j^@kd)5FWih^bMB=3V- z?xR(=$MHI;TdLcpI)1zT8kM#iykpa6NFr8As^(aAJAe4_It$s+qe0OnBo)B6A?$V9 zU@5DSPLUA|*sR1i6n3Yv-cIbE&-6}HT3b{Oyf%4&`fr4iSZ30?5xYIKG^BirfsLgY zXciAy(hws7UrOyxGSg=n%hDEK8*7P3Xqh7FdP zq8(^{k(KKvGzw%xSr6k=#N*LOQYz<@8;>Iy!G! z3OL4me&gBn`@7EO&|PuWfR_02+{jdKx258~AMO8KJRFo}cbh@EYj3+v754k<^#!m_ z^p@~VlbE|f0nwA%yBh(?llHq^0za&iRlI)+K}TpE^Hb7FdQX$yyh9s(yTJR{*ew%x z`^47nm~oQzrZqoKOc>x z(x=(U5Xs_fc;(Hzro3w$h5`IfIt*{|Z$I70_3}BojH@ccRND{sB>QYIEqV-{AlUh15PD zGk}(ng*1<>(mue3t;5;Twl;%*-lc7xiwi67tPJ$kWv{#e>3sO0>i?89!>ia$eGjSE zGSyPS7;O+m__!4GT)fJvmrD%50vE#zV7wPTuR^ZiTahKoWx_S%Hk^hWnth9YuTizv zD~JVQW5;zv7z^1D)^a!#E>haBMsE_&O|sh#m^ROnZSy)(Kye=}wp8qYc++4PE*(vF z)!EjS&{L|JWJJ+j=R1;Tm%0Z2daI&!^zcghU^jLvWn3GJt58Pw(ps8H`aZYyjr7B> zH5)##ru0>c{lw-spNT>Ohr5kC!) z)r!W#rO}MV%v)qMpHYUWDcBFO@bOc?2a0h-}~`K-8tn9}*-YI-gi^#x@epUKdG&dq86geagsMEr7lo8#ZB=m!1GDC;~|0Unm5z4p=*1KCTJ z{WM;2bQ@u3w6@%TT172Y9jV^4rG2mcJ@frQQ4Sh()joh<$V@-0@wp$P`1IG-j+X0^ zCiwtv<@A|53~k?TDj&q@-A31In;1ev4cPN`OpT?B#kYA4Ey0Np>5Fns9tGpzm+abN z<)A&6k&Exs7?8|$ZMOCUCfIyoTgSNl2yJC2PEW#7stg!^O|n@mC*{Vi=h#O1ybXhN z-2kds<&E&O8I-4|T@_IXF`U;md1?(-Wt|hh-AhmEatW1uNGr%7Nu$OQ5D=_IfO4MF_$kCQ;Zv3*N1%AfwpO#2Zo z>ZgA;Q{HfYp!m;5X5v@00Y3X;5&)w3HLVt3k%S{aA5KlR{7*TiFFv0HO6e|$zkvSd zE&1ztK0l|JRl95~ zB9!odbcvVd4IaUcS^%H;mSq=5f#{UO^B`F$&pbwQfwuLf_$W!5_>FWhfpXCP82yl} zhZkuxKPO-C(a*)veuRO+mPx2GhI>C3DifW^Vu{<^Adtk8Uwn@EWUl4sup*UmJ!u~M z4uWC84Cwh5qRr?5ZU4H%IG(dubCuNbA~9-zDcbB3XtN6)6!`M+VtR=Nhe>*TIg3}@ zh_M{Vu}kjbOc!N<7q5lKh;SY+%S@j}+ zSr1n6WwHjalmAP&)WZb^P(0J$m+(DJle5E%qh)_QSx!&jqWyM-Bj!Y|*H+VfH34*x13eW)BaSocX`yXnW(r@ooG@qA_B`H=^`7p4-0dv}oyFn#9! zYpP5jM_fm64e@O>-1~RuK3Z?TLCFc)7G!C@`mTX_-y{;?SIyJ-+P64v%lEz)dWjx1$3Q(8w2EFXp7WeH`+~sN+ z{Qu-?nJfq6jaLiW2UwTOkE`F}YOxRPM_(*It~OmOoO|C(#c1=R!Uovo21%wE$Q|a~ zjsh{*h@83Fzgg(HH2`1o;i%((E>kAbop(VSXx;blE)1q`7%*zDs@~RN@20!A+vHj{ zTAf>A{{YSKcUk=GAC5F8H=GgOQ8bbP$mtR>&U5pxb|+o3M{gU z+!cQSVM#m3v;W-fPTNH)5y)v-5gDjNOG|YJ`qA1ByA4}mot>%2qYWd6>_EOnZ3EH{ zb2n|}Jfn-WshZ?F6D zCdTd(LdN#y*tEe+4y2=5722fRHW*&Ixp_U*%VsRIRhh=`iBf2s~c!w4)8vo5i#^OfvFX(HVua2#X%Hcb&7@E z^nYs={2Ki!TfwgF@Ya^`g;AKhH$buJ>&B2rPej< zXb4A7@Y{$i%{A>ps`e8(8o(Z~_)n}mgPl4LvwEJcvY#%N$fE>@`vl}?fw4jEEJum* zXRpfszRqN*8EFpnY5-%^`!Patd zN0kI{!IM2e*1Rl})XPK-Uwr@i^_!Qketi4#E0ZP6G7}$8YxCs?Q;C2*t%GQaA&t_- zE0b!>9TrD+oJ*1WE9{x_*GC>@LE0~0egEALlby^Y53QXF(~a2!rA}x1A2PnVlhDi_ z0j`tp%%}k?lbFpn1CJlelhVyX6{@UWBXajWjBinQRS1K}&FzKI?H7|N&R!|u^>rRr%Rlld#S{69>TIe$zo?@9F;o L&MWU*6CMKqN3l31 delta 46059 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 H790ZrHPgqb diff --git a/dist/all.require.js b/dist/all.require.js index 91b38200..7a1888f3 100644 --- a/dist/all.require.js +++ b/dist/all.require.js @@ -170,12 +170,12 @@ fabric.Collection = { /** * Adds objects to collection, then renders canvas (if `renderOnAddRemove` is not `false`) * Objects should be instances of (or inherit from) fabric.Object - * @param [...] Zero or more fabric instances + * @param {...fabric.Object} object Zero or more fabric instances * @return {Self} thisArg */ add: function () { this._objects.push.apply(this._objects, arguments); - for (var i = arguments.length; i--; ) { + for (var i = 0, length = arguments.length; i < length; i++) { this._onObjectAdded(arguments[i]); } this.renderOnAddRemove && this.renderAll(); @@ -189,6 +189,7 @@ fabric.Collection = { * @param {Number} index Index to insert object at * @param {Boolean} nonSplicing When `true`, no splicing (shifting) of objects occurs * @return {Self} thisArg + * @chainable */ insertAt: function (object, index, nonSplicing) { var objects = this.getObjects(); @@ -204,22 +205,27 @@ fabric.Collection = { }, /** - * Removes an object from a collection, then renders canvas (if `renderOnAddRemove` is not `false`) - * @param {Object} object Object to remove + * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`) + * @param {...fabric.Object} object Zero or more fabric instances * @return {Self} thisArg + * @chainable */ - remove: function(object) { + remove: function() { var objects = this.getObjects(), - index = objects.indexOf(object); + index; - // only call onObjectRemoved if an object was actually removed - if (index !== -1) { - objects.splice(index, 1); - this._onObjectRemoved(object); + for (var i = 0, length = arguments.length; i < length; i++) { + index = objects.indexOf(arguments[i]); + + // only call onObjectRemoved if an object was actually removed + if (index !== -1) { + objects.splice(index, 1); + this._onObjectRemoved(arguments[i]); + } } this.renderOnAddRemove && this.renderAll(); - return object; + return this; }, /** @@ -7196,6 +7202,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @fires mouse:down * @fires mouse:move * @fires mouse:up + * @fires mouse:over + * @fires mouse:out * */ fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas, /** @lends fabric.Canvas.prototype */ { @@ -7899,7 +7907,31 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab return activeGroup; } - return this._searchPossibleTargets(e); + var target = this._searchPossibleTargets(e); + this._fireOverOutEvents(target); + return target; + }, + + /** + * @private + */ + _fireOverOutEvents: function(target) { + if (target) { + if (this._hoveredTarget !== target) { + this.fire('mouse:over', { target: target }); + target.fire('mouseover'); + if (this._hoveredTarget) { + this.fire('mouse:out', { target: this._hoveredTarget }); + this._hoveredTarget.fire('mouseout'); + } + this._hoveredTarget = target; + } + } + else if (this._hoveredTarget) { + this.fire('mouse:out', { target: this._hoveredTarget }); + this._hoveredTarget.fire('mouseout'); + this._hoveredTarget = null; + } }, /** @@ -10910,7 +10942,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @chainable */ remove: function() { - return this.canvas.remove(this); + this.canvas.remove(this); + return this; }, /** diff --git a/src/canvas.class.js b/src/canvas.class.js index e85feebb..edc332f4 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -29,6 +29,8 @@ * @fires mouse:down * @fires mouse:move * @fires mouse:up + * @fires mouse:over + * @fires mouse:out * */ fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas, /** @lends fabric.Canvas.prototype */ { @@ -733,23 +735,30 @@ } var target = this._searchPossibleTargets(e); + this._fireOverOutEvents(target); + return target; + }, + + /** + * @private + */ + _fireOverOutEvents: function(target) { if (target) { if (this._hoveredTarget !== target) { - this.fire('object:over', { target: target }); + this.fire('mouse:over', { target: target }); target.fire('mouseover'); if (this._hoveredTarget) { - this.fire('object:out', { target: this._hoveredTarget }); + this.fire('mouse:out', { target: this._hoveredTarget }); this._hoveredTarget.fire('mouseout'); } this._hoveredTarget = target; } } else if (this._hoveredTarget) { - this.fire('object:out', { target: this._hoveredTarget }); + this.fire('mouse:out', { target: this._hoveredTarget }); this._hoveredTarget.fire('mouseout'); this._hoveredTarget = null; } - return target; }, /**