From d98aa8d0e764c5eb1412f7d97de9dfffb4c50e5a Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 13 Jan 2015 12:53:43 +0100 Subject: [PATCH] Update date and dependencies --- HEADER.js | 2 +- LICENSE | 2 +- README.md | 2 +- dist/fabric.js | 149 ++++++++++++++++++++++++----------------- dist/fabric.min.js | 16 ++--- dist/fabric.min.js.gz | Bin 60801 -> 60731 bytes dist/fabric.require.js | 149 ++++++++++++++++++++++++----------------- package.json | 2 +- 8 files changed, 190 insertions(+), 132 deletions(-) diff --git a/HEADER.js b/HEADER.js index 24a98105..32a5c94b 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,4 +1,4 @@ -/*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ +/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ var fabric = fabric || { version: "1.4.13" }; if (typeof exports !== 'undefined') { diff --git a/LICENSE b/LICENSE index efa45ab9..adb89c4a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2008-2014 Printio (Juriy Zaytsev, Maxim Chernyak) +Copyright (c) 2008-2015 Printio (Juriy Zaytsev, Maxim Chernyak) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 79d10c21..af928550 100644 --- a/README.md +++ b/README.md @@ -259,7 +259,7 @@ Get help in Fabric's IRC channel — irc://irc.freenode.net/#fabric.js ### MIT License -Copyright (c) 2008-2014 Printio (Juriy Zaytsev, Maxim Chernyak) +Copyright (c) 2008-2015 Printio (Juriy Zaytsev, Maxim Chernyak) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/dist/fabric.js b/dist/fabric.js index 36f2d373..6502b2fb 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,5 +1,5 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ -/*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ +/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ var fabric = fabric || { version: "1.4.13" }; if (typeof exports !== 'undefined') { @@ -9,6 +9,8 @@ if (typeof exports !== 'undefined') { if (typeof document !== 'undefined' && typeof window !== 'undefined') { fabric.document = document; fabric.window = window; + // ensure globality even if entire library were function wrapped (as in Meteor.js packaging system) + window.fabric = fabric; } else { // assume we're running under node.js when document/window are not present @@ -9116,12 +9118,12 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab addListener(this.upperCanvasEl, 'touchstart', this._onMouseDown); addListener(this.upperCanvasEl, 'touchmove', this._onMouseMove); - if (typeof Event !== 'undefined' && 'add' in Event) { - Event.add(this.upperCanvasEl, 'gesture', this._onGesture); - Event.add(this.upperCanvasEl, 'drag', this._onDrag); - Event.add(this.upperCanvasEl, 'orientation', this._onOrientationChange); - Event.add(this.upperCanvasEl, 'shake', this._onShake); - Event.add(this.upperCanvasEl, 'longpress', this._onLongPress); + if (typeof eventjs !== 'undefined' && 'add' in eventjs) { + eventjs.add(this.upperCanvasEl, 'gesture', this._onGesture); + eventjs.add(this.upperCanvasEl, 'drag', this._onDrag); + eventjs.add(this.upperCanvasEl, 'orientation', this._onOrientationChange); + eventjs.add(this.upperCanvasEl, 'shake', this._onShake); + eventjs.add(this.upperCanvasEl, 'longpress', this._onLongPress); } }, @@ -9154,12 +9156,12 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab removeListener(this.upperCanvasEl, 'touchstart', this._onMouseDown); removeListener(this.upperCanvasEl, 'touchmove', this._onMouseMove); - if (typeof Event !== 'undefined' && 'remove' in Event) { - Event.remove(this.upperCanvasEl, 'gesture', this._onGesture); - Event.remove(this.upperCanvasEl, 'drag', this._onDrag); - Event.remove(this.upperCanvasEl, 'orientation', this._onOrientationChange); - Event.remove(this.upperCanvasEl, 'shake', this._onShake); - Event.remove(this.upperCanvasEl, 'longpress', this._onLongPress); + if (typeof eventjs !== 'undefined' && 'remove' in eventjs) { + eventjs.remove(this.upperCanvasEl, 'gesture', this._onGesture); + eventjs.remove(this.upperCanvasEl, 'drag', this._onDrag); + eventjs.remove(this.upperCanvasEl, 'orientation', this._onOrientationChange); + eventjs.remove(this.upperCanvasEl, 'shake', this._onShake); + eventjs.remove(this.upperCanvasEl, 'longpress', this._onLongPress); } }, @@ -11648,7 +11650,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati el.height = boundingRect.height; fabric.util.wrapElement(el, 'div'); - var canvas = new fabric.Canvas(el); + var canvas = new fabric.StaticCanvas(el); // to avoid common confusion https://github.com/kangax/fabric.js/issues/806 if (options.format === 'jpg') { @@ -15360,8 +15362,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot controlY = 0, // current control point y tempX, tempY, - tempControlX, - tempControlY, l = -this.pathOffset.x, t = -this.pathOffset.y; @@ -15464,9 +15464,17 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot tempX = x + current[3]; tempY = y + current[4]; - // calculate reflection of previous control points - controlX = controlX ? (2 * x - controlX) : x; - controlY = controlY ? (2 * y - controlY) : y; + if (previous[0].match(/[CcSs]/) === null) { + // If there is no previous command or if the previous command was not a C, c, S, or s, + // the control point is coincident with the current point + controlX = x; + controlY = y; + } + else { + // calculate reflection of previous control points + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; + } ctx.bezierCurveTo( controlX + l, @@ -15490,9 +15498,17 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot case 'S': // shorthand cubic bezierCurveTo, absolute tempX = current[3]; tempY = current[4]; - // calculate reflection of previous control points - controlX = 2 * x - controlX; - controlY = 2 * y - controlY; + if (previous[0].match(/[CcSs]/) === null) { + // If there is no previous command or if the previous command was not a C, c, S, or s, + // the control point is coincident with the current point + controlX = x; + controlY = y; + } + else { + // calculate reflection of previous control points + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; + } ctx.bezierCurveTo( controlX + l, controlY + t, @@ -15559,20 +15575,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot controlX = x; controlY = y; } - else if (previous[0] === 't') { - // calculate reflection of previous control points for t - controlX = 2 * x - tempControlX; - controlY = 2 * y - tempControlY; - } - else if (previous[0] === 'q') { - // calculate reflection of previous control points for q + else { + // calculate reflection of previous control point controlX = 2 * x - controlX; controlY = 2 * y - controlY; } - tempControlX = controlX; - tempControlY = controlY; - ctx.quadraticCurveTo( controlX + l, controlY + t, @@ -15581,17 +15589,24 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ); x = tempX; y = tempY; - controlX = x + current[1]; - controlY = y + current[2]; + break; case 'T': tempX = current[1]; tempY = current[2]; - // calculate reflection of previous control points - controlX = 2 * x - controlX; - controlY = 2 * y - controlY; + if (previous[0].match(/[QqTt]/) === null) { + // If there is no previous command or if the previous command was not a Q, q, T or t, + // assume the control point is coincident with the current point + controlX = x; + controlY = y; + } + else { + // calculate reflection of previous control point + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; + } ctx.quadraticCurveTo( controlX + l, controlY + t, @@ -15829,8 +15844,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot controlY = 0, // current control point y tempX, tempY, - tempControlX, - tempControlY, bounds; for (var i = 0, len = this.path.length; i < len; ++i) { @@ -15925,9 +15938,17 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot tempX = x + current[3]; tempY = y + current[4]; - // calculate reflection of previous control points - controlX = controlX ? (2 * x - controlX) : x; - controlY = controlY ? (2 * y - controlY) : y; + if (previous[0].match(/[CcSs]/) === null) { + // If there is no previous command or if the previous command was not a C, c, S, or s, + // the control point is coincident with the current point + controlX = x; + controlY = y; + } + else { + // calculate reflection of previous control points + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; + } bounds = fabric.util.getBoundsOfCurve(x, y, controlX, @@ -15950,9 +15971,17 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot case 'S': // shorthand cubic bezierCurveTo, absolute tempX = current[3]; tempY = current[4]; - // calculate reflection of previous control points - controlX = 2 * x - controlX; - controlY = 2 * y - controlY; + if (previous[0].match(/[CcSs]/) === null) { + // If there is no previous command or if the previous command was not a C, c, S, or s, + // the control point is coincident with the current point + controlX = x; + controlY = y; + } + else { + // calculate reflection of previous control points + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; + } bounds = fabric.util.getBoundsOfCurve(x, y, controlX, controlY, @@ -16014,20 +16043,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot controlX = x; controlY = y; } - else if (previous[0] === 't') { - // calculate reflection of previous control points for t - controlX = 2 * x - tempControlX; - controlY = 2 * y - tempControlY; - } - else if (previous[0] === 'q') { - // calculate reflection of previous control points for q + else { + // calculate reflection of previous control point controlX = 2 * x - controlX; controlY = 2 * y - controlY; } - tempControlX = controlX; - tempControlY = controlY; - bounds = fabric.util.getBoundsOfCurve(x, y, controlX, controlY, @@ -16038,16 +16059,24 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ); x = tempX; y = tempY; - controlX = x + current[1]; - controlY = y + current[2]; + break; case 'T': tempX = current[1]; tempY = current[2]; - // calculate reflection of previous control points - controlX = 2 * x - controlX; - controlY = 2 * y - controlY; + + if (previous[0].match(/[QqTt]/) === null) { + // If there is no previous command or if the previous command was not a Q, q, T or t, + // assume the control point is coincident with the current point + controlX = x; + controlY = y; + } + else { + // calculate reflection of previous control point + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; + } bounds = fabric.util.getBoundsOfCurve(x, y, controlX, controlY, diff --git a/dist/fabric.min.js b/dist/fabric.min.js index dbcd34b8..00a17219 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,8 +1,8 @@ -/* 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.13"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=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,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",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,t){var n=/\D{0,2}$/.exec(e),r=parseFloat(e);t||(t=fabric.Text.DEFAULT_SVG_FONT_SIZE);switch(n[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*t;default:return r}},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]},isTransparent:function(e,t,n,r){r>0&&(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?_-=2*h:f===1&&_<0&&(_+=2*h);var D=Math.ceil(Math.abs(_/h*2)),P=[],H=_/D,B=8/3*Math.sin(H/4)*Math.sin(H/4)/Math.sin(H/2),j=M+H;for(var F=0;F=i?s-i:2*Math.PI-(i-s)}function u(e,t,i,s,o,u,a,f){var l=r.call(arguments);if(n[l])return n[l];var c=Math.sqrt,h=Math.min,p=Math.max,d=Math.abs,v=[],m=[[],[]],g,y,b,w,E,S,x,T;y=6*e-12*i+6*o,g=-3*e+9*i-9*o+3*a,b=3*i-3*e;for(var N=0;N<2;++N){N>0&&(y=6*t-12*s+6*u,g=-3*t+9*s-9*u+3*f,b=3*s-3*t);if(d(g)<1e-12){if(d(y)<1e-12)continue;w=-b/y,0=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.nodeType===1&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e.nodeType===1&&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){var n=fabric.document.defaultView.getComputedStyle(e,null);return n?n[t]:undefined}: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"&&typeof console[e].apply=="function"&&(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 eu?u:o;if(o===1&&u===1&&a===0&&f===0)return;h="matrix("+o+" 0"+" 0 "+u+" "+a*o+" "+f*u+")";if(e.tagName==="svg"){p=e.ownerDocument.createElement("g");while(e.firstChild!=null)p.appendChild(e.firstChild);e.appendChild(p)}else p=e,h+=p.getAttribute("transform");p.setAttribute("transform",h)}function S(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 x(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.cssRules={},t.gradientDefs={},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,n){e[2]=Math.tan(t.util.degreesToRadians(n[0]))}function i(e,n){e[1]=Math.tan(t.util.degreesToRadians(n[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=t.reNum,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 r(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName)&&!e.getAttribute("instantiated_by_use"))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n=/^(symbol|image|marker|pattern|view)$/;return function(s,u,a){if(!s)return;b(s);var f=new Date,l=t.Object.__uid++,c=o(s.getAttribute("width")||"100%"),h=o(s.getAttribute("height")||"100%");w(s,c,h);var p=t.util.toArray(s.getElementsByTagName("*"));if(p.length===0&&t.isLikelyNode){p=s.selectNodes('//*[name(.)!="svg"]');var d=[];for(var v=0,m=p.length;v/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){E.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),E.has(e,function(r){r?E.get(e,function(e){var t=S(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 x(t,e,"backgroundColor"),x(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,this.svgUid=n&&n.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var 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+(n1?1:n;if(t){var o=t.split(/\s*;\s*/);o[o.length-1]===""&&o.pop();for(var u=o.length;u--;){var a=o[u].split(/\s*:\s*/),f=a[0].trim(),l=a[1].trim();f==="stop-color"?r=l:f==="stop-opacity"&&(s=l)}}return r||(r=e.getAttribute("stop-color")||"rgb(0,0,0)"),s||(s=e.getAttribute("stop-opacity")),r=new fabric.Color(r),i=r.getAlpha(),s=isNaN(parseFloat(s))?1:parseFloat(s),s*=i,{offset:n,color:r.toRgb(),opacity:s}}function t(e){return{x1:e.getAttribute("x1")||0,y1:e.getAttribute("y1")||0,x2:e.getAttribute("x2")||"100%",y2:e.getAttribute("y2")||0}}function n(e){return{x1:e.getAttribute("fx")||e.getAttribute("cx")||"50%",y1:e.getAttribute("fy")||e.getAttribute("cy")||"50%",r1:0,x2:e.getAttribute("cx")||"50%",y2:e.getAttribute("cy")||"50%",r2:e.getAttribute("r")||"50%"}}function r(e,t,n){var r,i=0,s=1,o="";for(var u in t){r=parseFloat(t[u],10),typeof t[u]=="string"&&/^\d+%$/.test(t[u])?s=.01:s=1;if(u==="x1"||u==="x2"||u==="r2")s*=n==="objectBoundingBox"?e.width:1,i=n==="objectBoundingBox"?e.left||0:0;else if(u==="y1"||u==="y2")s*=n==="objectBoundingBox"?e.height:1,i=n==="objectBoundingBox"?e.top||0:0;t[u]=r*s+i}if(e.type==="ellipse"&&t.r2!==null&&n==="objectBoundingBox"&&e.rx!==e.ry){var a=e.ry/e.rx;o=" scale(1, "+a+")",t.y1&&(t.y1/=a),t.y2&&(t.y2/=a)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(e){e||(e={});var t={};this.id=fabric.Object.__uid++,this.type=e.type||"linear",t={x1:e.coords.x1||0,y1:e.coords.y1||0,x2:e.coords.x2||0,y2:e.coords.y2||0},this.type==="radial"&&(t.r1=e.coords.r1||0,t.r2=e.coords.r2||0),this.coords=t,this.colorStops=e.colorStops.slice(),e.gradientTransform&&(this.gradientTransform=e.gradientTransform),this.offsetX=e.offsetX||this.offsetX,this.offsetY=e.offsetY||this.offsetY},addColorStop:function(e){for(var t in e){var n=new fabric.Color(e[t]);this.colorStops.push({offset:t,color:n.toRgb(),opacity:n.getAlpha()})}return this},toObject:function(){return{type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(e){var t=fabric.util.object.clone(this.coords),n,r;this.colorStops.sort(function(e,t){return e.offset-t.offset});if(!e.group||e.group.type!=="path-group")for(var i in t)if(i==="x1"||i==="x2"||i==="r2")t[i]+=this.offsetX-e.width/2;else if(i==="y1"||i==="y2")t[i]+=this.offsetY-e.height/2;r='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(r+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),this.type==="linear"?n=["\n']:this.type==="radial"&&(n=["\n']);for(var s=0;s\n');return n.push(this.type==="linear"?"\n":"\n"),n.join("")},toLive:function(e,t){var n,r=fabric.util.object.clone(this.coords);if(!this.type)return;if(t.group&&t.group.type==="path-group")for(var i in r)if(i==="x1"||i==="x2")r[i]+=-this.offsetX+t.width/2;else if(i==="y1"||i==="y2")r[i]+=-this.offsetY+t.height/2;this.type==="linear"?n=e.createLinearGradient(r.x1,r.y1,r.x2,r.y2):this.type==="radial"&&(n=e.createRadialGradient(r.x1,r.y1,r.r1,r.x2,r.y2,r.r2));for(var s=0,o=this.colorStops.length;s\n'+'\n'+"\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",n=40,r=40;return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),e.width&&e.height&&(n=Math.abs(this.offsetX/e.getWidth())*100+20,r=Math.abs(this.offsetY/e.getHeight())*100+20),'\n"+' \n'+' \n'+" \n"+" \n"+' \n'+" \n"+"\n"},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,preserveObjectStacking:!1,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,r&&r.crossOrigin):(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,t){return this.setDimensions({width:e},t)},setHeight:function(e,t){return this.setDimensions({height:e},t)},setDimensions:function(e,t){var n;t=t||{};for(var r in e)n=e[r],t.cssOnly||(this._setBackstoreDimension(r,e[r]),n+="px"),t.backstoreOnly||this._setCssDimension(r,n);return t.cssOnly||this.renderAll(),this.calcOffset(),this},_setBackstoreDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.upperCanvasEl&&(this.upperCanvasEl[e]=t),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this[e]=t,this},_setCssDimension:function(e,t){return this.lowerCanvasEl.style[e]=t,this.upperCanvasEl&&(this.upperCanvasEl.style[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t),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){var n,r,i;t.viewBox?(n=t.viewBox.width,r=t.viewBox.height):(n=this.width,r=this.height,this.svgViewportTransformation||(i=this.viewportTransform,n/=i[0],r/=i[3])),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(){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%360},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=s.width||0,u=s.height||0,a;if(!o||!u)"top"in s&&"bottom"in s&&(u=Math.abs(s.top-s.bottom)),"right"in s&&"left"in s&&(o=Math.abs(s.right-s.left));return this.calcOffset(),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))),o===0||u===0?a={width:1,height:1}:a={width:r.width/o,height:r.height/u},{x:i.x*a.width,y:i.y*a.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)return;var r=this._groupSelector;r?(n=this.getPointer(e,!0),r.left=n.x-r.ex,r.top=n.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(e):(t=this.findTarget(e),!t||t&&!t.selectable?this.setCursor(this.defaultCursor):this._setCursorFromEvent(e,t)),this.fire("mouse:move",{target:t,e:e}),t&&t.fire("mousemove",{e:e})},_transformObject:function(e){var t=this.getPointer(e),n=this._currentTransform;n.reset=!1,n.target.isMoving=!0,this._beforeScaleTransform(e,n),this._performTransformAction(e,n,t),this.renderAll()},_performTransformAction:function(e,t,n){var r=n.x,i=n.y,s=t.target,o=t.action;o==="rotate"?(this._rotateObject(r,i),this._fire("rotating",s,e)):o==="scale"?(this._onScale(e,t,r,i),this._fire("scaling",s,e)):o==="scaleX"?(this._scaleObject(r,i,"x"),this._fire("scaling",s,e)):o==="scaleY"?(this._scaleObject(r,i,"y"),this._fire("scaling",s,e)):(this._translateObject(r,i),this._fire("moving",s,e),this.setCursor(this.moveCursor))},_fire:function(e,t,n){this.fire("object:"+e,{target:t,e:n}),t.fire(e,{e:n})},_beforeScaleTransform:function(e,t){if(t.action==="scale"||t.action==="scaleX"||t.action==="scaleY"){var n=this._shouldCenterTransform(e,t.target);if(n&&(t.originX!=="center"||t.originY!=="center")||!n&&t.originX==="center"&&t.originY==="center")this._resetCurrentTransform(e),t.reset=!0}},_onScale:function(e,t,n,r){(e.shiftKey||this.uniScaleTransform)&&!t.target.get("lockUniScaling")?(t.currentAction="scale",this._scaleObject(n,r)):(!t.reset&&t.currentAction==="scale"&&this._resetCurrentTransform(e,t.target),t.currentAction="scaleEqually",this._scaleObject(n,r,"equally"))},_setCursorFromEvent:function(e,t){if(!t||!t.selectable)return this.setCursor(this.defaultCursor),!1;var n=this.getActiveGroup(),r=t._findTargetCorner&&(!n||!n.contains(t))&&t._findTargetCorner(this.getPointer(e,!0));return r?this._setCornerCursor(r,t):this.setCursor(t.hoverCursor||this.hoverCursor),!0},_setCornerCursor:function(t,n){if(t in e)this.setCursor(this._getRotatedCornerCursor(t,n));else{if(t!=="mtr"||!n.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(t,n){var r=Math.round(n.getAngle()%360/45);return r<0&&(r+=8),r+=e[t],r%=8,this.cursorMap[r]}})}(),function(){var e=Math.min,t=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(e,t){var n=this.getActiveObject();return e.shiftKey&&(this.getActiveGroup()||n&&n!==t)&&this.selection},_handleGrouping:function(e,t){if(t===this.getActiveGroup()){t=this.findTarget(e,!0);if(!t||t.isType("group"))return}this.getActiveGroup()?this._updateActiveGroup(t,e):this._createActiveGroup(t,e),this._activeGroup&&this._activeGroup.saveCoords()},_updateActiveGroup:function(e,t){var n=this.getActiveGroup();if(n.contains(e)){n.removeWithUpdate(e),this._resetObjectTransform(n),e.set("active",!1);if(n.size()===1){this.discardActiveGroup(t),this.setActiveObject(n.item(0));return}}else n.addWithUpdate(e),this._resetObjectTransform(n);this.fire("selection:created",{target:n,e:t}),n.set("active",!0)},_createActiveGroup:function(e,t){if(this._activeObject&&e!==this._activeObject){var n=this._createGroup(e);n.addWithUpdate(),this.setActiveGroup(n),this._activeObject=null,this.fire("selection:created",{target:n,e:t})}e.set("active",!0)},_createGroup:function(e){var t=this.getObjects(),n=t.indexOf(this._activeObject)1&&(t=new fabric.Group(t.reverse(),{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:"nonzero",globalCompositeOperation:"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,lockScalingFlip:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor".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);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,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation};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._setupCompositeOperation(e),n||this.transform(e),this._setStrokeStyles(e),this._setFillStyles(e),this.group&&this.group.type==="path-group"&&e.translate(-this.group.width/2,-this.group.height/2),this.transformMatrix&&e.transform.apply(e,this.transformMatrix),this._setOpacity(e),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreCompositeOperation(e),e.restore()},_setOpacity:function(e){this.group&&this.group._setOpacity(e),e.globalAlpha*=this.opacity},_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):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e,this):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;var t=this.canvas&&this.canvas._currentMultiplier||1;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur*t*(this.scaleX+this.scaleY)/2,e.shadowOffsetX=this.shadow.offsetX*t*this.scaleX,e.shadowOffsetY=this.shadow.offsetY*t*this.scaleY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;e.save();if(this.fill.gradientTransform){var t=this.fill.gradientTransform;e.transform.apply(e,t)}this.fill.toLive&&e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),this.fillRule==="evenodd"?e.fill("evenodd"):e.fill(),e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke||this.strokeWidth===0)return;e.save();if(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();else{if(this.stroke.gradientTransform){var t=this.stroke.gradientTransform;e.transform.apply(e,t)}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}},_setupCompositeOperation:function(e){this.globalCompositeOperation&&(this._prevGlobalCompositeOperation=e.globalCompositeOperation,e.globalCompositeOperation=this.globalCompositeOperation)},_restoreCompositeOperation:function(e){this.globalCompositeOperation&&this._prevGlobalCompositeOperation&&(e.globalCompositeOperation=this._prevGlobalCompositeOperation)}}),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)0?t:-t),d&&(u+=u>0?t:-t),o=s*this.scaleX+2*this.padding,a=u*this.scaleY+2*this.padding,o<0&&(o=Math.abs(o));var v=Math.sqrt(Math.pow(o/2,2)+Math.pow(a/2,2)),m=Math.atan(isFinite(a/o)?a/o:0),g=Math.cos(m+n)*v,y=Math.sin(m+n)*v,b=Math.sin(n),w=Math.cos(n),E=this.getCenterPoint(),S=new fabric.Point(o,a),x=new fabric.Point(E.x-g,E.y-y),T=new fabric.Point(x.x+S.x*w,x.y+S.x*b),N=new fabric.Point(x.x-S.y*b,x.y+S.y*w),C=new fabric.Point(x.x+S.x/2*w,x.y+S.x/2*b),k=i(x),L=i(T),A=i(new fabric.Point(T.x-S.y*b,T.y+S.y*w)),O=i(N),M=i(new fabric.Point(x.x-S.y/2*b,x.y+S.y/2*w)),_=i(C),D=i(new fabric.Point(T.x-S.y/2*b,T.y+S.y/2*w)),P=i(new fabric.Point(N.x+S.x/2*w,N.y+S.x/2*b)),H=i(new fabric.Point(C.x,C.y));return this.oCoords={tl:k,tr:L,br:A,bl:O,ml:M,mt:_,mr:D,mb:P,mtr:H},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.fillRule,n=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",r=this.strokeWidth?this.strokeWidth:"0",i=this.strokeDashArray?this.strokeDashArray.join(" "):"",s=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",u=this.strokeMiterLimit?this.strokeMiterLimit:"4",a=typeof this.opacity!="undefined"?this.opacity:"1",f=this.visible?"":" visibility: hidden;",l=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",n,"; ","stroke-width: ",r,"; ","stroke-dasharray: ",i,"; ","stroke-linecap: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",u,"; ","fill: ",e,"; ","fill-rule: ",t,"; ","opacity: ",a,";",l,f].join("")},getSvgTransform:function(){if(this.group&&this.group.type==="path-group")return"";var e=fabric.util.toFixed,t=this.getAngle(),n=!this.canvas||this.canvas.svgViewportTransformation?this.getViewportTransform():[1,0,0,1,0,0],r=fabric.util.transformPoint(this.getCenterPoint(),n),i=fabric.Object.NUM_FRACTION_DIGITS,s=this.type==="path-group"?"":"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.type==="path-group"?this.width*n[0]:0,f=this.flipX?" matrix(-1 0 0 1 "+a+" 0) ":"",l=this.type==="path-group"?this.height*n[3]:0,c=this.flipY?" matrix(1 0 0 -1 0 "+l+")":"";return[s,o,u,f,c].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.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,f=this.strokeLineCap==="round"||this.strokeLineCap==="square",l=this.type==="line"&&this.width===0,c=this.type==="line"&&this.height===0,h=l||c,p=f&&c||!h,d=f&&l||!h;l?o=a/i:c&&(u=a/s),p&&(o+=a/i),d&&(u+=a/s);var v=fabric.util.transformPoint(new fabric.Point(o,u),r,!0),m=v.x,g=v.y;this.group&&(m*=this.group.scaleX,g*=this.group.scaleY),e.strokeRect(~~(-(m/2)-t)-.5,~~(-(g/2)-t)-.5,~~(m+n)+1,~~(g+n)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var y=(-g-t*2)/2;e.beginPath(),e.moveTo(0,y),e.lineTo(0,y-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,s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===0,f=this.type==="line"&&this.height===0,l=a||f,c=u&&f||!l,h=u&&a||!l;a?s=i:f&&(o=i),c&&(s+=i),h&&(o+=i),s*=this.scaleX,o*=this.scaleY;var p=fabric.util.transformPoint(new fabric.Point(s,o),r,!0),d=p.x,v=p.y,m=-(d/2),g=-(v/2),y=this.padding,b=n,w=n-t,E=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,E,m-b-y,g-b-y),this._drawControl("tr",e,E,m+d-b+y,g-b-y),this._drawControl("bl",e,E,m-b-y,g+v+w+y),this._drawControl("br",e,E,m+d+w+y,g+v+w+y),this.get("lockUniScaling")||(this._drawControl("mt",e,E,m+d/2-b,g-b-y),this._drawControl("mb",e,E,m+d/2-b,g+v+w+y),this._drawControl("mr",e,E,m+d+w+y,g+v/2-b),this._drawControl("ml",e,E,m-b-y,g+v/2-b)),this.hasRotatingPoint&&this._drawControl("mtr",e,E,m+d/2-b,g-this.rotatingPointOffset-this.cornerSize/2-y),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\n'),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,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,startAngle:0,endAngle:n*2,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("radius",e.radius||0),this.startAngle=e.startAngle||this.startAngle,this.endAngle=e.endAngle||this.endAngle},_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"),startAngle:this.startAngle,endAngle:this.endAngle})},toSVG:function(e){var t=this._createBaseSVGMarkup(),r=0,i=0,s=(this.endAngle-this.startAngle)%(2*n);if(s===0)this.group&&this.group.type==="path-group"&&(r=this.left+this.radius,i=this.top+this.radius),t.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,u=Math.sin(this.startAngle)*this.radius,a=Math.cos(this.endAngle)*this.radius,f=Math.sin(this.endAngle)*this.radius,l=s>n?"1":"0";t.push('\n')}return e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.arc(t?this.left+this.radius:0,t?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new t.Circle(r(s,n));return o.left-=o.radius,o.top-=o.radius,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)},_set:function(e,t){this.callSuper("_set",e,t);switch(e){case"rx":this.rx=t,this.set("width",t*2);break;case"ry":this.ry=t,this.set("height",t*2)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=0,r=0;return this.group&&this.group.type==="path-group"&&(n=this.left+this.rx,r=this.top+this.ry),t.push("\n'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.save(),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left+this.rx:0,t?(this.top+this.ry)*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);i.left=i.left||0,i.top=i.top||0;var s=new t.Ellipse(r(i,n));return s.top-=s.ry,s.left-=s.rx,s},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";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,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e,t){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var n=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,i=this.width,s=this.height,o=t?this.left:-this.width/2,u=t?this.top:-this.height/2,a=n!==0||r!==0,f=.4477152502;e.beginPath(),e.moveTo(o+n,u),e.lineTo(o+i-n,u),a&&e.bezierCurveTo(o+i-f*n,u,o+i,u+f*r,o+i,u+r),e.lineTo(o+i,u+s-r),a&&e.bezierCurveTo(o+i,u+s-f*r,o+i-f*n,u+s,o+i-n,u+s),e.lineTo(o+n,u+s),a&&e.bezierCurveTo(o+f*n,u+s,o,u+s-f*r,o,u+s-r),e.lineTo(o,u+r),a&&e.bezierCurveTo(o,u+f*r,o+f*n,u,o+n,u),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()},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.left,r=this.top;if(!this.group||this.group.type!=="path-group")n=-this.width/2,r=-this.height/2;return t.push("\n'),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;r=r||{};var i=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);return i.left=i.left||0,i.top=i.top||0,new t.Rect(n(r?t.util.object.clone(r):{},i))},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={});if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,minX:0,minY:0,initialize:function(e,n){return t.Polygon.prototype.initialize.call(this,e,n)},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},_applyPointOffset:function(){return t.Polygon.prototype._applyPointOffset.call(this)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){return t.Polygon.prototype.toSVG.call(this,e)},_render:function(e){t.Polygon.prototype.commonRender.call(this,e),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n,r;e.beginPath();for(var i=0,s=this.points.length;i\n'),e?e(n.join("")):n.join("")},_render:function(e){this.commonRender(e),this._renderFill(e);if(this.stroke||this.strokeDashArray)e.closePath(),this._renderStroke(e)},commonRender:function(e){var t;e.beginPath(),this._applyPointOffset&&((!this.group||this.group.type!=="path-group")&&this._applyPointOffset(),this._applyPointOffset=null),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(),r="";for(var i=0,s=this.path.length;i\n"),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\n"];for(var i=0,s=t.length;i\n"),e?e(r.join("")):r.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 n=this._objects.length;n--;)this._objects[n].group=this;this.originalState={},this.callSuper("initialize"),t.originX&&(this.originX=t.originX),t.originY&&(this.originY=t.originY),this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",t),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop(),r=this.getCenterPoint();e.set({originalLeft:t,originalTop:n,left:t-r.x,top:n-r.y}),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;while(n--)this._objects[n].set(e,t)}this.callSuper("_set",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\n'];for(var n=0,r=this._objects.length;n\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\n','\n");if(this.stroke||this.strokeDashArray){var s=this.fill;this.fill=null,t.push("\n'),this.fill=s}return t.push("\n"),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},setSrc:function(e,t,n){fabric.util.loadImage(e,function(e){return this.setElement(e,t,n)},this,n&&n.crossOrigin)},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e,t,n,r){t=t||this.filters,n=n||this._originalElement;if(!n)return;var i=n,s=fabric.util.createCanvasElement(),o=fabric.util.createImage(),u=this;return s.width=i.width,s.height=i.height,s.getContext("2d").drawImage(i,0,0,i.width,i.height),t.length===0?(this._element=n,e&&e(),s):(t.forEach(function(e){e&&e.applyTo(s,e.scaleX||u.scaleX,e.scaleY||u.scaleY),!r&&e.type==="Resize"&&(u.width*=e.scaleX,u.height*=e.scaleY)}),o.width=s.width,o.height=s.height,fabric.isLikelyNode?(o.src=s.toBuffer(undefined,fabric.Image.pngCompression),u._element=o,!r&&(u._filteredEl=o),e&&e()):(o.onload=function(){u._element=o,!r&&(u._filteredEl=o),e&&e(),o.onload=s=i=null},o.src=s.toDataURL("image/png")),s)},_render:function(e,t){var n,r,i=this._findMargins(),s;n=t?this.left:-this.width/2,r=t?this.top:-this.height/2,this.meetOrSlice==="slice"&&(e.beginPath(),e.rect(n,r,this.width,this.height),e.clip()),this.isMoving===!1&&this.resizeFilters.length&&this._needsResize()?(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,s=this.applyFilters(null,this.resizeFilters,this._filteredEl||this._originalElement,!0)):s=this._element,s&&e.drawImage(s,n+i.marginX,r+i.marginY,i.width,i.height),this._renderStroke(e)},_needsResize:function(){return this.scaleX!==this._lastScaleX||this.scaleY!==this._lastScaleY},_findMargins:function(){var e=this.width,t=this.height,n,r,i=0,s=0;if(this.alignX!=="none"||this.alignY!=="none")n=[this.width/this._element.width,this.height/this._element.height],r=this.meetOrSlice==="meet"?Math.min.apply(null,n):Math.max.apply(null,n),e=this._element.width*r,t=this._element.height*r,this.alignX==="Mid"&&(i=(this.width-e)/2),this.alignX==="Max"&&(i=this.width-e),this.alignY==="Mid"&&(s=(this.height-t)/2),this.alignY==="Max"&&(s=this.height-t);return{width:e,height:t,marginX:i,marginY:s}},_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 preserveAspectRatio xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES),s="xMidYMid",o="meet",u,a,f;i.preserveAspectRatio&&(f=i.preserveAspectRatio.split(" ")),f&&f.length&&(o=f.pop(),o!=="meet"&&o!=="slice"?(s=o,o="meet"):f.length&&(s=f.pop())),u=s!=="none"?s.slice(1,4):"none",a=s!=="none"?s.slice(5,8):"none",i.alignX=u,i.alignY=a,i.meetOrSlice=o,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",initialize:function(e){e&&this.setOptions(e)},setOptions:function(e){for(var t in e)this[t]=e[t]},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)n&&(l=2,h=-1),u>i&&(c=2,p=-1),f=a.getImageData(0,0,n,i),e.width=o(s,n),e.height=o(u,i),a.putImageData(f,0,0);while(!d||!v)n=m,i=g,s*he)return 0;t*=Math.PI;if(s(t)<1e-16)return 1;var n=t/e;return a(t)*a(n)/t/n}}function h(e){var a,f,c,p,d,L,A,O,M,_,D;C.x=(e+.5)*b,k.x=r(C.x);for(a=0;a=t)continue;_=r(1e3*s(f-C.x)),N[_]||(N[_]={});for(var P=k.y-T;P<=k.y+T;P++){if(P<0||P>=o)continue;D=r(1e3*s(P-C.y)),N[_][D]||(N[_][D]=y(i(n(_*E,2)+n(D*S,2))/1e3)),c=N[_][D],c>0&&(p=(P*t+f)*4,d+=c,L+=c*m[p],A+=c*m[p+1],O+=c*m[p+2],M+=c*m[p+3])}}p=(a*u+e)*4,g[p]=L/d,g[p+1]=A/d,g[p+2]=O/d,g[p+3]=M/d}return++e1&&H<-1)continue;E=2*H*H*H-3*H*H+1,E>0&&(P=4*(D+A*t),k+=E*v[P+3],x+=E,v[P+3]<255&&(E=E*v[P+3]/250),T+=E*v[P],N+=E*v[P+1],C+=E*v[P+2],S+=E)}}g[w]=T/S,g[w+1]=N/S,g[w+2]=C/S,g[w+3]=k/x}return m}}),t.Image.filters.Resize.fromObject=function(){return new t.Image.filters.Resize}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.object.clone,i=t.util.toFixed,s=t.StaticCanvas.supports("setLineDash");if(t.Text){t.warn("fabric.Text is already defined");return}var o=t.Object.prototype.stateProperties.concat();o.push("fontFamily","fontWeight","fontSize","text","textDecoration","textAlign","fontStyle","lineHeight","textBackgroundColor","useNative","path"),t.Text=t.util.createClass(t.Object,{_dimensionAffectingProps:{fontSize:!0,fontWeight:!0,fontFamily:!0,textDecoration:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0},_reNewline:/\r?\n/,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textAlign:"left",fontStyle:"",lineHeight:1.3,textBackgroundColor:"",path:null,useNative:!0,stateProperties:o,stroke:null,shadow:null,initialize:function(e,t){t=t||{},this.text=e,this.__skipDimension=!0,this.setOptions(t),this.__skipDimension=!1,this._initDimensions()},_initDimensions:function(){if(this.__skipDimension)return;var e=t.util.createCanvasElement();this._render(e.getContext("2d"))},toString:function(){return"#'},_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._setOpacity(e),this._setShadow(e),this._setupCompositeOperation(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._restoreCompositeOperation(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(),t||this.transform(e);var n=this.group&&this.group.type==="path-group";n&&e.translate(-this.group.width/2,-this.group.height/2),this.transformMatrix&&e.transform.apply(e,this.transformMatrix),n&&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*this.lineHeight-.25*this.fontSize:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n+(this.group&&this.group.type==="path-group"?this.left:0),textTop:r+(this.group&&this.group.type==="path-group"?this.top:0),lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('\n',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"\n","\n")},_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("\n')},_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),n.top=n.top||0,n.left=n.left||0,"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"),n.top+=n.fontSize/4;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){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?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: fixed; bottom: 20px; left: 0px; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"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",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",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.stopImmediatePropagation(),e.preventDefault(),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)return;e.which!==0&&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||e.keyCode===34)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,this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},swapSelectionPoints:function(){var e=this.selectionEnd;this.selectionEnd=this.selectionStart,this.selectionStart=e},moveCursorDownWithShift:function(e){this.selectionEnd===this.selectionStart&&(this._selectionDirection="right");var t=this._selectionDirection==="right"?"selectionEnd":"selectionStart";this[t]+=e,this.selectionEndthis.text.length&&(this.selectionEnd=this.text.length),this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey||e.keyCode===33)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)),this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},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),this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},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,t){return origSetWidth.call(this,e,t),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,t){return origSetHeight.call(this,e,t),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-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.13"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(""),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=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,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",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,t){var n=/\D{0,2}$/.exec(e),r=parseFloat(e);t||(t=fabric.Text.DEFAULT_SVG_FONT_SIZE);switch(n[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*t;default:return r}},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]},isTransparent:function(e,t,n,r){r>0&&(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?_-=2*h:f===1&&_<0&&(_+=2*h);var D=Math.ceil(Math.abs(_/h*2)),P=[],H=_/D,B=8/3*Math.sin(H/4)*Math.sin(H/4)/Math.sin(H/2),j=M+H;for(var F=0;F=i?s-i:2*Math.PI-(i-s)}function u(e,t,i,s,o,u,a,f){var l=r.call(arguments);if(n[l])return n[l];var c=Math.sqrt,h=Math.min,p=Math.max,d=Math.abs,v=[],m=[[],[]],g,y,b,w,E,S,x,T;y=6*e-12*i+6*o,g=-3*e+9*i-9*o+3*a,b=3*i-3*e;for(var N=0;N<2;++N){N>0&&(y=6*t-12*s+6*u,g=-3*t+9*s-9*u+3*f,b=3*s-3*t);if(d(g)<1e-12){if(d(y)<1e-12)continue;w=-b/y,0=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.nodeType===1&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e.nodeType===1&&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){var n=fabric.document.defaultView.getComputedStyle(e,null);return n?n[t]:undefined}: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"&&typeof console[e].apply=="function"&&(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 eu?u:o;if(o===1&&u===1&&a===0&&f===0)return;h="matrix("+o+" 0"+" 0 "+u+" "+a*o+" "+f*u+")";if(e.tagName==="svg"){p=e.ownerDocument.createElement("g");while(e.firstChild!=null)p.appendChild(e.firstChild);e.appendChild(p)}else p=e,h+=p.getAttribute("transform");p.setAttribute("transform",h)}function S(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 x(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.cssRules={},t.gradientDefs={},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,n){e[2]=Math.tan(t.util.degreesToRadians(n[0]))}function i(e,n){e[1]=Math.tan(t.util.degreesToRadians(n[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=t.reNum,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 r(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName)&&!e.getAttribute("instantiated_by_use"))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n=/^(symbol|image|marker|pattern|view)$/;return function(s,u,a){if(!s)return;b(s);var f=new Date,l=t.Object.__uid++,c=o(s.getAttribute("width")||"100%"),h=o(s.getAttribute("height")||"100%");w(s,c,h);var p=t.util.toArray(s.getElementsByTagName("*"));if(p.length===0&&t.isLikelyNode){p=s.selectNodes('//*[name(.)!="svg"]');var d=[];for(var v=0,m=p.length;v/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){E.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),E.has(e,function(r){r?E.get(e,function(e){var t=S(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 x(t,e,"backgroundColor"),x(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,this.svgUid=n&&n.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var 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+(n1?1:n;if(t){var o=t.split(/\s*;\s*/);o[o.length-1]===""&&o.pop();for(var u=o.length;u--;){var a=o[u].split(/\s*:\s*/),f=a[0].trim(),l=a[1].trim();f==="stop-color"?r=l:f==="stop-opacity"&&(s=l)}}return r||(r=e.getAttribute("stop-color")||"rgb(0,0,0)"),s||(s=e.getAttribute("stop-opacity")),r=new fabric.Color(r),i=r.getAlpha(),s=isNaN(parseFloat(s))?1:parseFloat(s),s*=i,{offset:n,color:r.toRgb(),opacity:s}}function t(e){return{x1:e.getAttribute("x1")||0,y1:e.getAttribute("y1")||0,x2:e.getAttribute("x2")||"100%",y2:e.getAttribute("y2")||0}}function n(e){return{x1:e.getAttribute("fx")||e.getAttribute("cx")||"50%",y1:e.getAttribute("fy")||e.getAttribute("cy")||"50%",r1:0,x2:e.getAttribute("cx")||"50%",y2:e.getAttribute("cy")||"50%",r2:e.getAttribute("r")||"50%"}}function r(e,t,n){var r,i=0,s=1,o="";for(var u in t){r=parseFloat(t[u],10),typeof t[u]=="string"&&/^\d+%$/.test(t[u])?s=.01:s=1;if(u==="x1"||u==="x2"||u==="r2")s*=n==="objectBoundingBox"?e.width:1,i=n==="objectBoundingBox"?e.left||0:0;else if(u==="y1"||u==="y2")s*=n==="objectBoundingBox"?e.height:1,i=n==="objectBoundingBox"?e.top||0:0;t[u]=r*s+i}if(e.type==="ellipse"&&t.r2!==null&&n==="objectBoundingBox"&&e.rx!==e.ry){var a=e.ry/e.rx;o=" scale(1, "+a+")",t.y1&&(t.y1/=a),t.y2&&(t.y2/=a)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(e){e||(e={});var t={};this.id=fabric.Object.__uid++,this.type=e.type||"linear",t={x1:e.coords.x1||0,y1:e.coords.y1||0,x2:e.coords.x2||0,y2:e.coords.y2||0},this.type==="radial"&&(t.r1=e.coords.r1||0,t.r2=e.coords.r2||0),this.coords=t,this.colorStops=e.colorStops.slice(),e.gradientTransform&&(this.gradientTransform=e.gradientTransform),this.offsetX=e.offsetX||this.offsetX,this.offsetY=e.offsetY||this.offsetY},addColorStop:function(e){for(var t in e){var n=new fabric.Color(e[t]);this.colorStops.push({offset:t,color:n.toRgb(),opacity:n.getAlpha()})}return this},toObject:function(){return{type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(e){var t=fabric.util.object.clone(this.coords),n,r;this.colorStops.sort(function(e,t){return e.offset-t.offset});if(!e.group||e.group.type!=="path-group")for(var i in t)if(i==="x1"||i==="x2"||i==="r2")t[i]+=this.offsetX-e.width/2;else if(i==="y1"||i==="y2")t[i]+=this.offsetY-e.height/2;r='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(r+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),this.type==="linear"?n=["\n']:this.type==="radial"&&(n=["\n']);for(var s=0;s\n');return n.push(this.type==="linear"?"\n":"\n"),n.join("")},toLive:function(e,t){var n,r=fabric.util.object.clone(this.coords);if(!this.type)return;if(t.group&&t.group.type==="path-group")for(var i in r)if(i==="x1"||i==="x2")r[i]+=-this.offsetX+t.width/2;else if(i==="y1"||i==="y2")r[i]+=-this.offsetY+t.height/2;this.type==="linear"?n=e.createLinearGradient(r.x1,r.y1,r.x2,r.y2):this.type==="radial"&&(n=e.createRadialGradient(r.x1,r.y1,r.r1,r.x2,r.y2,r.r2));for(var s=0,o=this.colorStops.length;s\n'+'\n'+"\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",n=40,r=40;return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),e.width&&e.height&&(n=Math.abs(this.offsetX/e.getWidth())*100+20,r=Math.abs(this.offsetY/e.getHeight())*100+20),'\n"+' \n'+' \n'+" \n"+" \n"+' \n'+" \n"+"\n"},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,preserveObjectStacking:!1,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,r&&r.crossOrigin):(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,t){return this.setDimensions({width:e},t)},setHeight:function(e,t){return this.setDimensions({height:e},t)},setDimensions:function(e,t){var n;t=t||{};for(var r in e)n=e[r],t.cssOnly||(this._setBackstoreDimension(r,e[r]),n+="px"),t.backstoreOnly||this._setCssDimension(r,n);return t.cssOnly||this.renderAll(),this.calcOffset(),this},_setBackstoreDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.upperCanvasEl&&(this.upperCanvasEl[e]=t),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this[e]=t,this},_setCssDimension:function(e,t){return this.lowerCanvasEl.style[e]=t,this.upperCanvasEl&&(this.upperCanvasEl.style[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t),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){var n,r,i;t.viewBox?(n=t.viewBox.width,r=t.viewBox.height):(n=this.width,r=this.height,this.svgViewportTransformation||(i=this.viewportTransform,n/=i[0],r/=i[3])),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(){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%360},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=s.width||0,u=s.height||0,a;if(!o||!u)"top"in s&&"bottom"in s&&(u=Math.abs(s.top-s.bottom)),"right"in s&&"left"in s&&(o=Math.abs(s.right-s.left));return this.calcOffset(),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))),o===0||u===0?a={width:1,height:1}:a={width:r.width/o,height:r.height/u},{x:i.x*a.width,y:i.y*a.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)return;var r=this._groupSelector;r?(n=this.getPointer(e,!0),r.left=n.x-r.ex,r.top=n.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(e):(t=this.findTarget(e),!t||t&&!t.selectable?this.setCursor(this.defaultCursor):this._setCursorFromEvent(e,t)),this.fire("mouse:move",{target:t,e:e}),t&&t.fire("mousemove",{e:e})},_transformObject:function(e){var t=this.getPointer(e),n=this._currentTransform;n.reset=!1,n.target.isMoving=!0,this._beforeScaleTransform(e,n),this._performTransformAction(e,n,t),this.renderAll()},_performTransformAction:function(e,t,n){var r=n.x,i=n.y,s=t.target,o=t.action;o==="rotate"?(this._rotateObject(r,i),this._fire("rotating",s,e)):o==="scale"?(this._onScale(e,t,r,i),this._fire("scaling",s,e)):o==="scaleX"?(this._scaleObject(r,i,"x"),this._fire("scaling",s,e)):o==="scaleY"?(this._scaleObject(r,i,"y"),this._fire("scaling",s,e)):(this._translateObject(r,i),this._fire("moving",s,e),this.setCursor(this.moveCursor))},_fire:function(e,t,n){this.fire("object:"+e,{target:t,e:n}),t.fire(e,{e:n})},_beforeScaleTransform:function(e,t){if(t.action==="scale"||t.action==="scaleX"||t.action==="scaleY"){var n=this._shouldCenterTransform(e,t.target);if(n&&(t.originX!=="center"||t.originY!=="center")||!n&&t.originX==="center"&&t.originY==="center")this._resetCurrentTransform(e),t.reset=!0}},_onScale:function(e,t,n,r){(e.shiftKey||this.uniScaleTransform)&&!t.target.get("lockUniScaling")?(t.currentAction="scale",this._scaleObject(n,r)):(!t.reset&&t.currentAction==="scale"&&this._resetCurrentTransform(e,t.target),t.currentAction="scaleEqually",this._scaleObject(n,r,"equally"))},_setCursorFromEvent:function(e,t){if(!t||!t.selectable)return this.setCursor(this.defaultCursor),!1;var n=this.getActiveGroup(),r=t._findTargetCorner&&(!n||!n.contains(t))&&t._findTargetCorner(this.getPointer(e,!0));return r?this._setCornerCursor(r,t):this.setCursor(t.hoverCursor||this.hoverCursor),!0},_setCornerCursor:function(t,n){if(t in e)this.setCursor(this._getRotatedCornerCursor(t,n));else{if(t!=="mtr"||!n.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(t,n){var r=Math.round(n.getAngle()%360/45);return r<0&&(r+=8),r+=e[t],r%=8,this.cursorMap[r]}})}(),function(){var e=Math.min,t=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(e,t){var n=this.getActiveObject();return e.shiftKey&&(this.getActiveGroup()||n&&n!==t)&&this.selection},_handleGrouping:function(e,t){if(t===this.getActiveGroup()){t=this.findTarget(e,!0);if(!t||t.isType("group"))return}this.getActiveGroup()?this._updateActiveGroup(t,e):this._createActiveGroup(t,e),this._activeGroup&&this._activeGroup.saveCoords()},_updateActiveGroup:function(e,t){var n=this.getActiveGroup();if(n.contains(e)){n.removeWithUpdate(e),this._resetObjectTransform(n),e.set("active",!1);if(n.size()===1){this.discardActiveGroup(t),this.setActiveObject(n.item(0));return}}else n.addWithUpdate(e),this._resetObjectTransform(n);this.fire("selection:created",{target:n,e:t}),n.set("active",!0)},_createActiveGroup:function(e,t){if(this._activeObject&&e!==this._activeObject){var n=this._createGroup(e);n.addWithUpdate(),this.setActiveGroup(n),this._activeObject=null,this.fire("selection:created",{target:n,e:t})}e.set("active",!0)},_createGroup:function(e){var t=this.getObjects(),n=t.indexOf(this._activeObject)1&&(t=new fabric.Group(t.reverse(),{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:"nonzero",globalCompositeOperation:"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,lockScalingFlip:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor".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);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,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation};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._setupCompositeOperation(e),n||this.transform(e),this._setStrokeStyles(e),this._setFillStyles(e),this.group&&this.group.type==="path-group"&&e.translate(-this.group.width/2,-this.group.height/2),this.transformMatrix&&e.transform.apply(e,this.transformMatrix),this._setOpacity(e),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreCompositeOperation(e),e.restore()},_setOpacity:function(e){this.group&&this.group._setOpacity(e),e.globalAlpha*=this.opacity},_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):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e,this):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;var t=this.canvas&&this.canvas._currentMultiplier||1;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur*t*(this.scaleX+this.scaleY)/2,e.shadowOffsetX=this.shadow.offsetX*t*this.scaleX,e.shadowOffsetY=this.shadow.offsetY*t*this.scaleY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;e.save();if(this.fill.gradientTransform){var t=this.fill.gradientTransform;e.transform.apply(e,t)}this.fill.toLive&&e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),this.fillRule==="evenodd"?e.fill("evenodd"):e.fill(),e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke||this.strokeWidth===0)return;e.save();if(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();else{if(this.stroke.gradientTransform){var t=this.stroke.gradientTransform;e.transform.apply(e,t)}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.StaticCanvas(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}},_setupCompositeOperation:function(e){this.globalCompositeOperation&&(this._prevGlobalCompositeOperation=e.globalCompositeOperation,e.globalCompositeOperation=this.globalCompositeOperation)},_restoreCompositeOperation:function(e){this.globalCompositeOperation&&this._prevGlobalCompositeOperation&&(e.globalCompositeOperation=this._prevGlobalCompositeOperation)}}),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)0?t:-t),d&&(u+=u>0?t:-t),o=s*this.scaleX+2*this.padding,a=u*this.scaleY+2*this.padding,o<0&&(o=Math.abs(o));var v=Math.sqrt(Math.pow(o/2,2)+Math.pow(a/2,2)),m=Math.atan(isFinite(a/o)?a/o:0),g=Math.cos(m+n)*v,y=Math.sin(m+n)*v,b=Math.sin(n),w=Math.cos(n),E=this.getCenterPoint(),S=new fabric.Point(o,a),x=new fabric.Point(E.x-g,E.y-y),T=new fabric.Point(x.x+S.x*w,x.y+S.x*b),N=new fabric.Point(x.x-S.y*b,x.y+S.y*w),C=new fabric.Point(x.x+S.x/2*w,x.y+S.x/2*b),k=i(x),L=i(T),A=i(new fabric.Point(T.x-S.y*b,T.y+S.y*w)),O=i(N),M=i(new fabric.Point(x.x-S.y/2*b,x.y+S.y/2*w)),_=i(C),D=i(new fabric.Point(T.x-S.y/2*b,T.y+S.y/2*w)),P=i(new fabric.Point(N.x+S.x/2*w,N.y+S.x/2*b)),H=i(new fabric.Point(C.x,C.y));return this.oCoords={tl:k,tr:L,br:A,bl:O,ml:M,mt:_,mr:D,mb:P,mtr:H},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.fillRule,n=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",r=this.strokeWidth?this.strokeWidth:"0",i=this.strokeDashArray?this.strokeDashArray.join(" "):"",s=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",u=this.strokeMiterLimit?this.strokeMiterLimit:"4",a=typeof this.opacity!="undefined"?this.opacity:"1",f=this.visible?"":" visibility: hidden;",l=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",n,"; ","stroke-width: ",r,"; ","stroke-dasharray: ",i,"; ","stroke-linecap: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",u,"; ","fill: ",e,"; ","fill-rule: ",t,"; ","opacity: ",a,";",l,f].join("")},getSvgTransform:function(){if(this.group&&this.group.type==="path-group")return"";var e=fabric.util.toFixed,t=this.getAngle(),n=!this.canvas||this.canvas.svgViewportTransformation?this.getViewportTransform():[1,0,0,1,0,0],r=fabric.util.transformPoint(this.getCenterPoint(),n),i=fabric.Object.NUM_FRACTION_DIGITS,s=this.type==="path-group"?"":"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.type==="path-group"?this.width*n[0]:0,f=this.flipX?" matrix(-1 0 0 1 "+a+" 0) ":"",l=this.type==="path-group"?this.height*n[3]:0,c=this.flipY?" matrix(1 0 0 -1 0 "+l+")":"";return[s,o,u,f,c].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.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,f=this.strokeLineCap==="round"||this.strokeLineCap==="square",l=this.type==="line"&&this.width===0,c=this.type==="line"&&this.height===0,h=l||c,p=f&&c||!h,d=f&&l||!h;l?o=a/i:c&&(u=a/s),p&&(o+=a/i),d&&(u+=a/s);var v=fabric.util.transformPoint(new fabric.Point(o,u),r,!0),m=v.x,g=v.y;this.group&&(m*=this.group.scaleX,g*=this.group.scaleY),e.strokeRect(~~(-(m/2)-t)-.5,~~(-(g/2)-t)-.5,~~(m+n)+1,~~(g+n)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var y=(-g-t*2)/2;e.beginPath(),e.moveTo(0,y),e.lineTo(0,y-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,s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===0,f=this.type==="line"&&this.height===0,l=a||f,c=u&&f||!l,h=u&&a||!l;a?s=i:f&&(o=i),c&&(s+=i),h&&(o+=i),s*=this.scaleX,o*=this.scaleY;var p=fabric.util.transformPoint(new fabric.Point(s,o),r,!0),d=p.x,v=p.y,m=-(d/2),g=-(v/2),y=this.padding,b=n,w=n-t,E=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,E,m-b-y,g-b-y),this._drawControl("tr",e,E,m+d-b+y,g-b-y),this._drawControl("bl",e,E,m-b-y,g+v+w+y),this._drawControl("br",e,E,m+d+w+y,g+v+w+y),this.get("lockUniScaling")||(this._drawControl("mt",e,E,m+d/2-b,g-b-y),this._drawControl("mb",e,E,m+d/2-b,g+v+w+y),this._drawControl("mr",e,E,m+d+w+y,g+v/2-b),this._drawControl("ml",e,E,m-b-y,g+v/2-b)),this.hasRotatingPoint&&this._drawControl("mtr",e,E,m+d/2-b,g-this.rotatingPointOffset-this.cornerSize/2-y),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\n'),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,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,startAngle:0,endAngle:n*2,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("radius",e.radius||0),this.startAngle=e.startAngle||this.startAngle,this.endAngle=e.endAngle||this.endAngle},_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"),startAngle:this.startAngle,endAngle:this.endAngle})},toSVG:function(e){var t=this._createBaseSVGMarkup(),r=0,i=0,s=(this.endAngle-this.startAngle)%(2*n);if(s===0)this.group&&this.group.type==="path-group"&&(r=this.left+this.radius,i=this.top+this.radius),t.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,u=Math.sin(this.startAngle)*this.radius,a=Math.cos(this.endAngle)*this.radius,f=Math.sin(this.endAngle)*this.radius,l=s>n?"1":"0";t.push('\n')}return e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.arc(t?this.left+this.radius:0,t?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new t.Circle(r(s,n));return o.left-=o.radius,o.top-=o.radius,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)},_set:function(e,t){this.callSuper("_set",e,t);switch(e){case"rx":this.rx=t,this.set("width",t*2);break;case"ry":this.ry=t,this.set("height",t*2)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=0,r=0;return this.group&&this.group.type==="path-group"&&(n=this.left+this.rx,r=this.top+this.ry),t.push("\n'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.save(),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left+this.rx:0,t?(this.top+this.ry)*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);i.left=i.left||0,i.top=i.top||0;var s=new t.Ellipse(r(i,n));return s.top-=s.ry,s.left-=s.rx,s},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";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,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e,t){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var n=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,i=this.width,s=this.height,o=t?this.left:-this.width/2,u=t?this.top:-this.height/2,a=n!==0||r!==0,f=.4477152502;e.beginPath(),e.moveTo(o+n,u),e.lineTo(o+i-n,u),a&&e.bezierCurveTo(o+i-f*n,u,o+i,u+f*r,o+i,u+r),e.lineTo(o+i,u+s-r),a&&e.bezierCurveTo(o+i,u+s-f*r,o+i-f*n,u+s,o+i-n,u+s),e.lineTo(o+n,u+s),a&&e.bezierCurveTo(o+f*n,u+s,o,u+s-f*r,o,u+s-r),e.lineTo(o,u+r),a&&e.bezierCurveTo(o,u+f*r,o+f*n,u,o+n,u),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()},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.left,r=this.top;if(!this.group||this.group.type!=="path-group")n=-this.width/2,r=-this.height/2;return t.push("\n'),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;r=r||{};var i=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);return i.left=i.left||0,i.top=i.top||0,new t.Rect(n(r?t.util.object.clone(r):{},i))},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={});if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,minX:0,minY:0,initialize:function(e,n){return t.Polygon.prototype.initialize.call(this,e,n)},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},_applyPointOffset:function(){return t.Polygon.prototype._applyPointOffset.call(this)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){return t.Polygon.prototype.toSVG.call(this,e)},_render:function(e){t.Polygon.prototype.commonRender.call(this,e),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n,r;e.beginPath();for(var i=0,s=this.points.length;i\n'),e?e(n.join("")):n.join("")},_render:function(e){this.commonRender(e),this._renderFill(e);if(this.stroke||this.strokeDashArray)e.closePath(),this._renderStroke(e)},commonRender:function(e){var t;e.beginPath(),this._applyPointOffset&&((!this.group||this.group.type!=="path-group")&&this._applyPointOffset(),this._applyPointOffset=null),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(),r="";for(var i=0,s=this.path.length;i\n"),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\n"];for(var i=0,s=t.length;i\n"),e?e(r.join("")):r.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 n=this._objects.length;n--;)this._objects[n].group=this;this.originalState={},this.callSuper("initialize"),t.originX&&(this.originX=t.originX),t.originY&&(this.originY=t.originY),this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",t),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop(),r=this.getCenterPoint();e.set({originalLeft:t,originalTop:n,left:t-r.x,top:n-r.y}),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;while(n--)this._objects[n].set(e,t)}this.callSuper("_set",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\n'];for(var n=0,r=this._objects.length;n\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\n','\n");if(this.stroke||this.strokeDashArray){var s=this.fill;this.fill=null,t.push("\n'),this.fill=s}return t.push("\n"),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},setSrc:function(e,t,n){fabric.util.loadImage(e,function(e){return this.setElement(e,t,n)},this,n&&n.crossOrigin)},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e,t,n,r){t=t||this.filters,n=n||this._originalElement;if(!n)return;var i=n,s=fabric.util.createCanvasElement(),o=fabric.util.createImage(),u=this;return s.width=i.width,s.height=i.height,s.getContext("2d").drawImage(i,0,0,i.width,i.height),t.length===0?(this._element=n,e&&e(),s):(t.forEach(function(e){e&&e.applyTo(s,e.scaleX||u.scaleX,e.scaleY||u.scaleY),!r&&e.type==="Resize"&&(u.width*=e.scaleX,u.height*=e.scaleY)}),o.width=s.width,o.height=s.height,fabric.isLikelyNode?(o.src=s.toBuffer(undefined,fabric.Image.pngCompression),u._element=o,!r&&(u._filteredEl=o),e&&e()):(o.onload=function(){u._element=o,!r&&(u._filteredEl=o),e&&e(),o.onload=s=i=null},o.src=s.toDataURL("image/png")),s)},_render:function(e,t){var n,r,i=this._findMargins(),s;n=t?this.left:-this.width/2,r=t?this.top:-this.height/2,this.meetOrSlice==="slice"&&(e.beginPath(),e.rect(n,r,this.width,this.height),e.clip()),this.isMoving===!1&&this.resizeFilters.length&&this._needsResize()?(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,s=this.applyFilters(null,this.resizeFilters,this._filteredEl||this._originalElement,!0)):s=this._element,s&&e.drawImage(s,n+i.marginX,r+i.marginY,i.width,i.height),this._renderStroke(e)},_needsResize:function(){return this.scaleX!==this._lastScaleX||this.scaleY!==this._lastScaleY},_findMargins:function(){var e=this.width,t=this.height,n,r,i=0,s=0;if(this.alignX!=="none"||this.alignY!=="none")n=[this.width/this._element.width,this.height/this._element.height],r=this.meetOrSlice==="meet"?Math.min.apply(null,n):Math.max.apply(null,n),e=this._element.width*r,t=this._element.height*r,this.alignX==="Mid"&&(i=(this.width-e)/2),this.alignX==="Max"&&(i=this.width-e),this.alignY==="Mid"&&(s=(this.height-t)/2),this.alignY==="Max"&&(s=this.height-t);return{width:e,height:t,marginX:i,marginY:s}},_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 preserveAspectRatio xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES),s="xMidYMid",o="meet",u,a,f;i.preserveAspectRatio&&(f=i.preserveAspectRatio.split(" ")),f&&f.length&&(o=f.pop(),o!=="meet"&&o!=="slice"?(s=o,o="meet"):f.length&&(s=f.pop())),u=s!=="none"?s.slice(1,4):"none",a=s!=="none"?s.slice(5,8):"none",i.alignX=u,i.alignY=a,i.meetOrSlice=o,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",initialize:function(e){e&&this.setOptions(e)},setOptions:function(e){for(var t in e)this[t]=e[t]},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)n&&(l=2,h=-1),u>i&&(c=2,p=-1),f=a.getImageData(0,0,n,i),e.width=o(s,n),e.height=o(u,i),a.putImageData(f,0,0);while(!d||!v)n=m,i=g,s*he)return 0;t*=Math.PI;if(s(t)<1e-16)return 1;var n=t/e;return a(t)*a(n)/t/n}}function h(e){var a,f,c,p,d,L,A,O,M,_,D;C.x=(e+.5)*b,k.x=r(C.x);for(a=0;a=t)continue;_=r(1e3*s(f-C.x)),N[_]||(N[_]={});for(var P=k.y-T;P<=k.y+T;P++){if(P<0||P>=o)continue;D=r(1e3*s(P-C.y)),N[_][D]||(N[_][D]=y(i(n(_*E,2)+n(D*S,2))/1e3)),c=N[_][D],c>0&&(p=(P*t+f)*4,d+=c,L+=c*m[p],A+=c*m[p+1],O+=c*m[p+2],M+=c*m[p+3])}}p=(a*u+e)*4,g[p]=L/d,g[p+1]=A/d,g[p+2]=O/d,g[p+3]=M/d}return++e1&&H<-1)continue;E=2*H*H*H-3*H*H+1,E>0&&(P=4*(D+A*t),k+=E*v[P+3],x+=E,v[P+3]<255&&(E=E*v[P+3]/250),T+=E*v[P],N+=E*v[P+1],C+=E*v[P+2],S+=E)}}g[w]=T/S,g[w+1]=N/S,g[w+2]=C/S,g[w+3]=k/x}return m}}),t.Image.filters.Resize.fromObject=function(){return new t.Image.filters.Resize}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.object.clone,i=t.util.toFixed,s=t.StaticCanvas.supports("setLineDash");if(t.Text){t.warn("fabric.Text is already defined");return}var o=t.Object.prototype.stateProperties.concat();o.push("fontFamily","fontWeight","fontSize","text","textDecoration","textAlign","fontStyle","lineHeight","textBackgroundColor","useNative","path"),t.Text=t.util.createClass(t.Object,{_dimensionAffectingProps:{fontSize:!0,fontWeight:!0,fontFamily:!0,textDecoration:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0},_reNewline:/\r?\n/,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textAlign:"left",fontStyle:"",lineHeight:1.3,textBackgroundColor:"",path:null,useNative:!0,stateProperties:o,stroke:null,shadow:null,initialize:function(e,t){t=t||{},this.text=e,this.__skipDimension=!0,this.setOptions(t),this.__skipDimension=!1,this._initDimensions()},_initDimensions:function(){if(this.__skipDimension)return;var e=t.util.createCanvasElement();this._render(e.getContext("2d"))},toString:function(){return"#'},_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._setOpacity(e),this._setShadow(e),this._setupCompositeOperation(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._restoreCompositeOperation(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(),t||this.transform(e);var n=this.group&&this.group.type==="path-group";n&&e.translate(-this.group.width/2,-this.group.height/2),this.transformMatrix&&e.transform.apply(e,this.transformMatrix),n&&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*this.lineHeight-.25*this.fontSize:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n+(this.group&&this.group.type==="path-group"?this.left:0),textTop:r+(this.group&&this.group.type==="path-group"?this.top:0),lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('\n',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"\n","\n")},_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("\n')},_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),n.top=n.top||0,n.left=n.left||0,"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"),n.top+=n.fontSize/4;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){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?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: fixed; bottom: 20px; left: 0px; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"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",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",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.stopImmediatePropagation(),e.preventDefault(),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)return;e.which!==0&&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||e.keyCode===34)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,this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},swapSelectionPoints:function(){var e=this.selectionEnd;this.selectionEnd=this.selectionStart,this.selectionStart=e},moveCursorDownWithShift:function(e){this.selectionEnd===this.selectionStart&&(this._selectionDirection="right");var t=this._selectionDirection==="right"?"selectionEnd":"selectionStart";this[t]+=e,this.selectionEndthis.text.length&&(this.selectionEnd=this.text.length),this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey||e.keyCode===33)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)),this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},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),this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},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,t){return origSetWidth.call(this,e,t),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,t){return origSetHeight.call(this,e,t),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 77c9172b3c2b8213c83efb4a23bab40a9f703ab7..e648ee88713890a34df566e945e81b794472d861 100644 GIT binary patch delta 55578 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 z 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 PNHh6wx+UylvV;QwO>a(G delta 55668 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

QDE?oO_rDRj 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 BDAfP} diff --git a/dist/fabric.require.js b/dist/fabric.require.js index ffbb33a7..493071a5 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,5 +1,5 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ -/*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ +/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ var fabric = fabric || { version: "1.4.13" }; if (typeof exports !== 'undefined') { @@ -9,6 +9,8 @@ if (typeof exports !== 'undefined') { if (typeof document !== 'undefined' && typeof window !== 'undefined') { fabric.document = document; fabric.window = window; + // ensure globality even if entire library were function wrapped (as in Meteor.js packaging system) + window.fabric = fabric; } else { // assume we're running under node.js when document/window are not present @@ -9116,12 +9118,12 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab addListener(this.upperCanvasEl, 'touchstart', this._onMouseDown); addListener(this.upperCanvasEl, 'touchmove', this._onMouseMove); - if (typeof Event !== 'undefined' && 'add' in Event) { - Event.add(this.upperCanvasEl, 'gesture', this._onGesture); - Event.add(this.upperCanvasEl, 'drag', this._onDrag); - Event.add(this.upperCanvasEl, 'orientation', this._onOrientationChange); - Event.add(this.upperCanvasEl, 'shake', this._onShake); - Event.add(this.upperCanvasEl, 'longpress', this._onLongPress); + if (typeof eventjs !== 'undefined' && 'add' in eventjs) { + eventjs.add(this.upperCanvasEl, 'gesture', this._onGesture); + eventjs.add(this.upperCanvasEl, 'drag', this._onDrag); + eventjs.add(this.upperCanvasEl, 'orientation', this._onOrientationChange); + eventjs.add(this.upperCanvasEl, 'shake', this._onShake); + eventjs.add(this.upperCanvasEl, 'longpress', this._onLongPress); } }, @@ -9154,12 +9156,12 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab removeListener(this.upperCanvasEl, 'touchstart', this._onMouseDown); removeListener(this.upperCanvasEl, 'touchmove', this._onMouseMove); - if (typeof Event !== 'undefined' && 'remove' in Event) { - Event.remove(this.upperCanvasEl, 'gesture', this._onGesture); - Event.remove(this.upperCanvasEl, 'drag', this._onDrag); - Event.remove(this.upperCanvasEl, 'orientation', this._onOrientationChange); - Event.remove(this.upperCanvasEl, 'shake', this._onShake); - Event.remove(this.upperCanvasEl, 'longpress', this._onLongPress); + if (typeof eventjs !== 'undefined' && 'remove' in eventjs) { + eventjs.remove(this.upperCanvasEl, 'gesture', this._onGesture); + eventjs.remove(this.upperCanvasEl, 'drag', this._onDrag); + eventjs.remove(this.upperCanvasEl, 'orientation', this._onOrientationChange); + eventjs.remove(this.upperCanvasEl, 'shake', this._onShake); + eventjs.remove(this.upperCanvasEl, 'longpress', this._onLongPress); } }, @@ -11648,7 +11650,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati el.height = boundingRect.height; fabric.util.wrapElement(el, 'div'); - var canvas = new fabric.Canvas(el); + var canvas = new fabric.StaticCanvas(el); // to avoid common confusion https://github.com/kangax/fabric.js/issues/806 if (options.format === 'jpg') { @@ -15360,8 +15362,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot controlY = 0, // current control point y tempX, tempY, - tempControlX, - tempControlY, l = -this.pathOffset.x, t = -this.pathOffset.y; @@ -15464,9 +15464,17 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot tempX = x + current[3]; tempY = y + current[4]; - // calculate reflection of previous control points - controlX = controlX ? (2 * x - controlX) : x; - controlY = controlY ? (2 * y - controlY) : y; + if (previous[0].match(/[CcSs]/) === null) { + // If there is no previous command or if the previous command was not a C, c, S, or s, + // the control point is coincident with the current point + controlX = x; + controlY = y; + } + else { + // calculate reflection of previous control points + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; + } ctx.bezierCurveTo( controlX + l, @@ -15490,9 +15498,17 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot case 'S': // shorthand cubic bezierCurveTo, absolute tempX = current[3]; tempY = current[4]; - // calculate reflection of previous control points - controlX = 2 * x - controlX; - controlY = 2 * y - controlY; + if (previous[0].match(/[CcSs]/) === null) { + // If there is no previous command or if the previous command was not a C, c, S, or s, + // the control point is coincident with the current point + controlX = x; + controlY = y; + } + else { + // calculate reflection of previous control points + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; + } ctx.bezierCurveTo( controlX + l, controlY + t, @@ -15559,20 +15575,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot controlX = x; controlY = y; } - else if (previous[0] === 't') { - // calculate reflection of previous control points for t - controlX = 2 * x - tempControlX; - controlY = 2 * y - tempControlY; - } - else if (previous[0] === 'q') { - // calculate reflection of previous control points for q + else { + // calculate reflection of previous control point controlX = 2 * x - controlX; controlY = 2 * y - controlY; } - tempControlX = controlX; - tempControlY = controlY; - ctx.quadraticCurveTo( controlX + l, controlY + t, @@ -15581,17 +15589,24 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ); x = tempX; y = tempY; - controlX = x + current[1]; - controlY = y + current[2]; + break; case 'T': tempX = current[1]; tempY = current[2]; - // calculate reflection of previous control points - controlX = 2 * x - controlX; - controlY = 2 * y - controlY; + if (previous[0].match(/[QqTt]/) === null) { + // If there is no previous command or if the previous command was not a Q, q, T or t, + // assume the control point is coincident with the current point + controlX = x; + controlY = y; + } + else { + // calculate reflection of previous control point + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; + } ctx.quadraticCurveTo( controlX + l, controlY + t, @@ -15829,8 +15844,6 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot controlY = 0, // current control point y tempX, tempY, - tempControlX, - tempControlY, bounds; for (var i = 0, len = this.path.length; i < len; ++i) { @@ -15925,9 +15938,17 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot tempX = x + current[3]; tempY = y + current[4]; - // calculate reflection of previous control points - controlX = controlX ? (2 * x - controlX) : x; - controlY = controlY ? (2 * y - controlY) : y; + if (previous[0].match(/[CcSs]/) === null) { + // If there is no previous command or if the previous command was not a C, c, S, or s, + // the control point is coincident with the current point + controlX = x; + controlY = y; + } + else { + // calculate reflection of previous control points + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; + } bounds = fabric.util.getBoundsOfCurve(x, y, controlX, @@ -15950,9 +15971,17 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot case 'S': // shorthand cubic bezierCurveTo, absolute tempX = current[3]; tempY = current[4]; - // calculate reflection of previous control points - controlX = 2 * x - controlX; - controlY = 2 * y - controlY; + if (previous[0].match(/[CcSs]/) === null) { + // If there is no previous command or if the previous command was not a C, c, S, or s, + // the control point is coincident with the current point + controlX = x; + controlY = y; + } + else { + // calculate reflection of previous control points + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; + } bounds = fabric.util.getBoundsOfCurve(x, y, controlX, controlY, @@ -16014,20 +16043,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot controlX = x; controlY = y; } - else if (previous[0] === 't') { - // calculate reflection of previous control points for t - controlX = 2 * x - tempControlX; - controlY = 2 * y - tempControlY; - } - else if (previous[0] === 'q') { - // calculate reflection of previous control points for q + else { + // calculate reflection of previous control point controlX = 2 * x - controlX; controlY = 2 * y - controlY; } - tempControlX = controlX; - tempControlY = controlY; - bounds = fabric.util.getBoundsOfCurve(x, y, controlX, controlY, @@ -16038,16 +16059,24 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ); x = tempX; y = tempY; - controlX = x + current[1]; - controlY = y + current[2]; + break; case 'T': tempX = current[1]; tempY = current[2]; - // calculate reflection of previous control points - controlX = 2 * x - controlX; - controlY = 2 * y - controlY; + + if (previous[0].match(/[QqTt]/) === null) { + // If there is no previous command or if the previous command was not a Q, q, T or t, + // assume the control point is coincident with the current point + controlX = x; + controlY = y; + } + else { + // calculate reflection of previous control point + controlX = 2 * x - controlX; + controlY = 2 * y - controlY; + } bounds = fabric.util.getBoundsOfCurve(x, y, controlX, controlY, diff --git a/package.json b/package.json index 66e3478f..e8aa6a47 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "devDependencies": { "execSync": "1.0.x", "uglify-js": "2.4.x", - "jscs": "1.7.x", + "jscs": "1.9.x", "jshint": "2.5.x", "qunit": "0.7.2", "istanbul": "0.3.x"