From 767db4799507359e17f574a55d8c51a3e377a67b Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 26 Jul 2014 21:23:02 +0200 Subject: [PATCH] Build distribution --- dist/fabric.js | 116 ++++++++++++++++++++++++++--------------- dist/fabric.min.js | 14 ++--- dist/fabric.min.js.gz | Bin 56358 -> 56458 bytes dist/fabric.require.js | 116 ++++++++++++++++++++++++++--------------- 4 files changed, 153 insertions(+), 93 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 7c0bcdc4..c5014ba1 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -2814,8 +2814,6 @@ if (typeof console !== 'undefined') { var color = new fabric.Color(attributes[attr]); attributes[attr] = color.setAlpha(toFixed(color.getAlpha() * attributes[colorAttributes[attr]], 2)).toRgba(); - - delete attributes[colorAttributes[attr]]; } return attributes; } @@ -3051,28 +3049,67 @@ if (typeof console !== 'undefined') { * @private */ function getGlobalStylesForElement(element) { - var nodeName = element.nodeName, - className = element.getAttribute('class'), - id = element.getAttribute('id'), - styles = { }; - + var styles = { }; + for (var rule in fabric.cssRules) { - var ruleMatchesElement = (className && new RegExp('^\\.' + className).test(rule)) || - (id && new RegExp('^#' + id).test(rule)) || - (new RegExp('^' + nodeName).test(rule)); - - if (ruleMatchesElement) { + if (elementMatchesRule(element, rule.split(' '))) { for (var property in fabric.cssRules[rule]) { - var attr = normalizeAttr(property), - value = normalizeValue(attr, fabric.cssRules[rule][property]); - styles[attr] = value; + styles[property] = fabric.cssRules[rule][property]; } } } - return styles; } + /** + * @private + */ + function elementMatchesRule(element, selectors) { + var firstMatching, parentMatching = true; + //start from rightmost selector. + firstMatching = selectorMatches(element, selectors.pop()); + if (firstMatching && selectors.length) { + parentMatching = doesSomeParentMatch(element, selectors); + } + return firstMatching && parentMatching && (selectors.length === 0); + } + + function doesSomeParentMatch(element, selectors) { + var selector, parentMatching = true; + while (element.parentNode && element.parentNode.nodeType === 1 && selectors.length) { + if (parentMatching) { + selector = selectors.pop(); + } + element = element.parentNode; + parentMatching = selectorMatches(element, selector); + } + return selectors.length === 0; + } + /** + * @private + */ + function selectorMatches(element, selector) { + var nodeName = element.nodeName, + classNames = element.getAttribute('class'), + id = element.getAttribute('id'), matcher; + // i check if a selector matches slicing away part from it. + // if i get empty string i should match + matcher = new RegExp('^' + nodeName, 'i'); + selector = selector.replace(matcher, ''); + if (id && selector.length) { + matcher = new RegExp('#' + id + '(?![a-zA-Z\\-]+)', 'i'); + selector = selector.replace(matcher, ''); + } + if (classNames && selector.length) { + classNames = classNames.split(' '); + for (var i = classNames.length; i--;) { + matcher = new RegExp('\\.' + classNames[i] + '(?![a-zA-Z\\-]+)', 'i'); + selector = selector.replace(matcher, ''); + } + } + return selector.length === 0; + } + /** * @private */ @@ -3462,8 +3499,7 @@ if (typeof console !== 'undefined') { */ getCSSRules: function(doc) { var styles = doc.getElementsByTagName('style'), - allRules = { }, - rules; + allRules = { }, rules; // very crude parsing of style contents for (var i = 0, len = styles.length; i < len; i++) { @@ -3476,25 +3512,23 @@ if (typeof console !== 'undefined') { rules = rules.map(function(rule) { return rule.trim(); }); rules.forEach(function(rule) { - var match = rule.match(/([\s\S]*?)\s*\{([^}]*)\}/); - rule = match[1]; - var declaration = match[2].trim(), - propertyValuePairs = declaration.replace(/;$/, '').split(/\s*;\s*/); - if (!allRules[rule]) { - allRules[rule] = { }; - } + var match = rule.match(/([\s\S]*?)\s*\{([^}]*)\}/), + ruleObj = { }, declaration = match[2].trim(), + propertyValuePairs = declaration.replace(/;$/, '').split(/\s*;\s*/); for (var i = 0, len = propertyValuePairs.length; i < len; i++) { var pair = propertyValuePairs[i].split(/\s*:\s*/), - property = pair[0], - value = pair[1]; - - allRules[rule][property] = value; + property = normalizeAttr(pair[0]), + value = normalizeValue(property,pair[1],pair[0]); + ruleObj[property] = value; } + rule = match[1]; + rule.split(',').forEach(function(_rule) { + allRules[_rule.trim()] = fabric.util.object.clone(ruleObj); + }); }); } - return allRules; }, @@ -7154,8 +7188,8 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype } // set path origin coordinates based on our bounding box - var originLeft = this.box.minx + (this.box.maxx - this.box.minx) / 2, - originTop = this.box.miny + (this.box.maxy - this.box.miny) / 2; + var originLeft = this.box.minX + (this.box.maxX - this.box.minX) / 2, + originTop = this.box.minY + (this.box.maxY - this.box.minY) / 2; this.canvas.contextTop.arc(originLeft, originTop, 3, 0, Math.PI * 2, false); @@ -12746,15 +12780,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot if (this.hasRotatingPoint && this.isControlVisible('mtr') && !this.get('lockRotation') && this.hasControls) { - var rotateHeight = ( - this.flipY - ? height + (padding * 2) - : -height - (padding * 2) - ) / 2; + var rotateHeight = ( -height - (padding * 2)) / 2; ctx.beginPath(); ctx.moveTo(0, rotateHeight); - ctx.lineTo(0, rotateHeight + (this.flipY ? this.rotatingPointOffset : -this.rotatingPointOffset)); + ctx.lineTo(0, rotateHeight - this.rotatingPointOffset); ctx.closePath(); ctx.stroke(); } @@ -12865,9 +12895,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot if (this.hasRotatingPoint) { this._drawControl('mtr', ctx, methodName, left + width/2 - scaleOffset, - this.flipY - ? (top + height + this.rotatingPointOffset - this.cornerSize/2 + padding) - : (top - this.rotatingPointOffset - this.cornerSize/2 - padding)); + top - this.rotatingPointOffset - this.cornerSize/2 - padding); } ctx.restore(); @@ -13552,8 +13580,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot initialize: function(options) { options = options || { }; - this.set('radius', options.radius || 0); this.callSuper('initialize', options); + this.set('radius', options.radius || 0); }, /** @@ -18499,8 +18527,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag _renderText: function(ctx, textLines) { ctx.save(); this._setShadow(ctx); + this._setupFillRule(ctx); this._renderTextFill(ctx, textLines); this._renderTextStroke(ctx, textLines); + this._restoreFillRule(ctx); this._removeShadow(ctx); ctx.restore(); }, @@ -21507,7 +21537,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot * @param {Event} e Event object */ onKeyPress: function(e) { - if (!this.isEditing || e.metaKey || e.ctrlKey || e.keyCode === 8 || e.keyCode === 13) { + if (!this.isEditing || e.metaKey || e.ctrlKey || e.keyCode in this._keysMap) { return; } diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 075ffdcf..9562abb2 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.9"};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=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],fabric.DPI=96,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)},transformPoint:function(e,t,n){return n?new fabric.Point(t[0]*e.x+t[1]*e.y,t[2]*e.x+t[3]*e.y):new fabric.Point(t[0]*e.x+t[1]*e.y+t[4],t[2]*e.x+t[3]*e.y+t[5])},invertTransform:function(e){var t=e.slice(),n=1/(e[0]*e[3]-e[1]*e[2]);t=[n*e[3],-n*e[1],-n*e[2],n*e[0],0,0];var r=fabric.util.transformPoint({x:e[4],y:e[5]},t);return t[4]=-r.x,t[5]=-r.y,t},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},parseUnit:function(e){var t=/\D{0,2}$/.exec(e),n=parseFloat(e);switch(t[0]){case"mm":return n*fabric.DPI/25.4;case"cm":return n*fabric.DPI/2.54;case"in":return n*fabric.DPI;case"pt":return n*fabric.DPI/72;case"pc":return n*fabric.DPI/72*12;default:return n}},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;sr)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,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=Math.sin(s),h=Math.cos(s),p=Math.sin(o),d=Math.cos(o),v=l*u,m=-f*a,g=f*u,y=l*a,b=.25*(o-s),w=8/3*Math.sin(b)*Math.sin(b)/Math.sin(b*2),E=e+h-w*c,S=i+c+w*h,x=e+d,T=i+p,N=x+w*p,C=T-w*d;return t[r]=[v*E+m*S,g*E+y*S,v*N+m*C,g*N+y*C,v*x+m*T,g*x+y*T],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&&(" "+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=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},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=r,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)})}function n(){return t.apply(fabric.window,arguments)}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)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return et[3]?t[3]:t[0];if(t[0]===1&&t[3]===1&&t[4]===0&&t[5]===0)return;var n=document.createElement("g");while(e.firstChild!=null){var r=e.firstChild;n.appendChild(r)}n.setAttribute("transform","matrix("+t[0]+" "+t[1]+" "+t[2]+" "+t[3]+" "+t[4]+" "+t[5]+")"),e.appendChild(n)}function w(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function E(e,t,n){t[n]&&t[n].toSVG&&e.push('','')}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.parseUnit,u=t.util.multiplyTransformMatrices,a={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},f={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*\\.\\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(u){var l=(new RegExp(v)).exec(u).filter(function(e){return e!==""&&e!=null}),c=l[1],h=l.slice(2).map(parseFloat);switch(c){case"translate":s(a,h);break;case"rotate":h[0]=t.util.degreesToRadians(h[0]),e(a,h);break;case"scale":n(a,h);break;case"skewX":r(a,h);break;case"skewY":i(a,h);break;case"matrix":a=h}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 o(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)$/,r="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",s=new RegExp("^\\s*("+r+"+)\\s*,?"+"\\s*("+r+"+)\\s*,?"+"\\s*("+r+"+)\\s*,?"+"\\s*("+r+"+)\\s*"+"$");return function(r,u,a){if(!r)return;var f=new Date;g(r);var l=r.getAttribute("viewBox"),c=parseFloat(r.getAttribute("width")),h=parseFloat(r.getAttribute("height")),p,d;if(l&&(l=l.match(s))){var v=parseFloat(l[1]),m=parseFloat(l[2]),b=1,w=1;p=parseFloat(l[3]),d=parseFloat(l[4]),c&&c!==p&&(b=c/p),h&&h!==d&&(w=h/d),y(r,[b,0,0,w,-v,-m])}var E=t.util.toArray(r.getElementsByTagName("*"));if(E.length===0&&t.isLikelyNode){E=r.selectNodes('//*[name(.)!="svg"]');var S=[];for(var x=0,T=E.length;x/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){b.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),b.has(e,function(r){r?b.get(e,function(e){var t=w(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 E(t,e,"backgroundColor"),E(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var 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]);if(e==="transparent"){this.setSource([255,255,255,0]);return}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(!t)return"";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,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this._setImageSmoothing(),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)},_setImageSmoothing:function(){var e=this.getContext();e.imageSmoothingEnabled=this.imageSmoothingEnabled,e.webkitImageSmoothingEnabled=this.imageSmoothingEnabled,e.mozImageSmoothingEnabled=this.imageSmoothingEnabled,e.msImageSmoothingEnabled=this.imageSmoothingEnabled,e.oImageSmoothingEnabled=this.imageSmoothingEnabled},__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&&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=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice()},_createLowerCanvas:function(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},getZoom:function(){return Math.sqrt(this.viewportTransform[0]*this.viewportTransform[3])},setViewportTransform:function(e){this.viewportTransform=e,this.renderAll();for(var t=0,n=this._objects.length;t"),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,t=this.canvas.viewportTransform,n=this._points[0],r=this._points[1];e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5]),e.beginPath(),this._points.length===2&&n.x===r.x&&n.y===r.y&&(n.x-=.5,r.x+=.5),e.moveTo(n.x,n.y);for(var i=1,s=this._points.length;in.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;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},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(this.getPointer(e,!0))},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)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e,!0),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t,n,r){r||(r=this.upperCanvasEl);var i=e(t,r),s=r.getBoundingClientRect(),o;return i.x=i.x-this._offset.left,i.y=i.y-this._offset.top,n||(i=fabric.util.transformPoint(i,fabric.util.invertTransform(this.viewportTransform))),s.width===0||s.height===0?o={width:1,height:1}:o={width:r.width/s.width,height:r.height/s.height},{x:i.x*o.width,y:i.y*o.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&e.set("active",!0)},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center",canvas:this}),t.addWithUpdate(),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;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),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;if(!e||e.length===0){t&&t();return}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){this.group&&this.group.transform(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]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),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},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),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._restoreFillRule(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)},_renderControls:function(e,n){var r=this.getViewportTransform();e.save();if(this.active&&!n){var i;this.group&&(i=t.util.transformPoint(this.group.getCenterPoint(),r),e.translate(i.x,i.y),e.rotate(s(this.group.angle))),i=t.util.transformPoint(this.getCenterPoint(),r,null!=this.group),this.group&&(i.x*=this.group.scaleX,i.y*=this.group.scaleY),e.translate(i.x,i.y),e.rotate(s(this.angle)),this.drawBorders(e),this.drawControls(e)}e.restore()},_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){if(!this.shadow)return;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)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke||this.strokeWidth===0)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",e?new t.Shadow(e):null)},setColor:function(e){return this.set("fill",e),this},setAngle:function(e){var t=(this.originX!=="center"||this.originY!=="center")&&this.centeredRotation;return t&&this._setOriginToCenter(),this.set("angle",e),t&&this._resetOrigin(),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}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),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},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_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.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=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=e(this.angle),r=this.getViewportTransform(),i=function(e){return fabric.util.transformPoint(e,r)},s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=t:f&&(o=t),l&&(s+=t),c&&(o+=t),this.currentWidth=s*this.scaleX,this.currentHeight=o*this.scaleY,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var h=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),p=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),d=Math.cos(p+n)*h,v=Math.sin(p+n)*h,m=Math.sin(n),g=Math.cos(n),y=this.getCenterPoint(),b=new fabric.Point(this.currentWidth,this.currentHeight),w=new fabric.Point(y.x-d,y.y-v),E=new fabric.Point(w.x+b.x*g,w.y+b.x*m),S=new fabric.Point(w.x-b.y*m,w.y+b.y*g),x=new fabric.Point(w.x+b.x/2*g,w.y+b.x/2*m),T=i(w),N=i(E),C=i(new fabric.Point(E.x-b.y*m,E.y+b.y*g)),k=i(S),L=i(new fabric.Point(w.x-b.y/2*m,w.y+b.y/2*g)),A=i(x),O=i(new fabric.Point(E.x-b.y/2*m,E.y+b.y/2*g)),M=i(new fabric.Point(S.x+b.x/2*g,S.y+b.x/2*m)),_=i(new fabric.Point(x.x,x.y)),D=Math.cos(p+n)*this.padding*Math.sqrt(2),P=Math.sin(p+n)*this.padding*Math.sqrt(2);return T=T.add(new fabric.Point(-D,-P)),N=N.add(new fabric.Point(P,-D)),C=C.add(new fabric.Point(D,P)),k=k.add(new fabric.Point(-P,D)),L=L.add(new fabric.Point((-D-P)/2,(-P+D)/2)),A=A.add(new fabric.Point((P-D)/2,-(P+D)/2)),O=O.add(new fabric.Point((P+D)/2,(P-D)/2)),M=M.add(new fabric.Point((D-P)/2,(D+P)/2)),_=_.add(new fabric.Point((P-D)/2,-(P+D)/2)),this.oCoords={tl:T,tr:N,br:C,bl:k,ml:L,mt:A,mr:O,mb:M,mtr:_},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.getViewportTransform(),r=fabric.util.transformPoint(this.getCenterPoint(),n),i=fabric.Object.NUM_FRACTION_DIGITS,s="translate("+e(r.x,i)+" "+e(r.y,i)+")",o=t!==0?" rotate("+e(t,i)+")":"",u=this.scaleX===1&&this.scaleY===1&&n[0]===1&&n[3]===1?"":" scale("+e(this.scaleX*n[0],i)+" "+e(this.scaleY*n[3],i)+")",a=this.flipX?"matrix(-1 0 0 1 0 0) ":"",f=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[s,o,u,a,f].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.degreesToRadians,t=function(){return typeof G_vmlCanvasManager!="undefined"};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(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);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.getViewportTransform();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;var o=this.getWidth(),u=this.getHeight(),a=this.strokeWidth>1?this.strokeWidth:0,f=this.strokeLineCap==="round"||this.strokeLineCap==="square",l=this.type==="line"&&this.width===1,c=this.type==="line"&&this.height===1,h=f&&c||this.type!=="line",p=f&&l||this.type!=="line";l?o=a/i:c&&(u=a/s),h&&(o+=a/i),p&&(u+=a/s);var d=fabric.util.transformPoint(new fabric.Point(o,u),r,!0),v=d.x,m=d.y;this.group&&(v*=this.group.scaleX,m*=this.group.scaleY),e.strokeRect(~~(-(v/2)-t)-.5,~~(-(m/2)-t)-.5,~~(v+n)+1,~~(m+n)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var g=(this.flipY?m+t*2:-m-t*2)/2;e.beginPath(),e.moveTo(0,g),e.lineTo(0,g+(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.getViewportTransform(),i=this.strokeWidth>1?this.strokeWidth:0,s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=i:f&&(o=i),l&&(s+=i),c&&(o+=i),s*=this.scaleX,o*=this.scaleY;var h=fabric.util.transformPoint(new fabric.Point(s,o),r,!0),p=h.x,d=h.y,v=-(p/2),m=-(d/2),g=this.padding,y=n,b=n-t,w=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1,e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,w,v-y-g,m-y-g),this._drawControl("tr",e,w,v+p-y+g,m-y-g),this._drawControl("bl",e,w,v-y-g,m+d+b+g),this._drawControl("br",e,w,v+p+b+g,m+d+b+g),this.get("lockUniScaling")||(this._drawControl("mt",e,w,v+p/2-y,m-y-g),this._drawControl("mb",e,w,v+p/2-y,m+d+b+g),this._drawControl("mr",e,w,v+p+b+g,m+d/2-y),this._drawControl("ml",e,w,v-y-g,m+d/2-y)),this.hasRotatingPoint&&this._drawControl("mtr",e,w,v+p/2-y,this.flipY?m+d+this.rotatingPointOffset-this.cornerSize/2+g:m-this.rotatingPointOffset-this.cornerSize/2-g),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize;this.isControlVisible(e)&&(t()||this.transparentCorners||n.clearRect(i,s,o,o),n[r](i,s,o,o))},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",radius:0,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),this._renderFill(e),this.stroke&&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=0),"top"in s||(s.top=0),"transformMatrix"in s||(s.left-=n.width?n.width/2:0,s.top-=n.height?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.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.save(),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top*this.rx/this.ry:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},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);"left"in i||(i.left=0),"top"in i||(i.top=0),"transformMatrix"in i||(i.left-=n.width?n.width/2:0,i.top-=n.height?n.height/2:0);var s=new t.Ellipse(r(i,n));return s.cx=parseFloat(e.getAttribute("cx"))||0,s.cy=parseFloat(e.getAttribute("cy"))||0,s},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){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx?Math.min(this.rx,this.width/2):0,n=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0,f=.4477152502;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),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.bezierCurveTo(s+r-f*t,o,s+r,o+f*n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.bezierCurveTo(s+r,o+i-f*n,s+r-f*t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.bezierCurveTo(s+f*t,o+i,s,o+i-f*n,s,o+i-n),e.lineTo(s,o+n),a&&e.bezierCurveTo(s,o+f*n,s+f*t,o,s+t,o),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",points:null,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.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),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=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var f=0,l,c=this.path.length;fv)for(var g=1,y=l.length;g"];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")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===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(),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(),e&&(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){if(!this.visible)return;e.save(),this.clipTo&&t.util.clipContext(this,e);for(var n=0,r=this._objects.length;n'];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(){if(this.getElement())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._originalElement)return;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){this._element&&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&&this.crossOrigin&&(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()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0: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||0},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){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);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(),this._transform(e,t);var n=this.transformMatrix,r=this.group&&this.group.type==="path-group";r&&e.translate(-this.group.width/2,-this.group.height/2),n&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),r&&e.translate(this.left,this.top),this._render(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 dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,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),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE),n.originX||(n.originX="left");var i=new t.Text(e.textContent,n),s=0;return i.originX==="left"&&(s=i.getWidth()/2),i.originX==="right"&&(s=-i.getWidth()/2),i.set({left:i.getLeft()+s,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.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-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.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},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?u.length:0;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,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},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.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},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.__lastSelected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{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),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},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.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(e){var t=this.getSelectedText(),n=this._getClipboardData(e);n&&n.setData("text",t),this.copiedText=t,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(e){var t=null,n=this._getClipboardData(e);n?t=n.getData("text"):t=this.copiedText,t&&this.insertChars(t)},cut:function(e){if(this.selectionStart===this.selectionEnd)return;this.copy(),this.removeChars(e)},_getClipboardData:function(e){return e&&(e.clipboardData||fabric.window.clipboardData)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),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=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,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("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_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 requestFs(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=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){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var 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?requestFs(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?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),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,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},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-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.9"};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=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],fabric.DPI=96,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)},transformPoint:function(e,t,n){return n?new fabric.Point(t[0]*e.x+t[1]*e.y,t[2]*e.x+t[3]*e.y):new fabric.Point(t[0]*e.x+t[1]*e.y+t[4],t[2]*e.x+t[3]*e.y+t[5])},invertTransform:function(e){var t=e.slice(),n=1/(e[0]*e[3]-e[1]*e[2]);t=[n*e[3],-n*e[1],-n*e[2],n*e[0],0,0];var r=fabric.util.transformPoint({x:e[4],y:e[5]},t);return t[4]=-r.x,t[5]=-r.y,t},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},parseUnit:function(e){var t=/\D{0,2}$/.exec(e),n=parseFloat(e);switch(t[0]){case"mm":return n*fabric.DPI/25.4;case"cm":return n*fabric.DPI/2.54;case"in":return n*fabric.DPI;case"pt":return n*fabric.DPI/72;case"pc":return n*fabric.DPI/72*12;default:return n}},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;sr)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,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=Math.sin(s),h=Math.cos(s),p=Math.sin(o),d=Math.cos(o),v=l*u,m=-f*a,g=f*u,y=l*a,b=.25*(o-s),w=8/3*Math.sin(b)*Math.sin(b)/Math.sin(b*2),E=e+h-w*c,S=i+c+w*h,x=e+d,T=i+p,N=x+w*p,C=T-w*d;return t[r]=[v*E+m*S,g*E+y*S,v*N+m*C,g*N+y*C,v*x+m*T,g*x+y*T],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&&(" "+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=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},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=r,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)})}function n(){return t.apply(fabric.window,arguments)}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)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return et[3]?t[3]:t[0];if(t[0]===1&&t[3]===1&&t[4]===0&&t[5]===0)return;var n=document.createElement("g");while(e.firstChild!=null){var r=e.firstChild;n.appendChild(r)}n.setAttribute("transform","matrix("+t[0]+" "+t[1]+" "+t[2]+" "+t[3]+" "+t[4]+" "+t[5]+")"),e.appendChild(n)}function x(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function T(e,t,n){t[n]&&t[n].toSVG&&e.push('','')}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.parseUnit,u=t.util.multiplyTransformMatrices,a={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},f={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*\\.\\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(u){var l=(new RegExp(v)).exec(u).filter(function(e){return e!==""&&e!=null}),c=l[1],h=l.slice(2).map(parseFloat);switch(c){case"translate":s(a,h);break;case"rotate":h[0]=t.util.degreesToRadians(h[0]),e(a,h);break;case"scale":n(a,h);break;case"skewX":r(a,h);break;case"skewY":i(a,h);break;case"matrix":a=h}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 o(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)$/,r="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",s=new RegExp("^\\s*("+r+"+)\\s*,?"+"\\s*("+r+"+)\\s*,?"+"\\s*("+r+"+)\\s*,?"+"\\s*("+r+"+)\\s*"+"$");return function(r,u,a){if(!r)return;var f=new Date;w(r);var l=r.getAttribute("viewBox"),c=parseFloat(r.getAttribute("width")),h=parseFloat(r.getAttribute("height")),p,d;if(l&&(l=l.match(s))){var v=parseFloat(l[1]),m=parseFloat(l[2]),g=1,y=1;p=parseFloat(l[3]),d=parseFloat(l[4]),c&&c!==p&&(g=c/p),h&&h!==d&&(y=h/d),E(r,[g,0,0,y,-v,-m])}var b=t.util.toArray(r.getElementsByTagName("*"));if(b.length===0&&t.isLikelyNode){b=r.selectNodes('//*[name(.)!="svg"]');var S=[];for(var x=0,T=b.length;x/i,"")));if(!s||!s.documentElement)return; +t.parseSVGDocument(s.documentElement,function(r,i){S.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),S.has(e,function(r){r?S.get(e,function(e){var t=x(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 T(t,e,"backgroundColor"),T(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var 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]);if(e==="transparent"){this.setSource([255,255,255,0]);return}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(!t)return"";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,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this._setImageSmoothing(),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)},_setImageSmoothing:function(){var e=this.getContext();e.imageSmoothingEnabled=this.imageSmoothingEnabled,e.webkitImageSmoothingEnabled=this.imageSmoothingEnabled,e.mozImageSmoothingEnabled=this.imageSmoothingEnabled,e.msImageSmoothingEnabled=this.imageSmoothingEnabled,e.oImageSmoothingEnabled=this.imageSmoothingEnabled},__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&&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=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice()},_createLowerCanvas:function(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},getZoom:function(){return Math.sqrt(this.viewportTransform[0]*this.viewportTransform[3])},setViewportTransform:function(e){this.viewportTransform=e,this.renderAll();for(var t=0,n=this._objects.length;t"),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,t=this.canvas.viewportTransform,n=this._points[0],r=this._points[1];e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5]),e.beginPath(),this._points.length===2&&n.x===r.x&&n.y===r.y&&(n.x-=.5,r.x+=.5),e.moveTo(n.x,n.y);for(var i=1,s=this._points.length;in.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;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},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(this.getPointer(e,!0))},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)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e,!0),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t,n,r){r||(r=this.upperCanvasEl);var i=e(t,r),s=r.getBoundingClientRect(),o;return i.x=i.x-this._offset.left,i.y=i.y-this._offset.top,n||(i=fabric.util.transformPoint(i,fabric.util.invertTransform(this.viewportTransform))),s.width===0||s.height===0?o={width:1,height:1}:o={width:r.width/s.width,height:r.height/s.height},{x:i.x*o.width,y:i.y*o.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&e.set("active",!0)},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center",canvas:this}),t.addWithUpdate(),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;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),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;if(!e||e.length===0){t&&t();return}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){this.group&&this.group.transform(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]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),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},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),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._restoreFillRule(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)},_renderControls:function(e,n){var r=this.getViewportTransform();e.save();if(this.active&&!n){var i;this.group&&(i=t.util.transformPoint(this.group.getCenterPoint(),r),e.translate(i.x,i.y),e.rotate(s(this.group.angle))),i=t.util.transformPoint(this.getCenterPoint(),r,null!=this.group),this.group&&(i.x*=this.group.scaleX,i.y*=this.group.scaleY),e.translate(i.x,i.y),e.rotate(s(this.angle)),this.drawBorders(e),this.drawControls(e)}e.restore()},_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){if(!this.shadow)return;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)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke||this.strokeWidth===0)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",e?new t.Shadow(e):null)},setColor:function(e){return this.set("fill",e),this},setAngle:function(e){var t=(this.originX!=="center"||this.originY!=="center")&&this.centeredRotation;return t&&this._setOriginToCenter(),this.set("angle",e),t&&this._resetOrigin(),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}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),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},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_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.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=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=e(this.angle),r=this.getViewportTransform(),i=function(e){return fabric.util.transformPoint(e,r)},s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=t:f&&(o=t),l&&(s+=t),c&&(o+=t),this.currentWidth=s*this.scaleX,this.currentHeight=o*this.scaleY,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var h=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),p=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),d=Math.cos(p+n)*h,v=Math.sin(p+n)*h,m=Math.sin(n),g=Math.cos(n),y=this.getCenterPoint(),b=new fabric.Point(this.currentWidth,this.currentHeight),w=new fabric.Point(y.x-d,y.y-v),E=new fabric.Point(w.x+b.x*g,w.y+b.x*m),S=new fabric.Point(w.x-b.y*m,w.y+b.y*g),x=new fabric.Point(w.x+b.x/2*g,w.y+b.x/2*m),T=i(w),N=i(E),C=i(new fabric.Point(E.x-b.y*m,E.y+b.y*g)),k=i(S),L=i(new fabric.Point(w.x-b.y/2*m,w.y+b.y/2*g)),A=i(x),O=i(new fabric.Point(E.x-b.y/2*m,E.y+b.y/2*g)),M=i(new fabric.Point(S.x+b.x/2*g,S.y+b.x/2*m)),_=i(new fabric.Point(x.x,x.y)),D=Math.cos(p+n)*this.padding*Math.sqrt(2),P=Math.sin(p+n)*this.padding*Math.sqrt(2);return T=T.add(new fabric.Point(-D,-P)),N=N.add(new fabric.Point(P,-D)),C=C.add(new fabric.Point(D,P)),k=k.add(new fabric.Point(-P,D)),L=L.add(new fabric.Point((-D-P)/2,(-P+D)/2)),A=A.add(new fabric.Point((P-D)/2,-(P+D)/2)),O=O.add(new fabric.Point((P+D)/2,(P-D)/2)),M=M.add(new fabric.Point((D-P)/2,(D+P)/2)),_=_.add(new fabric.Point((P-D)/2,-(P+D)/2)),this.oCoords={tl:T,tr:N,br:C,bl:k,ml:L,mt:A,mr:O,mb:M,mtr:_},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.getViewportTransform(),r=fabric.util.transformPoint(this.getCenterPoint(),n),i=fabric.Object.NUM_FRACTION_DIGITS,s="translate("+e(r.x,i)+" "+e(r.y,i)+")",o=t!==0?" rotate("+e(t,i)+")":"",u=this.scaleX===1&&this.scaleY===1&&n[0]===1&&n[3]===1?"":" scale("+e(this.scaleX*n[0],i)+" "+e(this.scaleY*n[3],i)+")",a=this.flipX?"matrix(-1 0 0 1 0 0) ":"",f=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[s,o,u,a,f].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.degreesToRadians,t=function(){return typeof G_vmlCanvasManager!="undefined"};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(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);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.getViewportTransform();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;var o=this.getWidth(),u=this.getHeight(),a=this.strokeWidth>1?this.strokeWidth:0,f=this.strokeLineCap==="round"||this.strokeLineCap==="square",l=this.type==="line"&&this.width===1,c=this.type==="line"&&this.height===1,h=f&&c||this.type!=="line",p=f&&l||this.type!=="line";l?o=a/i:c&&(u=a/s),h&&(o+=a/i),p&&(u+=a/s);var d=fabric.util.transformPoint(new fabric.Point(o,u),r,!0),v=d.x,m=d.y;this.group&&(v*=this.group.scaleX,m*=this.group.scaleY),e.strokeRect(~~(-(v/2)-t)-.5,~~(-(m/2)-t)-.5,~~(v+n)+1,~~(m+n)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var g=(-m-t*2)/2;e.beginPath(),e.moveTo(0,g),e.lineTo(0,g-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.getViewportTransform(),i=this.strokeWidth>1?this.strokeWidth:0,s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=i:f&&(o=i),l&&(s+=i),c&&(o+=i),s*=this.scaleX,o*=this.scaleY;var h=fabric.util.transformPoint(new fabric.Point(s,o),r,!0),p=h.x,d=h.y,v=-(p/2),m=-(d/2),g=this.padding,y=n,b=n-t,w=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1,e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,w,v-y-g,m-y-g),this._drawControl("tr",e,w,v+p-y+g,m-y-g),this._drawControl("bl",e,w,v-y-g,m+d+b+g),this._drawControl("br",e,w,v+p+b+g,m+d+b+g),this.get("lockUniScaling")||(this._drawControl("mt",e,w,v+p/2-y,m-y-g),this._drawControl("mb",e,w,v+p/2-y,m+d+b+g),this._drawControl("mr",e,w,v+p+b+g,m+d/2-y),this._drawControl("ml",e,w,v-y-g,m+d/2-y)),this.hasRotatingPoint&&this._drawControl("mtr",e,w,v+p/2-y,m-this.rotatingPointOffset-this.cornerSize/2-g),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize;this.isControlVisible(e)&&(t()||this.transparentCorners||n.clearRect(i,s,o,o),n[r](i,s,o,o))},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",radius:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("radius",e.radius||0)},_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),this._renderFill(e),this.stroke&&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=0),"top"in s||(s.top=0),"transformMatrix"in s||(s.left-=n.width?n.width/2:0,s.top-=n.height?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.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.save(),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top*this.rx/this.ry:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},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);"left"in i||(i.left=0),"top"in i||(i.top=0),"transformMatrix"in i||(i.left-=n.width?n.width/2:0,i.top-=n.height?n.height/2:0);var s=new t.Ellipse(r(i,n));return s.cx=parseFloat(e.getAttribute("cx"))||0,s.cy=parseFloat(e.getAttribute("cy"))||0,s},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){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx?Math.min(this.rx,this.width/2):0,n=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0,f=.4477152502;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),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.bezierCurveTo(s+r-f*t,o,s+r,o+f*n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.bezierCurveTo(s+r,o+i-f*n,s+r-f*t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.bezierCurveTo(s+f*t,o+i,s,o+i-f*n,s,o+i-n),e.lineTo(s,o+n),a&&e.bezierCurveTo(s,o+f*n,s+f*t,o,s+t,o),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",points:null,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.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),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=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var f=0,l,c=this.path.length;fv)for(var g=1,y=l.length;g"];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")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===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(),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(),e&&(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){if(!this.visible)return;e.save(),this.clipTo&&t.util.clipContext(this,e);for(var n=0,r=this._objects.length;n'];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(){if(this.getElement())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._originalElement)return;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){this._element&&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&&this.crossOrigin&&(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()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0: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||0},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){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);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._setupFillRule(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._restoreFillRule(e),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(),this._transform(e,t);var n=this.transformMatrix,r=this.group&&this.group.type==="path-group";r&&e.translate(-this.group.width/2,-this.group.height/2),n&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),r&&e.translate(this.left,this.top),this._render(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 dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,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),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE),n.originX||(n.originX="left");var i=new t.Text(e.textContent,n),s=0;return i.originX==="left"&&(s=i.getWidth()/2),i.originX==="right"&&(s=-i.getWidth()/2),i.set({left:i.getLeft()+s,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.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-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.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},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?u.length:0;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,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},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.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},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.__lastSelected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{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),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},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.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(e){var t=this.getSelectedText(),n=this._getClipboardData(e);n&&n.setData("text",t),this.copiedText=t,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(e){var t=null,n=this._getClipboardData(e);n?t=n.getData("text"):t=this.copiedText,t&&this.insertChars(t)},cut:function(e){if(this.selectionStart===this.selectionEnd)return;this.copy(),this.removeChars(e)},_getClipboardData:function(e){return e&&(e.clipboardData||fabric.window.clipboardData)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode in this._keysMap)return;this.insertChars(String.fromCharCode(e.which)),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=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,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("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_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 requestFs(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=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){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var 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?requestFs(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?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),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,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},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/fabric.min.js.gz b/dist/fabric.min.js.gz index 6fe4a5ab56c3359360b343a437de931c09edd9ff..3d30b3245e0cfbbc8bbe48d063b799cb9fe4294a 100644 GIT binary patch delta 55459 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 A)Bpeg delta 55352 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 `gRoush=pYUGN`{aE;RrHEW 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

X`d2&9Qa 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index e92ebe16..128b877b 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -2814,8 +2814,6 @@ if (typeof console !== 'undefined') { var color = new fabric.Color(attributes[attr]); attributes[attr] = color.setAlpha(toFixed(color.getAlpha() * attributes[colorAttributes[attr]], 2)).toRgba(); - - delete attributes[colorAttributes[attr]]; } return attributes; } @@ -3051,28 +3049,67 @@ if (typeof console !== 'undefined') { * @private */ function getGlobalStylesForElement(element) { - var nodeName = element.nodeName, - className = element.getAttribute('class'), - id = element.getAttribute('id'), - styles = { }; - + var styles = { }; + for (var rule in fabric.cssRules) { - var ruleMatchesElement = (className && new RegExp('^\\.' + className).test(rule)) || - (id && new RegExp('^#' + id).test(rule)) || - (new RegExp('^' + nodeName).test(rule)); - - if (ruleMatchesElement) { + if (elementMatchesRule(element, rule.split(' '))) { for (var property in fabric.cssRules[rule]) { - var attr = normalizeAttr(property), - value = normalizeValue(attr, fabric.cssRules[rule][property]); - styles[attr] = value; + styles[property] = fabric.cssRules[rule][property]; } } } - return styles; } + /** + * @private + */ + function elementMatchesRule(element, selectors) { + var firstMatching, parentMatching = true; + //start from rightmost selector. + firstMatching = selectorMatches(element, selectors.pop()); + if (firstMatching && selectors.length) { + parentMatching = doesSomeParentMatch(element, selectors); + } + return firstMatching && parentMatching && (selectors.length === 0); + } + + function doesSomeParentMatch(element, selectors) { + var selector, parentMatching = true; + while (element.parentNode && element.parentNode.nodeType === 1 && selectors.length) { + if (parentMatching) { + selector = selectors.pop(); + } + element = element.parentNode; + parentMatching = selectorMatches(element, selector); + } + return selectors.length === 0; + } + /** + * @private + */ + function selectorMatches(element, selector) { + var nodeName = element.nodeName, + classNames = element.getAttribute('class'), + id = element.getAttribute('id'), matcher; + // i check if a selector matches slicing away part from it. + // if i get empty string i should match + matcher = new RegExp('^' + nodeName, 'i'); + selector = selector.replace(matcher, ''); + if (id && selector.length) { + matcher = new RegExp('#' + id + '(?![a-zA-Z\\-]+)', 'i'); + selector = selector.replace(matcher, ''); + } + if (classNames && selector.length) { + classNames = classNames.split(' '); + for (var i = classNames.length; i--;) { + matcher = new RegExp('\\.' + classNames[i] + '(?![a-zA-Z\\-]+)', 'i'); + selector = selector.replace(matcher, ''); + } + } + return selector.length === 0; + } + /** * @private */ @@ -3462,8 +3499,7 @@ if (typeof console !== 'undefined') { */ getCSSRules: function(doc) { var styles = doc.getElementsByTagName('style'), - allRules = { }, - rules; + allRules = { }, rules; // very crude parsing of style contents for (var i = 0, len = styles.length; i < len; i++) { @@ -3476,25 +3512,23 @@ if (typeof console !== 'undefined') { rules = rules.map(function(rule) { return rule.trim(); }); rules.forEach(function(rule) { - var match = rule.match(/([\s\S]*?)\s*\{([^}]*)\}/); - rule = match[1]; - var declaration = match[2].trim(), - propertyValuePairs = declaration.replace(/;$/, '').split(/\s*;\s*/); - if (!allRules[rule]) { - allRules[rule] = { }; - } + var match = rule.match(/([\s\S]*?)\s*\{([^}]*)\}/), + ruleObj = { }, declaration = match[2].trim(), + propertyValuePairs = declaration.replace(/;$/, '').split(/\s*;\s*/); for (var i = 0, len = propertyValuePairs.length; i < len; i++) { var pair = propertyValuePairs[i].split(/\s*:\s*/), - property = pair[0], - value = pair[1]; - - allRules[rule][property] = value; + property = normalizeAttr(pair[0]), + value = normalizeValue(property,pair[1],pair[0]); + ruleObj[property] = value; } + rule = match[1]; + rule.split(',').forEach(function(_rule) { + allRules[_rule.trim()] = fabric.util.object.clone(ruleObj); + }); }); } - return allRules; }, @@ -7154,8 +7188,8 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype } // set path origin coordinates based on our bounding box - var originLeft = this.box.minx + (this.box.maxx - this.box.minx) / 2, - originTop = this.box.miny + (this.box.maxy - this.box.miny) / 2; + var originLeft = this.box.minX + (this.box.maxX - this.box.minX) / 2, + originTop = this.box.minY + (this.box.maxY - this.box.minY) / 2; this.canvas.contextTop.arc(originLeft, originTop, 3, 0, Math.PI * 2, false); @@ -12746,15 +12780,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot if (this.hasRotatingPoint && this.isControlVisible('mtr') && !this.get('lockRotation') && this.hasControls) { - var rotateHeight = ( - this.flipY - ? height + (padding * 2) - : -height - (padding * 2) - ) / 2; + var rotateHeight = ( -height - (padding * 2)) / 2; ctx.beginPath(); ctx.moveTo(0, rotateHeight); - ctx.lineTo(0, rotateHeight + (this.flipY ? this.rotatingPointOffset : -this.rotatingPointOffset)); + ctx.lineTo(0, rotateHeight - this.rotatingPointOffset); ctx.closePath(); ctx.stroke(); } @@ -12865,9 +12895,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot if (this.hasRotatingPoint) { this._drawControl('mtr', ctx, methodName, left + width/2 - scaleOffset, - this.flipY - ? (top + height + this.rotatingPointOffset - this.cornerSize/2 + padding) - : (top - this.rotatingPointOffset - this.cornerSize/2 - padding)); + top - this.rotatingPointOffset - this.cornerSize/2 - padding); } ctx.restore(); @@ -13552,8 +13580,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot initialize: function(options) { options = options || { }; - this.set('radius', options.radius || 0); this.callSuper('initialize', options); + this.set('radius', options.radius || 0); }, /** @@ -18499,8 +18527,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag _renderText: function(ctx, textLines) { ctx.save(); this._setShadow(ctx); + this._setupFillRule(ctx); this._renderTextFill(ctx, textLines); this._renderTextStroke(ctx, textLines); + this._restoreFillRule(ctx); this._removeShadow(ctx); ctx.restore(); }, @@ -21507,7 +21537,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot * @param {Event} e Event object */ onKeyPress: function(e) { - if (!this.isEditing || e.metaKey || e.ctrlKey || e.keyCode === 8 || e.keyCode === 13) { + if (!this.isEditing || e.metaKey || e.ctrlKey || e.keyCode in this._keysMap) { return; }