From cecd9bea26ead7463575a6fb6b4d08a86ba487ce Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 23 Aug 2014 18:52:16 +0200 Subject: [PATCH] Build distribution --- dist/fabric.js | 251 +++++++++++++++++++++-------------------- dist/fabric.min.js | 14 +-- dist/fabric.min.js.gz | Bin 56946 -> 57091 bytes dist/fabric.require.js | 251 +++++++++++++++++++++-------------------- 4 files changed, 261 insertions(+), 255 deletions(-) diff --git a/dist/fabric.js b/dist/fabric.js index 04ef1e02..0b52f8c2 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -885,132 +885,107 @@ fabric.Collection = { var arcToSegmentsCache = { }, segmentToBezierCache = { }, - _join = Array.prototype.join, - argsString; - - // Generous contribution by Raph Levien, from libsvg-0.1.0.tar.gz - function arcToSegments(x, y, rx, ry, large, sweep, rotateX, ox, oy) { - - argsString = _join.call(arguments); + _join = Array.prototype.join; + /* Adapted from http://dxr.mozilla.org/mozilla-central/source/content/svg/content/src/nsSVGPathDataParser.cpp + * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here + * http://mozilla.org/MPL/2.0/ + */ + function arcToSegments(toX, toY, rx, ry, large, sweep, rotateX) { + var argsString = _join.call(arguments); if (arcToSegmentsCache[argsString]) { return arcToSegmentsCache[argsString]; } - var coords = getXYCoords(rotateX, rx, ry, ox, oy, x, y), - - d = (coords.x1 - coords.x0) * (coords.x1 - coords.x0) + - (coords.y1 - coords.y0) * (coords.y1 - coords.y0), - - sfactorSq = 1 / d - 0.25; - - if (sfactorSq < 0) { - sfactorSq = 0; - } - - var sfactor = Math.sqrt(sfactorSq); - if (sweep === large) { - sfactor = -sfactor; - } - - var xc = 0.5 * (coords.x0 + coords.x1) - sfactor * (coords.y1 - coords.y0), - yc = 0.5 * (coords.y0 + coords.y1) + sfactor * (coords.x1 - coords.x0), - th0 = Math.atan2(coords.y0 - yc, coords.x0 - xc), - th1 = Math.atan2(coords.y1 - yc, coords.x1 - xc), - thArc = th1 - th0; - - if (thArc < 0 && sweep === 1) { - thArc += 2 * Math.PI; - } - else if (thArc > 0 && sweep === 0) { - thArc -= 2 * Math.PI; - } - - var segments = Math.ceil(Math.abs(thArc / (Math.PI * 0.5 + 0.001))), - result = []; - - for (var i = 0; i < segments; i++) { - var th2 = th0 + i * thArc / segments, - th3 = th0 + (i + 1) * thArc / segments; - - result[i] = [xc, yc, th2, th3, rx, ry, coords.sinTh, coords.cosTh]; - } - - arcToSegmentsCache[argsString] = result; - return result; - } - - function getXYCoords(rotateX, rx, ry, ox, oy, x, y) { - - var th = rotateX * (Math.PI / 180), + var PI = Math.PI, th = rotateX * (PI / 180), sinTh = Math.sin(th), - cosTh = Math.cos(th); + cosTh = Math.cos(th), + fromX = 0, fromY = 0; rx = Math.abs(rx); ry = Math.abs(ry); - var px = cosTh * (ox - x) + sinTh * (oy - y), - py = cosTh * (oy - y) - sinTh * (ox - x), - pl = (px * px) / (rx * rx) + (py * py) / (ry * ry); + var px = -cosTh * toX - sinTh * toY, + py = -cosTh * toY + sinTh * toX, + rx2 = rx * rx, ry2 = ry * ry, py2 = py * py, px2 = px * px, + pl = 4 * rx2 * ry2 - rx2 * py2 - ry2 * px2, + root = 0; - pl *= 0.25; - - if (pl > 1) { - pl = Math.sqrt(pl); - rx *= pl; - ry *= pl; + if (pl < 0) { + var s = Math.sqrt(1 - 0.25 * pl/(rx2 * ry2)); + rx *= s; + ry *= s; + } else { + root = (large === sweep ? -0.5 : 0.5) * + Math.sqrt( pl /(rx2 * py2 + ry2 * px2)); } - var a00 = cosTh / rx, - a01 = sinTh / rx, - a10 = (-sinTh) / ry, - a11 = (cosTh) / ry; + var cx = root * rx * py / ry, + cy = -root * ry * px / rx, + cx1 = cosTh * cx - sinTh * cy + toX / 2, + cy1 = sinTh * cx + cosTh * cy + toY / 2, + mTheta = calcVectorAngle(1, 0, (px - cx) / rx, (py - cy) / ry), + dtheta = calcVectorAngle((px - cx) / rx, (py - cy) / ry, (-px -cx) / rx, (-py -cy) / ry); - return { - x0: a00 * ox + a01 * oy, - y0: a10 * ox + a11 * oy, - x1: a00 * x + a01 * y, - y1: a10 * x + a11 * y, - sinTh: sinTh, - cosTh: cosTh - }; + if (sweep === 0 && dtheta > 0) { + dtheta -= 2 * PI; + } else if (sweep === 1 && dtheta < 0) { + dtheta += 2 * PI; + } + + // Convert into cubic bezier segments <= 90deg + var segments = Math.ceil(Math.abs(dtheta / (PI * 0.5))), + result = [], mDelta = dtheta / segments, + mT = 8 / 3 * Math.sin(mDelta / 4) * Math.sin(mDelta / 4) / Math.sin(mDelta / 2), + th3 = mTheta + mDelta; + + for (var i = 0; i < segments; i++) { + result[i] = segmentToBezier(mTheta, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY); + fromX = result[i][4]; + fromY = result[i][5]; + mTheta += mDelta; + th3 += mDelta; + } + arcToSegmentsCache[argsString] = result; + return result; } - function segmentToBezier(cx, cy, th0, th1, rx, ry, sinTh, cosTh) { - argsString = _join.call(arguments); - - if (segmentToBezierCache[argsString]) { - return segmentToBezierCache[argsString]; + function segmentToBezier(th2, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY) { + var argsString2 = _join.call(arguments); + if (segmentToBezierCache[argsString2]) { + return segmentToBezierCache[argsString2]; } + + var costh2 = Math.cos(th2), + sinth2 = Math.sin(th2), + costh3 = Math.cos(th3), + sinth3 = Math.sin(th3), + toX = cosTh * rx * costh3 - sinTh * ry * sinth3 + cx1, + toY = sinTh * rx * costh3 + cosTh * ry * sinth3 + cy1, + cp1X = fromX + mT * ( - cosTh * rx * sinth2 - sinTh * ry * costh2), + cp1Y = fromY + mT * ( - sinTh * rx * sinth2 + cosTh * ry * costh2), + cp2X = toX + mT * ( cosTh * rx * sinth3 + sinTh * ry * costh3), + cp2Y = toY + mT * ( sinTh * rx * sinth3 - cosTh * ry * costh3); - var sinTh0 = Math.sin(th0), - cosTh0 = Math.cos(th0), - sinTh1 = Math.sin(th1), - cosTh1 = Math.cos(th1), - - a00 = cosTh * rx, - a01 = -sinTh * ry, - a10 = sinTh * rx, - a11 = cosTh * ry, - thHalf = 0.25 * (th1 - th0), - - t = (8 / 3) * Math.sin(thHalf) * - Math.sin(thHalf) / Math.sin(thHalf * 2), - - x1 = cx + cosTh0 - t * sinTh0, - y1 = cy + sinTh0 + t * cosTh0, - x3 = cx + cosTh1, - y3 = cy + sinTh1, - x2 = x3 + t * sinTh1, - y2 = y3 - t * cosTh1; - - segmentToBezierCache[argsString] = [ - a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, - a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, - a00 * x3 + a01 * y3, a10 * x3 + a11 * y3 + segmentToBezierCache[argsString2] = [ + cp1X, cp1Y, + cp2X, cp2Y, + toX, toY ]; + return segmentToBezierCache[argsString2]; + } - return segmentToBezierCache[argsString]; + /* + * Private + */ + function calcVectorAngle(ux, uy, vx, vy) { + var ta = Math.atan2(uy, ux), + tb = Math.atan2(vy, vx); + if (tb >= ta) { + return tb - ta; + } else { + return 2 * Math.PI - (ta - tb); + } } /** @@ -1020,18 +995,24 @@ fabric.Collection = { * @param {Number} y * @param {Array} coords */ - fabric.util.drawArc = function(ctx, x, y, coords) { + fabric.util.drawArc = function(ctx, fx, fy, coords) { var rx = coords[0], ry = coords[1], rot = coords[2], large = coords[3], sweep = coords[4], - ex = coords[5], - ey = coords[6], - segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y); - for (var i = 0; i < segs.length; i++) { - var bez = segmentToBezier.apply(this, segs[i]); - ctx.bezierCurveTo.apply(ctx, bez); + tx = coords[5], + ty = coords[6], + segs = [[ ], [ ], [ ], [ ]], + segs_norm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot); + for (var i = 0; i < segs_norm.length; i++) { + segs[i][0] = segs_norm[i][0] + fx; + segs[i][1] = segs_norm[i][1] + fy; + segs[i][2] = segs_norm[i][2] + fx; + segs[i][3] = segs_norm[i][3] + fy; + segs[i][4] = segs_norm[i][4] + fx; + segs[i][5] = segs_norm[i][5] + fy; + ctx.bezierCurveTo.apply(ctx, segs[i]); } }; })(); @@ -4704,7 +4685,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { function getColorStop(el) { var style = el.getAttribute('style'), offset = el.getAttribute('offset'), - color, opacity; + color, colorAlpha, opacity; // convert percents to absolute values offset = parseFloat(offset) / (/%$/.test(offset) ? 100 : 1); @@ -4738,13 +4719,15 @@ fabric.ElementsParser.prototype.checkIfDone = function() { opacity = el.getAttribute('stop-opacity'); } - // convert rgba color to rgb color - alpha value has no affect in svg - color = new fabric.Color(color).toRgb(); + color = new fabric.Color(color); + colorAlpha = color.getAlpha(); + opacity = isNaN(parseFloat(opacity)) ? 1 : parseFloat(opacity); + opacity *= colorAlpha; return { offset: offset, - color: color, - opacity: isNaN(parseFloat(opacity)) ? 1 : parseFloat(opacity) + color: color.toRgb(), + opacity: opacity }; } @@ -4821,8 +4804,8 @@ fabric.ElementsParser.prototype.checkIfDone = function() { if (options.gradientTransform) { this.gradientTransform = options.gradientTransform; } - this.origX = options.left; - this.orgiY = options.top; + this.origX = options.left || this.origX; + this.origY = options.top || this.origY; }, /** @@ -5089,10 +5072,10 @@ fabric.ElementsParser.prototype.checkIfDone = function() { for (var prop in options) { //convert to percent units if (prop === 'x1' || prop === 'x2' || prop === 'r2') { - options[prop] = fabric.util.toFixed((options[prop] - object.origX) / object.width * 100, 2) + '%'; + options[prop] = fabric.util.toFixed((options[prop] - object.fill.origX) / object.width * 100, 2) + '%'; } else if (prop === 'y1' || prop === 'y2') { - options[prop] = fabric.util.toFixed((options[prop] - object.origY) / object.height * 100, 2) + '%'; + options[prop] = fabric.util.toFixed((options[prop] - object.fill.origY) / object.height * 100, 2) + '%'; } } } @@ -18342,10 +18325,30 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag data[i + 2] = Math.min(255, b + tb); break; case 'diff': + case 'difference': data[i] = Math.abs(r - tr); data[i + 1] = Math.abs(g - tg); data[i + 2] = Math.abs(b - tb); break; + case 'subtract': + var _r = r-tr; + var _g = g-tg; + var _b = b-tb; + + data[i] = (_r < 0) ? 0 : _r; + data[i + 1] = (_g < 0) ? 0 : _g; + data[i + 2] = (_b < 0) ? 0 : _b; + break; + case 'darken': + data[i] = Math.min(r, tr); + data[i + 1] = Math.min(g, tg); + data[i + 2] = Math.min(b, tb); + break; + case 'lighten': + data[i] = Math.max(r, tr); + data[i + 1] = Math.max(g, tg); + data[i + 2] = Math.max(b, tb); + break; } } @@ -21709,7 +21712,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot return; } - if (e.keyCode in this._keysMap) { + if (e.keyCode in this._keysMap && e.charCode === 0) { this[this._keysMap[e.keyCode]](e); } else if ((e.keyCode in this._ctrlKeysMap) && (e.ctrlKey || e.metaKey)) { @@ -21801,7 +21804,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot * @param {Event} e Event object */ onKeyPress: function(e) { - if (!this.isEditing || e.metaKey || e.ctrlKey || e.keyCode in this._keysMap) { + if (!this.isEditing || e.metaKey || e.ctrlKey || ( e.keyCode in this._keysMap && e.charCode === 0 )) { return; } diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 64fa156d..4c075d87 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.10"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],fabric.DPI=96,function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},transformPoint:function(e,t,n){return n?new fabric.Point(t[0]*e.x+t[1]*e.y,t[2]*e.x+t[3]*e.y):new fabric.Point(t[0]*e.x+t[1]*e.y+t[4],t[2]*e.x+t[3]*e.y+t[5])},invertTransform:function(e){var t=e.slice(),n=1/(e[0]*e[3]-e[1]*e[2]);t=[n*e[3],-n*e[1],-n*e[2],n*e[0],0,0];var r=fabric.util.transformPoint({x:e[4],y:e[5]},t);return t[4]=-r.x,t[5]=-r.y,t},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},parseUnit:function(e){var t=/\D{0,2}$/.exec(e),n=parseFloat(e);switch(t[0]){case"mm":return n*fabric.DPI/25.4;case"cm":return n*fabric.DPI/2.54;case"in":return n*fabric.DPI;case"pt":return n*fabric.DPI/72;case"pc":return n*fabric.DPI/72*12;default:return n}},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;sr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},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&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=Math.sin(s),h=Math.cos(s),p=Math.sin(o),d=Math.cos(o),v=l*u,m=-f*a,g=f*u,y=l*a,b=.25*(o-s),w=8/3*Math.sin(b)*Math.sin(b)/Math.sin(b*2),E=e+h-w*c,S=i+c+w*h,x=e+d,T=i+p,N=x+w*p,C=T-w*d;return t[r]=[v*E+m*S,g*E+y*S,v*N+m*C,g*N+y*C,v*x+m*T,g*x+y*T],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return et[3]?t[3]:t[0];if(t[0]===1&&t[3]===1&&t[4]===0&&t[5]===0)return;var n=e.ownerDocument.createElement("g");while(e.firstChild!=null)n.appendChild(e.firstChild);n.setAttribute("transform","matrix("+t[0]+" "+t[1]+" "+t[2]+" "+t[3]+" "+t[4]+" "+t[5]+")"),e.appendChild(n)}function x(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function T(e,t,n){t[n]&&t[n].toSVG&&e.push('','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.parseUnit,u=t.util.multiplyTransformMatrices,a={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},f={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(u){var l=(new RegExp(v)).exec(u).filter(function(e){return e!==""&&e!=null}),c=l[1],h=l.slice(2).map(parseFloat);switch(c){case"translate":s(a,h);break;case"rotate":h[0]=t.util.degreesToRadians(h[0]),e(a,h);break;case"scale":n(a,h);break;case"skewX":r(a,h);break;case"skewY":i(a,h);break;case"matrix":a=h}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,u,a){if(!n)return;var f=new Date;w(n);var l=n.getAttribute("viewBox"),c=o(n.getAttribute("width")),h=o(n.getAttribute("height")),p,d;if(l&&(l=l.match(r))){var v=parseFloat(l[1]),m=parseFloat(l[2]),g=1,y=1;p=parseFloat(l[3]),d=parseFloat(l[4]),c&&c!==p&&(g=c/p),h&&h!==d&&(y=h/d),E(n,[g,0,0,y,g*-v,y*-m])}var b=t.util.toArray(n.getElementsByTagName("*"));if(b.length===0&&t.isLikelyNode){b=n.selectNodes('//*[name(.)!="svg"]');var S=[];for(var x=0,T=b.length;x/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){S.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),S.has(e,function(r){r?S.get(e,function(e){var t=x(e);n(t.objects,t.options)}):new t.util.request(e,{ -method:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return T(t,e,"backgroundColor"),T(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]);if(e==="transparent"){this.setSource([255,255,255,0]);return}t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n\n']:this.type==="radial"&&(r=["\n']);for(var o=0;o\n');return r.push(this.type==="linear"?"\n":"\n"),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this._setImageSmoothing(),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},_setImageSmoothing:function(){var e=this.getContext();e.imageSmoothingEnabled=this.imageSmoothingEnabled,e.webkitImageSmoothingEnabled=this.imageSmoothingEnabled,e.mozImageSmoothingEnabled=this.imageSmoothingEnabled,e.msImageSmoothingEnabled=this.imageSmoothingEnabled,e.oImageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t&&t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice()},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e,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){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath -()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop,t=this.canvas.viewportTransform,n=this._points[0],r=this._points[1];e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5]),e.beginPath(),this._points.length===2&&n.x===r.x&&n.y===r.y&&(n.x-=.5,r.x+=.5),e.moveTo(n.x,n.y);for(var i=1,s=this._points.length;in.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e,!0))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e,!0),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t,n,r){r||(r=this.upperCanvasEl);var i=e(t,r),s=r.getBoundingClientRect(),o;return 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))),s.width===0||s.height===0?o={width:1,height:1}:o={width:r.width/s.width,height:r.height/s.height},{x:i.x*o.width,y:i.y*o.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&e.set("active",!0)},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center",canvas:this}),t.addWithUpdate(),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON -:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(!e||e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockScalingFlip:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){this.group&&this.group.transform(e,t),e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);if(this.group&&this.group.type==="path-group"){e.translate(-this.group.width/2,-this.group.height/2);var r=this.transformMatrix;r&&e.transform.apply(e,r)}e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform.apply(e,n),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_renderControls:function(e,n){var r=this.getViewportTransform();e.save();if(this.active&&!n){var i;this.group&&(i=t.util.transformPoint(this.group.getCenterPoint(),r),e.translate(i.x,i.y),e.rotate(s(this.group.angle))),i=t.util.transformPoint(this.getCenterPoint(),r,null!=this.group),this.group&&(i.x*=this.group.scaleX,i.y*=this.group.scaleY),e.translate(i.x,i.y),e.rotate(s(this.angle)),this.drawBorders(e),this.drawControls(e)}e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;e.save(),this.fill.toLive&&e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0);if(this.fill.gradientTransform){var t=this.fill.gradientTransform;e.transform.apply(e,t)}this.fillRule==="destination-over"?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}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=e(this.angle),r=this.getViewportTransform(),i=function(e){return fabric.util.transformPoint(e,r)},s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=t:f&&(o=t),l&&(s+=t),c&&(o+=t),this.currentWidth=s*this.scaleX,this.currentHeight=o*this.scaleY,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var h=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),p=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),d=Math.cos(p+n)*h,v=Math.sin(p+n)*h,m=Math.sin(n),g=Math.cos(n),y=this.getCenterPoint(),b=new fabric.Point(this.currentWidth,this.currentHeight),w=new fabric.Point(y.x-d,y.y-v),E=new fabric.Point(w.x+b.x*g,w.y+b.x*m),S=new fabric.Point(w.x-b.y*m,w.y+b.y*g),x=new fabric.Point(w.x+b.x/2*g,w.y+b.x/2*m),T=i(w),N=i(E),C=i(new fabric.Point(E.x-b.y*m,E.y+b.y*g)),k=i(S),L=i(new fabric.Point(w.x-b.y/2*m,w.y+b.y/2*g)),A=i(x),O=i(new fabric.Point(E.x-b.y/2*m,E.y+b.y/2*g)),M=i(new fabric.Point(S.x+b.x/2*g,S.y+b.x/2*m)),_=i(new fabric.Point(x.x,x.y)),D=Math.cos(p+n)*this.padding*Math.sqrt(2),P=Math.sin(p+n)*this.padding*Math.sqrt(2);return T=T.add(new fabric.Point(-D,-P)),N=N.add(new fabric.Point(P,-D)),C=C.add(new fabric.Point(D,P)),k=k.add(new fabric.Point(-P,D)),L=L.add(new fabric.Point((-D-P)/2,(-P+D)/2)),A=A.add(new fabric.Point((P-D)/2,-(P+D)/2)),O=O.add(new fabric.Point((P+D)/2,(P-D)/2)),M=M.add(new fabric.Point((D-P)/2,(D+P)/2)),_=_.add(new fabric.Point((P-D)/2,-(P+D)/2)),this.oCoords={tl:T,tr:N,br:C,bl:k,ml:L,mt:A,mr:O,mb:M,mtr:_},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.fillRule==="destination-over"?"evenodd":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)return"";var e=fabric.util.toFixed,t=this.getAngle(),n=this.getViewportTransform(),r=fabric.util.transformPoint(this.getCenterPoint(),n),i=fabric.Object.NUM_FRACTION_DIGITS,s=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>1?this.strokeWidth:0,f=this.strokeLineCap==="round"||this.strokeLineCap==="square",l=this.type==="line"&&this.width===1,c=this.type==="line"&&this.height===1,h=f&&c||this.type!=="line",p=f&&l||this.type!=="line";l?o=a/i:c&&(u=a/s),h&&(o+=a/i),p&&(u+=a/s);var d=fabric.util.transformPoint(new fabric.Point(o,u),r,!0),v=d.x,m=d.y;this.group&&(v*=this.group.scaleX,m*=this.group.scaleY),e.strokeRect(~~(-(v/2)-t)-.5,~~(-(m/2)-t)-.5,~~(v+n)+1,~~(m+n)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var g=(-m-t*2)/2;e.beginPath(),e.moveTo(0,g),e.lineTo(0,g-this.rotatingPointOffset),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.getViewportTransform(),i=this.strokeWidth>1?this.strokeWidth:0,s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=i:f&&(o=i),l&&(s+=i),c&&(o+=i),s*=this.scaleX,o*=this.scaleY;var h=fabric.util.transformPoint(new fabric.Point(s,o),r,!0),p=h.x,d=h.y,v=-(p/2),m=-(d/2),g=this.padding,y=n,b=n-t,w=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1,e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,w,v-y-g,m-y-g),this._drawControl("tr",e,w,v+p-y+g,m-y-g),this._drawControl("bl",e,w,v-y-g,m+d+b+g),this._drawControl("br",e,w,v+p+b+g,m+d+b+g),this.get("lockUniScaling")||(this._drawControl("mt",e,w,v+p/2-y,m-y-g),this._drawControl("mb",e,w,v+p/2-y,m+d+b+g),this._drawControl("mr",e,w,v+p+b+g,m+d/2-y),this._drawControl("ml",e,w,v-y-g,m+d/2-y)),this.hasRotatingPoint&&this._drawControl("mtr",e,w,v+p/2-y,m-this.rotatingPointOffset-this.cornerSize/2-g),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize;this.isControlVisible(e)&&(t()||this.transparentCorners||n.clearRect(i,s,o,o),n[r](i,s,o,o))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;rthis.x2?this.x2:this.x1),i=-this.height/2-(this.y1>this.y2?this.y2:this.y1);n="translate("+r+", "+i+") "}return t.push("\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*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("radius",e.radius||0)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=0,r=0;return this.group&&(n=this.left+this.radius,r=this.top+this.radius),t.push("\n'),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,0,n,!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),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=0,r=0;return this.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:0,u=t?this.top:0,a=n!==0||r!==0,f=.4477152502;e.beginPath(),t||e.translate(-this.width/2,-this.height/2),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;return this.group||(n=-this.width/2,r=-this.height/2),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={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i\n'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n\n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r\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 r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),e&&(this._objects.push(e),e.group=this),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e){if(!this.visible)return;e.save(),this.clipTo&&t.util.clipContext(this,e);for(var n=0,r=this._objects.length;n\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 i=this.fill;this.fill=null,t.push("\n'),this.fill=i}return t.push("\n"),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e,t){this._element&&e.drawImage(this._element,t?this.left:-this.width/2,t?this.top:-this.height/2,this.width,this.height),this._renderStroke(e)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||0},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._setupFillRule(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._restoreFillRule(e),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._transform(e,t);var n=this.transformMatrix,r=this.group&&this.group.type==="path-group";r&&e.translate(-this.group.width/2,-this.group.height/2),n&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),r&&e.translate(this.left,this.top),this._render(e),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n+(this.group?this.left:0),textTop:r+(this.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),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE),n.originX||(n.originX="left");var i=new t.Text(e.textContent,n),s=0;return i.originX==="left"&&(s=i.getWidth()/2),i.originX==="right"&&(s=-i.getWidth()/2),i.set({left:i.getLeft()+s,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.__lastSelected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?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: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(e){var t=this.getSelectedText(),n=this._getClipboardData(e);n&&n.setData("text",t),this.copiedText=t,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(e){var t=null,n=this._getClipboardData(e);n?t=n.getData("text"):t=this.copiedText,t&&this.insertChars(t)},cut:function(e){if(this.selectionStart===this.selectionEnd)return;this.copy(),this.removeChars(e)},_getClipboardData:function(e){return e&&(e.clipboardData||fabric.window.clipboardData)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode in this._keysMap)return;this.insertChars(String.fromCharCode(e.which)),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e,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-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.10"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],fabric.DPI=96,function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},transformPoint:function(e,t,n){return n?new fabric.Point(t[0]*e.x+t[1]*e.y,t[2]*e.x+t[3]*e.y):new fabric.Point(t[0]*e.x+t[1]*e.y+t[4],t[2]*e.x+t[3]*e.y+t[5])},invertTransform:function(e){var t=e.slice(),n=1/(e[0]*e[3]-e[1]*e[2]);t=[n*e[3],-n*e[1],-n*e[2],n*e[0],0,0];var r=fabric.util.transformPoint({x:e[4],y:e[5]},t);return t[4]=-r.x,t[5]=-r.y,t},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},parseUnit:function(e){var t=/\D{0,2}$/.exec(e),n=parseFloat(e);switch(t[0]){case"mm":return n*fabric.DPI/25.4;case"cm":return n*fabric.DPI/2.54;case"in":return n*fabric.DPI;case"pt":return n*fabric.DPI/72;case"pc":return n*fabric.DPI/72*12;default:return n}},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;sr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},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*.5))),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)}var e={},t={},n=Array.prototype.join;fabric.util.drawArc=function(e,t,n,i){var s=i[0],o=i[1],u=i[2],a=i[3],f=i[4],l=i[5],c=i[6],h=[[],[],[],[]],p=r(l-t,c-n,s,o,a,f,u);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){e&&(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return et[3]?t[3]:t[0];if(t[0]===1&&t[3]===1&&t[4]===0&&t[5]===0)return;var n=e.ownerDocument.createElement("g");while(e.firstChild!=null)n.appendChild(e.firstChild);n.setAttribute("transform","matrix("+t[0]+" "+t[1]+" "+t[2]+" "+t[3]+" "+t[4]+" "+t[5]+")"),e.appendChild(n)}function x(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function T(e,t,n){t[n]&&t[n].toSVG&&e.push('','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.parseUnit,u=t.util.multiplyTransformMatrices,a={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},f={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(u){var l=(new RegExp(v)).exec(u).filter(function(e){return e!==""&&e!=null}),c=l[1],h=l.slice(2).map(parseFloat);switch(c){case"translate":s(a,h);break;case"rotate":h[0]=t.util.degreesToRadians(h[0]),e(a,h);break;case"scale":n(a,h);break;case"skewX":r(a,h);break;case"skewY":i(a,h);break;case"matrix":a=h}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,u,a){if(!n)return;var f=new Date;w(n);var l=n.getAttribute("viewBox"),c=o(n.getAttribute("width")),h=o(n.getAttribute("height")),p,d;if(l&&(l=l.match(r))){var v=parseFloat(l[1]),m=parseFloat(l[2]),g=1,y=1;p=parseFloat(l[3]),d=parseFloat(l[4]),c&&c!==p&&(g=c/p),h&&h!==d&&(y=h/d),E(n,[g,0,0,y,g*-v,y*-m])}var b=t.util.toArray(n.getElementsByTagName("*"));if(b.length===0&&t.isLikelyNode){b=n.selectNodes('//*[name(.)!="svg"]');var S=[];for(var x=0,T=b.length;x/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){S.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),S.has(e,function(r){r?S.get(e,function(e){var t=x(e);n(t.objects,t.options)}):new t.util.request(e,{method +:"get",onComplete:i})})},loadSVGFromString:function(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return T(t,e,"backgroundColor"),T(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]);if(e==="transparent"){this.setSource([255,255,255,0]);return}t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n\n']:this.type==="radial"&&(r=["\n']);for(var o=0;o\n');return r.push(this.type==="linear"?"\n":"\n"),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this._setImageSmoothing(),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},_setImageSmoothing:function(){var e=this.getContext();e.imageSmoothingEnabled=this.imageSmoothingEnabled,e.webkitImageSmoothingEnabled=this.imageSmoothingEnabled,e.mozImageSmoothingEnabled=this.imageSmoothingEnabled,e.msImageSmoothingEnabled=this.imageSmoothingEnabled,e.oImageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t&&t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice()},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e,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){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render +()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop,t=this.canvas.viewportTransform,n=this._points[0],r=this._points[1];e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5]),e.beginPath(),this._points.length===2&&n.x===r.x&&n.y===r.y&&(n.x-=.5,r.x+=.5),e.moveTo(n.x,n.y);for(var i=1,s=this._points.length;in.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e,!0))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e,!0),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t,n,r){r||(r=this.upperCanvasEl);var i=e(t,r),s=r.getBoundingClientRect(),o;return 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))),s.width===0||s.height===0?o={width:1,height:1}:o={width:r.width/s.width,height:r.height/s.height},{x:i.x*o.width,y:i.y*o.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&e.set("active",!0)},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center",canvas:this}),t.addWithUpdate(),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util +.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(!e||e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockScalingFlip:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){this.group&&this.group.transform(e,t),e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);if(this.group&&this.group.type==="path-group"){e.translate(-this.group.width/2,-this.group.height/2);var r=this.transformMatrix;r&&e.transform.apply(e,r)}e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this._restoreFillRule(e),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform.apply(e,n),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_renderControls:function(e,n){var r=this.getViewportTransform();e.save();if(this.active&&!n){var i;this.group&&(i=t.util.transformPoint(this.group.getCenterPoint(),r),e.translate(i.x,i.y),e.rotate(s(this.group.angle))),i=t.util.transformPoint(this.getCenterPoint(),r,null!=this.group),this.group&&(i.x*=this.group.scaleX,i.y*=this.group.scaleY),e.translate(i.x,i.y),e.rotate(s(this.angle)),this.drawBorders(e),this.drawControls(e)}e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;e.save(),this.fill.toLive&&e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0);if(this.fill.gradientTransform){var t=this.fill.gradientTransform;e.transform.apply(e,t)}this.fillRule==="destination-over"?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}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=e(this.angle),r=this.getViewportTransform(),i=function(e){return fabric.util.transformPoint(e,r)},s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=t:f&&(o=t),l&&(s+=t),c&&(o+=t),this.currentWidth=s*this.scaleX,this.currentHeight=o*this.scaleY,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var h=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),p=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),d=Math.cos(p+n)*h,v=Math.sin(p+n)*h,m=Math.sin(n),g=Math.cos(n),y=this.getCenterPoint(),b=new fabric.Point(this.currentWidth,this.currentHeight),w=new fabric.Point(y.x-d,y.y-v),E=new fabric.Point(w.x+b.x*g,w.y+b.x*m),S=new fabric.Point(w.x-b.y*m,w.y+b.y*g),x=new fabric.Point(w.x+b.x/2*g,w.y+b.x/2*m),T=i(w),N=i(E),C=i(new fabric.Point(E.x-b.y*m,E.y+b.y*g)),k=i(S),L=i(new fabric.Point(w.x-b.y/2*m,w.y+b.y/2*g)),A=i(x),O=i(new fabric.Point(E.x-b.y/2*m,E.y+b.y/2*g)),M=i(new fabric.Point(S.x+b.x/2*g,S.y+b.x/2*m)),_=i(new fabric.Point(x.x,x.y)),D=Math.cos(p+n)*this.padding*Math.sqrt(2),P=Math.sin(p+n)*this.padding*Math.sqrt(2);return T=T.add(new fabric.Point(-D,-P)),N=N.add(new fabric.Point(P,-D)),C=C.add(new fabric.Point(D,P)),k=k.add(new fabric.Point(-P,D)),L=L.add(new fabric.Point((-D-P)/2,(-P+D)/2)),A=A.add(new fabric.Point((P-D)/2,-(P+D)/2)),O=O.add(new fabric.Point((P+D)/2,(P-D)/2)),M=M.add(new fabric.Point((D-P)/2,(D+P)/2)),_=_.add(new fabric.Point((P-D)/2,-(P+D)/2)),this.oCoords={tl:T,tr:N,br:C,bl:k,ml:L,mt:A,mr:O,mb:M,mtr:_},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.fillRule==="destination-over"?"evenodd":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)return"";var e=fabric.util.toFixed,t=this.getAngle(),n=this.getViewportTransform(),r=fabric.util.transformPoint(this.getCenterPoint(),n),i=fabric.Object.NUM_FRACTION_DIGITS,s=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>1?this.strokeWidth:0,f=this.strokeLineCap==="round"||this.strokeLineCap==="square",l=this.type==="line"&&this.width===1,c=this.type==="line"&&this.height===1,h=f&&c||this.type!=="line",p=f&&l||this.type!=="line";l?o=a/i:c&&(u=a/s),h&&(o+=a/i),p&&(u+=a/s);var d=fabric.util.transformPoint(new fabric.Point(o,u),r,!0),v=d.x,m=d.y;this.group&&(v*=this.group.scaleX,m*=this.group.scaleY),e.strokeRect(~~(-(v/2)-t)-.5,~~(-(m/2)-t)-.5,~~(v+n)+1,~~(m+n)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var g=(-m-t*2)/2;e.beginPath(),e.moveTo(0,g),e.lineTo(0,g-this.rotatingPointOffset),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.getViewportTransform(),i=this.strokeWidth>1?this.strokeWidth:0,s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=i:f&&(o=i),l&&(s+=i),c&&(o+=i),s*=this.scaleX,o*=this.scaleY;var h=fabric.util.transformPoint(new fabric.Point(s,o),r,!0),p=h.x,d=h.y,v=-(p/2),m=-(d/2),g=this.padding,y=n,b=n-t,w=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1,e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,w,v-y-g,m-y-g),this._drawControl("tr",e,w,v+p-y+g,m-y-g),this._drawControl("bl",e,w,v-y-g,m+d+b+g),this._drawControl("br",e,w,v+p+b+g,m+d+b+g),this.get("lockUniScaling")||(this._drawControl("mt",e,w,v+p/2-y,m-y-g),this._drawControl("mb",e,w,v+p/2-y,m+d+b+g),this._drawControl("mr",e,w,v+p+b+g,m+d/2-y),this._drawControl("ml",e,w,v-y-g,m+d/2-y)),this.hasRotatingPoint&&this._drawControl("mtr",e,w,v+p/2-y,m-this.rotatingPointOffset-this.cornerSize/2-g),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize;this.isControlVisible(e)&&(t()||this.transparentCorners||n.clearRect(i,s,o,o),n[r](i,s,o,o))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;rthis.x2?this.x2:this.x1),i=-this.height/2-(this.y1>this.y2?this.y2:this.y1);n="translate("+r+", "+i+") "}return t.push("\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*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",radius:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("radius",e.radius||0)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=0,r=0;return this.group&&(n=this.left+this.radius,r=this.top+ +this.radius),t.push("\n'),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,0,n,!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),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=0,r=0;return this.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:0,u=t?this.top:0,a=n!==0||r!==0,f=.4477152502;e.beginPath(),t||e.translate(-this.width/2,-this.height/2),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;return this.group||(n=-this.width/2,r=-this.height/2),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={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",points:null,initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i\n'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n\n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r\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 r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),e&&(this._objects.push(e),e.group=this),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e){if(!this.visible)return;e.save(),this.clipTo&&t.util.clipContext(this,e);for(var n=0,r=this._objects.length;n\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 i=this.fill;this.fill=null,t.push("\n'),this.fill=i}return t.push("\n"),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(!this._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e,t){this._element&&e.drawImage(this._element,t?this.left:-this.width/2,t?this.top:-this.height/2,this.width,this.height),this._renderStroke(e)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||0},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._setupFillRule(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._restoreFillRule(e),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._transform(e,t);var n=this.transformMatrix,r=this.group&&this.group.type==="path-group";r&&e.translate(-this.group.width/2,-this.group.height/2),n&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),r&&e.translate(this.left,this.top),this._render(e),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n+(this.group?this.left:0),textTop:r+(this.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),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE),n.originX||(n.originX="left");var i=new t.Text(e.textContent,n),s=0;return i.originX==="left"&&(s=i.getWidth()/2),i.originX==="right"&&(s=-i.getWidth()/2),i.set({left:i.getLeft()+s,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.__lastSelected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?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: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap&&e.charCode===0)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(e){var t=this.getSelectedText(),n=this._getClipboardData(e);n&&n.setData("text",t),this.copiedText=t,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(e){var t=null,n=this._getClipboardData(e);n?t=n.getData("text"):t=this.copiedText,t&&this.insertChars(t)},cut:function(e){if(this.selectionStart===this.selectionEnd)return;this.copy(),this.removeChars(e)},_getClipboardData:function(e){return e&&(e.clipboardData||fabric.window.clipboardData)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode in this._keysMap&&e.charCode===0)return;this.insertChars(String.fromCharCode(e.which)),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e,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 348ec9859af2771894095a74a5eb5944dc966c24..fd1892f586111922e16247bd601b94c291c947cd 100644 GIT binary patch literal 57091 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

Qi@FdzLIuZ%>V9MR(?ScfYO5i?JuDWhXas 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 U@vtRfUYI6Y8y=!~h$dNGm{rwdblGp$V-sJHl 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index d95e51d4..6ca7cb82 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -885,132 +885,107 @@ fabric.Collection = { var arcToSegmentsCache = { }, segmentToBezierCache = { }, - _join = Array.prototype.join, - argsString; - - // Generous contribution by Raph Levien, from libsvg-0.1.0.tar.gz - function arcToSegments(x, y, rx, ry, large, sweep, rotateX, ox, oy) { - - argsString = _join.call(arguments); + _join = Array.prototype.join; + /* Adapted from http://dxr.mozilla.org/mozilla-central/source/content/svg/content/src/nsSVGPathDataParser.cpp + * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here + * http://mozilla.org/MPL/2.0/ + */ + function arcToSegments(toX, toY, rx, ry, large, sweep, rotateX) { + var argsString = _join.call(arguments); if (arcToSegmentsCache[argsString]) { return arcToSegmentsCache[argsString]; } - var coords = getXYCoords(rotateX, rx, ry, ox, oy, x, y), - - d = (coords.x1 - coords.x0) * (coords.x1 - coords.x0) + - (coords.y1 - coords.y0) * (coords.y1 - coords.y0), - - sfactorSq = 1 / d - 0.25; - - if (sfactorSq < 0) { - sfactorSq = 0; - } - - var sfactor = Math.sqrt(sfactorSq); - if (sweep === large) { - sfactor = -sfactor; - } - - var xc = 0.5 * (coords.x0 + coords.x1) - sfactor * (coords.y1 - coords.y0), - yc = 0.5 * (coords.y0 + coords.y1) + sfactor * (coords.x1 - coords.x0), - th0 = Math.atan2(coords.y0 - yc, coords.x0 - xc), - th1 = Math.atan2(coords.y1 - yc, coords.x1 - xc), - thArc = th1 - th0; - - if (thArc < 0 && sweep === 1) { - thArc += 2 * Math.PI; - } - else if (thArc > 0 && sweep === 0) { - thArc -= 2 * Math.PI; - } - - var segments = Math.ceil(Math.abs(thArc / (Math.PI * 0.5 + 0.001))), - result = []; - - for (var i = 0; i < segments; i++) { - var th2 = th0 + i * thArc / segments, - th3 = th0 + (i + 1) * thArc / segments; - - result[i] = [xc, yc, th2, th3, rx, ry, coords.sinTh, coords.cosTh]; - } - - arcToSegmentsCache[argsString] = result; - return result; - } - - function getXYCoords(rotateX, rx, ry, ox, oy, x, y) { - - var th = rotateX * (Math.PI / 180), + var PI = Math.PI, th = rotateX * (PI / 180), sinTh = Math.sin(th), - cosTh = Math.cos(th); + cosTh = Math.cos(th), + fromX = 0, fromY = 0; rx = Math.abs(rx); ry = Math.abs(ry); - var px = cosTh * (ox - x) + sinTh * (oy - y), - py = cosTh * (oy - y) - sinTh * (ox - x), - pl = (px * px) / (rx * rx) + (py * py) / (ry * ry); + var px = -cosTh * toX - sinTh * toY, + py = -cosTh * toY + sinTh * toX, + rx2 = rx * rx, ry2 = ry * ry, py2 = py * py, px2 = px * px, + pl = 4 * rx2 * ry2 - rx2 * py2 - ry2 * px2, + root = 0; - pl *= 0.25; - - if (pl > 1) { - pl = Math.sqrt(pl); - rx *= pl; - ry *= pl; + if (pl < 0) { + var s = Math.sqrt(1 - 0.25 * pl/(rx2 * ry2)); + rx *= s; + ry *= s; + } else { + root = (large === sweep ? -0.5 : 0.5) * + Math.sqrt( pl /(rx2 * py2 + ry2 * px2)); } - var a00 = cosTh / rx, - a01 = sinTh / rx, - a10 = (-sinTh) / ry, - a11 = (cosTh) / ry; + var cx = root * rx * py / ry, + cy = -root * ry * px / rx, + cx1 = cosTh * cx - sinTh * cy + toX / 2, + cy1 = sinTh * cx + cosTh * cy + toY / 2, + mTheta = calcVectorAngle(1, 0, (px - cx) / rx, (py - cy) / ry), + dtheta = calcVectorAngle((px - cx) / rx, (py - cy) / ry, (-px -cx) / rx, (-py -cy) / ry); - return { - x0: a00 * ox + a01 * oy, - y0: a10 * ox + a11 * oy, - x1: a00 * x + a01 * y, - y1: a10 * x + a11 * y, - sinTh: sinTh, - cosTh: cosTh - }; + if (sweep === 0 && dtheta > 0) { + dtheta -= 2 * PI; + } else if (sweep === 1 && dtheta < 0) { + dtheta += 2 * PI; + } + + // Convert into cubic bezier segments <= 90deg + var segments = Math.ceil(Math.abs(dtheta / (PI * 0.5))), + result = [], mDelta = dtheta / segments, + mT = 8 / 3 * Math.sin(mDelta / 4) * Math.sin(mDelta / 4) / Math.sin(mDelta / 2), + th3 = mTheta + mDelta; + + for (var i = 0; i < segments; i++) { + result[i] = segmentToBezier(mTheta, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY); + fromX = result[i][4]; + fromY = result[i][5]; + mTheta += mDelta; + th3 += mDelta; + } + arcToSegmentsCache[argsString] = result; + return result; } - function segmentToBezier(cx, cy, th0, th1, rx, ry, sinTh, cosTh) { - argsString = _join.call(arguments); - - if (segmentToBezierCache[argsString]) { - return segmentToBezierCache[argsString]; + function segmentToBezier(th2, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY) { + var argsString2 = _join.call(arguments); + if (segmentToBezierCache[argsString2]) { + return segmentToBezierCache[argsString2]; } + + var costh2 = Math.cos(th2), + sinth2 = Math.sin(th2), + costh3 = Math.cos(th3), + sinth3 = Math.sin(th3), + toX = cosTh * rx * costh3 - sinTh * ry * sinth3 + cx1, + toY = sinTh * rx * costh3 + cosTh * ry * sinth3 + cy1, + cp1X = fromX + mT * ( - cosTh * rx * sinth2 - sinTh * ry * costh2), + cp1Y = fromY + mT * ( - sinTh * rx * sinth2 + cosTh * ry * costh2), + cp2X = toX + mT * ( cosTh * rx * sinth3 + sinTh * ry * costh3), + cp2Y = toY + mT * ( sinTh * rx * sinth3 - cosTh * ry * costh3); - var sinTh0 = Math.sin(th0), - cosTh0 = Math.cos(th0), - sinTh1 = Math.sin(th1), - cosTh1 = Math.cos(th1), - - a00 = cosTh * rx, - a01 = -sinTh * ry, - a10 = sinTh * rx, - a11 = cosTh * ry, - thHalf = 0.25 * (th1 - th0), - - t = (8 / 3) * Math.sin(thHalf) * - Math.sin(thHalf) / Math.sin(thHalf * 2), - - x1 = cx + cosTh0 - t * sinTh0, - y1 = cy + sinTh0 + t * cosTh0, - x3 = cx + cosTh1, - y3 = cy + sinTh1, - x2 = x3 + t * sinTh1, - y2 = y3 - t * cosTh1; - - segmentToBezierCache[argsString] = [ - a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, - a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, - a00 * x3 + a01 * y3, a10 * x3 + a11 * y3 + segmentToBezierCache[argsString2] = [ + cp1X, cp1Y, + cp2X, cp2Y, + toX, toY ]; + return segmentToBezierCache[argsString2]; + } - return segmentToBezierCache[argsString]; + /* + * Private + */ + function calcVectorAngle(ux, uy, vx, vy) { + var ta = Math.atan2(uy, ux), + tb = Math.atan2(vy, vx); + if (tb >= ta) { + return tb - ta; + } else { + return 2 * Math.PI - (ta - tb); + } } /** @@ -1020,18 +995,24 @@ fabric.Collection = { * @param {Number} y * @param {Array} coords */ - fabric.util.drawArc = function(ctx, x, y, coords) { + fabric.util.drawArc = function(ctx, fx, fy, coords) { var rx = coords[0], ry = coords[1], rot = coords[2], large = coords[3], sweep = coords[4], - ex = coords[5], - ey = coords[6], - segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y); - for (var i = 0; i < segs.length; i++) { - var bez = segmentToBezier.apply(this, segs[i]); - ctx.bezierCurveTo.apply(ctx, bez); + tx = coords[5], + ty = coords[6], + segs = [[ ], [ ], [ ], [ ]], + segs_norm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot); + for (var i = 0; i < segs_norm.length; i++) { + segs[i][0] = segs_norm[i][0] + fx; + segs[i][1] = segs_norm[i][1] + fy; + segs[i][2] = segs_norm[i][2] + fx; + segs[i][3] = segs_norm[i][3] + fy; + segs[i][4] = segs_norm[i][4] + fx; + segs[i][5] = segs_norm[i][5] + fy; + ctx.bezierCurveTo.apply(ctx, segs[i]); } }; })(); @@ -4704,7 +4685,7 @@ fabric.ElementsParser.prototype.checkIfDone = function() { function getColorStop(el) { var style = el.getAttribute('style'), offset = el.getAttribute('offset'), - color, opacity; + color, colorAlpha, opacity; // convert percents to absolute values offset = parseFloat(offset) / (/%$/.test(offset) ? 100 : 1); @@ -4738,13 +4719,15 @@ fabric.ElementsParser.prototype.checkIfDone = function() { opacity = el.getAttribute('stop-opacity'); } - // convert rgba color to rgb color - alpha value has no affect in svg - color = new fabric.Color(color).toRgb(); + color = new fabric.Color(color); + colorAlpha = color.getAlpha(); + opacity = isNaN(parseFloat(opacity)) ? 1 : parseFloat(opacity); + opacity *= colorAlpha; return { offset: offset, - color: color, - opacity: isNaN(parseFloat(opacity)) ? 1 : parseFloat(opacity) + color: color.toRgb(), + opacity: opacity }; } @@ -4821,8 +4804,8 @@ fabric.ElementsParser.prototype.checkIfDone = function() { if (options.gradientTransform) { this.gradientTransform = options.gradientTransform; } - this.origX = options.left; - this.orgiY = options.top; + this.origX = options.left || this.origX; + this.origY = options.top || this.origY; }, /** @@ -5089,10 +5072,10 @@ fabric.ElementsParser.prototype.checkIfDone = function() { for (var prop in options) { //convert to percent units if (prop === 'x1' || prop === 'x2' || prop === 'r2') { - options[prop] = fabric.util.toFixed((options[prop] - object.origX) / object.width * 100, 2) + '%'; + options[prop] = fabric.util.toFixed((options[prop] - object.fill.origX) / object.width * 100, 2) + '%'; } else if (prop === 'y1' || prop === 'y2') { - options[prop] = fabric.util.toFixed((options[prop] - object.origY) / object.height * 100, 2) + '%'; + options[prop] = fabric.util.toFixed((options[prop] - object.fill.origY) / object.height * 100, 2) + '%'; } } } @@ -18342,10 +18325,30 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag data[i + 2] = Math.min(255, b + tb); break; case 'diff': + case 'difference': data[i] = Math.abs(r - tr); data[i + 1] = Math.abs(g - tg); data[i + 2] = Math.abs(b - tb); break; + case 'subtract': + var _r = r-tr; + var _g = g-tg; + var _b = b-tb; + + data[i] = (_r < 0) ? 0 : _r; + data[i + 1] = (_g < 0) ? 0 : _g; + data[i + 2] = (_b < 0) ? 0 : _b; + break; + case 'darken': + data[i] = Math.min(r, tr); + data[i + 1] = Math.min(g, tg); + data[i + 2] = Math.min(b, tb); + break; + case 'lighten': + data[i] = Math.max(r, tr); + data[i + 1] = Math.max(g, tg); + data[i + 2] = Math.max(b, tb); + break; } } @@ -21709,7 +21712,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot return; } - if (e.keyCode in this._keysMap) { + if (e.keyCode in this._keysMap && e.charCode === 0) { this[this._keysMap[e.keyCode]](e); } else if ((e.keyCode in this._ctrlKeysMap) && (e.ctrlKey || e.metaKey)) { @@ -21801,7 +21804,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot * @param {Event} e Event object */ onKeyPress: function(e) { - if (!this.isEditing || e.metaKey || e.ctrlKey || e.keyCode in this._keysMap) { + if (!this.isEditing || e.metaKey || e.ctrlKey || ( e.keyCode in this._keysMap && e.charCode === 0 )) { return; }