From 1c1b7e4b9549f4c4b892e6c953c4d782a2052ca3 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 1 Jun 2013 18:08:36 +0200 Subject: [PATCH] Fix function body matching regex. Add `fabric.util.getFunctionBody` --- dist/all.js | 13 ++++++++----- dist/all.min.js | 12 ++++++------ dist/all.min.js.gz | Bin 49401 -> 49385 bytes src/brushes/pattern_brush.class.js | 5 ++--- src/pattern.class.js | 3 +-- src/util/misc.js | 5 +++++ test/unit/util.js | 15 ++++++++++++++- 7 files changed, 36 insertions(+), 17 deletions(-) diff --git a/dist/all.js b/dist/all.js index c872a36d..7064bfe2 100644 --- a/dist/all.js +++ b/dist/all.js @@ -2448,6 +2448,10 @@ fabric.Collection = { ]; } + function getFunctionBody(fn) { + return String(fn).match(/function[^{]*\{([\s\S]*)\}/)[1]; + } + fabric.util.removeFromArray = removeFromArray; fabric.util.degreesToRadians = degreesToRadians; fabric.util.radiansToDegrees = radiansToDegrees; @@ -2468,6 +2472,7 @@ fabric.Collection = { fabric.util.createAccessors = createAccessors; fabric.util.clipContext = clipContext; fabric.util.multiplyTransformMatrices = multiplyTransformMatrices; + fabric.util.getFunctionBody = getFunctionBody; })(); @@ -5543,8 +5548,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ // callback if (typeof this.source === 'function') { - source = String(this.source) - .match(/function\s+\w*\s*\(.*\)\s+\{([\s\S]*)\}/)[1]; + source = fabric.util.getFunctionBody(this.source); } // element else if (typeof this.source.src === 'string') { @@ -8134,9 +8138,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab }, getPatternSrcBody: function() { - return String(this.getPatternSrc) - .match(/function\s*\w*\s*(.*)\s*\{([\s\S]*)\}/)[1] - .replace('this.color', '"' + this.color + '"'); + return fabric.util.getFunctionBody(this.getPatternSrc) + .replace('this.color', '"' + this.color + '"'); }, /** diff --git a/dist/all.min.js b/dist/all.min.js index 8376218d..3f2e180e 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,6 +1,6 @@ -/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.1.17"};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";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(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)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){e||(e={});var t=+(new Date),n=e.duration||500,r=t+n,i,s=e.onChange||function(){},o=e.abort||function(){return!1},u=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},a="startValue"in e?e.startValue:0,f="endValue"in e?e.endValue:100,l=e.byValue||f-a;e.onStart&&e.onStart(),function c(){i=+(new Date);var f=i>r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function d(e,t,n){if(e){var r=fabric.util.createImage();r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function v(e,t){function n(){++i===s&&t&&t(r)}var r=[],i=0,s=e.length;e.forEach(function(e,t){if(!e.type)return;var i=fabric.util.getKlass(e.type);i.async?i.fromObject(e,function(e,i){i||(r[t]=e),n()}):(r[t]=i.fromObject(e),n())})}function m(e,t,n){var r;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function g(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function b(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function w(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function E(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))}}function S(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function x(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]]}var e=Math.sqrt,t=Math.atan2;fabric.util={};var i=Math.PI/180,c=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},h=function(){return c.apply(fabric.window,arguments)};fabric.util.removeFromArray=n,fabric.util.degreesToRadians=s,fabric.util.radiansToDegrees=o,fabric.util.rotatePoint=u,fabric.util.toFixed=a,fabric.util.getRandomInt=r,fabric.util.falseFunction=f,fabric.util.animate=l,fabric.util.requestAnimFrame=h,fabric.util.getKlass=p,fabric.util.loadImage=d,fabric.util.enlivenObjects=v,fabric.util.groupSVGElements=m,fabric.util.populateWithProperties=g,fabric.util.drawDashedLine=y,fabric.util.createCanvasElement=b,fabric.util.createImage=w,fabric.util.createAccessors=E,fabric.util.clipContext=S,fabric.util.multiplyTransformMatrices=x}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>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 e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t,n,r={left:0,top:0},i=e&&e.ownerDocument,s={left:0,top:0},o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!i)return{left:0,top:0};for(var u in o)s[o[u]]+=parseInt(f(e,u),10)||0;return t=i.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),i!=null&&i===i.window?n=i:n=i.nodeType===9&&(i.defaultView||i.parentWindow),{left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)+s.left,top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0)+s.top}}function f(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementStyle=f}(),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}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){w.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),w.has(e,function(r){r?w.get(e,function(e){var t=S(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function S(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function x(e,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)}function T(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function N(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}function C(e){var t=e.getElementsByTagName("linearGradient"),n=e.getElementsByTagName("radialGradient"),r,i,s={};i=t.length;for(;i--;)r=t[i],s[r.getAttribute("id")]=r;i=n.length;for(;i--;)r=n[i],s[r.getAttribute("id")]=r;return s}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices;t.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];var u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.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(){function e(e){var t=e.getAttribute("style"),n=e.getAttribute("offset"),r,i;n=parseFloat(n)/(/%$/.test(n)?100:1);if(t){var s=t.split(/\s*;\s*/);s[s.length-1]===""&&s.pop();for(var o=s.length;o--;){var u=s[o].split(/\s*:\s*/),a=u[0].trim(),f=u[1].trim();a==="stop-color"?r=f:a==="stop-opacity"&&(i=f)}}return r||(r=e.getAttribute("stop-color")),i||(i=e.getAttribute("stop-opacity")),r=(new fabric.Color(r)).toRgb(),{offset:n,color:r,opacity:i}}function t(e,t){for(var n in t){if(typeof t[n]=="string"&&/^\d+%$/.test(t[n])){var r=parseFloat(t[n],10);if(n==="x1"||n==="x2"||n==="r2")t[n]=fabric.util.toFixed(e.width*r/100,2);else if(n==="y1"||n==="y2")t[n]=fabric.util.toFixed(e.height*r/100,2)}if(n==="x1"||n==="x2")t[n]-=fabric.util.toFixed(e.width/2,2);else if(n==="y1"||n==="y2")t[n]-=fabric.util.toFixed(e.height/2,2)}}function n(e,t){for(var n in t){if(n==="x1"||n==="x2")t[n]+=fabric.util.toFixed(e.width/2,2);else if(n==="y1"||n==="y2")t[n]+=fabric.util.toFixed(e.height/2,2);if(n==="x1"||n==="x2"||n==="r2")t[n]=fabric.util.toFixed(t[n]/e.width*100,2)+"%";else if(n==="y1"||n==="y2")t[n]=fabric.util.toFixed(t[n]/e.height*100,2)+"%"}}fabric.Gradient=fabric.util.createClass({initialize:function(e){e||(e={});var t={};this.id=fabric.Object.__uid++,this.type=e.type||"linear",t={x1:e.coords.x1||0,y1:e.coords.y1||0,x2:e.coords.x2||0,y2:e.coords.y2||0},this.type==="radial"&&(t.r1=e.coords.r1||0,t.r2=e.coords.r2||0),this.coords=t,this.gradientUnits=e.gradientUnits||"objectBoundingBox",this.colorStops=e.colorStops.slice()},addColorStop:function(e){for(var t in e){var n=new fabric.Color(e[t]);this.colorStops.push({offset:t,color:n.toRgb(),opacity:n.getAlpha()})}return this},toObject:function(){return{type:this.type,coords:this.coords,gradientUnits:this.gradientUnits,colorStops:this.colorStops}},toSVG:function(e,t){var r=fabric.util.object.clone(this.coords),i;this.colorStops.sort(function(e,t){return e.offset-t.offset}),t&&this.gradientUnits==="userSpaceOnUse"?(r.x1+=e.width/2,r.y1+=e.height/2,r.x2+=e.width/2,r.y2+=e.height/2):this.gradientUnits==="objectBoundingBox"&&n(e,r),this.type==="linear"?i=["']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.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;n0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},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("No Intersection")}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("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),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("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},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){var t=this._objects.indexOf(e),r=t;if(t!==0){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}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll&&this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3,f=u.data.length;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(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),this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);e.format==="jpeg"&&(r.backgroundColor="#fff");var i={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:n.width/2,top:n.height/2}),r.add(this);var s=r.toDataURL(e);return this.set(i).setCoords(),r.dispose(),r=null,s},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},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()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},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;re.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1},i=t.StaticCanvas.supports("setLineDash");if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",Math.abs(this.x2-this.x1)||1),this.set("height",Math.abs(this.y2-this.y1)||1),this.set("left","left"in e?e.left:Math.min(this.x1,this.x2)+this.width/2),this.set("top","top"in e?e.top:Math.min(this.y1,this.y2)+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top);if(!this.strokeDashArray||this.strokeDashArray&&i){var n=this.x1<=this.x2?-1:1,r=this.y1<=this.y2?-1:1;e.moveTo(this.width===1?0:n*this.width/2,this.height===1?0:r*this.height/2),e.lineTo(this.width===1?0:n*-1*this.width/2,this.height===1?0:r*-1*this.height/2)}e.lineWidth=this.strokeWidth;var s=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this._renderStroke(e),e.strokeStyle=s},_renderDashedStroke:function(e){var n=this.width===1?0:-this.width/2,r=this.height===1?0:-this.height/2;e.beginPath(),t.util.drawDashedLine(e,n,r,-n,-r,this.strokeDashArray),e.closePath()},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG: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)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.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(){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)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG: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)),e.push("'),e.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,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed,r=t.util.array.min;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.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'),t.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;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});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(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},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,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;i'+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke||this.strokeDashArray){var t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=this._originalImage,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;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;if(fabric.isLikelyNode){var s=n.toDataURL("image/png").substring(22);r.src=new Buffer(s,"base64"),i._element=r,e&&e()}else r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},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}(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.Brightness=fabric.util.createClass({type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s=0&&N=0&&Co&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.object.clone,i=t.util.toFixed,s=t.StaticCanvas.supports("setLineDash");if(t.Text){t.warn("fabric.Text is already defined");return}var o={fontSize:!0,fontWeight:!0,fontFamily:!0,textDecoration:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0},u=t.Object.prototype.stateProperties.concat();u.push("fontFamily","fontWeight","fontSize","path","text","textDecoration","textShadow","textAlign","fontStyle","lineHeight","backgroundColor","textBackgroundColor","useNative"),t.Text=t.util.createClass(t.Object,{type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textShadow:"",textAlign:"left",fontStyle:"",lineHeight:1.3,backgroundColor:"",textBackgroundColor:"",path:null,useNative:!0,stateProperties:u,initialize:function(e,t){t=t||{},this.text=e,this.__skipDimension=!0,this.setOptions(t),this.__skipDimension=!1,this._initDimensions(),this.setCoords()},_initDimensions:function(){if(this.__skipDimension)return;var e=t.util.createCanvasElement();this._render(e.getContext("2d"))},toString:function(){return"#'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e,t.isLikelyNode),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),e.save(),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(!this.textShadow)return;var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-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(0)},_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(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return 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,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),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,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_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()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_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 o&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,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),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.1.17"};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";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(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)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){e||(e={});var t=+(new Date),n=e.duration||500,r=t+n,i,s=e.onChange||function(){},o=e.abort||function(){return!1},u=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},a="startValue"in e?e.startValue:0,f="endValue"in e?e.endValue:100,l=e.byValue||f-a;e.onStart&&e.onStart(),function c(){i=+(new Date);var f=i>r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function d(e,t,n){if(e){var r=fabric.util.createImage();r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function v(e,t){function n(){++i===s&&t&&t(r)}var r=[],i=0,s=e.length;e.forEach(function(e,t){if(!e.type)return;var i=fabric.util.getKlass(e.type);i.async?i.fromObject(e,function(e,i){i||(r[t]=e),n()}):(r[t]=i.fromObject(e),n())})}function m(e,t,n){var r;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function g(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function b(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function w(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function E(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))}}function S(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function x(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]]}function T(e){return String(e).match(/function[^{]*\{([\s\S]*)\}/)[1]}var e=Math.sqrt,t=Math.atan2;fabric.util={};var i=Math.PI/180,c=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},h=function(){return c.apply(fabric.window,arguments)};fabric.util.removeFromArray=n,fabric.util.degreesToRadians=s,fabric.util.radiansToDegrees=o,fabric.util.rotatePoint=u,fabric.util.toFixed=a,fabric.util.getRandomInt=r,fabric.util.falseFunction=f,fabric.util.animate=l,fabric.util.requestAnimFrame=h,fabric.util.getKlass=p,fabric.util.loadImage=d,fabric.util.enlivenObjects=v,fabric.util.groupSVGElements=m,fabric.util.populateWithProperties=g,fabric.util.drawDashedLine=y,fabric.util.createCanvasElement=b,fabric.util.createImage=w,fabric.util.createAccessors=E,fabric.util.clipContext=S,fabric.util.multiplyTransformMatrices=x,fabric.util.getFunctionBody=T}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>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 e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t,n,r={left:0,top:0},i=e&&e.ownerDocument,s={left:0,top:0},o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!i)return{left:0,top:0};for(var u in o)s[o[u]]+=parseInt(f(e,u),10)||0;return t=i.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),i!=null&&i===i.window?n=i:n=i.nodeType===9&&(i.defaultView||i.parentWindow),{left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)+s.left,top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0)+s.top}}function f(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementStyle=f}(),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}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){w.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),w.has(e,function(r){r?w.get(e,function(e){var t=S(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function S(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function x(e,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)}function T(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function N(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}function C(e){var t=e.getElementsByTagName("linearGradient"),n=e.getElementsByTagName("radialGradient"),r,i,s={};i=t.length;for(;i--;)r=t[i],s[r.getAttribute("id")]=r;i=n.length;for(;i--;)r=n[i],s[r.getAttribute("id")]=r;return s}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices;t.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];var u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.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(){function e(e){var t=e.getAttribute("style"),n=e.getAttribute("offset"),r,i;n=parseFloat(n)/(/%$/.test(n)?100:1);if(t){var s=t.split(/\s*;\s*/);s[s.length-1]===""&&s.pop();for(var o=s.length;o--;){var u=s[o].split(/\s*:\s*/),a=u[0].trim(),f=u[1].trim();a==="stop-color"?r=f:a==="stop-opacity"&&(i=f)}}return r||(r=e.getAttribute("stop-color")),i||(i=e.getAttribute("stop-opacity")),r=(new fabric.Color(r)).toRgb(),{offset:n,color:r,opacity:i}}function t(e,t){for(var n in t){if(typeof t[n]=="string"&&/^\d+%$/.test(t[n])){var r=parseFloat(t[n],10);if(n==="x1"||n==="x2"||n==="r2")t[n]=fabric.util.toFixed(e.width*r/100,2);else if(n==="y1"||n==="y2")t[n]=fabric.util.toFixed(e.height*r/100,2)}if(n==="x1"||n==="x2")t[n]-=fabric.util.toFixed(e.width/2,2);else if(n==="y1"||n==="y2")t[n]-=fabric.util.toFixed(e.height/2,2)}}function n(e,t){for(var n in t){if(n==="x1"||n==="x2")t[n]+=fabric.util.toFixed(e.width/2,2);else if(n==="y1"||n==="y2")t[n]+=fabric.util.toFixed(e.height/2,2);if(n==="x1"||n==="x2"||n==="r2")t[n]=fabric.util.toFixed(t[n]/e.width*100,2)+"%";else if(n==="y1"||n==="y2")t[n]=fabric.util.toFixed(t[n]/e.height*100,2)+"%"}}fabric.Gradient=fabric.util.createClass({initialize:function(e){e||(e={});var t={};this.id=fabric.Object.__uid++,this.type=e.type||"linear",t={x1:e.coords.x1||0,y1:e.coords.y1||0,x2:e.coords.x2||0,y2:e.coords.y2||0},this.type==="radial"&&(t.r1=e.coords.r1||0,t.r2=e.coords.r2||0),this.coords=t,this.gradientUnits=e.gradientUnits||"objectBoundingBox",this.colorStops=e.colorStops.slice()},addColorStop:function(e){for(var t in e){var n=new fabric.Color(e[t]);this.colorStops.push({offset:t,color:n.toRgb(),opacity:n.getAlpha()})}return this},toObject:function(){return{type:this.type,coords:this.coords,gradientUnits:this.gradientUnits,colorStops:this.colorStops}},toSVG:function(e,t){var r=fabric.util.object.clone(this.coords),i;this.colorStops.sort(function(e,t){return e.offset-t.offset}),t&&this.gradientUnits==="userSpaceOnUse"?(r.x1+=e.width/2,r.y1+=e.height/2,r.x2+=e.width/2,r.y2+=e.height/2):this.gradientUnits==="objectBoundingBox"&&n(e,r),this.type==="linear"?i=["']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.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;n0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},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("No Intersection")}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("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),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("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},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){var t=this._objects.indexOf(e),r=t;if(t!==0){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}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll&&this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3,f=u.data.length;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(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),this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);e.format==="jpeg"&&(r.backgroundColor="#fff");var i={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:n.width/2,top:n.height/2}),r.add(this);var s=r.toDataURL(e);return this.set(i).setCoords(),r.dispose(),r=null,s},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},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()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},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;re.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1},i=t.StaticCanvas.supports("setLineDash");if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",Math.abs(this.x2-this.x1)||1),this.set("height",Math.abs(this.y2-this.y1)||1),this.set("left","left"in e?e.left:Math.min(this.x1,this.x2)+this.width/2),this.set("top","top"in e?e.top:Math.min(this.y1,this.y2)+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top);if(!this.strokeDashArray||this.strokeDashArray&&i){var n=this.x1<=this.x2?-1:1,r=this.y1<=this.y2?-1:1;e.moveTo(this.width===1?0:n*this.width/2,this.height===1?0:r*this.height/2),e.lineTo(this.width===1?0:n*-1*this.width/2,this.height===1?0:r*-1*this.height/2)}e.lineWidth=this.strokeWidth;var s=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this._renderStroke(e),e.strokeStyle=s},_renderDashedStroke:function(e){var n=this.width===1?0:-this.width/2,r=this.height===1?0:-this.height/2;e.beginPath(),t.util.drawDashedLine(e,n,r,-n,-r,this.strokeDashArray),e.closePath()},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG: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)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke +.toSVG(this,!0)),e.push("'),e.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(){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)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG: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)),e.push("'),e.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,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed,r=t.util.array.min;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.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'),t.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;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});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(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},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,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;i'+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke||this.strokeDashArray){var t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=this._originalImage,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;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;if(fabric.isLikelyNode){var s=n.toDataURL("image/png").substring(22);r.src=new Buffer(s,"base64"),i._element=r,e&&e()}else r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},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}(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.Brightness=fabric.util.createClass({type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s=0&&N=0&&Co&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.object.clone,i=t.util.toFixed,s=t.StaticCanvas.supports("setLineDash");if(t.Text){t.warn("fabric.Text is already defined");return}var o={fontSize:!0,fontWeight:!0,fontFamily:!0,textDecoration:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0},u=t.Object.prototype.stateProperties.concat();u.push("fontFamily","fontWeight","fontSize","path","text","textDecoration","textShadow","textAlign","fontStyle","lineHeight","backgroundColor","textBackgroundColor","useNative"),t.Text=t.util.createClass(t.Object,{type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textShadow:"",textAlign:"left",fontStyle:"",lineHeight:1.3,backgroundColor:"",textBackgroundColor:"",path:null,useNative:!0,stateProperties:u,initialize:function(e,t){t=t||{},this.text=e,this.__skipDimension=!0,this.setOptions(t),this.__skipDimension=!1,this._initDimensions(),this.setCoords()},_initDimensions:function(){if(this.__skipDimension)return;var e=t.util.createCanvasElement();this._render(e.getContext("2d"))},toString:function(){return"#'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e,t.isLikelyNode),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),e.save(),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(!this.textShadow)return;var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-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(0)},_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(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return 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,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),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,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_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()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_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 o&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,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),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index 581a3fd3bbcc71143ae51855fd87052c13314094..76b1a37667030055606e836c6a1b5dc06b3da04e 100644 GIT binary patch delta 42142 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 delta 42185 zcmV(sK<&Tjfdl!00|p<92neJXu?FE3e>n2<-LH_))&_*7M7n9xf`VApmL1(Wmd{dL z>qtfqM1m4x5?~gfESY3}`_0V0U>5)-CcV2nj);AqeVd(`otbq-^CW8S7xJoNhzK7V z#{pff;0SKbTbpM1;L}sJTx4^s#3mc+q*-yBj6TDn$ekgx#0vi*hX|(T!n(h9e-j`c z;PlmMsdzp}+l+E7{>$~mX}bM^*{#xCICfG-`cE2gkG+9okr)<>no;7MH#U*8@%su@ zC=^#!70KVtrp@yBih4MN4%}W4&sOpM>QCMul@PV?dQK;vIYD9D24Gnjk%RfYkyRZ> z#<^c8R!pk>5Jn<_GGD-PITLgpf5mni;zCrv=cpA>#xb+1u;@xjw2Yi5_wf`LU3raY zLzY?wBeG8QH#Aq2zE#;2UYjx*7rv+jpD?w z>&+S2@cPdg(Udz-V~~$-<5`rqX32xi088C@ijaHv;NvqE{(dvXC=0vC$(86}Ljq8+kx%{a*gI*pJ z?#ruG{N0vR{M`mB{_eL>@u){{Lv`n^qt$A@MJ0_0P?&$s!ntGtZo;wrdT1d3Js`SD zqWZxDa^d>mft^UUe+>9(LD6?_6ft_uZZ;G5=dD;1_w42oy8Z;xXR69FI#ytnMF0Ip znke_!g<9THpb9MOCO#cDv&o;o1ky+_=7j5y*%|vG%nk8|rdzKd*DLt{efUlhQdfuX zfsnfLj$c_|gyGhQI#m9wUz(6OT>nf9`D)cP!Yq)`|bpcNLrb z)&oAS9HZ~|zIedO8N>PyWZ=H{;W+ixys}gFOXzUNf9*SIo=zO<4s=DszI+OJIwX%v zdBLRTp21og;ey1aoA+N0*_pBLpFKOXtR&1dw0u1KE$2AwWOD2gyA3eP!b5gzH=WtfrGcN5OM1NLfx27g?i!z zO~QxpOe*VskPO++?1SC|I5s~BZ1H3G11dp$g`Wf9d{?fi*-+;#w9`2l|U zxSyp!VL0rgRGj>$_=T`wH^LuDq(vR2&r9|d7Tl*Ae+*w03?HR}z&Kj~y3;kk2tQS- zei42x>;5XFVwfmZFaN2&R;y3Xo_#7q9T-Y;-adNk&wgd~Gv9xuxQCf3V?aSu6NmqD z4>gB?Ih&h2L=7P{*b5ly$??9e5*$ij43z4Wipx#;RH9SWXl}}EjTR$yM&fycmvHG}-c9|m z<1NrK7$+));X#ie)VS(uxX`-MA*|Z|&Hs12q3_NjcMnA{L`^W`)_IE!sK45byZxq z)Z_ml_VHF@V-Lw%oED?|@Ss0fAUegr(HQ=I+ith$=NtI@U3)TEbiTX(hW`F#uz1mK zk6QFI!M`v5N`V&?__j@fZy_*=V<-4`GQlYLnG6qZ%F_WG9SoeoJvMdUnGEi~o5084 zCjSpWAaa*j3s0PI=?tzNJXo$_js6>b0qumV7(Y||oY3b4KRJDJQaKNvLm!?)da+B9yIU}$m!Ed>LA zmjJnC$bi2@)6bRDJwyiwbOooOPYkS1cwD&L*$TTRFja)psVNLGzH1uherO-J*#7Y-$^?W z(|Pbye=uahay`h=TDNT9Fr^>3y`Yc#;NW_a@?yAJ^xLh!MXkwk>-BK?%^LOIoxeL? zS;Xo8g!$6}AMQCTlt!*5FcGZR6=K6xt2Y??Q0HKOFy8ZeSbKaj?E8b(5L3J!);Bck zgDgL-f)(?yRK7Rpdy@i!2SAb-bVG3{7^LYrz8 zZihA{0ZlB8-y0IOg>cnR)^G0C#wKvp^yEA&iexIKEGU#E%6lW=07kG8ZaHpk1M>9u zPKdZX+tieB=cO-@wEZvI)})H|=7$L!dcK$T`Oqy;UjYCUeLlO+V}3{U#xkRC;AmN1 zWOI>%%JBu8Bs>mMmVc#?mQ5xQ19|v$Old}s8F`HIh_e*((Jcv_ZDsT^sjZO% zDv1%YiUY2U4hu#q@J(>4=zp!D600((3j}KLFjyH@fn>jJHmPk(+{00pKL8_-Ma{a(_F_aF8+ z%P7Qs3?;J1E>c1gMZU*7Ru^4@dE~%HRaJ4ESDIy(iWE|xFh)A`b#fn*qbSq0ohr23 zsd${j3({C0CPnBIM98drMw0FiuO~K@`dP<@#Srl-k^EANrquBqw9

t(MtF9@WuyxPt5N7(}NcqBPU=cu$$7}I>Vhtno~)LZy&_d0u1HR2(G5We0Hf<8lN2q`8kul2&KyG* z9Ws*;#=v36M`0`kZ)RrG`<`^tW?%?!>HEM`hB=gge`p9Npz9B%s}5~$8Y`4kL48Q~ z#D8?AsdmVa$OxcW+fX_M@{#bIk^tpqoq8|_8@WN(7L z2hlZegxVEKWXgmd{BFCODrLFUP&7oB1Q4NZAyAKhANoaxO1K=`l8BfdagY1qqCfZj zKcO?hqbUg;&|0NG?kSsWZDfre^PnbZs@C9^fTfr;ipNC zi~H=gihf?9sa$!-9E7BO7pT(wnG_I-G)QfbIAazbzWGe zHb4PSlQ}GMbPqw_=4!k*X{vsoPz5<(kNe*YhpbQj*~#sCjIIe-AC3PyL-Zfe?-ztv zFn1wx7nr-i+=ZPxF%1xM*j)MHpSwA1|7C(>VMUBrg0A zok8`Z;U0%SFkfA)3+HXImN(V?1Rz8p697#7wow^bggY|)LWW-e`VoAgpw)iiz>SLU zsEE=RUE>5m4@u%!P{c*&uWhEDY*3zZaHjwUI8KupkwLG~r$E)6&X@T5a{?UF7FlQ6 z*RAqp+trqD%4RH8yNKbAEq`X6_|FI5BK3dUBx90Xxa|Sa5HEEfk&T2YGgHU$4Ugme zBKr`H6TskMZY6UOdy%~o`NGUjCag~6ak#KjB()nxta7%0AWq;EAHcAZNIt4|Y&fyf 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%0D|XQ~ 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

5w6o~ z(gl+68A=f9KE-Z+s2w+nd?byV0qL$l3rHDUek62(fv&WR5lV_oshMoxx#yHuQQC~gIY?TQ-2E~Agu zUEIScn^sD?vLG;FQpON*lwW4$%J8)mUFV(U-NsM%yB4@y7DDTdoIe_g^d^5Wwrh(C z5azTAg04<4khRGs*?>Oqv1PX!)H)e5O6bFfT~yI^yKQZMrO#;FA$0G2pO0mE zDf9?OItT=@HH~KonakRiN*Ed#Ra-4Hiu3V?-ucwZNsW6F`j*{wb~S2PWtX5)P!1=A za<`r@e% zsG!Ryys~&fcYU&}Bb^w+Evp`Q^=AJUQqy*vTsM*`dY%4x$4GDJwoX2c!e(imwbqo@ zH*Z*)DI=M=BIDdpF834R&E#F#4&CPvxJz-JUZL)&c%fXzdXmU@lg@wK4WV1U@8oR+ zx#}b_9n=I}NpEtV)`A z9}4?9s*aG3Y2te^#Q3$jZjZ{P^oy%~-TGOj+V}EB!!h;9ZN<>z zb^CRh#h9LF?UsRWfe8edZdOSx~aM8_JE;M7QnaBM& zTnyMK1PK5e&D`9y!hZ7w9+UE?w3LLO%7oCcWW;=J`^MVXU1j)n2RH6)5aq4^SV54E==vr)#NNA*>h-lOv$Vq<~TDDg-i>}FbL@TvR zTX!I4@;MhR3YMpY)@`Sbz)AREjss_BQtgq8wsY+K)x8p0(*9awr9~b2Mp9f`x(8Ax z=o-i0)YP@Az6$=JI*+^STz{cDMfr}!Mc0bF6gP~n;#GX6pCa5#h&HMBuo1Ui=f@p< zzj?}-O1z4ijck9Zt-;g!h`Qw&pz5ZeKw&qjIgx{f7SjjR<3SFjC)XB91#*6#q+w(8 zht#k-vRh=p7HC^Od|AnK!tA6zRrWyj1HooNBMQ8kzY%1Fn1n66ZAaVq2GW1PzKti@ z{gBWBKXLudZ|}eU<<0Y>?|=Gn^mKneo?pG}aEwb2>j{6Hx!1SC;e+{vLu%0Yn2v5f zn(XGLAX{q)A#ntL^AWH7SDOzhMSh74_%#XK$=m5D6SR`F@?+=;2g_ApIpU3HtBMAP zqm4ervH`~GBsFmZHUQQ0O+Gtk5H{HrQ)HD{A{az#QxD+w!2SAveBj9PV8ghf&hDoT z8{1@ksZoD><9bm0KQmkcvC15>{f*=E7K>>0(&7wnHx8q$@m@nILE{K(!5GNf&maMd zGMyn6@9+pMEJ`0_rnCaCJ^Y%L;Ymsl(!m5X4wh+EWAjEfjUN}HQS9GX{7z0zrCJ#K zoiaor;vF+97BHTL?fALYMVL>+6&-~y&VMo-1VVpOow`o*z391tAL%z;kZPJdvvP`C{2rtIBGgBZ_^;&d#Xp5t%4 zg9@a)2Wo6l<(2^}kaZ!)G6AY+$q-?y%QJmqX>3segK4_V8-mUdR7VCktTZu|!Vj6*)`jM3V zA_YN*YH6*$^6>M@Nh)Ed)tzBw5=x;H)z*I-VYiRgqxk^+Pp4>M9h`7ScYeZ<(_rEk zEZ1Qvgvk5RNPJkj45%nKt@0&GyH;Y(L_AIny8DHuqmv}x{8%NC@Z#5RrK4Zi%_trl z=fHk3A3m%fKCGBzq6wMpvQ}Bcys*Q=R!Xz!oo?k@x$g8S-^w8(;=(?vQMOVdnBItf zW|nhW)eCc|LOYG!{+7%6tQB-~v+sX#IiI;9oXl)%t=n32TXh#b={ zntncL4Ikmt*xrV%MC$mAokiNYuq=Y(ENuHY)4R|v%R1T{!b;$KZ^-c7r_8XF zMHZUGt3hj9<^2tnWUNB)LFEUy;N{Cj?jTp;ec4xN1#JwgK}QkP7^;M_dGrmvi6k(6 z$meTTwi@e-lM8qpHt&LW!K98GsSYmgDMCd(ZlrR!jF1ZIf)JWe>Wqy?7Rb{@zC02l zVE)Z)rb}kR!bfC$Ny*WZU3exr(~`#s4o3NtATiO1*@Ns^$>65^CcnyNbj9+sb$HwA z!1;vXx9=R%31w(`Ze$a|fz1ZWZ&|qIp_9CLF9H9P?07SOgn}-7Gooit4tcYJHU$j$ z+D9S_gTSQr8%$3M2W)3-{+6Je{H4J@jU>uhBfi$ReKlU@G`<}C1Ae^DAq<@Y2zYiX zi+eBD`rj|If}bTugC`=2B<0_v_&x>gX{4z7hZI)Z6_;_D7nF)C80-&Y{pf>ZEsPEE z=S5medr9$sDM0YVmnDnCu*wWzWu(!Q{SHvjyqGRlvrMQwk)(hMW-7ytwLoz&lLc=h z10)iI{FV?i&bLahpA0aBp22^vkacfzXab65c5sdF&+8XLdN#VEX~;Y!Cnpdy)qQ` ztn%6^U`&MS3!?}LwLaX-lm2idboq+H@Qa_ci<4HS6P6YWulY)CH310G?GucT&KJt^b zd(IJZChg=`8*t(a6z&&+FG0WOlazcq5c3b&Bv@68@K0}l{r3B>-;>^aH3Ix*lNEhk z0yz?sbbTlR?~|Q#%GWbq|*M!6Hz#1}`(4-NsA5D3Fz7bx-^pC7(?W`;pSy}|f zRV#}hH1bWwdVcIYPHUA!_=0OYe#=mrEESnqs0w67s3i(vDg`_+iKZ01DF<+d{+4rN z$2VHeOOJDO+sq6F!wNCWD)d)gogCmlkMW-;_|MZ*prfKGjg!`X4hCm5M|OIPlj?pv z0-o)YD1RPKbch(MJGgLqnbF>Q7 z;Ve+M-`aIbVO^W}zPC#0fQhMAFoc?97PuSY z8MYt{Wc1gB>_+fk%j}%7vCnJ`gCzLVd_Gs^tk=S+n&PFTLS@7PMH!Bw){q5?GKj2= zZk5A?P!@&HCz!QRCm-f26sfr-cbWohBN9lMmGzWwNmsD!JhF9K(SM$FS=JfpLhu6` z`GrE^X{Ts}HN)rz@-6I2Vu8Ewp+flILM~!uQq4~Uu~<(+fg?g)UsZl6Jcfq~rD{rQ zrdN1TZX;BoX=v%FByAAzKwCVoF1TR}RQptmwo0z`%ggBG^mbhFa1`{1R79&GdV#18 zCIPvKT)@>5dAk(t2!AWs*f{jb_0H6LH2JZ4YTwH$vX{bVTvd3;B$ z3gdR5AD3_^8KemfL}|3et48avcGs)_;YbwX;UZf3`Sg?}D1SdCb&NCLPzS338P0s>6I-^?Fg0WG59OU!%Eh zE)l}tOV#ftHj6!JPK|HibBo9{*%O(JQ&^{VZ`7?}$k>~-Y2Fx@Kj)4U<(A|L;QAkOa}BNLD@4BK!u9tcJY!2=Bc~fRL@|D#DCc2ZK+!o~zL+ z^+kNPmN94RI7@4kyHo@Iq4n*7o{FD-75Z{gpI|>vxqqKYGg4cIk&l%+v9b(6t7!SV zTfg4STRS9P=MZIyFH*z575-Si^AJ(yM1-$k)4IlhzmoZXy+{6EJ^4GcbL)Woi+b2+ zyls2otx*^pP*q4S(5D_MOm$_W3+1Hg!mrZ>uqLw3!y2+9vu>T(>gpNpo}==cs_X{f zyrUUr5r11W#7u5A1zU*i`^(D>%2e{y4K+z)3B^0-42_T=DbiG^^{fs=7}u;N2&DmI~o<5w>Hgs5+}Y zkOg|Y={X=d(9!STuksn(xRp%!inQbG*A5Xl;(wuSF^8KRZQqS9*y_l&;jGGd<*-aU z(NCnX$Q)de`rlf~H6(-wjBr0aEBwUJjT@+DY$5(-OrSyA^D7`Uc*Wzsr{T`pU{t#;KK~9Gg9}P%#>{0L62O$9q|0 zo=-a;NRwRu@H4W)D|J4}ViV z;Wj#+@_i21Ggmv$m9sR?^cSA#uk>U#(QYA^15PG=`?sY66>1M|*VIOJKdGF2$6fhM z=W|gBlds)<)bV;$-b#poKbm)FyISh@U03of#8ulP6x@#&q!kH&kV1J=RGb3csKm7| z#Tl1zMrD-V6kNs`m9dhe@xAN>w0~MVkNUY>tj|kw5Jl@FJVC3rGOkZ!^KpGe+6XK1 z;A|EY+{X6cc$B7;*>Iy-s5XPG9FW`ZW{G(M>?w8GE|Ln{nbgPd;|WPjJASBKUs z8pJqaZc^~^oRiFz2)C+T33`oGAs~V#ZI*1YvESVovMip4Z{9tvwkxKFn)56hTp`#A zHBCsp4;v1H_CfSo{On07I7F{e6m0lt>QZn(Qp(1N(A?Tt4HEGbVOCyNWz9v^mI?}T zUi;91KOdmZ64Pc~py$ST4Sy{~(eLQG9O1H$XZWYOjfq+sF%`v}K@8JF9d#z67Ps^k zU_^-07Pq&;v7XUvzn3$%XGPVfWIvuOc_eD@?;wCc(wr>F$bCL22kS!`?fGEFKecl@ znc!KXQ_ydn1mmw@kTC8FlfWk?xtfG!LSI0*GGYk}XiJrZR7#)9jeqv&>x#avB9fJ^ z`^9cXHxx?JuXeeVGUtU%={@^ZNUZAZ)nD5=b6kf=!Vp@p9Vy%iZ)LPu|;*i zRPMz1J&qpJYN^LBHTPGyG!YvY0=re_Ss6n}Wnc8SRk&|kF79CPv zOFL|m9qv#1?eLK&D7%g8u3Dsv14la!-?Pc5FvWVb;p9(S+kY)XZ8y`j<2Rx5B^5q1 zKiexBcvL!r-%?ZaJO%GLOt1a!$-UXrledQ;5TZ7B-ZoaJ?zHYDx4S~|THEm5vx|x6 zd|F%V*|4nyzAsNHVV{X0EGF+SETkDBkCo62Wx5`)`o^5}&`r6SfqRmemMeCa<5m`` zL$464W=#v+sDDU4ne!#&pH;&;j?406J2Bi|4x*kn{yXsu4hbT8qfLR$4fFaNw2{hu zsoSlYY?ErVkAz0uqUv51?dFoc;5|x&7}sP3V$nIONMc{MWINLYZahGD`z73ZfZFv} zxA6srO{HkYY{~8%Qcb0p#fpLRY>D|Uq}a#m)NTqHFMphjB5Hmc&qR$~Io&FC&JW!= z_YOAXg-FPK+1XQ!@9HZS3{QP0t!WtI^r50f{K=sj(EL<75Yi>b+nq5WV)D z*8$z{I)AoYCH1d5AMNi_iQmWRvUIG=#frh~P zS+8aRjbRxv@MRS*koHNs#Ci5=$5imJ!iO$a11SY7Tvv4E*nbERvpoSG|Lb0umvqjaubZ8WOVjjE_ow=B1EYd+I` zJ`;UDGoxx1Wp?aLckGNirrLX^N9v46>VKBSVX9`CPYmzA#htX=b&uKCQV`ApY*=6}?D zrfWWPYCh97pBba==``=F-iogh9?TLkax^0Sv@@AGO*C5D6 zb{+3+>^O|AVIJaF>(>V3=BY6@ZkO`b2uHx~fqW*s>&iJctRh-?5)!AM^L3%+41K0a z2C$I04G#CbLI~r^inqKwQyt^EqJOQhMEVw*i^8WsJ%O>|cfooCZQb%^Pe^q4zyEjG z56iuSsNeJ}xEGjB?G2vB6unz{`KxDE(0{e8NByoC zGMAYy$~sduNxKUvyLD}5c!wx_g|0242BKq+82k-vlRe)yq386zAy`4Rlv;*pdo&ib z3t57&Wu9B#$5JF9cBYkd+7)#iUnGU~y|li6gR6X4^qa^E`_KwIhO4*HWVlT0F2!p@ zvBAQQm;`zQ1S8VUrk`*l7Ju4c-@gBFxnKtWhqM6BxUv+(lof!cE9P#s?OR3T&7JV& z=updK(ZDf7KDNK?SN#Q0fx3SIzozjS0v8kBGi`riBn~Y)S)b}J$k{vZFMCz*lk)0X zdzZZrP|CgP?agGp_sqTNZWL0{dk6jHrwxY8`MDi}axOk?Ah*vcMt`DBWvxLls2ldG zi;kJQtv}y8z|N2APO|4F-+r7e!!t`V^o8LS(QJimRmgBOvsIqjn-jU=&IfmkVK3GMmml_LvMIL_M*nH|p6( zqb`Yb+UQ?V4!*$I#jHg!YgvpsPrcX=EuaHLiQB0Rp{Y5z3V#KLSuLlaceylh!2W#TVH0p1R9ot=H4lAF6?a+r0b4%&sYIrDq z91yOW2Q}Zt=U`4eq4^c)mPhm++ndLL@n^PTr(0u zVWHJ8;(pa(O>MEy9WZ)Qt0i;^pG+N~Sprgg%^U#fi;(i`kTr(DfncOLz%*tE5Iurj zZpyd6e%lsMo}AjRr(OU%X)4dwbXF7;%2pH)*wCJm1b>IPTy}!^(bX^s9>q={9tAsV zCwwi!uMV8_2O_-_z82x+7s`xMP+=j)?>&2jjnYU$8|_wyYyyJQJa~R|^yd2)zZ|`K z|Ksx?UcJRb_PghAUVZ&uMZ85j@o7q(g8o3$p_L~5s45H1*@X3TV$e`S{hw^(o;N_c z&Q?uEntxB;X5eM#BnPU3*ataK5&nC1AinXhnozd7q(xiD1zfht{?llaKud1#q>~KK zlnhUV4DDj!*MYCt0v74*Cz+zSERj-V%=PXd6W&!#2NnS}(C4%L+q?KDI@W&vo&_x) zUW!?vmw7c^w3#6e_OL?(lON(#+i*lvO4-2^!GGD8WW*8alUnpTmK{b2i;etIW}lfx z8PV>6q3bSql_s)zk>(B>Roy|OxUNyV^6jaP9~RE0I3hyRo1wffd zT7OML0e2xV&czqwo|}E$hZ7Hdm)l|?^XNuP^3cKOQO7wcXuYALe%qj!XDnJBByhpZ zGLAo~jN^b+fVhlN>#dpd8QM{5yJWiu&W6E|?M@P=68AbwrdP1+b}IKA5hZn;BrT|f zy5mgoH;9?sJglRrxv0vIMB-mn6}pW7fPaS9J3!t4v-;1SRF;P1vC96r%ByU)lNPg` zX$l8J+3cKUkoi1i@Qty$xYTG@Caf?Nq6QH*c_rZ#WSXHtHZX;d4+{VVYJXVaffgyf zuW|qz)-W$8J#E!<98(xXJRu?BdSk-1On7ULx#y&`PD9bIFLfGjJmC2BI;wJhGJkf@ zFBx&ig>w|FVQrFVbd-DF}BaGd|%Xq3+BCFHgWCQ`qtBN@W-2H494Q5-w^6( z5eNJ5X9p@30TL554x-QJANIch|9@cJd6sOSf(*oxG)&;&|6ed(e;lu{%^4&&`c`yI zCjQq@vaMP5SBpiytlP9sgx|%ii)7o7x{Q+sadib;P_>4Cz7)-?u860<()>IJuPJ!# z1WRUJb2eAV&ijOkMw&IH`AmNPYGl`n!(i9(e;a2nW)*j4b!7_@sDrQrtADifWl=vFPb-(A8lf7J!qvRH1puzZ=W zZRpS;y$6VH?}@P>mqpv&SgzDh-=VV;0`0^Z~BR2BooPVN=FJB41TvQE=d2TZ1D`d=3fDx~d^DgPvt<&YZ&Lmm( z7Z){ErWFniLc)Krne;%C(7*I~r_ibU^uo8p=o*z~N;rnC0}P|?VAS7qI5cxlu8Ih_ zKDN9Ly0$sX*vE~nq#fQRfikkbxq7pf>8}#8G1mkV>nXWqY3HbiCx5;`xvNg-P(@mO zDjf`A?X5DaEBQ`T3EvErP_mGRUA0yzuB1r~kYN#b_x*#8b;--pVGaz9{r-?A_G^Q* z{AZ<)($WW6ZTbGSNi4MbObWj85N_-B>?*eU!+}82J6_~gTRzG;b#y<^wJKKEyQDHYfpc*k z@~@d!w#SzOQAA%Q-ifb8Rl?d%UX^z5MA2yW9rd(tVdWPdX2G`9*Pm4J-F2SiaO z+LKPW7Rl5V$wBe#s= z9S6bUX8g$F&fuN71p-+ znZY;0eBwi2&3~g2uu!!rmfo=Cp=g#etDfA&2fq<`$^R0$jN{5z31^h`KeM(7$+GaN zl*x!Ym|K}_8wPhN(srtskwa{uV5W%|i{dnodWVwPdx)QYox_@{b94+^Amz5hyylYw zflgzCeycy>6Wtsk+gA-sfRouE`I{DAYy`cbDERt6c{i#3V_Fs zTQO^j+1XMQ+k7@9ZtkYUjVX$iDkw@8YtXJQOca}q@3-Qj(DfE!4(tA@QC(%@XEF6g4d?xsJDV}Ta!pO532XcP=DyD7hhU#-GS{?U&_Q1>ZqrPGb-<2 zd62rg-0pEoYTP!64$Y@|3hN^mP6qFZi?2_2AGnZe+w&HZZhzbgLYw^|=d5WhxWOn z*@jlk|8%y&eZl>IxrPp|L0Lsg#cuBb+%1#(AI50dkk;8~7c#Xk|8mC^)0|7-*JGw*xs=;N*A-wBWF3XTS$7k{u>TyaO zv06!-+$zFBhYn|eZ$sCL^Msr$E)sIDI8D&OVtfIAzB-MU$ts-27X&*wj~8)C2YYC5i2p3KmdENr{~&a+Ago<)Kz{s8?{4PJ=`=WG@SRZgSp zG7;Ba!vhX1zv`qsl?xDm)3Uor=DVTL2iY6`bw7eWDEyL(D4uEjl8b0uXppl)!KUC> z&Wrd%GTRLo{VduYJnb!a!)d?4pMUWshKrB>QYDGclMlNe_QGPfh*Gd01CwQI=p6-Tkdq+|KwJ7W-3cBk381-IrUGWbZxa}ak>i-nK z?LUv=_h#si5PF26UnlSTKa9V|cBEuI^K~x~2sJ-{Kl=Ka2*+lA-PbYPoS((qW%(jh zGxhbJoNk<>!Tvs+#Zmm7$$x*mfMxpP@aORhxjz3Z`Jwk>_v^i%<8RF6)FG5N#7qYX%>@Q|q_YRG-X<+yd7 zn|EI47RlVbw@sZOxVK%%Ap6p{Oj-_Nq)#t~^+j$0P5|dx2Z0;!bevCCXrbtEbzSv|PjaEFrK zHTj~j59||)w)Q2Pf^^)Y-k|%30bwMb+d$Y$7i6TBXl-#uFkN!6F#ty`({2ug1Rz#+@whT|nS68WW!On9{$7^dk8dsV{Wt z8`FKKO5K?3LolkhDehNDw?(o`Pv1`-!1_cEn6LnYhY#iNAA(81H)7%G6Mmd}i~XTB zL|>rLX)sEYyw`sq<2_Gm`0>>#VP`bRn6D`03HH}wphJuwo>F<(l-@Ef;bR4VQ}{cF zN?@&~2)u1p_L6(>lzTuGiE6x+h$@^4e7&e;FCNQYJi)@t$-!>kFGq;AyMo_!e>JLG z)#!rVKB>O&fDGk;z}S0w_ZAx=njjiL)k7w#y0c=tpYDGE(jX0akPc4G3jgWvwcAvW z;>|Xb^&f6`Jmq|9%NyD9p=>#{6Bn;KH~-_GN6qOTp1DZ)5cnS_v5rQS;H=QG4iE4` z4DeJ({xcxR6>IpB`6+?hS>0zq+QVsfim zTS=Umo)3AQqw7G&nY{GxO{b)-gEuae3LZ%!3lu37_q{+fKy+b>pFvc zDl{BNPg+P$M&!tl?S`#{hM;%i287aIBZfIr-f({t8ihDpUZzVk>NN+6$bSdM-;KpE zl&Vwm>1kRIokm?JE8t60HcRdU97y0t2M3)`R%flyProsI|IjVFt z=?rnI`;NO==iRE$#V^9-c>d|;J!k|+%s9i6$25QuRiP#n9Qt~;)$8Srr!5B!{&Z+w zdBT4{z<(>zX&Ch$MWdbT9b%S8JC77dOYc# z&$CByaELv|ccmF-%l7xf9NGMxo=Le#8dgw zGZ)?d5PyIRC2SvZKrfQcHBzUXCf}>Nvya*HeDYvO4o~$IwBD;%aT;B(#9iq-(adLPWl?}AA+!Vn?eqY?R@+>#FWqcKn7JVIzHF@CX;sKi9EPSmJD=68Bw2t|i& z3V#~RJ;kpJ_|u^1U=GaeWpdF^(Q5{ptEC8wNKVB@z|F!>c0D%2^!-bAQ8vOd`b*{C z;#`P&mhrh1?p(&_KOhB07d4P*70BVoFjoT`Lc8kf)>$k912#z?6EX)q8^UPqt z@^V%e)=rh)n(UKt&A#uD%lxkR;UEcO8 z%hb|)pAG0fiwwa|pl`E5yhEIU3^VVt#=6{MP?3cq?Pgl>_6(Zo1{v&vwdU{)bXPM! z?3e6z>x)7S+i|v!$A$?RVcJn>(lgKTmg%p)*=VCcn`$u;7a z{{SQv`N7{t5B6g-;8+GoFA4Hnz@7i*e5>>t5gkHq$D-Y#u1g8DK$VQE+&As_58z?CM(kt!GILUm3;Gp)wYnvx2Mjxw2*@ zXYKrra=mC=u-%p%tk-1nTH(Fk3O_>Y)m#O$Wo*^YR0x^3=KV$lsDUa5@84q~-)WB& zXrQ3KV(Wh^K}TP-0khGlE4%51?>KQwCX|&2Qg&L7j@buYK*? zns9&Kc&9fO`(Cxh70ytUcSl#M%3mAanAE`LC}=G`ew)dphyqg(WO;vwV86m2vlfEa?$YmGDxePZ%vN4&_uAbA* zNYX++@v|1w1(D`K#BPM%SrxEKE=1)Epmm z&MfhePnEx5@v5Q%PL`*rQQ3Hc*U^71nssJu$C(MsPGQQ4?q%1d=7d=n%UeoP_ZAeg313F`rs?2E@XBYtX{&K*T4E&kP_o)F-?GR{c-}CP8Z zl1P#KHAv@kV$2N{Bma}u_DXoIJBPftJZL`WMXYUD?R5moo%_E@r7~_|8*4|wea|vf zx>7pMWFFccaLr-d!dAU;uo4RwE3q=M5_1PD@&6yE#N2Kzn|d_FY2`Ite;$f%)WmO4y3CNy8#634zW~SO-G*NbO7P*{fHypLrg5rMx|VhAKM{= zjI)hukbcF-M~B2u>|DW${C#v$Wpnpox0;6c1=cXsA$vR4P9rxFJN9Pl35Cdef+jvY z+@q#Hd$c9eg(-ju(N42-c1 ztzcY)n;udgsfQF=wD>-b3w_7DG~tqgyVB0>vq!fvfiJo|Ds3F{Qollhp{a`{?tto)=m+srHIHc;Hq`!JbMmGhm&2gbGO!g(o6_PgojHfhrXIEt~_ZdcNmF7 zWGn!_BBE$qPQw8F@<>$Yp*03x03&2zXcUi1#Bzeh zIxVT(mXIPW_b0Dk=f7u*^^fIDoS^t5$2uy%ym=k+rDSi3F0lvo>WsD4!h-`CSX^iX z&-r2nj2J(76aI9BQ4B&A&p95+|k(K=hP z!0+tV7;f_d5q}D&!t&t`pT*s`3%PV%PfR}dBAHQ_ahq%VP&2lIxlW1-w*?OXRhlL8E0zJ2@t5w>+rTMmfrZ1P7v-jQW zrjEZ%mtKGIow{sre?;<=jILC+o+xabJDgA(0x!e7d?My=)F!yX!`8kf9W!mwCvt*4 znWYb|{cXU0J7z5jrbNg3`Q>?FC(T0T={9(%9P=;zk>crwt+9>WdGiQ=>15&F{ge#p#?$~^i#Ij2yY0CojnvJjD%ZIpM(G%o1CCV>S z9NMhtK54|u-Jc(Sr69MmXZsU+5hOi~@Rgg-?z7l=)h7k?Fbaz7La3LXQJ=pZTljKuLdn z6TGP`GhKMChR!Z^aF!Qr&J?wKX`SYYFOakeeG!8fWZ_d}b=@hP7vgxGay##vXS(Ff z_#ii$;+}IsmmHqYy|fM_xC?yMYu%>jMzg`DPF;^#sMBE0uh9st?O? z-AkTC)k%HYOY#{0_J-=$0sb1}^PqoGcR_Bz@aFjMZ-4r+O%Zsw_;QC!O1EOXR+$$rfL z8;ZaCr=G_x?`@Uu7|rGKWpl*~$y#0bRIM+tIK|E#-X!!~%D~CMnqC{$w9$VjBI2zT zE;Lc^TH!)7h7TwWyw`~JOwijDJYN9)40C+Tz~xT60!>u8z%-F};CP;_;zg3iQy~j* zdxn5?XgVp_GTN&@_XJW68QJaXUOK)( z|I}6FE9(m`C^n?oVikXJ!r+gddU0vrl^1j%HpFxYW#RfTkIEz@enT)D%xOe>kCEp% zO-jLph#v>|19_CsTm>5^o5#jG!&^--=l>#8`hD>stGuVWIiH;B51&lAKV#+~VIqNL z%r(oHAfd+}a?Zpz{FIX?Lk>>=unFYB_{7=c%wJ^cek}9)&YgcqiMAu)1(lca-+v+D zruyRgPFh_j;ovE29RqEfm6ve4-^H6l3HOE?|I%H8f8kx?vne^XY@{36y(VawKb2%t z<}XE~f6lKmd?LMTVaRk_-Y(G`uZARexs<bQ;wSRJ_pt>&5_>hr2+ zmo{D=&c;iNAOBxze3_(fItF;@!MU`g%0EEm1XMj2YdBemC7euS!Ju5+e(tqcRzI>^ z)4inS0{PTcE%Se=h0Uf@f4|7@UfV{}&*EJli^r2$&NzP{5G#M)+#LKL;A^ecAZ#L> zb_nn&q1Aa`ICw^tjb{Xu6fUHw#EmO{ic5V#KVYe+&rm}S|5@Nat1#`)qr;kiEyS<6 z_!VL%SewJ>kK&kP+0~KN@$NNiO#G)VTce0CwQ}EP%RIen%~GO&A%_Jla*M|*lfmO% z;*|$a|F(ZC_~pTHxXT=sV3>Qr87QW?_jF(J&3K9W!?-RQpHF1EDDRh>%7d-u^59=O znRq7pCX~44RU(+=G%;r~EO!Tw|Ms}I+8zAmtG~e^I2iu*Z_(ax@c8LaPB5i;@;6NL z)nC7&G++G{(;VzSmJ^R@4*qh0X`ViQLTMfkqrHEF!SIi}Mez`S&U!fbA`9XOEfDWm z4wz=Ub7+cIw6HknFTKA1OP7$wKGUs15H#hlARK;$SZ69(uzwZwRzfoeYCDKxOfm0D zaUfGHx>7t5DLU3NoHucaE=TA}pQLh`&gEKMeD+~Py&mZS=w5?3ub+C%U|v37{upo% z^Cf>-<9kTAzGy6AJ;~LpB|R61L7g?I-iqpt0V_Zbj-c=s9vB90gaQ-DAg_?NkJUw){2j}WZ@#*X#`l6 z_@mn`0@wgRe2}%gECTxjzjb#4R9myG=tY0F7p+iO9Y3b@{)%Q(I04(ZbL4iaX?S8y zL%@!z19LKfUR`GO&X2Hk-;|drG~Jn-ATTij#1~@%2vc1>br5Sz9ULt!%m9)9MLU>4 zcu7%3^_-{Nn#Iv-OJo%3LG)b{gwJU7CO1 z*~Oc7HXti=#%` z-8d#oldbHK2&bmo2&pNT(MW>7wSb!MsKHws(D3x4crI})kvrg263GMqkzx{K&j9L zyg{d&^=6Va6~*5!0aFWEhnW;jMf0~o-c$^I8e~pYNS`Lj#*Q&!v zABF8iW*bmKgwQP9dsj`~6?=b{yJ4l#g$2-5lB%OU&}JH`o~#my4jfriXvC{^h_sT< zT}j5wi2qvEO+H@-L@!e z@C|{qo>Xz2xT1RJ-eFvM-vRU?n9Am9N@6x2#^r@t>Slzyr}ljd*vfzHvve^xRU41r zg}W3Qt!mM|mR5#XA_5gFj35z-ARN-0mt;3|jm$D%UpN#Onao|6=&_D^&cN68ZFI}M z(|fDEIsaehA&&EqOc3)r!`380x>#PMXBph#0ujeM*g2yzniV~<-@q3v)7*0}uBjC&jUu;=q4S@nW&6%;?7)Z6CBJ z*JqGyWabgl5vyr&IiLSFa$1Lh$4=n!?Wy;;KRHn?aZABQbwnOxRli>=0(q`86!na zy{SOS)7|EMtLc6F!uY^uki<=fO&Nc4&rc&*G82}K+h|`9igNiW^&Mlu2=!!DcigT{ zUdgCFo5|=x&Y+V+5P?rPV>yetAQ?mXh=eeF&c^zX)dzoUq(jxHz#Tj+(9!Y6!!@${ z)&eH5dMC~jFA||+)(n(%_|O-j%;CI|$P^fk#NGG~OL;Q4GbE4RypiJt>r>`}i~J*J zV|+J+gw4@=89O6kd1Z3{ZO#)rR$CVYXGvHk_zytmKG|9zEiTNxfO3L2%FcSL@!WvI z;U6@ot6hJq+;i!@yGNc(cP%hHR$v7o-3dOIyS{4xd$oT_7Mqu2oX2+%4|}XzZR>~lGjEnDH%$bm&<-8j{`Min=As%vg8qNls0nMLviL=%gB%f*%isJogAj* z+BRZoY$KMQJn<{fY}cm|DgAqzx{cw=dpu#XPL zSLYYo71+08N#44t0`l`=wsv2vbLS$|Wbs8FFpC*;E}<4EH*psqnA}C-jcgg%<>N!@u0xt9`@GDi+sTc6pO#V zegENd!EY8nq(yq3Rf%n&3UgFs)ptifyw((WBtrRdONrSu*Gz)8^E?jTRRIG&trwXZ z$iy?OGR-1ufJVJV%*^6EQ4e3)Ct|6!fWm*ipsUPJhpeVCRO6;!{j71>Bq_f`zJ6b6 z_a7v9x7~Aoc^SF!;7Cc-=LVo8y;^Oduym53%9vP_;gYuz(>Ft!-U`@z+B)V7$CJH6 zeeS5WKO9*%q<&^ebW}2~+LiYkoD2*F?$zhT?8SMA7jA-ZHKTbhYlzgYgeswmYjl5V za(6FB`|-)WK&Zsrp1&dNQ;B922ZtEE6U5F6pU{(Le@-9CyWmmKBEZ3;cR*?B&DtEN z$s@{13eqOoCMtyfi0mA=Yh)Gy)zq_N+nIQOid-Kh@>9==xAWOMZSn}e`!f}gm~Xl| zohsv=4w+16rFmGOA`f~g&BF?RK8k;EMoK*kVy7=5lQ}he7^)nVo*Ecb_Ih&A_E~Ot za;g!Ili^s=@b~J)=z)8wm*}~b)Hp)b5i^hG`&PvFVKOvPNVTKT@-Q8jd?6@KO7lV> zT$&p7Nu)>}0y!q0FnWz0?T;&ozSh(*Ryzb9mWPYpyk|C3$kKrIMDR?qLrs5@efPn6 zf+%B;M)2=!4U@-3IZ3kJ(!o*dsAqUO%6cKyGwDvUAJOdNVo_891uzDfhBe%fjbE7~ z^x+lT?h3Pdnl7{7E*CV;yj*Zp5Uva+oaI{cUQf{(wQ3ZRveu2n`5<7~68{mV1+aL0 zhe&(!9zHA`c(;wcbT8WRBRPMeHV70C+1iX!h)^7-FyV58@QXMN3@0MRdoIO3JKV#T zBD|fjoj^r!xs+Fj^YMxt?w+i8Ay2||n?<}jorucpP*y59h=6$4o|T;P(pY&{Yp@1V zJ6i{xD|O|_`Lf-`cB_pah&C-S?7zLhU{OS)1uU*jf(9RjFxiR(Sz4K*s&-qcexe zTuE^_dYmrboS#vGM}&VB?fB($L?yNIq$i)e2~ZJ9QWwGvj+EDx4*Rjxnpa{cE>jIq zrd_;~8)tQQ3J1HBC_MScyS>xhD11j;!@I$M)zMxY{M!(ConG*7j|1sC-RrY5X7qVk z)7>g?cR39lG6XyhMGNz(xdZOWVAggtFSTPZNIQxv+i_SQ8xwy@G@uI&iZ6rm2DpRz zCIY*w@c={ldlQZQ8oOaJ@o4OZ1z|r`tZ3KyuR%bV9c5#+6OfMwj=g!}`JHc|ivo^ zS#wd&M!~nQjsjcVn;RdHh9fQT1utI+Va~#mi!L5u$9eyLWAz1Gw zZC3Tma)yNBV4pPQd*~qq{x`0rV6g zd2Ol=U}%3{;geb|KwNm0y~$EUU0>c zSP}Tv4#lBhF`Et-+LKYtjuu+sY>Y5A?N$_IUkiWOkC&+mtq2Uv#$K)B;4ClFYR%ZI z7@NiH<`vNn3wmN^GR8F%Y^>UjG)=r2LoU0ckZ5FQb-<<0kVH-fyZ^>vK>RQ1N$JjZnJcl~3}ItK4|vhYXnk;> zjJ|&kasn?{Caq1i5F@6eW}ynqkYb>~uf?Va3nd^Hr)F%Qnyk!dv`E6jzMWS2(l}LM z!N)kqcss%ahC7a-X4lWk*&1f%L%QIfD$B!%@>keKlI+9^?ZB%X5LmiQsXdprP&)CX zF@1g@%ASSvN#b6j*Q!aTBL6pKg>wE+K`?(++nd|P<%QYJ%~$*T=pF<9kULcp-yo2o z&`FhmR0_>h;!=$*uuCrQ=Ej5Fhi3RtV;*Y8qm~Nd$djZ%1uH1FWtxTv3bRboDfq_Za*U_o?e~bA-`$Rs8$UuUd6vcT}SDpoTuXMXpow z^S6TcN;cOkaev3#CG$1Qtj+cu?>1PV+)CU;bIyTVu)e)@Z`H)e90H-_dS^~fclRL3 h@;XO>6Koy^3Fv$OakyW1faQ(G|342hI^Q3{0ssWoaZmsN diff --git a/src/brushes/pattern_brush.class.js b/src/brushes/pattern_brush.class.js index 4414b004..36573ea3 100644 --- a/src/brushes/pattern_brush.class.js +++ b/src/brushes/pattern_brush.class.js @@ -24,9 +24,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab }, getPatternSrcBody: function() { - return String(this.getPatternSrc) - .match(/function\s*\w*\s*(.*)\s*\{([\s\S]*)\}/)[1] - .replace('this.color', '"' + this.color + '"'); + return fabric.util.getFunctionBody(this.getPatternSrc) + .replace('this.color', '"' + this.color + '"'); }, /** diff --git a/src/pattern.class.js b/src/pattern.class.js index 64d9c0cf..3b1c5d9c 100644 --- a/src/pattern.class.js +++ b/src/pattern.class.js @@ -56,8 +56,7 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ // callback if (typeof this.source === 'function') { - source = String(this.source) - .match(/function\s+\w*\s*\(.*\)\s+\{([\s\S]*)\}/)[1]; + source = fabric.util.getFunctionBody(this.source); } // element else if (typeof this.source.src === 'string') { diff --git a/src/util/misc.js b/src/util/misc.js index 26288332..c70482e5 100644 --- a/src/util/misc.js +++ b/src/util/misc.js @@ -446,6 +446,10 @@ ]; } + function getFunctionBody(fn) { + return String(fn).match(/function[^{]*\{([\s\S]*)\}/)[1]; + } + fabric.util.removeFromArray = removeFromArray; fabric.util.degreesToRadians = degreesToRadians; fabric.util.radiansToDegrees = radiansToDegrees; @@ -466,5 +470,6 @@ fabric.util.createAccessors = createAccessors; fabric.util.clipContext = clipContext; fabric.util.multiplyTransformMatrices = multiplyTransformMatrices; + fabric.util.getFunctionBody = getFunctionBody; })(); diff --git a/test/unit/util.js b/test/unit/util.js index a803227a..afd41d75 100644 --- a/test/unit/util.js +++ b/test/unit/util.js @@ -732,4 +732,17 @@ ok(typeof destination.ffffffffff === 'undefined'); }); -})(); \ No newline at end of file + test('fabric.util.getFunctionBody', function() { + equal(fabric.util.getFunctionBody('function(){}'), ''); + + equal(fabric.util.getFunctionBody('function(){return 1 + 2}'), + 'return 1 + 2'); + + equal(fabric.util.getFunctionBody('function () {\n return "blah" }'), + '\n return "blah" '); + + equal(fabric.util.getFunctionBody('function foo (a , boo_bar, baz123 )\n{\n if (1) { alert(12345) } }'), + '\n if (1) { alert(12345) } '); + }); + +})();