From 3ce850793244ba84bd1c2d7224c3e15e0445026f Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 11 Aug 2012 18:59:53 +0200 Subject: [PATCH] Implement `fabric.Text.fromElement`. Closes #182. --- .sublime-project | 2 +- HEADER.js | 2 +- dist/all.js | 51 +++++++++++++++++------- dist/all.min.js | 4 +- dist/all.min.js.gz | Bin 41519 -> 41648 bytes lib/master.css | 12 ------ package.json | 2 +- src/parser.js | 25 +++++++----- src/text.class.js | 24 ++++++++++-- test/unit/rect.js | 5 +++ test/unit/text.js | 95 +++++++++++++++++++++++++++++++++++++-------- 11 files changed, 162 insertions(+), 60 deletions(-) delete mode 100644 lib/master.css diff --git a/.sublime-project b/.sublime-project index 7c34cc7c..aeaf436a 100644 --- a/.sublime-project +++ b/.sublime-project @@ -3,7 +3,7 @@ [ { "path": ".", - "folder_exclude_patterns": ["tmp", "log"], + "folder_exclude_patterns": ["tmp", "log", "node_modules"], "file_exclude_patterns": ["*.min.js", "*.gz", ".sublime-workspace"] } ], diff --git a/HEADER.js b/HEADER.js index 75411d87..b6b4d009 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "0.8.45" }; +var fabric = fabric || { version: "0.8.46" }; if (typeof exports != 'undefined') { exports.fabric = fabric; diff --git a/dist/all.js b/dist/all.js index b0c7574a..2aa88497 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL` */ /*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "0.8.45" }; +var fabric = fabric || { version: "0.8.46" }; if (typeof exports != 'undefined') { exports.fabric = fabric; @@ -3365,15 +3365,20 @@ fabric.util.string = { clone = fabric.util.object.clone; var attributesMap = { - 'cx': 'left', - 'x': 'left', - 'cy': 'top', - 'y': 'top', - 'r': 'radius', - 'fill-opacity': 'opacity', - 'fill-rule': 'fillRule', - 'stroke-width': 'strokeWidth', - 'transform': 'transformMatrix' + 'cx': 'left', + 'x': 'left', + 'cy': 'top', + 'y': 'top', + 'r': 'radius', + 'fill-opacity': 'opacity', + 'fill-rule': 'fillRule', + 'stroke-width': 'strokeWidth', + 'transform': 'transformMatrix', + 'text-decoration': 'textDecoration', + 'font-size': 'fontSize', + 'font-weight': 'fontWeight', + 'font-style': 'fontStyle', + 'font-family': 'fontFamily' }; function normalizeAttr(attr) { @@ -3788,7 +3793,7 @@ fabric.util.string = { */ fabric.parseSVGDocument = (function() { - var reAllowedSVGTagNames = /^(path|circle|polygon|polyline|ellipse|rect|line|image)$/; + var reAllowedSVGTagNames = /^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/; // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute // \d doesn't quite cut it (as we need to match an actual float number) @@ -12636,7 +12641,7 @@ fabric.Image.filters.Tint.fromObject = function(object) { initialize: function(text, options) { this._initStateProperties(); this.text = text; - this.setOptions(options); + this.setOptions(options || { }); this.theta = this.angle * Math.PI / 180; this._initDimensions(); this.setCoords(); @@ -13265,6 +13270,14 @@ fabric.Image.filters.Tint.fromObject = function(object) { } }); + /** + * List of attribute names to account for when parsing SVG element (used by `fabric.Text.fromElement`) + * @static + */ + fabric.Text.ATTRIBUTE_NAMES = + ('x y fill fill-opacity opacity stroke stroke-width transform ' + + 'font-family font-style font-weight font-size text-decoration').split(' '); + /** * Returns fabric.Text instance from an object representation * @static @@ -13280,10 +13293,20 @@ fabric.Image.filters.Tint.fromObject = function(object) { * Returns fabric.Text instance from an SVG element (not yet implemented) * @static * @method fabric.Text.fromElement + * @param element + * @param options * @return {fabric.Text} an instance */ - fabric.Text.fromElement = function(element) { - // TODO (kangax): implement this + fabric.Text.fromElement = function(element, options) { + if (!element) { + return null; + } + + var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES); + var options = fabric.util.object.extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes); + var text = new fabric.Text(element.textContent, options); + + return text; }; })(typeof exports != 'undefined' ? exports : this); diff --git a/dist/all.min.js b/dist/all.min.js index 986d3d9b..865ea271 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,7 +1,7 @@ /* Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric=fabric||{version:"0.8.45"};if(typeof exports!="undefined"){exports.fabric=fabric}if(typeof document!="undefined"&&typeof window!="undefined"){fabric.document=document;fabric.window=window}else{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 fabric=fabric||{version:"0.8.46"};if(typeof exports!="undefined"){exports.fabric=fabric}if(typeof document!="undefined"&&typeof window!="undefined"){fabric.document=document;fabric.window=window}else{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"; /* * Copyright (c) 2009 Simo Kinnunen. * Licensed under the MIT license. */ -var Cufon=(function(){var k=function(){return k.replace.apply(null,arguments)};var u=k.DOM={ready:(function(){var z=false,B={loaded:1,complete:1};var y=[],A=function(){if(z){return}z=true;for(var C;C=y.shift();C()){}};if(fabric.document.addEventListener){fabric.document.addEventListener("DOMContentLoaded",A,false);fabric.window.addEventListener("pageshow",A,false)}if(!fabric.window.opera&&fabric.document.readyState){(function(){B[fabric.document.readyState]?A():setTimeout(arguments.callee,10)})()}if(fabric.document.readyState&&fabric.document.createStyleSheet){(function(){try{fabric.document.body.doScroll("left");A()}catch(C){setTimeout(arguments.callee,1)}})()}o(fabric.window,"load",A);return function(C){if(!arguments.length){A()}else{z?C():y.push(C)}}})()};var l=k.CSS={Size:function(z,y){this.value=parseFloat(z);this.unit=String(z).match(/[a-z%]*$/)[0]||"px";this.convert=function(A){return A/y*this.value};this.convertFrom=function(A){return A/this.value*y};this.toString=function(){return this.value+this.unit}},getStyle:function(y){return new a(y.style)},quotedList:i(function(B){var A=[],z=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,y;while(y=z.exec(B)){A.push(y[3]||y[1])}return A}),ready:(function(){var A=false;var z=[],B=function(){A=true;for(var D;D=z.shift();D()){}};var y=Object.prototype.propertyIsEnumerable?f("style"):{length:0};var C=f("link");u.ready(function(){var G=0,F;for(var E=0,D=C.length;F=C[E],E=y.length+G){B()}else{setTimeout(arguments.callee,10)}});return function(D){if(A){D()}else{z.push(D)}}})(),supports:function(A,z){var y=fabric.document.createElement("span").style;if(y[A]===undefined){return false}y[A]=z;return y[A]===z},textAlign:function(B,A,y,z){if(A.get("textAlign")=="right"){if(y>0){B=" "+B}}else{if(y400}if(F==500){F=400}for(var G in D){G=parseInt(G,10);if(!C||GA){A=G}H.push(G)}if(FA){F=A}H.sort(function(J,I){return(B?(J>F&&I>F)?JI:(JI:Jz){z=e}L.push(e);e=0;continue}var B=ab.glyphs[ag[aa]]||ab.missingGlyph;if(!B){continue}e+=D=Number(B.w||ab.w)+U}L.push(e);e=Math.max(z,e);var m=[];for(var aa=L.length;aa--;){m[aa]=e-L[aa]}if(D===null){return null}V+=(H.width-D);C+=H.minX;var v,p;if(n){v=J;p=J.firstChild}else{v=fabric.document.createElement("span");v.className="cufon cufon-canvas";v.alt=E;p=fabric.document.createElement("canvas");v.appendChild(p);if(A.printable){var Y=fabric.document.createElement("span");Y.className="cufon-alt";Y.appendChild(fabric.document.createTextNode(E));v.appendChild(Y)}}var ah=v.style;var O=p.style||{};var k=o.convert(H.height-I+T);var af=Math.ceil(k);var S=af/k;p.width=Math.ceil(o.convert(e+V-C)*S);p.height=af;I+=H.minY;O.top=Math.round(o.convert(I-ab.ascent))+"px";O.left=Math.round(o.convert(C))+"px";var j=Math.ceil(o.convert(e*S));var t=j+"px";var s=o.convert(ab.height);var F=(A.lineHeight-1)*o.convert(-ab.ascent/5)*(M-1);Cufon.textOptions.width=j;Cufon.textOptions.height=(s*M)+F;Cufon.textOptions.lines=M;Cufon.textOptions.totalLineHeight=F;if(a){ah.width=t;ah.height=s+"px"}else{ah.paddingLeft=t;ah.paddingBottom=(s-1)+"px"}var ad=Cufon.textOptions.context||p.getContext("2d"),K=af/H.height;Cufon.textOptions.fontAscent=ab.ascent*K;Cufon.textOptions.boundaries=null;for(var w=Cufon.textOptions.shadowOffsets,aa=R.length;aa--;){w[aa]=[R[aa][0]*K,R[aa][1]*K]}ad.save();ad.scale(K,K);ad.translate(-C-((1/K*p.width)/2)+(Cufon.fonts[ab.family].offsetLeft||0),-I-((Cufon.textOptions.height/K)/2)+(Cufon.fonts[ab.family].offsetTop||0));ad.lineWidth=ab.face["underline-thickness"];ad.save();function q(l,i){ad.strokeStyle=i;ad.beginPath();ad.moveTo(0,l);ad.lineTo(e,l);ad.stroke()}var r=Cufon.getTextDecoration(A),u=A.fontStyle==="italic";function ae(){ad.save();ad.fillStyle=A.backgroundColor;var aj=0,an=0,y=[{left:0}];if(A.textAlign==="right"){ad.translate(m[an],0);y[0].left=m[an]*K}else{if(A.textAlign==="center"){ad.translate(m[an]/2,0);y[0].left=m[an]/2*K}}for(var al=0,ak=ag.length;al.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 c(e,f){return a(e,/(?:em|ex|%)$/i.test(f)?"1em":f)}function a(h,i){if(/px$/i.test(i)){return parseFloat(i)}var g=h.style.left,f=h.runtimeStyle.left;h.runtimeStyle.left=h.currentStyle.left;h.style.left=i;var e=h.style.pixelLeft;h.style.left=g;h.runtimeStyle.left=f;return e}return function(T,z,O,w,D,U,M){var h=(z===null);if(h){z=D.alt}var B=T.viewBox;var j=O.computedFontSize||(O.computedFontSize=new Cufon.CSS.Size(c(U,O.get("fontSize"))+"px",T.baseSize));var L=O.computedLSpacing;if(L==undefined){L=O.get("letterSpacing");O.computedLSpacing=L=(L=="normal")?0:~~j.convertFrom(a(U,L))}var t,m;if(h){t=D;m=D.firstChild}else{t=fabric.document.createElement("span");t.className="cufon cufon-vml";t.alt=z;m=fabric.document.createElement("span");m.className="cufon-vml-canvas";t.appendChild(m);if(w.printable){var R=fabric.document.createElement("span");R.className="cufon-alt";R.appendChild(fabric.document.createTextNode(z));t.appendChild(R)}if(!M){t.appendChild(fabric.document.createElement("cvml:shape"))}}var Z=t.style;var G=m.style;var f=j.convert(B.height),W=Math.ceil(f);var K=W/f;var J=B.minX,I=B.minY;G.height=W;G.top=Math.round(j.convert(I-T.ascent));G.left=Math.round(j.convert(J));Z.height=j.convert(T.height)+"px";var p=Cufon.getTextDecoration(w);var y=O.get("color");var X=Cufon.CSS.textTransform(z,O).split("");var e=0,H=0,q=null;var x,r,A=w.textShadow;for(var S=0,Q=0,P=X.length;Sw?p:(o-n);s(t(currentTime,m,byValue,p));if(o>w||q()){x.onComplete&&x.onComplete();return}k(r)})()}var f=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(n,m){fabric.window.setTimeout(n,1000/60)};var k=function(){return f.apply(fabric.window,arguments)};function b(n,p,o){if(n){var m=new Image();m.onload=function(){p&&p.call(o,m);m=m.onload=null};m.src=n}else{p&&p.call(o,n)}}function i(o,s){function n(t){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(t))]}var q=[],p=0,m=o.filter(function(t){return n(t.type).async}).length;var r=this;o.forEach(function(v,u){if(!v.type){return}var t=n(v.type);if(t.async){t.fromObject(v,function(w){q[u]=w;if(++p===m){if(s){s(q)}}})}else{q[u]=t.fromObject(v)}});if(m===0&&s){s(q)}}function a(o,n,p){var m=o.length>1?new fabric.PathGroup(o,n):o[0];if(typeof p!=="undefined"){m.setSourcePath(p)}return m}fabric.util.removeFromArray=j;fabric.util.degreesToRadians=c;fabric.util.toFixed=e;fabric.util.getRandomInt=g;fabric.util.falseFunction=l;fabric.util.animate=d;fabric.util.requestAnimFrame=k;fabric.util.loadImage=b;fabric.util.enlivenObjects=i;fabric.util.groupSVGElements=a})();(function(){var d=Array.prototype.slice;if(!Array.prototype.indexOf){Array.prototype.indexOf=function(g){if(this===void 0||this===null){throw new TypeError()}var h=Object(this),e=h.length>>>0;if(e===0){return -1}var i=0;if(arguments.length>0){i=Number(arguments[1]);if(i!==i){i=0}else{if(i!==0&&i!==(1/0)&&i!==-(1/0)){i=(i>0||-1)*Math.floor(Math.abs(i))}}}if(i>=e){return -1}var f=i>=0?i:Math.max(e-Math.abs(i),0);for(;f>>0;f>>0;g>>0;f>>0;f>>0;g>>0,f=0,h;if(arguments.length>1){h=arguments[1]}else{do{if(f in this){h=this[f++];break}if(++f>=e){throw new TypeError()}}while(true)}for(;f=e){e=h[f][g]}}}else{while(f--){if(h[f]>=e){e=h[f]}}}return e}function c(h,g){if(!h||h.length===0){return undefined}var f=h.length-1,e=g?h[f][g]:h[f];if(g){while(f--){if(h[f][g]/g,">")}fabric.util.string={camelize:b,capitalize:c,escapeXml:a}}());(function(){var c=Array.prototype.slice,a=Function.prototype.apply,b=function(){};if(!Function.prototype.bind){Function.prototype.bind=function(d){var g=this,e=c.call(arguments,1),f;if(e.length){f=function(){return a.call(g,this instanceof b?this:d,e.concat(c.call(arguments)))}}else{f=function(){return a.call(g,this instanceof b?this:d,arguments)}}b.prototype=this.prototype;f.prototype=new b;return f}}})();(function(){var f=Array.prototype.slice,e=function(){};var c=(function(){for(var g in {toString:1}){if(g==="toString"){return false}}return true})();var b=function(g,j,h){for(var i in j){if(i in g.prototype&&typeof g.prototype[i]=="function"){g.prototype[i]=(function(k){return function(){var m=this.constructor.superclass;this.constructor.superclass=h;var l=j[k].apply(this,arguments);this.constructor.superclass=m;if(k!=="initialize"){return l}}})(i)}else{g.prototype[i]=j[i]}if(c){if(j.toString!==Object.prototype.toString){g.prototype.toString=j.toString}if(j.valueOf!==Object.prototype.valueOf){g.prototype.valueOf=j.valueOf}}}};function a(){}function d(){var k=null,j=f.call(arguments,0);if(typeof j[0]==="function"){k=j.shift()}function g(){this.initialize.apply(this,arguments)}g.superclass=k;g.subclasses=[];if(k){a.prototype=k.prototype;g.prototype=new a;k.subclasses.push(g)}for(var h=0,l=j.length;h-1?c(j,l.match(/opacity:\s*(\d?\.?\d*)/)[1]):j}for(var m in l){if(m==="opacity"){c(j,l[m])}else{var k=(m==="float"||m==="cssFloat")?(typeof n.styleFloat==="undefined"?"cssFloat":"styleFloat"):m;n[k]=l[m]}}return j}var h=fabric.document.createElement("div"),g=typeof h.style.opacity==="string",b=typeof h.style.filter==="string",a=fabric.document.defaultView,f=a&&typeof a.getComputedStyle!=="undefined",d=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,c=function(i){return i};if(g){c=function(i,j){i.style.opacity=j;return i}}else{if(b){c=function(i,j){var k=i.style;if(i.currentStyle&&!i.currentStyle.hasLayout){k.zoom=1}if(d.test(k.filter)){j=j>=0.9999?"":("alpha(opacity="+(j*100)+")");k.filter=k.filter.replace(d,j)}else{k.filter+=" alpha(opacity="+(j*100)+")"}return i}}}fabric.util.setStyle=e})();(function(){var h=Array.prototype.slice;function g(j){return typeof j==="string"?fabric.document.getElementById(j):j}function b(j){return h.call(j,0)}try{var i=b(fabric.document.childNodes) instanceof Array}catch(a){}if(!i){b=function(k){var j=new Array(k.length),l=k.length;while(l--){j[l]=k[l]}return j}}function c(k,j){var l=fabric.document.createElement(k);for(var m in j){if(m==="class"){l.className=j[m]}else{if(m==="for"){l.htmlFor=j[m]}else{l.setAttribute(m,j[m])}}}return l}function f(j,k){if((" "+j.className+" ").indexOf(" "+k+" ")===-1){j.className+=(j.className?" ":"")+k}}function e(k,l,j){if(typeof l==="string"){l=c(l,j)}if(k.parentNode){k.parentNode.replaceChild(l,k)}l.appendChild(k);return l}function d(k){var j=0,l=0;do{j+=k.offsetTop||0;l+=k.offsetLeft||0;k=k.offsetParent}while(k);return({left:l,top:j})}(function(){var k=fabric.document.documentElement.style;var l="userSelect" in k?"userSelect":"MozUserSelect" in k?"MozUserSelect":"WebkitUserSelect" in k?"WebkitUserSelect":"KhtmlUserSelect" in k?"KhtmlUserSelect":"";function m(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=fabric.util.falseFunction}if(l){n.style[l]="none"}else{if(typeof n.unselectable=="string"){n.unselectable="on"}}return n}function j(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=null}if(l){n.style[l]=""}else{if(typeof n.unselectable=="string"){n.unselectable=""}}return n}fabric.util.makeElementUnselectable=m;fabric.util.makeElementSelectable=j})();(function(){function j(k,o){var m=fabric.document.getElementsByTagName("head")[0],l=fabric.document.createElement("script"),n=true;l.type="text/javascript";l.setAttribute("runat","server");l.onload=l.onreadystatechange=function(p){if(n){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete"){return}n=false;o(p||fabric.window.event);l=l.onload=l.onreadystatechange=null}};l.src=k;m.appendChild(l)}fabric.util.getScript=j})();fabric.util.getById=g;fabric.util.toArray=b;fabric.util.makeElement=c;fabric.util.addClass=f;fabric.util.wrapElement=e;fabric.util.getElementOffset=d})();(function(){function d(e,f){return e+(/\?/.test(e)?"&":"?")+f}var c=(function(){var h=[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 e=h.length;e--;){try{var g=h[e]();if(g){return h[e]}}catch(f){}}})();function a(){}function b(g,f){f||(f={});var j=f.method?f.method.toUpperCase():"GET",i=f.onComplete||function(){},h=c(),e;h.onreadystatechange=function(){if(h.readyState===4){i(h);h.onreadystatechange=a}};if(j==="GET"){e=null;if(typeof f.parameters=="string"){g=d(g,f.parameters)}}h.open(j,g,true);if(j==="POST"||j==="PUT"){h.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}h.send(e);return h}fabric.util.request=b})();(function(){function d(F,E,H,G){return H*(F/=G)*F+E}function l(F,E,H,G){return -H*(F/=G)*(F-2)+E}function r(F,E,H,G){if((F/=G/2)<1){return H/2*F*F+E}return -H/2*((--F)*(F-2)-1)+E}function B(F,E,H,G){return H*(F/=G)*F*F+E}function q(F,E,H,G){return H*((F=F/G-1)*F*F+1)+E}function u(F,E,H,G){if((F/=G/2)<1){return H/2*F*F*F+E}return H/2*((F-=2)*F*F+2)+E}function t(F,E,H,G){return H*(F/=G)*F*F*F+E}function g(F,E,H,G){return -H*((F=F/G-1)*F*F*F-1)+E}function k(F,E,H,G){if((F/=G/2)<1){return H/2*F*F*F*F+E}return -H/2*((F-=2)*F*F*F-2)+E}function y(F,E,H,G){return H*(F/=G)*F*F*F*F+E}function j(F,E,H,G){return H*((F=F/G-1)*F*F*F*F+1)+E}function n(F,E,H,G){if((F/=G/2)<1){return H/2*F*F*F*F*F+E}return H/2*((F-=2)*F*F*F*F+2)+E}function f(F,E,H,G){return -H*Math.cos(F/G*(Math.PI/2))+H+E}function o(F,E,H,G){return H*Math.sin(F/G*(Math.PI/2))+E}function v(F,E,H,G){return -H/2*(Math.cos(Math.PI*F/G)-1)+E}function D(F,E,H,G){return(F==0)?E:H*Math.pow(2,10*(F/G-1))+E}function c(F,E,H,G){return(F==G)?E+H:H*(-Math.pow(2,-10*F/G)+1)+E}function i(F,E,H,G){if(F==0){return E}if(F==G){return E+H}if((F/=G/2)<1){return H/2*Math.pow(2,10*(F-1))+E}return H/2*(-Math.pow(2,-10*--F)+2)+E}function h(F,E,H,G){return -H*(Math.sqrt(1-(F/=G)*F)-1)+E}function p(F,E,H,G){return H*Math.sqrt(1-(F=F/G-1)*F)+E}function x(F,E,H,G){if((F/=G/2)<1){return -H/2*(Math.sqrt(1-F*F)-1)+E}return H/2*(Math.sqrt(1-(F-=2)*F)+1)+E}function s(G,E,K,J){var H=1.70158;var I=0;var F=K;if(G==0){return E}if((G/=J)==1){return E+K}if(!I){I=J*0.3}if(F-1;w=w.split(/\s+/);var u=[];if(y){for(var v=0,t=w.length;v/i,""))}if(!w.documentElement){return}h.parseSVGDocument(w.documentElement,function(z,y){k.set(t,{objects:h.util.array.invoke(z,"toObject"),options:y});v(z,y)})}}function b(v){var u=v.objects,t=v.options;u=u.map(function(w){return h[f(w.type)].fromObject(w)});return({objects:u,options:t})}function n(t,w){t=t.trim();var u;if(typeof DOMParser!=="undefined"){var v=new DOMParser();if(v&&v.parseFromString){u=v.parseFromString(t,"text/xml")}}else{if(h.window.ActiveXObject){var u=new ActiveXObject("Microsoft.XMLDOM");u.async="false";u.loadXML(t.replace(//i,""))}}h.parseSVGDocument(u.documentElement,function(y,x){w(y,x)})}function m(w){var u="";for(var v=0,t=w.length;v",'",""].join("")}return u}p(h,{parseAttributes:e,parseElements:g,parseStyleAttribute:i,parsePointsAttribute:s,getCSSRules:d,loadSVGFromURL:c,loadSVGFromString:n,createSVGFontFacesMarkup:m})})(typeof exports!="undefined"?exports:this);(function(){function c(h){var g=h.getAttribute("style");if(g){var k=g.split(/\s*;\s*/);if(k[k.length-1]===""){k.pop()}for(var f=k.length;f--;){var e=k[f].split(/\s*:\s*/),d=e[0].trim(),j=e[1].trim();if(d==="stop-color"){return j}}}}fabric.Gradient={create:function(l,m){m||(m={});var f=m.x1||0,k=m.y1||0,e=m.x2||l.canvas.width,i=m.y2||0,g=m.colorStops;var j=l.createLinearGradient(f,k,e,i);for(var h in g){var d=g[h];j.addColorStop(parseFloat(h),d)}return j},fromElement:function(d,m,l){var j=d.getElementsByTagName("stop"),d,f,e={},g,k={x1:d.getAttribute("x1")||0,y1:d.getAttribute("y1")||0,x2:d.getAttribute("x2")||"100%",y2:d.getAttribute("y2")||0};for(var h=j.length;h--;){d=j[h];f=d.getAttribute("offset");f=parseFloat(f)/(/%$/.test(f)?100:1);e[f]=c(d)||d.getAttribute("stop-color")}a(l,k);return fabric.Gradient.create(m,{x1:k.x1,y1:k.y1,x2:k.x2,y2:k.y2,colorStops:e})},forObject:function(g,d,e){e||(e={});a(g,e);var f=fabric.Gradient.create(d,{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,colorStops:e.colorStops});return f}};function a(f,e){for(var g in e){if(typeof e[g]==="string"&&/^\d+%$/.test(e[g])){var d=parseFloat(e[g],10);if(g==="x1"||g==="x2"){e[g]=f.width*d/100}else{if(g==="y1"||g==="y2"){e[g]=f.height*d/100}}}if(g==="x1"||g==="x2"){e[g]-=f.width/2}else{if(g==="y1"||g==="y2"){e[g]-=f.height/2}}}}function b(j){var f=j.getElementsByTagName("linearGradient"),d=j.getElementsByTagName("radialGradient"),g,h={};for(var e=f.length;e--;){g=f[e];h[g.id]=g}for(var e=d.length;e--;){g=d[e];h[g.id]=g}return h}fabric.getGradientDefs=b})();(function(b){var c=b.fabric||(b.fabric={});if(c.Point){c.warn("fabric.Point is already defined");return}c.Point=a;function a(d,e){if(arguments.length>0){this.init(d,e)}}a.prototype={constructor:a,init:function(d,e){this.x=d;this.y=e},add:function(d){return new a(this.x+d.x,this.y+d.y)},addEquals:function(d){this.x+=d.x;this.y+=d.y;return this},scalarAdd:function(d){return new a(this.x+d,this.y+d)},scalarAddEquals:function(d){this.x+=d;this.y+=d;return this},subtract:function(d){return new a(this.x-d.x,this.y-d.y)},subtractEquals:function(d){this.x-=d.x;this.y-=d.y;return this},scalarSubtract:function(d){return new a(this.x-d,this.y-d)},scalarSubtractEquals:function(d){this.x-=d;this.y-=d;return this},multiply:function(d){return new a(this.x*d,this.y*d)},multiplyEquals:function(d){this.x*=d;this.y*=d;return this},divide:function(d){return new a(this.x/d,this.y/d)},divideEquals:function(d){this.x/=d;this.y/=d;return this},eq:function(d){return(this.x==d.x&&this.y==d.y)},lt:function(d){return(this.xd.x&&this.y>d.y)},gte:function(d){return(this.x>=d.x&&this.y>=d.y)},lerp:function(e,d){return new a(this.x+(e.x-this.x)*d,this.y+(e.y-this.y)*d)},distanceFrom:function(f){var e=this.x-f.x,d=this.y-f.y;return Math.sqrt(e*e+d*d)},min:function(d){return new a(Math.min(this.x,d.x),Math.min(this.y,d.y))},max:function(d){return new a(Math.max(this.x,d.x),Math.max(this.y,d.y))},toString:function(){return this.x+","+this.y},setXY:function(d,e){this.x=d;this.y=e},setFromPoint:function(d){this.x=d.x;this.y=d.y},swap:function(e){var d=this.x,f=this.y;this.x=e.x;this.y=e.y;e.x=d;e.y=f}}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Intersection){b.warn("fabric.Intersection is already defined");return}function c(d){if(arguments.length>0){this.init(d)}}b.Intersection=c;b.Intersection.prototype={init:function(d){this.status=d;this.points=[]},appendPoint:function(d){this.points.push(d)},appendPoints:function(d){this.points=this.points.concat(d)}};b.Intersection.intersectLineLine=function(h,f,l,k){var m,i=(k.x-l.x)*(h.y-l.y)-(k.y-l.y)*(h.x-l.x),j=(f.x-h.x)*(h.y-l.y)-(f.y-h.y)*(h.x-l.x),g=(k.y-l.y)*(f.x-h.x)-(k.x-l.x)*(f.y-h.y);if(g!=0){var e=i/g,d=j/g;if(0<=e&&e<=1&&0<=d&&d<=1){m=new c("Intersection");m.points.push(new b.Point(h.x+e*(f.x-h.x),h.y+e*(f.y-h.y)))}else{m=new c("No Intersection")}}else{if(i==0||j==0){m=new c("Coincident")}else{m=new c("Parallel")}}return m};b.Intersection.intersectLinePolygon=function(e,d,l){var m=new c("No Intersection"),f=l.length;for(var h=0;h0){m.status="Intersection"}return m};b.Intersection.intersectPolygonPolygon=function(j,h){var f=new c("No Intersection"),l=j.length;for(var k=0;k0){f.status="Intersection"}return f};b.Intersection.intersectPolygonRectangle=function(n,e,d){var g=e.min(d),m=e.max(d),f=new b.Point(m.x,g.y),l=new b.Point(g.x,m.y),k=c.intersectLinePolygon(g,f,n),j=c.intersectLinePolygon(f,m,n),i=c.intersectLinePolygon(m,l,n),h=c.intersectLinePolygon(l,g,n),o=new c("No Intersection");o.appendPoints(k.points);o.appendPoints(j.points);o.appendPoints(i.points);o.appendPoints(h.points);if(o.points.length>0){o.status="Intersection"}return o}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Color){b.warn("fabric.Color is already defined.");return}function c(d){if(!d){this.setSource([0,0,0,1])}else{this._tryParsingColor(d)}}b.Color=c;b.Color.prototype={_tryParsingColor:function(d){var e=c.sourceFromHex(d);if(!e){e=c.sourceFromRgb(d)}if(e){this.setSource(e)}},getSource:function(){return this._source},setSource:function(d){this._source=d},toRgb:function(){var d=this.getSource();return"rgb("+d[0]+","+d[1]+","+d[2]+")"},toRgba:function(){var d=this.getSource();return"rgba("+d[0]+","+d[1]+","+d[2]+","+d[3]+")"},toHex:function(){var h=this.getSource();var f=h[0].toString(16);f=(f.length==1)?("0"+f):f;var e=h[1].toString(16);e=(e.length==1)?("0"+e):e;var d=h[2].toString(16);d=(d.length==1)?("0"+d):d;return f.toUpperCase()+e.toUpperCase()+d.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var d=this.getSource();d[3]=e;this.setSource(d);return this},toGrayscale:function(){var f=this.getSource(),e=parseInt((f[0]*0.3+f[1]*0.59+f[2]*0.11).toFixed(0),10),d=f[3];this.setSource([e,e,e,d]);return this},toBlackWhite:function(d){var g=this.getSource(),f=(g[0]*0.3+g[1]*0.59+g[2]*0.11).toFixed(0),e=g[3],d=d||127;f=(Number(f)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];if(this.backgroundImage){h.push('')}for(var j=0,k=this.getObjects(),g=k.length;j");return h.join("")},isEmpty:function(){return this._objects.length===0},remove:function(g){e(this._objects,g);if(this.getActiveObject()===g){this.fire("before:selection:cleared",{target:g});this.discardActiveObject();this.fire("selection:cleared")}this.renderAll();return g},sendToBack:function(g){e(this._objects,g);this._objects.unshift(g);return this.renderAll()},bringToFront:function(g){e(this._objects,g);this._objects.push(g);return this.renderAll()},sendBackwards:function(j){var h=this._objects.indexOf(j),g=h;if(h!==0){for(var k=h-1;k>=0;--k){if(j.intersectsWithObject(this._objects[k])||j.isContainedWithinObject(this._objects[k])){g=k;break}}e(this._objects,j);this._objects.splice(g,0,j)}return this.renderAll()},bringForward:function(k){var n=this.getObjects(),h=n.indexOf(k),g=h;if(h!==n.length-1){for(var m=h+1,j=this._objects.length;m"};f(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(l){var k=l.getContext("2d"),g=k.getImageData(0,0,l.width,l.height),p=g.data,m=g.width,r=g.height,q,h,o,n;for(o=0;o0)?0:-v),r.ey-((u>0)?0:-u),t,s);this.contextTop.lineWidth=this.selectionLineWidth;this.contextTop.strokeStyle=this.selectionBorderColor;this.contextTop.strokeRect(r.ex+a-((v>0)?0:t),r.ey+a-((u>0)?0:s),t,s)},_findSelectedObjects:function(x){var y,t,D=[],s=this._groupSelector.ex,C=this._groupSelector.ey,r=s+this._groupSelector.left,A=C+this._groupSelector.top,z,w=new fabric.Point(f(s,r),f(C,A)),B=new fabric.Point(l(s,r),l(C,A));for(var u=0,v=this._objects.length;u1){var D=new fabric.Group(D);this.setActiveGroup(D);D.saveCoords();this.fire("selection:created",{target:D})}}this.renderAll()},findTarget:function(v,s){var u,w=this.getPointer(v);var t=this.getActiveGroup();if(t&&!s&&this.containsPoint(v,t)){u=t;return u}for(var r=this._objects.length;r--;){if(this._objects[r]&&this.containsPoint(v,this._objects[r])){u=this._objects[r];this.relatedTarget=u;break}}if(u&&u.selectable){return u}},getPointer:function(r){var s=q(r);return{x:s.x-this._offset.left,y:s.y-this._offset.top}},_createUpperCanvas:function(){this.upperCanvasEl=this._createCanvasElement();this.upperCanvasEl.className="upper-canvas";this.wrapperEl.appendChild(this.upperCanvasEl);this._applyCanvasStyle(this.upperCanvasEl);this.contextTop=this.upperCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass});fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"});fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(s){var t=this.getWidth()||s.width,r=this.getHeight()||s.height;fabric.util.setStyle(s,{position:"absolute",width:t+"px",height:r+"px",left:0,top:0});s.width=t;s.height=r;fabric.util.makeElementUnselectable(s)},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},setActiveObject:function(r,s){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=r;r.setActive(true);this.renderAll();this.fire("object:selected",{target:r,e:s});r.fire("selected",{e:s});return this},getActiveObject:function(){return this._activeObject},discardActiveObject:function(){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=null;return this},setActiveGroup:function(r){this._activeGroup=r;r&&r.setActive(true);return this},getActiveGroup:function(){return this._activeGroup},discardActiveGroup:function(){var r=this.getActiveGroup();if(r){r.destroy()}return this.setActiveGroup(null)},deactivateAll:function(){var s=this.getObjects(),t=0,r=s.length;for(;t1)?q.apply(this,o.call(arguments,1)):q.call(this)},initialize:function(i){i&&this.setOptions(i)},setOptions:function(q){var r=this.stateProperties.length,s;while(r--){s=this.stateProperties[r];if(s in q){this.set(s,q[s])}}},transform:function(i){i.globalAlpha=this.opacity;i.translate(this.left,this.top);i.rotate(this.theta);i.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(){var i={type:this.type,left:c(this.left,this.NUM_FRACTION_DIGITS),top:c(this.top,this.NUM_FRACTION_DIGITS),width:c(this.width,this.NUM_FRACTION_DIGITS),height:c(this.height,this.NUM_FRACTION_DIGITS),fill:this.fill,overlayFill:this.overlayFill,stroke:this.stroke,strokeWidth:this.strokeWidth,strokeDashArray:this.strokeDashArray,scaleX:c(this.scaleX,this.NUM_FRACTION_DIGITS),scaleY:c(this.scaleY,this.NUM_FRACTION_DIGITS),angle:c(this.getAngle(),this.NUM_FRACTION_DIGITS),flipX:this.flipX,flipY:this.flipY,opacity:c(this.opacity,this.NUM_FRACTION_DIGITS),selectable:this.selectable,hasControls:this.hasControls,hasBorders:this.hasBorders,hasRotatingPoint:this.hasRotatingPoint};if(!this.includeDefaultValues){i=this._removeDefaultValues(i)}return i},toDatalessObject:function(){return this.toObject()},getSvgStyles:function(){return["stroke: ",(this.stroke?this.stroke:"none"),"; ","stroke-width: ",(this.strokeWidth?this.strokeWidth:"0"),"; ","stroke-dasharray: ",(this.strokeDashArray?this.strokeDashArray.join(" "):"; "),"fill: ",(this.fill?this.fill:"none"),"; ","opacity: ",(this.opacity?this.opacity:"1"),";"].join("")},getSvgTransform:function(){var i=this.getAngle();return["translate(",c(this.left,2)," ",c(this.top,2),")",i!==0?(" rotate("+c(i,2)+")"):"",(this.scaleX===1&&this.scaleY===1)?"":(" scale("+c(this.scaleX,2)+" "+c(this.scaleY,2)+")")].join("")},_removeDefaultValues:function(q){var i=d.Object.prototype.options;if(i){this.stateProperties.forEach(function(r){if(q[r]===i[r]){delete q[r]}})}return q},isActive:function(){return !!this.active},setActive:function(i){this.active=!!i;return this},toString:function(){return"#"},set:function(i,q){if(typeof i==="object"){for(var r in i){this._set(r,i[r])}}else{if(typeof q==="function"){this._set(i,q(this.get(i)))}else{this._set(i,q)}}return this},_set:function(i,q){var r=(i==="scaleX"||i==="scaleY")&&qi){var C=x-i}if(E){z+=(D*E)-(C*E||0)}else{v+=(D*y)-(C*y||0)}B[1&s?"moveTo":"lineTo"](z,v);if(s>=u){s=0}}}q(1,0);q(0,1);q(-1,0);q(0,-1);B.stroke();B.closePath();B.restore()},drawCorners:function(B){if(!this.hasControls){return}var D=this.cornersize,y=D/2,x=this.padding,r=-(this.width/2),w=-(this.height/2),C,A,q=D/this.scaleX,i=D/this.scaleY,s=(x+y)/this.scaleY,t=(x+y)/this.scaleX,v=(x+y-D)/this.scaleX,u=(x+y-D)/this.scaleY,z=this.height;B.save();B.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1;B.fillStyle=this.cornerColor;C=r-t;A=w-s;B.fillRect(C,A,q,i);C=r+this.width-t;A=w-s;B.fillRect(C,A,q,i);C=r-t;A=w+z+u;B.fillRect(C,A,q,i);C=r+this.width+v;A=w+z+u;B.fillRect(C,A,q,i);C=r+this.width/2-t;A=w-s;B.fillRect(C,A,q,i);C=r+this.width/2-t;A=w+z+u;B.fillRect(C,A,q,i);C=r+this.width+v;A=w+z/2-s;B.fillRect(C,A,q,i);C=r-t;A=w+z/2-s;B.fillRect(C,A,q,i);if(this.hasRotatingPoint){C=r+this.width/2-t;A=this.flipY?(w+z+(this.rotatingPointOffset/this.scaleY)-i/2):(w-(this.rotatingPointOffset/this.scaleY)-i/2);B.fillRect(C,A,q,i)}B.restore();return this},clone:function(i){if(this.constructor.fromObject){return this.constructor.fromObject(this.toObject(),i)}return new d.Object(this.toObject())},cloneAsImage:function(s){if(d.Image){var q=new Image();q.onload=function(){if(s){s(new d.Image(q),r)}q=q.onload=null};var r={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",false).set("flipY",false);this.toDataURL(function(i){q.src=i})}return this},toDataURL:function(s){var q=d.document.createElement("canvas");if(!q.getContext&&typeof G_vmlCanvasManager!="undefined"){G_vmlCanvasManager.initElement(q)}this.setCoords();q.width=this.getBoundingRectWidth();q.height=this.getBoundingRectHeight();d.util.wrapElement(q,"div");var i=new d.Canvas(q);i.backgroundColor="transparent";i.renderAll();if(this.constructor.async){this.clone(r)}else{r(this.clone())}function r(u){u.left=q.width/2;u.top=q.height/2;u.setActive(false);i.add(u);var t=i.toDataURL("png");i.dispose();i=u=null;s&&s(t)}},hasStateChanged:function(){return this.stateProperties.some(function(i){return this[i]!==this.originalState[i]},this)},saveState:function(){this.stateProperties.forEach(function(i){this.originalState[i]=this.get(i)},this);return this},setupState:function(){this.originalState={};this.saveState()},intersectsWithRect:function(r,t){var w=this.oCoords,i=new d.Point(w.tl.x,w.tl.y),s=new d.Point(w.tr.x,w.tr.y),v=new d.Point(w.bl.x,w.bl.y),q=new d.Point(w.br.x,w.br.y);var u=d.Intersection.intersectPolygonRectangle([i,s,q,v],r,t);return(u.status==="Intersection")},intersectsWithObject:function(i){function q(u){return{tl:new d.Point(u.tl.x,u.tl.y),tr:new d.Point(u.tr.x,u.tr.y),bl:new d.Point(u.bl.x,u.bl.y),br:new d.Point(u.br.x,u.br.y)}}var r=q(this.oCoords),t=q(i.oCoords);var s=d.Intersection.intersectPolygonPolygon([r.tl,r.tr,r.br,r.bl],[t.tl,t.tr,t.br,t.bl]);return(s.status==="Intersection")},isContainedWithinObject:function(i){return this.isContainedWithinRect(i.oCoords.tl,i.oCoords.br)},isContainedWithinRect:function(r,t){var v=this.oCoords,i=new d.Point(v.tl.x,v.tl.y),s=new d.Point(v.tr.x,v.tr.y),u=new d.Point(v.bl.x,v.bl.y),q=new d.Point(v.br.x,v.br.y);return i.x>r.x&&s.xr.y&&u.y=v)&&(s.d.y>=v)){continue}if((s.o.x==s.d.x)&&(s.o.x>=w)){x=s.o.x;u=v}else{z=0;y=(s.d.y-s.o.y)/(s.d.x-s.o.x);r=v-z*w;q=s.o.y-y*s.o.x;x=-(r-q)/(z-y);u=r+z*x}if(x>=w){t+=1}if(t==2){break}}return t},_getImageLines:function(r,q){return{topline:{o:r.tl,d:r.tr},rightline:{o:r.tr,d:r.br},bottomline:{o:r.br,d:r.bl},leftline:{o:r.bl,d:r.tl}}},_setCornerCoords:function(){var u=this.oCoords,q=b(45-this.getAngle()),s=Math.sqrt(2*Math.pow(this.cornersize,2))/2,i=s*Math.cos(q),r=s*Math.sin(q),v=Math.sin(this.theta),t=Math.cos(this.theta);u.tl.corner={tl:{x:u.tl.x-r,y:u.tl.y-i},tr:{x:u.tl.x+i,y:u.tl.y-r},bl:{x:u.tl.x-i,y:u.tl.y+r},br:{x:u.tl.x+r,y:u.tl.y+i}};u.tr.corner={tl:{x:u.tr.x-r,y:u.tr.y-i},tr:{x:u.tr.x+i,y:u.tr.y-r},br:{x:u.tr.x+r,y:u.tr.y+i},bl:{x:u.tr.x-i,y:u.tr.y+r}};u.bl.corner={tl:{x:u.bl.x-r,y:u.bl.y-i},bl:{x:u.bl.x-i,y:u.bl.y+r},br:{x:u.bl.x+r,y:u.bl.y+i},tr:{x:u.bl.x+i,y:u.bl.y-r}};u.br.corner={tr:{x:u.br.x+i,y:u.br.y-r},bl:{x:u.br.x-i,y:u.br.y+r},br:{x:u.br.x+r,y:u.br.y+i},tl:{x:u.br.x-r,y:u.br.y-i}};u.ml.corner={tl:{x:u.ml.x-r,y:u.ml.y-i},tr:{x:u.ml.x+i,y:u.ml.y-r},bl:{x:u.ml.x-i,y:u.ml.y+r},br:{x:u.ml.x+r,y:u.ml.y+i}};u.mt.corner={tl:{x:u.mt.x-r,y:u.mt.y-i},tr:{x:u.mt.x+i,y:u.mt.y-r},bl:{x:u.mt.x-i,y:u.mt.y+r},br:{x:u.mt.x+r,y:u.mt.y+i}};u.mr.corner={tl:{x:u.mr.x-r,y:u.mr.y-i},tr:{x:u.mr.x+i,y:u.mr.y-r},bl:{x:u.mr.x-i,y:u.mr.y+r},br:{x:u.mr.x+r,y:u.mr.y+i}};u.mb.corner={tl:{x:u.mb.x-r,y:u.mb.y-i},tr:{x:u.mb.x+i,y:u.mb.y-r},bl:{x:u.mb.x-i,y:u.mb.y+r},br:{x:u.mb.x+r,y:u.mb.y+i}};u.mtr.corner={tl:{x:u.mtr.x-r+(v*this.rotatingPointOffset),y:u.mtr.y-i-(t*this.rotatingPointOffset)},tr:{x:u.mtr.x+i+(v*this.rotatingPointOffset),y:u.mtr.y-r-(t*this.rotatingPointOffset)},bl:{x:u.mtr.x-i+(v*this.rotatingPointOffset),y:u.mtr.y+r-(t*this.rotatingPointOffset)},br:{x:u.mtr.x+r+(v*this.rotatingPointOffset),y:u.mtr.y+i-(t*this.rotatingPointOffset)}}},toGrayscale:function(){var i=this.get("fill");if(i){this.set("overlayFill",new d.Color(i).toGrayscale().toRgb())}return this},complexity:function(){return 0},toJSON:function(){return this.toObject()},setGradientFill:function(i,q){this.set("fill",d.Gradient.forObject(this,i,q))},animate:function(q,s,i){var r=this;i||(i={});if(!("from" in i)){i.from=this.get(q)}if(/[+-]/.test((s+"").charAt(0))){s=this.get(q)+parseFloat(s)}d.util.animate({startValue:i.from,endValue:s,byValue:i.by,easing:i.easing,duration:i.duration,onChange:function(t){r.set(q,t);i.onChange&&i.onChange()},onComplete:function(){r.setCoords();i.onComplete&&i.onComplete()}})}});d.Object.prototype.rotate=d.Object.prototype.setAngle;var j=d.Object.prototype;for(var g=j.stateProperties.length;g--;){var h=j.stateProperties[g],e=h.charAt(0).toUpperCase()+h.slice(1),f="set"+e,n="get"+e;if(!j[n]){j[n]=(function(i){return new Function('return this.get("'+i+'")')})(h)}if(!j[f]){j[f]=(function(i){return new Function("value",'return this.set("'+i+'", value)')})(h)}}l(d.Object.prototype,d.Observable)})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),e=c.util.object.extend,d=c.Object.prototype.set,a={x1:1,x2:1,y1:1,y2:1};if(c.Line){c.warn("fabric.Line is already defined");return}c.Line=c.util.createClass(c.Object,{type:"line",initialize:function(g,f){if(!g){g=[0,0,0,0]}this.callSuper("initialize",f);this.set("x1",g[0]);this.set("y1",g[1]);this.set("x2",g[2]);this.set("y2",g[3]);this._setWidthHeight(f)},_setWidthHeight:function(f){f||(f={});this.set("width",(this.x2-this.x1)||1);this.set("height",(this.y2-this.y1)||1);this.set("left","left" in f?f.left:(this.x1+this.width/2));this.set("top","top" in f?f.top:(this.y1+this.height/2))},_set:function(f,g){this[f]=g;if(f in a){this._setWidthHeight()}return this},_render:function(f){f.beginPath();f.moveTo(this.width===1?0:(-this.width/2),this.height===1?0:(-this.height/2));f.lineTo(this.width===1?0:(this.width/2),this.height===1?0:(this.height/2));f.lineWidth=this.strokeWidth;var g=f.strokeStyle;f.strokeStyle=f.fillStyle;f.stroke();f.strokeStyle=g},complexity:function(){return 1},toObject:function(){return e(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}});c.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");c.Line.fromElement=function(g,f){var i=c.parseAttributes(g,c.Line.ATTRIBUTE_NAMES);var h=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new c.Line(h,e(i,f))};c.Line.fromObject=function(f){var g=[f.x1,f.y1,f.x2,f.y2];return new c.Line(g,f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),d=Math.PI*2,e=b.util.object.extend;if(b.Circle){b.warn("fabric.Circle is already defined.");return}b.Circle=b.util.createClass(b.Object,{type:"circle",initialize:function(f){f=f||{};this.set("radius",f.radius||0);this.callSuper("initialize",f);var g=this.get("radius")*2;this.set("width",g).set("height",g)},toObject:function(){return e(this.callSuper("toObject"),{radius:this.get("radius")})},toSVG:function(){return('')},_render:function(f,g){f.beginPath();f.globalAlpha*=this.opacity;f.arc(g?this.left:0,g?this.top:0,this.radius,0,d,false);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(f){this.radius=f;this.set("width",f*2).set("height",f*2)},complexity:function(){return 1}});b.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Circle.fromElement=function(g,f){f||(f={});var h=b.parseAttributes(g,b.Circle.ATTRIBUTE_NAMES);if(!c(h)){throw Error("value of `r` attribute is required and can not be negative")}if("left" in h){h.left-=(f.width/2)||0}if("top" in h){h.top-=(f.height/2)||0}return new b.Circle(e(h,f))};function c(f){return(("radius" in f)&&(f.radius>0))}b.Circle.fromObject=function(f){return new b.Circle(f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Triangle){b.warn("fabric.Triangle is already defined");return}b.Triangle=b.util.createClass(b.Object,{type:"triangle",initialize:function(c){c=c||{};this.callSuper("initialize",c);this.set("width",c.width||100).set("height",c.height||100)},_render:function(c){var d=this.width/2,e=this.height/2;c.beginPath();c.moveTo(-d,e);c.lineTo(0,-e);c.lineTo(d,e);c.closePath();if(this.fill){c.fill()}if(this.stroke){c.stroke()}},complexity:function(){return 1},toSVG:function(){var c=this.width/2,d=this.height/2;var e=[-c+" "+d,"0 "+-d,c+" "+d].join(",");return''}});b.Triangle.fromObject=function(c){return new b.Triangle(c)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),c=Math.PI*2,d=b.util.object.extend;if(b.Ellipse){b.warn("fabric.Ellipse is already defined.");return}b.Ellipse=b.util.createClass(b.Object,{type:"ellipse",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(){return d(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,f){if(this.rx===0||this.ry===0){return}return this.callSuper("render",e,f)},_render:function(e,f){e.beginPath();e.save();e.globalAlpha*=this.opacity;e.transform(1,0,0,this.ry/this.rx,0,0);e.arc(f?this.left:0,f?this.top:0,this.rx,0,c,false);if(this.stroke){e.stroke()}if(this.fill){e.fill()}e.restore()},complexity:function(){return 1}});b.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Ellipse.fromElement=function(f,e){e||(e={});var g=b.parseAttributes(f,b.Ellipse.ATTRIBUTE_NAMES);if("left" in g){g.left-=(e.width/2)||0}if("top" in g){g.top-=(e.height/2)||0}return new b.Ellipse(d(g,e))};b.Ellipse.fromObject=function(e){return new b.Ellipse(e)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={});if(c.Rect){console.warn("fabric.Rect is already defined");return}c.Rect=c.util.createClass(c.Object,{type:"rect",rx:0,ry:0,initialize:function(d){this._initStateProperties();this.callSuper("initialize",d);this._initRxRy()},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){if(this.rx&&!this.ry){this.ry=this.rx}else{if(this.ry&&!this.rx){this.rx=this.ry}}},_render:function(f){var j=this.rx||0,i=this.ry||0,d=-this.width/2,k=-this.height/2,e=this.width,g=this.height;f.beginPath();f.globalAlpha*=this.opacity;if(this.group){f.translate(this.x||0,this.y||0)}f.moveTo(d+j,k);f.lineTo(d+e-j,k);f.quadraticCurveTo(d+e,k,d+e,k+i,d+e,k+i);f.lineTo(d+e,k+g-i);f.quadraticCurveTo(d+e,k+g,d+e-j,k+g,d+e-j,k+g);f.lineTo(d+j,k+g);f.quadraticCurveTo(d,k+g,d,k+g-i,d,k+g-i);f.lineTo(d,k+i);f.quadraticCurveTo(d,k,d+j,k,d+j,k);f.closePath();if(this.fill){f.fill()}if(this.strokeDashArray){this._renderDashedStroke(f)}else{if(this.stroke){f.stroke()}}},_normalizeLeftTopProperties:function(d){if(d.left){this.set("left",d.left+this.getWidth()/2)}this.set("x",d.left||0);if(d.top){this.set("top",d.top+this.getHeight()/2)}this.set("y",d.top||0);return this},complexity:function(){return 1},toObject:function(){return c.util.object.extend(this.callSuper("toObject"),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return''}});c.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");function a(d){d.left=d.left||0;d.top=d.top||0;return d}c.Rect.fromElement=function(e,d){if(!e){return null}var g=c.parseAttributes(e,c.Rect.ATTRIBUTE_NAMES);g=a(g);var f=new c.Rect(c.util.object.extend((d?c.util.object.clone(d):{}),g));f._normalizeLeftTopProperties(g);return f};c.Rect.fromObject=function(d){return new c.Rect(d)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),a=c.util.toFixed;if(c.Polyline){c.warn("fabric.Polyline is already defined");return}c.Polyline=c.util.createClass(c.Object,{type:"polyline",initialize:function(e,d){d=d||{};this.set("points",e);this.callSuper("initialize",d);this._calcDimensions()},_calcDimensions:function(){return c.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return c.Polygon.prototype.toObject.call(this)},toSVG:function(){var f=[];for(var e=0,d=this.points.length;e"].join("")},_render:function(f){var e;f.beginPath();f.moveTo(this.points[0].x,this.points[0].y);for(var g=0,d=this.points.length;g"].join("")},_render:function(m){var l;var k=this.minX+this.width/2,o=this.minY+this.height/2;m.beginPath();m.moveTo(this.points[0].x-k,this.points[0].y-o);for(var n=0,j=this.points.length;n1){E=Math.sqrt(E);O*=E;N*=E}var R=aa/O;var Q=W/O;var D=(-W)/N;var C=(aa)/N;var H=R*M+Q*L;var q=D*M+C*L;var F=R*T+Q*S;var ab=D*T+C*S;var Z=(F-H)*(F-H)+(ab-q)*(ab-q);var U=1/Z-0.25;if(U<0){U=0}var w=Math.sqrt(U);if(P==J){w=-w}var V=0.5*(H+F)-w*(ab-q);var K=0.5*(q+ab)+w*(F-H);var v=Math.atan2(q-K,H-V);var u=Math.atan2(ab-K,F-V);var Y=u-v;if(Y<0&&P==1){Y+=2*Math.PI}else{if(Y>0&&P==0){Y-=2*Math.PI}}var B=Math.ceil(Math.abs(Y/(Math.PI*0.5+0.001)));var I=[];for(var X=0;X"},toObject:function(){var q=g(this.callSuper("toObject"),{path:this.path});if(this.sourcePath){q.sourcePath=this.sourcePath}if(this.transformMatrix){q.transformMatrix=this.transformMatrix}return q},toDatalessObject:function(){var q=this.toObject();if(this.sourcePath){q.path=this.sourcePath}delete q.sourcePath;return q},toSVG:function(){var t=[];for(var r=0,q=this.path.length;r',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var C=[],z,v,y;for(var u=0,t,q,w=this.path.length;uB){for(var r=1,x=q.length;r"];for(var l=0,j=m.length;l");return k.join("")},toString:function(){return"#"},isSameColor:function(){var j=this.getObjects()[0].get("fill");return this.getObjects().every(function(k){return k.get("fill")===j})},complexity:function(){return this.paths.reduce(function(j,k){return j+((k&&k.complexity)?k.complexity():0)},0)},toGrayscale:function(){var j=this.paths.length;while(j--){this.paths[j].toGrayscale()}return this},getObjects:function(){return this.paths}});function c(m){for(var l=0,j=m.length;l"},getObjects:function(){return this.objects},addWithUpdate:function(h){this._restoreObjectsState();this.objects.push(h);this._calcBounds();this._updateObjectsCoords();return this},removeWithUpdate:function(h){this._restoreObjectsState();f(this.objects,h);h.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},add:function(h){this.objects.push(h);return this},remove:function(h){f(this.objects,h);return this},size:function(){return this.getObjects().length},_set:function(j,k){if(j==="fill"||j==="opacity"){var h=this.objects.length;this[j]=k;while(h--){this.objects[h].set(j,k)}}else{this[j]=k}},contains:function(h){return this.objects.indexOf(h)>-1},toObject:function(){return g(this.callSuper("toObject"),{objects:b(this.objects,"clone")})},render:function(j,o){j.save();this.transform(j);var n=Math.max(this.scaleX,this.scaleY);for(var l=0,h=this.objects.length,k;k=this.objects[l];l++){var m=k.borderScaleFactor;k.borderScaleFactor=n;k.render(j);k.borderScaleFactor=m}if(!o&&this.active){this.drawBorders(j);this.hideCorners||this.drawCorners(j)}j.restore();this.setCoords()},item:function(h){return this.getObjects()[h]},complexity:function(){return this.getObjects().reduce(function(i,h){i+=(typeof h.complexity=="function")?h.complexity():0;return i},0)},_restoreObjectsState:function(){this.objects.forEach(this._restoreObjectState,this);return this},_restoreObjectState:function(j){var l=this.get("left"),m=this.get("top"),h=this.getAngle()*(Math.PI/180),k=j.get("originalLeft"),n=j.get("originalTop"),i=Math.cos(h)*j.get("top")+Math.sin(h)*j.get("left"),o=-Math.sin(h)*j.get("top")+Math.cos(h)*j.get("left");j.setAngle(j.getAngle()+this.getAngle());j.set("left",l+o*this.get("scaleX"));j.set("top",m+i*this.get("scaleY"));j.set("scaleX",j.get("scaleX")*this.get("scaleX"));j.set("scaleY",j.get("scaleY")*this.get("scaleY"));j.setCoords();j.hideCorners=false;j.setActive(false);j.setCoords();return this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){this._originalLeft=this.get("left");this._originalTop=this.get("top");return this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){this.forEachObject(function(h){h.setCoords()});return this},activateAllObjects:function(){this.forEachObject(function(h){h.setActive()});return this},forEachObject:e.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var j=this.getObjects(),i=j[0]?j[0].get("opacity"):1;var h=j.every(function(k){return k.get("opacity")===i});if(h){this.opacity=i}},_calcBounds:function(){var s=[],q=[],p,n,k,h,m,l,u,r=0,t=this.objects.length;for(;ri.x&&j-hi.y},toGrayscale:function(){var h=this.objects.length;while(h--){this.objects[h].toGrayscale()}},toSVG:function(){var k=[];for(var j=0,h=this.objects.length;j'+k.join("")+"")}});e.Group.fromObject=function(h,i){e.util.enlivenObjects(h.objects,function(j){delete h.objects;i&&i(new e.Group(j,h))})};e.Group.async=true})(typeof exports!="undefined"?exports:this);(function(a){var b=fabric.util.object.extend;if(!a.fabric){a.fabric={}}if(a.fabric.Image){fabric.warn("fabric.Image is already defined.");return}if(!fabric.Object){fabric.warn("fabric.Object is required for fabric.Image initialization");return}fabric.Image=fabric.util.createClass(fabric.Object,{active:false,bordervisibility:false,cornervisibility:false,type:"image",initialize:function(d,c){c||(c={});this.callSuper("initialize",c);this._initElement(d);this._originalImage=this.getElement();this._initConfig(c);this.filters=[];if(c.filters){this.filters=c.filters;this.applyFilters()}},getElement:function(){return this._element},setElement:function(c){this._element=c;this._initConfig();return this},getOriginalSize:function(){var c=this.getElement();return{width:c.width,height:c.height}},setBorderVisibility:function(c){this._resetWidthHeight();this._adjustWidthHeightToBorders(showBorder);this.setCoords()},setCornersVisibility:function(c){this.cornervisibility=!!c},render:function(c,d){c.save();if(!d){this.transform(c)}this._render(c);if(this.active&&!d){this.drawBorders(c);this.hideCorners||this.drawCorners(c)}c.restore()},toObject:function(){return b(this.callSuper("toObject"),{src:this._originalImage.src||this._originalImage._src,filters:this.filters.concat()})},toSVG:function(){return''},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(c){this.constructor.fromObject(this.toObject(),c)},applyFilters:function(i){if(this.filters.length===0){this.setElement(this._originalImage);i&&i();return}var c=typeof Buffer!=="undefined"&&typeof window==="undefined",g=this._originalImage,e=fabric.document.createElement("canvas"),f=c?new (require("canvas").Image):fabric.document.createElement("img"),h=this;if(!e.getContext&&typeof G_vmlCanvasManager!="undefined"){G_vmlCanvasManager.initElement(e)}e.width=g.width;e.height=g.height;e.getContext("2d").drawImage(g,0,0,g.width,g.height);this.filters.forEach(function(j){j&&j.applyTo(e)});f.onload=function(){h._element=f;i&&i();f.onload=e=g=null};f.width=g.width;f.height=g.height;if(c){var d=e.toDataURL("image/png").replace(/data:image\/png;base64,/,"");f.src=new Buffer(d,"base64");h._element=f;i&&i()}else{f.src=e.toDataURL("image/png")}return this},_render:function(c){c.drawImage(this.getElement(),-this.width/2,-this.height/2,this.width,this.height)},_adjustWidthHeightToBorders:function(c){if(c){this.currentBorder=this.borderwidth;this.width+=(2*this.currentBorder);this.height+=(2*this.currentBorder)}else{this.currentBorder=0}},_resetWidthHeight:function(){var c=this.getElement();this.set("width",c.width);this.set("height",c.height)},_initElement:function(c){this.setElement(fabric.util.getById(c));fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(c){c||(c={});this.setOptions(c);this._setBorder();this._setWidthHeight(c)},_initFilters:function(c){if(c.filters&&c.filters.length){this.filters=c.filters.map(function(d){return d&&fabric.Image.filters[d.type].fromObject(d)})}},_setBorder:function(){if(this.bordervisibility){this.currentBorder=this.borderwidth}else{this.currentBorder=0}},_setWidthHeight:function(c){var d=2*this.currentBorder;this.width="width" in c?c.width:((this.getElement().width||0)+d);this.height="height" in c?c.height:((this.getElement().height||0)+d)},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc;fabric.Image.fromObject=function(d,f){var c=fabric.document.createElement("img"),e=d.src;if(d.width){c.width=d.width}if(d.height){c.height=d.height}c.onload=function(){fabric.Image.prototype._initFilters.call(d,d);var g=new fabric.Image(c,d);f&&f(g);c=c.onload=null};c.src=e};fabric.Image.fromURL=function(d,f,e){var c=fabric.document.createElement("img");c.onload=function(){if(f){f(new fabric.Image(c,e))}c=c.onload=null};c.src=d};fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" ");fabric.Image.fromElement=function(d,f,c){c||(c={});var e=fabric.parseAttributes(d,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(e["xlink:href"],f,b(e,c))};fabric.Image.async=true})(typeof exports!="undefined"?exports:this);fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var a=this.get("angle");if(a>-225&&a<=-135){return -180}else{if(a>-135&&a<=-45){return -90}else{if(a>-45&&a<=45){return 0}else{if(a>45&&a<=135){return 90}else{if(a>135&&a<=225){return 180}else{if(a>225&&a<=315){return 270}else{if(a>315){return 360}}}}}}}return 0},straighten:function(){var a=this._getAngleValueForStraighten();this.setAngle(a);return this},fxStraighten:function(b){b=b||{};var c=function(){},d=b.onComplete||c,a=b.onChange||c,e=this;fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(f){e.setAngle(f);a()},onComplete:function(){e.setCoords();d()},onStart:function(){e.setActive(false)}});return this}});fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(a){a.straighten();this.renderAll();return this},fxStraightenObject:function(a){a.fxStraighten({onChange:this.renderAll.bind(this)});return this}});fabric.Image.filters={};fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(d){var c=d.getContext("2d"),a=c.getImageData(0,0,d.width,d.height),h=a.data,e=a.width,l=a.height,k,b,g,f;for(g=0;gh&&m>h&&o>h&&p(a-m)0){l[m]=o;l[m+1]=e;l[m+2]=k}}f.putImageData(c,0,0)},toJSON:function(){return{type:this.type,color:this.color}}});fabric.Image.filters.Tint.fromObject=function(a){return new fabric.Image.filters.Tint(a)};(function(b){var c=b.fabric||(b.fabric={}),e=c.util.object.extend,d=c.util.object.clone,a=c.util.toFixed;if(c.Text){c.warn("fabric.Text is already defined");return}if(!c.Object){c.warn("fabric.Text requires fabric.Object");return}c.Text=c.util.createClass(c.Object,{fontSize:40,fontWeight:100,fontFamily:"Times New Roman",textDecoration:"",textShadow:"",textAlign:"left",fontStyle:"",lineHeight:1.3,strokeStyle:"",strokeWidth:1,backgroundColor:"",path:null,type:"text",useNative:true,initialize:function(g,f){this._initStateProperties();this.text=g;this.setOptions(f);this.theta=this.angle*Math.PI/180;this._initDimensions();this.setCoords()},_initDimensions:function(){var f=c.document.createElement("canvas");if(!f.getContext&&typeof G_vmlCanvasManager!="undefined"){G_vmlCanvasManager.initElement(f)}this._render(f.getContext("2d"))},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat();this.stateProperties.push("fontFamily","fontWeight","fontSize","path","text","textDecoration","textShadow","textAlign","fontStyle","lineHeight","strokeStyle","strokeWidth","backgroundColor");c.util.removeFromArray(this.stateProperties,"width")},toString:function(){return"#'},_render:function(f){if(typeof Cufon==="undefined"||this.useNative===true){this._renderViaNative(f)}else{this._renderViaCufon(f)}},_renderViaCufon:function(f){var h=Cufon.textOptions||(Cufon.textOptions={});h.left=this.left;h.top=this.top;h.context=f;h.color=this.fill;var g=this._initDummyElementForCufon();this.transform(f);Cufon.replaceElement(g,{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,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor});this.width=h.width;this.height=h.height;this._totalLineHeight=h.totalLineHeight;this._fontAscent=h.fontAscent;this._boundaries=h.boundaries;this._shadowOffsets=h.shadowOffsets;this._shadows=h.shadows||[];this.setCoords()},_renderViaNative:function(f){this.transform(f);this._setTextStyles(f);var g=this.text.split(/\r?\n/);this.width=this._getTextWidth(f,g);this.height=this._getTextHeight(f,g);this._renderTextBackground(f,g);if(this.textAlign!=="left"){f.save();f.translate(this.textAlign==="center"?(this.width/2):this.width,0)}this._setTextShadow(f);this._renderTextFill(f,g);this.textShadow&&f.restore();this._renderTextStroke(f,g);if(this.textAlign!=="left"){f.restore()}this._renderTextDecoration(f,g);this._setBoundaries(f,g);this._totalLineHeight=0;this.setCoords()},_setBoundaries:function(h,k){this._boundaries=[];for(var j=0,g=k.length;jk){k=l}}return k},_setTextShadow:function(f){if(this.textShadow){var j=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/;var g=this.textShadow;var i=j.exec(this.textShadow);var h=g.replace(j,"");f.save();f.shadowColor=h;f.shadowOffsetX=parseInt(i[1],10);f.shadowOffsetY=parseInt(i[2],10);f.shadowBlur=parseInt(i[3],10);this._shadows=[{blur:f.shadowBlur,color:f.shadowColor,offX:f.shadowOffsetX,offY:f.shadowOffsetY}];this._shadowOffsets=[[parseInt(f.shadowOffsetX,10),parseInt(f.shadowOffsetY,10)]]}},_renderTextFill:function(g,j){this._boundaries=[];for(var h=0,f=j.length;h-1){f.call(this,this.fontSize)}if(this.textDecoration.indexOf("line-through")>-1){f.call(this,this.fontSize/2)}if(this.textDecoration.indexOf("overline")>-1){f.call(this,0)}},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var g=c.document.createElement("pre"),f=c.document.createElement("div");f.appendChild(g);if(typeof G_vmlCanvasManager=="undefined"){g.innerHTML=this.text}else{g.innerText=this.text.replace(/\r?\n/gi,"\r")}g.style.fontSize=this.fontSize+"px";g.style.letterSpacing="normal";return g},render:function(f,g){f.save();this._render(f);if(!g&&this.active){this.drawBorders(f);this.hideCorners||this.drawCorners(f)}f.restore()},toObject:function(){return e(this.callSuper("toObject"),{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,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor})},toSVG:function(){var i=this.text.split(/\r?\n/),j=this.useNative?this.fontSize*this.lineHeight:(-this._fontAscent-((this._fontAscent/5)*this.lineHeight)),g=-(this.width/2),f=this.useNative?this.fontSize-1:(this.height/2)-(i.length*this.fontSize)-this._totalLineHeight,h=this._getSVGTextAndBg(j,g,i),k=this._getSVGShadows(j,i);f+=(this._fontAscent?((this._fontAscent/5)*this.lineHeight):0);return['',h.textBgRects.join(""),"',k.join(""),h.textSpans.join(""),"",""].join("")},_getSVGShadows:function(h,n){var o=[],k,l,p,g,f=1;if(!this._shadows||!this._boundaries){return o}for(k=0,p=this._shadows.length;k",c.util.string.escapeXml(n[l]),"");f=1}else{f++}}}return o},_getSVGTextAndBg:function(j,h,n){var g=[],k=[],l,m,o,f=1;for(l=0,o=n.length;l",c.util.string.escapeXml(n[l]),"");f=1}else{f++}if(!this.backgroundColor||!this._boundaries){continue}k.push("')}return{textSpans:g,textBgRects:k}},_getFillAttributes:function(f){var g=f?new c.Color(f):"";if(!g||!g.getSource()||g.getAlpha()===1){return'fill="'+f+'"'}return'opacity="'+g.getAlpha()+'" fill="'+g.setAlpha(1).toRgb()+'"'},setColor:function(f){this.set("fill",f);return this},setFontsize:function(f){this.set("fontSize",f);this.setCoords();return this},getText:function(){return this.text},setText:function(f){this.set("text",f);this.setCoords();return this},set:function(f,g){if(typeof f=="object"){for(var h in f){this.set(h,f[h])}}else{this[f]=g;if(f==="fontFamily"&&this.path){this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+g+"$3")}}return this}});c.Text.fromObject=function(f){return new c.Text(f.text,d(f))};c.Text.fromElement=function(f){}})(typeof exports!="undefined"?exports:this);(function(){if(typeof document!="undefined"&&typeof window!="undefined"){return}var DOMParser=new require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;function request(url,encoding,callback){var oURL=URL.parse(url),client=HTTP.createClient(oURL.port,oURL.hostname),request=client.request("GET",oURL.pathname,{host:oURL.hostname});client.addListener("error",function(err){if(err.errno===process.ECONNREFUSED){fabric.log("ECONNREFUSED: connection refused to "+client.host+":"+client.port)}else{fabric.log(err.message)}});request.end();request.on("response",function(response){var body="";if(encoding){response.setEncoding(encoding)}response.on("end",function(){callback(body)});response.on("data",function(chunk){if(response.statusCode==200){body+=chunk}})})}fabric.util.loadImage=function(url,callback){request(url,"binary",function(body){var img=new Image();img.src=new Buffer(body,"binary");img._src=url;callback(img)})};fabric.loadSVGFromURL=function(url,callback){url=url.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();request(url,"",function(body){fabric.loadSVGFromString(body,callback)})};fabric.loadSVGFromString=function(string,callback){var doc=new DOMParser().parseFromString(string);fabric.parseSVGDocument(doc.documentElement,function(results,options){callback(results,options)})};fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body);callback&&callback()})};fabric.Image.fromObject=function(object,callback){fabric.util.loadImage(object.src,function(img){var oImg=new fabric.Image(img);oImg._initConfig(object);oImg._initFilters(object);callback(oImg)})};fabric.createCanvasForNode=function(width,height){var canvasEl=fabric.document.createElement("canvas"),nodeCanvas=new Canvas(width||600,height||600);canvasEl.style={};canvasEl.width=nodeCanvas.width;canvasEl.height=nodeCanvas.height;var canvas=fabric.Canvas||fabric.StaticCanvas;var fabricCanvas=new canvas(canvasEl);fabricCanvas.contextContainer=nodeCanvas.getContext("2d");fabricCanvas.nodeCanvas=nodeCanvas;return fabricCanvas};fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};if(fabric.Canvas){fabric.Canvas.prototype.createPNGStream}var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(width){origSetWidth.call(this);this.nodeCanvas.width=width;return this};if(fabric.Canvas){fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth}var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(height){origSetHeight.call(this);this.nodeCanvas.height=height;return this};if(fabric.Canvas){fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight}})(); \ No newline at end of file +var Cufon=(function(){var k=function(){return k.replace.apply(null,arguments)};var u=k.DOM={ready:(function(){var z=false,B={loaded:1,complete:1};var y=[],A=function(){if(z){return}z=true;for(var C;C=y.shift();C()){}};if(fabric.document.addEventListener){fabric.document.addEventListener("DOMContentLoaded",A,false);fabric.window.addEventListener("pageshow",A,false)}if(!fabric.window.opera&&fabric.document.readyState){(function(){B[fabric.document.readyState]?A():setTimeout(arguments.callee,10)})()}if(fabric.document.readyState&&fabric.document.createStyleSheet){(function(){try{fabric.document.body.doScroll("left");A()}catch(C){setTimeout(arguments.callee,1)}})()}o(fabric.window,"load",A);return function(C){if(!arguments.length){A()}else{z?C():y.push(C)}}})()};var l=k.CSS={Size:function(z,y){this.value=parseFloat(z);this.unit=String(z).match(/[a-z%]*$/)[0]||"px";this.convert=function(A){return A/y*this.value};this.convertFrom=function(A){return A/this.value*y};this.toString=function(){return this.value+this.unit}},getStyle:function(y){return new a(y.style)},quotedList:i(function(B){var A=[],z=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,y;while(y=z.exec(B)){A.push(y[3]||y[1])}return A}),ready:(function(){var A=false;var z=[],B=function(){A=true;for(var D;D=z.shift();D()){}};var y=Object.prototype.propertyIsEnumerable?f("style"):{length:0};var C=f("link");u.ready(function(){var G=0,F;for(var E=0,D=C.length;F=C[E],E=y.length+G){B()}else{setTimeout(arguments.callee,10)}});return function(D){if(A){D()}else{z.push(D)}}})(),supports:function(A,z){var y=fabric.document.createElement("span").style;if(y[A]===undefined){return false}y[A]=z;return y[A]===z},textAlign:function(B,A,y,z){if(A.get("textAlign")=="right"){if(y>0){B=" "+B}}else{if(y400}if(F==500){F=400}for(var G in D){G=parseInt(G,10);if(!C||GA){A=G}H.push(G)}if(FA){F=A}H.sort(function(J,I){return(B?(J>F&&I>F)?JI:(JI:Jz){z=e}L.push(e);e=0;continue}var B=ab.glyphs[ag[aa]]||ab.missingGlyph;if(!B){continue}e+=D=Number(B.w||ab.w)+U}L.push(e);e=Math.max(z,e);var m=[];for(var aa=L.length;aa--;){m[aa]=e-L[aa]}if(D===null){return null}V+=(H.width-D);C+=H.minX;var v,p;if(n){v=J;p=J.firstChild}else{v=fabric.document.createElement("span");v.className="cufon cufon-canvas";v.alt=E;p=fabric.document.createElement("canvas");v.appendChild(p);if(A.printable){var Y=fabric.document.createElement("span");Y.className="cufon-alt";Y.appendChild(fabric.document.createTextNode(E));v.appendChild(Y)}}var ah=v.style;var O=p.style||{};var k=o.convert(H.height-I+T);var af=Math.ceil(k);var S=af/k;p.width=Math.ceil(o.convert(e+V-C)*S);p.height=af;I+=H.minY;O.top=Math.round(o.convert(I-ab.ascent))+"px";O.left=Math.round(o.convert(C))+"px";var j=Math.ceil(o.convert(e*S));var t=j+"px";var s=o.convert(ab.height);var F=(A.lineHeight-1)*o.convert(-ab.ascent/5)*(M-1);Cufon.textOptions.width=j;Cufon.textOptions.height=(s*M)+F;Cufon.textOptions.lines=M;Cufon.textOptions.totalLineHeight=F;if(a){ah.width=t;ah.height=s+"px"}else{ah.paddingLeft=t;ah.paddingBottom=(s-1)+"px"}var ad=Cufon.textOptions.context||p.getContext("2d"),K=af/H.height;Cufon.textOptions.fontAscent=ab.ascent*K;Cufon.textOptions.boundaries=null;for(var w=Cufon.textOptions.shadowOffsets,aa=R.length;aa--;){w[aa]=[R[aa][0]*K,R[aa][1]*K]}ad.save();ad.scale(K,K);ad.translate(-C-((1/K*p.width)/2)+(Cufon.fonts[ab.family].offsetLeft||0),-I-((Cufon.textOptions.height/K)/2)+(Cufon.fonts[ab.family].offsetTop||0));ad.lineWidth=ab.face["underline-thickness"];ad.save();function q(l,i){ad.strokeStyle=i;ad.beginPath();ad.moveTo(0,l);ad.lineTo(e,l);ad.stroke()}var r=Cufon.getTextDecoration(A),u=A.fontStyle==="italic";function ae(){ad.save();ad.fillStyle=A.backgroundColor;var aj=0,an=0,y=[{left:0}];if(A.textAlign==="right"){ad.translate(m[an],0);y[0].left=m[an]*K}else{if(A.textAlign==="center"){ad.translate(m[an]/2,0);y[0].left=m[an]/2*K}}for(var al=0,ak=ag.length;al.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 c(e,f){return a(e,/(?:em|ex|%)$/i.test(f)?"1em":f)}function a(h,i){if(/px$/i.test(i)){return parseFloat(i)}var g=h.style.left,f=h.runtimeStyle.left;h.runtimeStyle.left=h.currentStyle.left;h.style.left=i;var e=h.style.pixelLeft;h.style.left=g;h.runtimeStyle.left=f;return e}return function(T,z,O,w,D,U,M){var h=(z===null);if(h){z=D.alt}var B=T.viewBox;var j=O.computedFontSize||(O.computedFontSize=new Cufon.CSS.Size(c(U,O.get("fontSize"))+"px",T.baseSize));var L=O.computedLSpacing;if(L==undefined){L=O.get("letterSpacing");O.computedLSpacing=L=(L=="normal")?0:~~j.convertFrom(a(U,L))}var t,m;if(h){t=D;m=D.firstChild}else{t=fabric.document.createElement("span");t.className="cufon cufon-vml";t.alt=z;m=fabric.document.createElement("span");m.className="cufon-vml-canvas";t.appendChild(m);if(w.printable){var R=fabric.document.createElement("span");R.className="cufon-alt";R.appendChild(fabric.document.createTextNode(z));t.appendChild(R)}if(!M){t.appendChild(fabric.document.createElement("cvml:shape"))}}var Z=t.style;var G=m.style;var f=j.convert(B.height),W=Math.ceil(f);var K=W/f;var J=B.minX,I=B.minY;G.height=W;G.top=Math.round(j.convert(I-T.ascent));G.left=Math.round(j.convert(J));Z.height=j.convert(T.height)+"px";var p=Cufon.getTextDecoration(w);var y=O.get("color");var X=Cufon.CSS.textTransform(z,O).split("");var e=0,H=0,q=null;var x,r,A=w.textShadow;for(var S=0,Q=0,P=X.length;Sw?p:(o-n);s(t(currentTime,m,byValue,p));if(o>w||q()){x.onComplete&&x.onComplete();return}k(r)})()}var f=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(n,m){fabric.window.setTimeout(n,1000/60)};var k=function(){return f.apply(fabric.window,arguments)};function b(n,p,o){if(n){var m=new Image();m.onload=function(){p&&p.call(o,m);m=m.onload=null};m.src=n}else{p&&p.call(o,n)}}function i(o,s){function n(t){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(t))]}var q=[],p=0,m=o.filter(function(t){return n(t.type).async}).length;var r=this;o.forEach(function(v,u){if(!v.type){return}var t=n(v.type);if(t.async){t.fromObject(v,function(w){q[u]=w;if(++p===m){if(s){s(q)}}})}else{q[u]=t.fromObject(v)}});if(m===0&&s){s(q)}}function a(o,n,p){var m=o.length>1?new fabric.PathGroup(o,n):o[0];if(typeof p!=="undefined"){m.setSourcePath(p)}return m}fabric.util.removeFromArray=j;fabric.util.degreesToRadians=c;fabric.util.toFixed=e;fabric.util.getRandomInt=g;fabric.util.falseFunction=l;fabric.util.animate=d;fabric.util.requestAnimFrame=k;fabric.util.loadImage=b;fabric.util.enlivenObjects=i;fabric.util.groupSVGElements=a})();(function(){var d=Array.prototype.slice;if(!Array.prototype.indexOf){Array.prototype.indexOf=function(g){if(this===void 0||this===null){throw new TypeError()}var h=Object(this),e=h.length>>>0;if(e===0){return -1}var i=0;if(arguments.length>0){i=Number(arguments[1]);if(i!==i){i=0}else{if(i!==0&&i!==(1/0)&&i!==-(1/0)){i=(i>0||-1)*Math.floor(Math.abs(i))}}}if(i>=e){return -1}var f=i>=0?i:Math.max(e-Math.abs(i),0);for(;f>>0;f>>0;g>>0;f>>0;f>>0;g>>0,f=0,h;if(arguments.length>1){h=arguments[1]}else{do{if(f in this){h=this[f++];break}if(++f>=e){throw new TypeError()}}while(true)}for(;f=e){e=h[f][g]}}}else{while(f--){if(h[f]>=e){e=h[f]}}}return e}function c(h,g){if(!h||h.length===0){return undefined}var f=h.length-1,e=g?h[f][g]:h[f];if(g){while(f--){if(h[f][g]/g,">")}fabric.util.string={camelize:b,capitalize:c,escapeXml:a}}());(function(){var c=Array.prototype.slice,a=Function.prototype.apply,b=function(){};if(!Function.prototype.bind){Function.prototype.bind=function(d){var g=this,e=c.call(arguments,1),f;if(e.length){f=function(){return a.call(g,this instanceof b?this:d,e.concat(c.call(arguments)))}}else{f=function(){return a.call(g,this instanceof b?this:d,arguments)}}b.prototype=this.prototype;f.prototype=new b;return f}}})();(function(){var f=Array.prototype.slice,e=function(){};var c=(function(){for(var g in {toString:1}){if(g==="toString"){return false}}return true})();var b=function(g,j,h){for(var i in j){if(i in g.prototype&&typeof g.prototype[i]=="function"){g.prototype[i]=(function(k){return function(){var m=this.constructor.superclass;this.constructor.superclass=h;var l=j[k].apply(this,arguments);this.constructor.superclass=m;if(k!=="initialize"){return l}}})(i)}else{g.prototype[i]=j[i]}if(c){if(j.toString!==Object.prototype.toString){g.prototype.toString=j.toString}if(j.valueOf!==Object.prototype.valueOf){g.prototype.valueOf=j.valueOf}}}};function a(){}function d(){var k=null,j=f.call(arguments,0);if(typeof j[0]==="function"){k=j.shift()}function g(){this.initialize.apply(this,arguments)}g.superclass=k;g.subclasses=[];if(k){a.prototype=k.prototype;g.prototype=new a;k.subclasses.push(g)}for(var h=0,l=j.length;h-1?c(j,l.match(/opacity:\s*(\d?\.?\d*)/)[1]):j}for(var m in l){if(m==="opacity"){c(j,l[m])}else{var k=(m==="float"||m==="cssFloat")?(typeof n.styleFloat==="undefined"?"cssFloat":"styleFloat"):m;n[k]=l[m]}}return j}var h=fabric.document.createElement("div"),g=typeof h.style.opacity==="string",b=typeof h.style.filter==="string",a=fabric.document.defaultView,f=a&&typeof a.getComputedStyle!=="undefined",d=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,c=function(i){return i};if(g){c=function(i,j){i.style.opacity=j;return i}}else{if(b){c=function(i,j){var k=i.style;if(i.currentStyle&&!i.currentStyle.hasLayout){k.zoom=1}if(d.test(k.filter)){j=j>=0.9999?"":("alpha(opacity="+(j*100)+")");k.filter=k.filter.replace(d,j)}else{k.filter+=" alpha(opacity="+(j*100)+")"}return i}}}fabric.util.setStyle=e})();(function(){var h=Array.prototype.slice;function g(j){return typeof j==="string"?fabric.document.getElementById(j):j}function b(j){return h.call(j,0)}try{var i=b(fabric.document.childNodes) instanceof Array}catch(a){}if(!i){b=function(k){var j=new Array(k.length),l=k.length;while(l--){j[l]=k[l]}return j}}function c(k,j){var l=fabric.document.createElement(k);for(var m in j){if(m==="class"){l.className=j[m]}else{if(m==="for"){l.htmlFor=j[m]}else{l.setAttribute(m,j[m])}}}return l}function f(j,k){if((" "+j.className+" ").indexOf(" "+k+" ")===-1){j.className+=(j.className?" ":"")+k}}function e(k,l,j){if(typeof l==="string"){l=c(l,j)}if(k.parentNode){k.parentNode.replaceChild(l,k)}l.appendChild(k);return l}function d(k){var j=0,l=0;do{j+=k.offsetTop||0;l+=k.offsetLeft||0;k=k.offsetParent}while(k);return({left:l,top:j})}(function(){var k=fabric.document.documentElement.style;var l="userSelect" in k?"userSelect":"MozUserSelect" in k?"MozUserSelect":"WebkitUserSelect" in k?"WebkitUserSelect":"KhtmlUserSelect" in k?"KhtmlUserSelect":"";function m(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=fabric.util.falseFunction}if(l){n.style[l]="none"}else{if(typeof n.unselectable=="string"){n.unselectable="on"}}return n}function j(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=null}if(l){n.style[l]=""}else{if(typeof n.unselectable=="string"){n.unselectable=""}}return n}fabric.util.makeElementUnselectable=m;fabric.util.makeElementSelectable=j})();(function(){function j(k,o){var m=fabric.document.getElementsByTagName("head")[0],l=fabric.document.createElement("script"),n=true;l.type="text/javascript";l.setAttribute("runat","server");l.onload=l.onreadystatechange=function(p){if(n){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete"){return}n=false;o(p||fabric.window.event);l=l.onload=l.onreadystatechange=null}};l.src=k;m.appendChild(l)}fabric.util.getScript=j})();fabric.util.getById=g;fabric.util.toArray=b;fabric.util.makeElement=c;fabric.util.addClass=f;fabric.util.wrapElement=e;fabric.util.getElementOffset=d})();(function(){function d(e,f){return e+(/\?/.test(e)?"&":"?")+f}var c=(function(){var h=[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 e=h.length;e--;){try{var g=h[e]();if(g){return h[e]}}catch(f){}}})();function a(){}function b(g,f){f||(f={});var j=f.method?f.method.toUpperCase():"GET",i=f.onComplete||function(){},h=c(),e;h.onreadystatechange=function(){if(h.readyState===4){i(h);h.onreadystatechange=a}};if(j==="GET"){e=null;if(typeof f.parameters=="string"){g=d(g,f.parameters)}}h.open(j,g,true);if(j==="POST"||j==="PUT"){h.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}h.send(e);return h}fabric.util.request=b})();(function(){function d(F,E,H,G){return H*(F/=G)*F+E}function l(F,E,H,G){return -H*(F/=G)*(F-2)+E}function r(F,E,H,G){if((F/=G/2)<1){return H/2*F*F+E}return -H/2*((--F)*(F-2)-1)+E}function B(F,E,H,G){return H*(F/=G)*F*F+E}function q(F,E,H,G){return H*((F=F/G-1)*F*F+1)+E}function u(F,E,H,G){if((F/=G/2)<1){return H/2*F*F*F+E}return H/2*((F-=2)*F*F+2)+E}function t(F,E,H,G){return H*(F/=G)*F*F*F+E}function g(F,E,H,G){return -H*((F=F/G-1)*F*F*F-1)+E}function k(F,E,H,G){if((F/=G/2)<1){return H/2*F*F*F*F+E}return -H/2*((F-=2)*F*F*F-2)+E}function y(F,E,H,G){return H*(F/=G)*F*F*F*F+E}function j(F,E,H,G){return H*((F=F/G-1)*F*F*F*F+1)+E}function n(F,E,H,G){if((F/=G/2)<1){return H/2*F*F*F*F*F+E}return H/2*((F-=2)*F*F*F*F+2)+E}function f(F,E,H,G){return -H*Math.cos(F/G*(Math.PI/2))+H+E}function o(F,E,H,G){return H*Math.sin(F/G*(Math.PI/2))+E}function v(F,E,H,G){return -H/2*(Math.cos(Math.PI*F/G)-1)+E}function D(F,E,H,G){return(F==0)?E:H*Math.pow(2,10*(F/G-1))+E}function c(F,E,H,G){return(F==G)?E+H:H*(-Math.pow(2,-10*F/G)+1)+E}function i(F,E,H,G){if(F==0){return E}if(F==G){return E+H}if((F/=G/2)<1){return H/2*Math.pow(2,10*(F-1))+E}return H/2*(-Math.pow(2,-10*--F)+2)+E}function h(F,E,H,G){return -H*(Math.sqrt(1-(F/=G)*F)-1)+E}function p(F,E,H,G){return H*Math.sqrt(1-(F=F/G-1)*F)+E}function x(F,E,H,G){if((F/=G/2)<1){return -H/2*(Math.sqrt(1-F*F)-1)+E}return H/2*(Math.sqrt(1-(F-=2)*F)+1)+E}function s(G,E,K,J){var H=1.70158;var I=0;var F=K;if(G==0){return E}if((G/=J)==1){return E+K}if(!I){I=J*0.3}if(F-1;w=w.split(/\s+/);var u=[];if(y){for(var v=0,t=w.length;v/i,""))}if(!w.documentElement){return}h.parseSVGDocument(w.documentElement,function(z,y){k.set(t,{objects:h.util.array.invoke(z,"toObject"),options:y});v(z,y)})}}function b(v){var u=v.objects,t=v.options;u=u.map(function(w){return h[f(w.type)].fromObject(w)});return({objects:u,options:t})}function n(t,w){t=t.trim();var u;if(typeof DOMParser!=="undefined"){var v=new DOMParser();if(v&&v.parseFromString){u=v.parseFromString(t,"text/xml")}}else{if(h.window.ActiveXObject){var u=new ActiveXObject("Microsoft.XMLDOM");u.async="false";u.loadXML(t.replace(//i,""))}}h.parseSVGDocument(u.documentElement,function(y,x){w(y,x)})}function m(w){var u="";for(var v=0,t=w.length;v",'",""].join("")}return u}p(h,{parseAttributes:e,parseElements:g,parseStyleAttribute:i,parsePointsAttribute:s,getCSSRules:d,loadSVGFromURL:c,loadSVGFromString:n,createSVGFontFacesMarkup:m})})(typeof exports!="undefined"?exports:this);(function(){function c(h){var g=h.getAttribute("style");if(g){var k=g.split(/\s*;\s*/);if(k[k.length-1]===""){k.pop()}for(var f=k.length;f--;){var e=k[f].split(/\s*:\s*/),d=e[0].trim(),j=e[1].trim();if(d==="stop-color"){return j}}}}fabric.Gradient={create:function(l,m){m||(m={});var f=m.x1||0,k=m.y1||0,e=m.x2||l.canvas.width,i=m.y2||0,g=m.colorStops;var j=l.createLinearGradient(f,k,e,i);for(var h in g){var d=g[h];j.addColorStop(parseFloat(h),d)}return j},fromElement:function(d,m,l){var j=d.getElementsByTagName("stop"),d,f,e={},g,k={x1:d.getAttribute("x1")||0,y1:d.getAttribute("y1")||0,x2:d.getAttribute("x2")||"100%",y2:d.getAttribute("y2")||0};for(var h=j.length;h--;){d=j[h];f=d.getAttribute("offset");f=parseFloat(f)/(/%$/.test(f)?100:1);e[f]=c(d)||d.getAttribute("stop-color")}a(l,k);return fabric.Gradient.create(m,{x1:k.x1,y1:k.y1,x2:k.x2,y2:k.y2,colorStops:e})},forObject:function(g,d,e){e||(e={});a(g,e);var f=fabric.Gradient.create(d,{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,colorStops:e.colorStops});return f}};function a(f,e){for(var g in e){if(typeof e[g]==="string"&&/^\d+%$/.test(e[g])){var d=parseFloat(e[g],10);if(g==="x1"||g==="x2"){e[g]=f.width*d/100}else{if(g==="y1"||g==="y2"){e[g]=f.height*d/100}}}if(g==="x1"||g==="x2"){e[g]-=f.width/2}else{if(g==="y1"||g==="y2"){e[g]-=f.height/2}}}}function b(j){var f=j.getElementsByTagName("linearGradient"),d=j.getElementsByTagName("radialGradient"),g,h={};for(var e=f.length;e--;){g=f[e];h[g.id]=g}for(var e=d.length;e--;){g=d[e];h[g.id]=g}return h}fabric.getGradientDefs=b})();(function(b){var c=b.fabric||(b.fabric={});if(c.Point){c.warn("fabric.Point is already defined");return}c.Point=a;function a(d,e){if(arguments.length>0){this.init(d,e)}}a.prototype={constructor:a,init:function(d,e){this.x=d;this.y=e},add:function(d){return new a(this.x+d.x,this.y+d.y)},addEquals:function(d){this.x+=d.x;this.y+=d.y;return this},scalarAdd:function(d){return new a(this.x+d,this.y+d)},scalarAddEquals:function(d){this.x+=d;this.y+=d;return this},subtract:function(d){return new a(this.x-d.x,this.y-d.y)},subtractEquals:function(d){this.x-=d.x;this.y-=d.y;return this},scalarSubtract:function(d){return new a(this.x-d,this.y-d)},scalarSubtractEquals:function(d){this.x-=d;this.y-=d;return this},multiply:function(d){return new a(this.x*d,this.y*d)},multiplyEquals:function(d){this.x*=d;this.y*=d;return this},divide:function(d){return new a(this.x/d,this.y/d)},divideEquals:function(d){this.x/=d;this.y/=d;return this},eq:function(d){return(this.x==d.x&&this.y==d.y)},lt:function(d){return(this.xd.x&&this.y>d.y)},gte:function(d){return(this.x>=d.x&&this.y>=d.y)},lerp:function(e,d){return new a(this.x+(e.x-this.x)*d,this.y+(e.y-this.y)*d)},distanceFrom:function(f){var e=this.x-f.x,d=this.y-f.y;return Math.sqrt(e*e+d*d)},min:function(d){return new a(Math.min(this.x,d.x),Math.min(this.y,d.y))},max:function(d){return new a(Math.max(this.x,d.x),Math.max(this.y,d.y))},toString:function(){return this.x+","+this.y},setXY:function(d,e){this.x=d;this.y=e},setFromPoint:function(d){this.x=d.x;this.y=d.y},swap:function(e){var d=this.x,f=this.y;this.x=e.x;this.y=e.y;e.x=d;e.y=f}}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Intersection){b.warn("fabric.Intersection is already defined");return}function c(d){if(arguments.length>0){this.init(d)}}b.Intersection=c;b.Intersection.prototype={init:function(d){this.status=d;this.points=[]},appendPoint:function(d){this.points.push(d)},appendPoints:function(d){this.points=this.points.concat(d)}};b.Intersection.intersectLineLine=function(h,f,l,k){var m,i=(k.x-l.x)*(h.y-l.y)-(k.y-l.y)*(h.x-l.x),j=(f.x-h.x)*(h.y-l.y)-(f.y-h.y)*(h.x-l.x),g=(k.y-l.y)*(f.x-h.x)-(k.x-l.x)*(f.y-h.y);if(g!=0){var e=i/g,d=j/g;if(0<=e&&e<=1&&0<=d&&d<=1){m=new c("Intersection");m.points.push(new b.Point(h.x+e*(f.x-h.x),h.y+e*(f.y-h.y)))}else{m=new c("No Intersection")}}else{if(i==0||j==0){m=new c("Coincident")}else{m=new c("Parallel")}}return m};b.Intersection.intersectLinePolygon=function(e,d,l){var m=new c("No Intersection"),f=l.length;for(var h=0;h0){m.status="Intersection"}return m};b.Intersection.intersectPolygonPolygon=function(j,h){var f=new c("No Intersection"),l=j.length;for(var k=0;k0){f.status="Intersection"}return f};b.Intersection.intersectPolygonRectangle=function(n,e,d){var g=e.min(d),m=e.max(d),f=new b.Point(m.x,g.y),l=new b.Point(g.x,m.y),k=c.intersectLinePolygon(g,f,n),j=c.intersectLinePolygon(f,m,n),i=c.intersectLinePolygon(m,l,n),h=c.intersectLinePolygon(l,g,n),o=new c("No Intersection");o.appendPoints(k.points);o.appendPoints(j.points);o.appendPoints(i.points);o.appendPoints(h.points);if(o.points.length>0){o.status="Intersection"}return o}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Color){b.warn("fabric.Color is already defined.");return}function c(d){if(!d){this.setSource([0,0,0,1])}else{this._tryParsingColor(d)}}b.Color=c;b.Color.prototype={_tryParsingColor:function(d){var e=c.sourceFromHex(d);if(!e){e=c.sourceFromRgb(d)}if(e){this.setSource(e)}},getSource:function(){return this._source},setSource:function(d){this._source=d},toRgb:function(){var d=this.getSource();return"rgb("+d[0]+","+d[1]+","+d[2]+")"},toRgba:function(){var d=this.getSource();return"rgba("+d[0]+","+d[1]+","+d[2]+","+d[3]+")"},toHex:function(){var h=this.getSource();var f=h[0].toString(16);f=(f.length==1)?("0"+f):f;var e=h[1].toString(16);e=(e.length==1)?("0"+e):e;var d=h[2].toString(16);d=(d.length==1)?("0"+d):d;return f.toUpperCase()+e.toUpperCase()+d.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var d=this.getSource();d[3]=e;this.setSource(d);return this},toGrayscale:function(){var f=this.getSource(),e=parseInt((f[0]*0.3+f[1]*0.59+f[2]*0.11).toFixed(0),10),d=f[3];this.setSource([e,e,e,d]);return this},toBlackWhite:function(d){var g=this.getSource(),f=(g[0]*0.3+g[1]*0.59+g[2]*0.11).toFixed(0),e=g[3],d=d||127;f=(Number(f)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];if(this.backgroundImage){h.push('')}for(var j=0,k=this.getObjects(),g=k.length;j");return h.join("")},isEmpty:function(){return this._objects.length===0},remove:function(g){e(this._objects,g);if(this.getActiveObject()===g){this.fire("before:selection:cleared",{target:g});this.discardActiveObject();this.fire("selection:cleared")}this.renderAll();return g},sendToBack:function(g){e(this._objects,g);this._objects.unshift(g);return this.renderAll()},bringToFront:function(g){e(this._objects,g);this._objects.push(g);return this.renderAll()},sendBackwards:function(j){var h=this._objects.indexOf(j),g=h;if(h!==0){for(var k=h-1;k>=0;--k){if(j.intersectsWithObject(this._objects[k])||j.isContainedWithinObject(this._objects[k])){g=k;break}}e(this._objects,j);this._objects.splice(g,0,j)}return this.renderAll()},bringForward:function(k){var n=this.getObjects(),h=n.indexOf(k),g=h;if(h!==n.length-1){for(var m=h+1,j=this._objects.length;m"};f(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(l){var k=l.getContext("2d"),g=k.getImageData(0,0,l.width,l.height),p=g.data,m=g.width,r=g.height,q,h,o,n;for(o=0;o0)?0:-v),r.ey-((u>0)?0:-u),t,s);this.contextTop.lineWidth=this.selectionLineWidth;this.contextTop.strokeStyle=this.selectionBorderColor;this.contextTop.strokeRect(r.ex+a-((v>0)?0:t),r.ey+a-((u>0)?0:s),t,s)},_findSelectedObjects:function(x){var y,t,D=[],s=this._groupSelector.ex,C=this._groupSelector.ey,r=s+this._groupSelector.left,A=C+this._groupSelector.top,z,w=new fabric.Point(f(s,r),f(C,A)),B=new fabric.Point(l(s,r),l(C,A));for(var u=0,v=this._objects.length;u1){var D=new fabric.Group(D);this.setActiveGroup(D);D.saveCoords();this.fire("selection:created",{target:D})}}this.renderAll()},findTarget:function(v,s){var u,w=this.getPointer(v);var t=this.getActiveGroup();if(t&&!s&&this.containsPoint(v,t)){u=t;return u}for(var r=this._objects.length;r--;){if(this._objects[r]&&this.containsPoint(v,this._objects[r])){u=this._objects[r];this.relatedTarget=u;break}}if(u&&u.selectable){return u}},getPointer:function(r){var s=q(r);return{x:s.x-this._offset.left,y:s.y-this._offset.top}},_createUpperCanvas:function(){this.upperCanvasEl=this._createCanvasElement();this.upperCanvasEl.className="upper-canvas";this.wrapperEl.appendChild(this.upperCanvasEl);this._applyCanvasStyle(this.upperCanvasEl);this.contextTop=this.upperCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass});fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"});fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(s){var t=this.getWidth()||s.width,r=this.getHeight()||s.height;fabric.util.setStyle(s,{position:"absolute",width:t+"px",height:r+"px",left:0,top:0});s.width=t;s.height=r;fabric.util.makeElementUnselectable(s)},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},setActiveObject:function(r,s){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=r;r.setActive(true);this.renderAll();this.fire("object:selected",{target:r,e:s});r.fire("selected",{e:s});return this},getActiveObject:function(){return this._activeObject},discardActiveObject:function(){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=null;return this},setActiveGroup:function(r){this._activeGroup=r;r&&r.setActive(true);return this},getActiveGroup:function(){return this._activeGroup},discardActiveGroup:function(){var r=this.getActiveGroup();if(r){r.destroy()}return this.setActiveGroup(null)},deactivateAll:function(){var s=this.getObjects(),t=0,r=s.length;for(;t1)?q.apply(this,o.call(arguments,1)):q.call(this)},initialize:function(i){i&&this.setOptions(i)},setOptions:function(q){var r=this.stateProperties.length,s;while(r--){s=this.stateProperties[r];if(s in q){this.set(s,q[s])}}},transform:function(i){i.globalAlpha=this.opacity;i.translate(this.left,this.top);i.rotate(this.theta);i.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(){var i={type:this.type,left:c(this.left,this.NUM_FRACTION_DIGITS),top:c(this.top,this.NUM_FRACTION_DIGITS),width:c(this.width,this.NUM_FRACTION_DIGITS),height:c(this.height,this.NUM_FRACTION_DIGITS),fill:this.fill,overlayFill:this.overlayFill,stroke:this.stroke,strokeWidth:this.strokeWidth,strokeDashArray:this.strokeDashArray,scaleX:c(this.scaleX,this.NUM_FRACTION_DIGITS),scaleY:c(this.scaleY,this.NUM_FRACTION_DIGITS),angle:c(this.getAngle(),this.NUM_FRACTION_DIGITS),flipX:this.flipX,flipY:this.flipY,opacity:c(this.opacity,this.NUM_FRACTION_DIGITS),selectable:this.selectable,hasControls:this.hasControls,hasBorders:this.hasBorders,hasRotatingPoint:this.hasRotatingPoint};if(!this.includeDefaultValues){i=this._removeDefaultValues(i)}return i},toDatalessObject:function(){return this.toObject()},getSvgStyles:function(){return["stroke: ",(this.stroke?this.stroke:"none"),"; ","stroke-width: ",(this.strokeWidth?this.strokeWidth:"0"),"; ","stroke-dasharray: ",(this.strokeDashArray?this.strokeDashArray.join(" "):"; "),"fill: ",(this.fill?this.fill:"none"),"; ","opacity: ",(this.opacity?this.opacity:"1"),";"].join("")},getSvgTransform:function(){var i=this.getAngle();return["translate(",c(this.left,2)," ",c(this.top,2),")",i!==0?(" rotate("+c(i,2)+")"):"",(this.scaleX===1&&this.scaleY===1)?"":(" scale("+c(this.scaleX,2)+" "+c(this.scaleY,2)+")")].join("")},_removeDefaultValues:function(q){var i=d.Object.prototype.options;if(i){this.stateProperties.forEach(function(r){if(q[r]===i[r]){delete q[r]}})}return q},isActive:function(){return !!this.active},setActive:function(i){this.active=!!i;return this},toString:function(){return"#"},set:function(i,q){if(typeof i==="object"){for(var r in i){this._set(r,i[r])}}else{if(typeof q==="function"){this._set(i,q(this.get(i)))}else{this._set(i,q)}}return this},_set:function(i,q){var r=(i==="scaleX"||i==="scaleY")&&qi){var C=x-i}if(E){z+=(D*E)-(C*E||0)}else{v+=(D*y)-(C*y||0)}B[1&s?"moveTo":"lineTo"](z,v);if(s>=u){s=0}}}q(1,0);q(0,1);q(-1,0);q(0,-1);B.stroke();B.closePath();B.restore()},drawCorners:function(B){if(!this.hasControls){return}var D=this.cornersize,y=D/2,x=this.padding,r=-(this.width/2),w=-(this.height/2),C,A,q=D/this.scaleX,i=D/this.scaleY,s=(x+y)/this.scaleY,t=(x+y)/this.scaleX,v=(x+y-D)/this.scaleX,u=(x+y-D)/this.scaleY,z=this.height;B.save();B.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1;B.fillStyle=this.cornerColor;C=r-t;A=w-s;B.fillRect(C,A,q,i);C=r+this.width-t;A=w-s;B.fillRect(C,A,q,i);C=r-t;A=w+z+u;B.fillRect(C,A,q,i);C=r+this.width+v;A=w+z+u;B.fillRect(C,A,q,i);C=r+this.width/2-t;A=w-s;B.fillRect(C,A,q,i);C=r+this.width/2-t;A=w+z+u;B.fillRect(C,A,q,i);C=r+this.width+v;A=w+z/2-s;B.fillRect(C,A,q,i);C=r-t;A=w+z/2-s;B.fillRect(C,A,q,i);if(this.hasRotatingPoint){C=r+this.width/2-t;A=this.flipY?(w+z+(this.rotatingPointOffset/this.scaleY)-i/2):(w-(this.rotatingPointOffset/this.scaleY)-i/2);B.fillRect(C,A,q,i)}B.restore();return this},clone:function(i){if(this.constructor.fromObject){return this.constructor.fromObject(this.toObject(),i)}return new d.Object(this.toObject())},cloneAsImage:function(s){if(d.Image){var q=new Image();q.onload=function(){if(s){s(new d.Image(q),r)}q=q.onload=null};var r={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",false).set("flipY",false);this.toDataURL(function(i){q.src=i})}return this},toDataURL:function(s){var q=d.document.createElement("canvas");if(!q.getContext&&typeof G_vmlCanvasManager!="undefined"){G_vmlCanvasManager.initElement(q)}this.setCoords();q.width=this.getBoundingRectWidth();q.height=this.getBoundingRectHeight();d.util.wrapElement(q,"div");var i=new d.Canvas(q);i.backgroundColor="transparent";i.renderAll();if(this.constructor.async){this.clone(r)}else{r(this.clone())}function r(u){u.left=q.width/2;u.top=q.height/2;u.setActive(false);i.add(u);var t=i.toDataURL("png");i.dispose();i=u=null;s&&s(t)}},hasStateChanged:function(){return this.stateProperties.some(function(i){return this[i]!==this.originalState[i]},this)},saveState:function(){this.stateProperties.forEach(function(i){this.originalState[i]=this.get(i)},this);return this},setupState:function(){this.originalState={};this.saveState()},intersectsWithRect:function(r,t){var w=this.oCoords,i=new d.Point(w.tl.x,w.tl.y),s=new d.Point(w.tr.x,w.tr.y),v=new d.Point(w.bl.x,w.bl.y),q=new d.Point(w.br.x,w.br.y);var u=d.Intersection.intersectPolygonRectangle([i,s,q,v],r,t);return(u.status==="Intersection")},intersectsWithObject:function(i){function q(u){return{tl:new d.Point(u.tl.x,u.tl.y),tr:new d.Point(u.tr.x,u.tr.y),bl:new d.Point(u.bl.x,u.bl.y),br:new d.Point(u.br.x,u.br.y)}}var r=q(this.oCoords),t=q(i.oCoords);var s=d.Intersection.intersectPolygonPolygon([r.tl,r.tr,r.br,r.bl],[t.tl,t.tr,t.br,t.bl]);return(s.status==="Intersection")},isContainedWithinObject:function(i){return this.isContainedWithinRect(i.oCoords.tl,i.oCoords.br)},isContainedWithinRect:function(r,t){var v=this.oCoords,i=new d.Point(v.tl.x,v.tl.y),s=new d.Point(v.tr.x,v.tr.y),u=new d.Point(v.bl.x,v.bl.y),q=new d.Point(v.br.x,v.br.y);return i.x>r.x&&s.xr.y&&u.y=v)&&(s.d.y>=v)){continue}if((s.o.x==s.d.x)&&(s.o.x>=w)){x=s.o.x;u=v}else{z=0;y=(s.d.y-s.o.y)/(s.d.x-s.o.x);r=v-z*w;q=s.o.y-y*s.o.x;x=-(r-q)/(z-y);u=r+z*x}if(x>=w){t+=1}if(t==2){break}}return t},_getImageLines:function(r,q){return{topline:{o:r.tl,d:r.tr},rightline:{o:r.tr,d:r.br},bottomline:{o:r.br,d:r.bl},leftline:{o:r.bl,d:r.tl}}},_setCornerCoords:function(){var u=this.oCoords,q=b(45-this.getAngle()),s=Math.sqrt(2*Math.pow(this.cornersize,2))/2,i=s*Math.cos(q),r=s*Math.sin(q),v=Math.sin(this.theta),t=Math.cos(this.theta);u.tl.corner={tl:{x:u.tl.x-r,y:u.tl.y-i},tr:{x:u.tl.x+i,y:u.tl.y-r},bl:{x:u.tl.x-i,y:u.tl.y+r},br:{x:u.tl.x+r,y:u.tl.y+i}};u.tr.corner={tl:{x:u.tr.x-r,y:u.tr.y-i},tr:{x:u.tr.x+i,y:u.tr.y-r},br:{x:u.tr.x+r,y:u.tr.y+i},bl:{x:u.tr.x-i,y:u.tr.y+r}};u.bl.corner={tl:{x:u.bl.x-r,y:u.bl.y-i},bl:{x:u.bl.x-i,y:u.bl.y+r},br:{x:u.bl.x+r,y:u.bl.y+i},tr:{x:u.bl.x+i,y:u.bl.y-r}};u.br.corner={tr:{x:u.br.x+i,y:u.br.y-r},bl:{x:u.br.x-i,y:u.br.y+r},br:{x:u.br.x+r,y:u.br.y+i},tl:{x:u.br.x-r,y:u.br.y-i}};u.ml.corner={tl:{x:u.ml.x-r,y:u.ml.y-i},tr:{x:u.ml.x+i,y:u.ml.y-r},bl:{x:u.ml.x-i,y:u.ml.y+r},br:{x:u.ml.x+r,y:u.ml.y+i}};u.mt.corner={tl:{x:u.mt.x-r,y:u.mt.y-i},tr:{x:u.mt.x+i,y:u.mt.y-r},bl:{x:u.mt.x-i,y:u.mt.y+r},br:{x:u.mt.x+r,y:u.mt.y+i}};u.mr.corner={tl:{x:u.mr.x-r,y:u.mr.y-i},tr:{x:u.mr.x+i,y:u.mr.y-r},bl:{x:u.mr.x-i,y:u.mr.y+r},br:{x:u.mr.x+r,y:u.mr.y+i}};u.mb.corner={tl:{x:u.mb.x-r,y:u.mb.y-i},tr:{x:u.mb.x+i,y:u.mb.y-r},bl:{x:u.mb.x-i,y:u.mb.y+r},br:{x:u.mb.x+r,y:u.mb.y+i}};u.mtr.corner={tl:{x:u.mtr.x-r+(v*this.rotatingPointOffset),y:u.mtr.y-i-(t*this.rotatingPointOffset)},tr:{x:u.mtr.x+i+(v*this.rotatingPointOffset),y:u.mtr.y-r-(t*this.rotatingPointOffset)},bl:{x:u.mtr.x-i+(v*this.rotatingPointOffset),y:u.mtr.y+r-(t*this.rotatingPointOffset)},br:{x:u.mtr.x+r+(v*this.rotatingPointOffset),y:u.mtr.y+i-(t*this.rotatingPointOffset)}}},toGrayscale:function(){var i=this.get("fill");if(i){this.set("overlayFill",new d.Color(i).toGrayscale().toRgb())}return this},complexity:function(){return 0},toJSON:function(){return this.toObject()},setGradientFill:function(i,q){this.set("fill",d.Gradient.forObject(this,i,q))},animate:function(q,s,i){var r=this;i||(i={});if(!("from" in i)){i.from=this.get(q)}if(/[+-]/.test((s+"").charAt(0))){s=this.get(q)+parseFloat(s)}d.util.animate({startValue:i.from,endValue:s,byValue:i.by,easing:i.easing,duration:i.duration,onChange:function(t){r.set(q,t);i.onChange&&i.onChange()},onComplete:function(){r.setCoords();i.onComplete&&i.onComplete()}})}});d.Object.prototype.rotate=d.Object.prototype.setAngle;var j=d.Object.prototype;for(var g=j.stateProperties.length;g--;){var h=j.stateProperties[g],e=h.charAt(0).toUpperCase()+h.slice(1),f="set"+e,n="get"+e;if(!j[n]){j[n]=(function(i){return new Function('return this.get("'+i+'")')})(h)}if(!j[f]){j[f]=(function(i){return new Function("value",'return this.set("'+i+'", value)')})(h)}}l(d.Object.prototype,d.Observable)})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),e=c.util.object.extend,d=c.Object.prototype.set,a={x1:1,x2:1,y1:1,y2:1};if(c.Line){c.warn("fabric.Line is already defined");return}c.Line=c.util.createClass(c.Object,{type:"line",initialize:function(g,f){if(!g){g=[0,0,0,0]}this.callSuper("initialize",f);this.set("x1",g[0]);this.set("y1",g[1]);this.set("x2",g[2]);this.set("y2",g[3]);this._setWidthHeight(f)},_setWidthHeight:function(f){f||(f={});this.set("width",(this.x2-this.x1)||1);this.set("height",(this.y2-this.y1)||1);this.set("left","left" in f?f.left:(this.x1+this.width/2));this.set("top","top" in f?f.top:(this.y1+this.height/2))},_set:function(f,g){this[f]=g;if(f in a){this._setWidthHeight()}return this},_render:function(f){f.beginPath();f.moveTo(this.width===1?0:(-this.width/2),this.height===1?0:(-this.height/2));f.lineTo(this.width===1?0:(this.width/2),this.height===1?0:(this.height/2));f.lineWidth=this.strokeWidth;var g=f.strokeStyle;f.strokeStyle=f.fillStyle;f.stroke();f.strokeStyle=g},complexity:function(){return 1},toObject:function(){return e(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}});c.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");c.Line.fromElement=function(g,f){var i=c.parseAttributes(g,c.Line.ATTRIBUTE_NAMES);var h=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new c.Line(h,e(i,f))};c.Line.fromObject=function(f){var g=[f.x1,f.y1,f.x2,f.y2];return new c.Line(g,f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),d=Math.PI*2,e=b.util.object.extend;if(b.Circle){b.warn("fabric.Circle is already defined.");return}b.Circle=b.util.createClass(b.Object,{type:"circle",initialize:function(f){f=f||{};this.set("radius",f.radius||0);this.callSuper("initialize",f);var g=this.get("radius")*2;this.set("width",g).set("height",g)},toObject:function(){return e(this.callSuper("toObject"),{radius:this.get("radius")})},toSVG:function(){return('')},_render:function(f,g){f.beginPath();f.globalAlpha*=this.opacity;f.arc(g?this.left:0,g?this.top:0,this.radius,0,d,false);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(f){this.radius=f;this.set("width",f*2).set("height",f*2)},complexity:function(){return 1}});b.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Circle.fromElement=function(g,f){f||(f={});var h=b.parseAttributes(g,b.Circle.ATTRIBUTE_NAMES);if(!c(h)){throw Error("value of `r` attribute is required and can not be negative")}if("left" in h){h.left-=(f.width/2)||0}if("top" in h){h.top-=(f.height/2)||0}return new b.Circle(e(h,f))};function c(f){return(("radius" in f)&&(f.radius>0))}b.Circle.fromObject=function(f){return new b.Circle(f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Triangle){b.warn("fabric.Triangle is already defined");return}b.Triangle=b.util.createClass(b.Object,{type:"triangle",initialize:function(c){c=c||{};this.callSuper("initialize",c);this.set("width",c.width||100).set("height",c.height||100)},_render:function(c){var d=this.width/2,e=this.height/2;c.beginPath();c.moveTo(-d,e);c.lineTo(0,-e);c.lineTo(d,e);c.closePath();if(this.fill){c.fill()}if(this.stroke){c.stroke()}},complexity:function(){return 1},toSVG:function(){var c=this.width/2,d=this.height/2;var e=[-c+" "+d,"0 "+-d,c+" "+d].join(",");return''}});b.Triangle.fromObject=function(c){return new b.Triangle(c)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),c=Math.PI*2,d=b.util.object.extend;if(b.Ellipse){b.warn("fabric.Ellipse is already defined.");return}b.Ellipse=b.util.createClass(b.Object,{type:"ellipse",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(){return d(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,f){if(this.rx===0||this.ry===0){return}return this.callSuper("render",e,f)},_render:function(e,f){e.beginPath();e.save();e.globalAlpha*=this.opacity;e.transform(1,0,0,this.ry/this.rx,0,0);e.arc(f?this.left:0,f?this.top:0,this.rx,0,c,false);if(this.stroke){e.stroke()}if(this.fill){e.fill()}e.restore()},complexity:function(){return 1}});b.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Ellipse.fromElement=function(f,e){e||(e={});var g=b.parseAttributes(f,b.Ellipse.ATTRIBUTE_NAMES);if("left" in g){g.left-=(e.width/2)||0}if("top" in g){g.top-=(e.height/2)||0}return new b.Ellipse(d(g,e))};b.Ellipse.fromObject=function(e){return new b.Ellipse(e)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={});if(c.Rect){console.warn("fabric.Rect is already defined");return}c.Rect=c.util.createClass(c.Object,{type:"rect",rx:0,ry:0,initialize:function(d){this._initStateProperties();this.callSuper("initialize",d);this._initRxRy()},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){if(this.rx&&!this.ry){this.ry=this.rx}else{if(this.ry&&!this.rx){this.rx=this.ry}}},_render:function(f){var j=this.rx||0,i=this.ry||0,d=-this.width/2,k=-this.height/2,e=this.width,g=this.height;f.beginPath();f.globalAlpha*=this.opacity;if(this.group){f.translate(this.x||0,this.y||0)}f.moveTo(d+j,k);f.lineTo(d+e-j,k);f.quadraticCurveTo(d+e,k,d+e,k+i,d+e,k+i);f.lineTo(d+e,k+g-i);f.quadraticCurveTo(d+e,k+g,d+e-j,k+g,d+e-j,k+g);f.lineTo(d+j,k+g);f.quadraticCurveTo(d,k+g,d,k+g-i,d,k+g-i);f.lineTo(d,k+i);f.quadraticCurveTo(d,k,d+j,k,d+j,k);f.closePath();if(this.fill){f.fill()}if(this.strokeDashArray){this._renderDashedStroke(f)}else{if(this.stroke){f.stroke()}}},_normalizeLeftTopProperties:function(d){if(d.left){this.set("left",d.left+this.getWidth()/2)}this.set("x",d.left||0);if(d.top){this.set("top",d.top+this.getHeight()/2)}this.set("y",d.top||0);return this},complexity:function(){return 1},toObject:function(){return c.util.object.extend(this.callSuper("toObject"),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return''}});c.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");function a(d){d.left=d.left||0;d.top=d.top||0;return d}c.Rect.fromElement=function(e,d){if(!e){return null}var g=c.parseAttributes(e,c.Rect.ATTRIBUTE_NAMES);g=a(g);var f=new c.Rect(c.util.object.extend((d?c.util.object.clone(d):{}),g));f._normalizeLeftTopProperties(g);return f};c.Rect.fromObject=function(d){return new c.Rect(d)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),a=c.util.toFixed;if(c.Polyline){c.warn("fabric.Polyline is already defined");return}c.Polyline=c.util.createClass(c.Object,{type:"polyline",initialize:function(e,d){d=d||{};this.set("points",e);this.callSuper("initialize",d);this._calcDimensions()},_calcDimensions:function(){return c.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return c.Polygon.prototype.toObject.call(this)},toSVG:function(){var f=[];for(var e=0,d=this.points.length;e"].join("")},_render:function(f){var e;f.beginPath();f.moveTo(this.points[0].x,this.points[0].y);for(var g=0,d=this.points.length;g"].join("")},_render:function(m){var l;var k=this.minX+this.width/2,o=this.minY+this.height/2;m.beginPath();m.moveTo(this.points[0].x-k,this.points[0].y-o);for(var n=0,j=this.points.length;n1){E=Math.sqrt(E);O*=E;N*=E}var R=aa/O;var Q=W/O;var D=(-W)/N;var C=(aa)/N;var H=R*M+Q*L;var q=D*M+C*L;var F=R*T+Q*S;var ab=D*T+C*S;var Z=(F-H)*(F-H)+(ab-q)*(ab-q);var U=1/Z-0.25;if(U<0){U=0}var w=Math.sqrt(U);if(P==J){w=-w}var V=0.5*(H+F)-w*(ab-q);var K=0.5*(q+ab)+w*(F-H);var v=Math.atan2(q-K,H-V);var u=Math.atan2(ab-K,F-V);var Y=u-v;if(Y<0&&P==1){Y+=2*Math.PI}else{if(Y>0&&P==0){Y-=2*Math.PI}}var B=Math.ceil(Math.abs(Y/(Math.PI*0.5+0.001)));var I=[];for(var X=0;X"},toObject:function(){var q=g(this.callSuper("toObject"),{path:this.path});if(this.sourcePath){q.sourcePath=this.sourcePath}if(this.transformMatrix){q.transformMatrix=this.transformMatrix}return q},toDatalessObject:function(){var q=this.toObject();if(this.sourcePath){q.path=this.sourcePath}delete q.sourcePath;return q},toSVG:function(){var t=[];for(var r=0,q=this.path.length;r',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var C=[],z,v,y;for(var u=0,t,q,w=this.path.length;uB){for(var r=1,x=q.length;r"];for(var l=0,j=m.length;l");return k.join("")},toString:function(){return"#"},isSameColor:function(){var j=this.getObjects()[0].get("fill");return this.getObjects().every(function(k){return k.get("fill")===j})},complexity:function(){return this.paths.reduce(function(j,k){return j+((k&&k.complexity)?k.complexity():0)},0)},toGrayscale:function(){var j=this.paths.length;while(j--){this.paths[j].toGrayscale()}return this},getObjects:function(){return this.paths}});function c(m){for(var l=0,j=m.length;l"},getObjects:function(){return this.objects},addWithUpdate:function(h){this._restoreObjectsState();this.objects.push(h);this._calcBounds();this._updateObjectsCoords();return this},removeWithUpdate:function(h){this._restoreObjectsState();f(this.objects,h);h.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},add:function(h){this.objects.push(h);return this},remove:function(h){f(this.objects,h);return this},size:function(){return this.getObjects().length},_set:function(j,k){if(j==="fill"||j==="opacity"){var h=this.objects.length;this[j]=k;while(h--){this.objects[h].set(j,k)}}else{this[j]=k}},contains:function(h){return this.objects.indexOf(h)>-1},toObject:function(){return g(this.callSuper("toObject"),{objects:b(this.objects,"clone")})},render:function(j,o){j.save();this.transform(j);var n=Math.max(this.scaleX,this.scaleY);for(var l=0,h=this.objects.length,k;k=this.objects[l];l++){var m=k.borderScaleFactor;k.borderScaleFactor=n;k.render(j);k.borderScaleFactor=m}if(!o&&this.active){this.drawBorders(j);this.hideCorners||this.drawCorners(j)}j.restore();this.setCoords()},item:function(h){return this.getObjects()[h]},complexity:function(){return this.getObjects().reduce(function(i,h){i+=(typeof h.complexity=="function")?h.complexity():0;return i},0)},_restoreObjectsState:function(){this.objects.forEach(this._restoreObjectState,this);return this},_restoreObjectState:function(j){var l=this.get("left"),m=this.get("top"),h=this.getAngle()*(Math.PI/180),k=j.get("originalLeft"),n=j.get("originalTop"),i=Math.cos(h)*j.get("top")+Math.sin(h)*j.get("left"),o=-Math.sin(h)*j.get("top")+Math.cos(h)*j.get("left");j.setAngle(j.getAngle()+this.getAngle());j.set("left",l+o*this.get("scaleX"));j.set("top",m+i*this.get("scaleY"));j.set("scaleX",j.get("scaleX")*this.get("scaleX"));j.set("scaleY",j.get("scaleY")*this.get("scaleY"));j.setCoords();j.hideCorners=false;j.setActive(false);j.setCoords();return this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){this._originalLeft=this.get("left");this._originalTop=this.get("top");return this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){this.forEachObject(function(h){h.setCoords()});return this},activateAllObjects:function(){this.forEachObject(function(h){h.setActive()});return this},forEachObject:e.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var j=this.getObjects(),i=j[0]?j[0].get("opacity"):1;var h=j.every(function(k){return k.get("opacity")===i});if(h){this.opacity=i}},_calcBounds:function(){var s=[],q=[],p,n,k,h,m,l,u,r=0,t=this.objects.length;for(;ri.x&&j-hi.y},toGrayscale:function(){var h=this.objects.length;while(h--){this.objects[h].toGrayscale()}},toSVG:function(){var k=[];for(var j=0,h=this.objects.length;j'+k.join("")+"")}});e.Group.fromObject=function(h,i){e.util.enlivenObjects(h.objects,function(j){delete h.objects;i&&i(new e.Group(j,h))})};e.Group.async=true})(typeof exports!="undefined"?exports:this);(function(a){var b=fabric.util.object.extend;if(!a.fabric){a.fabric={}}if(a.fabric.Image){fabric.warn("fabric.Image is already defined.");return}if(!fabric.Object){fabric.warn("fabric.Object is required for fabric.Image initialization");return}fabric.Image=fabric.util.createClass(fabric.Object,{active:false,bordervisibility:false,cornervisibility:false,type:"image",initialize:function(d,c){c||(c={});this.callSuper("initialize",c);this._initElement(d);this._originalImage=this.getElement();this._initConfig(c);this.filters=[];if(c.filters){this.filters=c.filters;this.applyFilters()}},getElement:function(){return this._element},setElement:function(c){this._element=c;this._initConfig();return this},getOriginalSize:function(){var c=this.getElement();return{width:c.width,height:c.height}},setBorderVisibility:function(c){this._resetWidthHeight();this._adjustWidthHeightToBorders(showBorder);this.setCoords()},setCornersVisibility:function(c){this.cornervisibility=!!c},render:function(c,d){c.save();if(!d){this.transform(c)}this._render(c);if(this.active&&!d){this.drawBorders(c);this.hideCorners||this.drawCorners(c)}c.restore()},toObject:function(){return b(this.callSuper("toObject"),{src:this._originalImage.src||this._originalImage._src,filters:this.filters.concat()})},toSVG:function(){return''},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(c){this.constructor.fromObject(this.toObject(),c)},applyFilters:function(i){if(this.filters.length===0){this.setElement(this._originalImage);i&&i();return}var c=typeof Buffer!=="undefined"&&typeof window==="undefined",g=this._originalImage,e=fabric.document.createElement("canvas"),f=c?new (require("canvas").Image):fabric.document.createElement("img"),h=this;if(!e.getContext&&typeof G_vmlCanvasManager!="undefined"){G_vmlCanvasManager.initElement(e)}e.width=g.width;e.height=g.height;e.getContext("2d").drawImage(g,0,0,g.width,g.height);this.filters.forEach(function(j){j&&j.applyTo(e)});f.onload=function(){h._element=f;i&&i();f.onload=e=g=null};f.width=g.width;f.height=g.height;if(c){var d=e.toDataURL("image/png").replace(/data:image\/png;base64,/,"");f.src=new Buffer(d,"base64");h._element=f;i&&i()}else{f.src=e.toDataURL("image/png")}return this},_render:function(c){c.drawImage(this.getElement(),-this.width/2,-this.height/2,this.width,this.height)},_adjustWidthHeightToBorders:function(c){if(c){this.currentBorder=this.borderwidth;this.width+=(2*this.currentBorder);this.height+=(2*this.currentBorder)}else{this.currentBorder=0}},_resetWidthHeight:function(){var c=this.getElement();this.set("width",c.width);this.set("height",c.height)},_initElement:function(c){this.setElement(fabric.util.getById(c));fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(c){c||(c={});this.setOptions(c);this._setBorder();this._setWidthHeight(c)},_initFilters:function(c){if(c.filters&&c.filters.length){this.filters=c.filters.map(function(d){return d&&fabric.Image.filters[d.type].fromObject(d)})}},_setBorder:function(){if(this.bordervisibility){this.currentBorder=this.borderwidth}else{this.currentBorder=0}},_setWidthHeight:function(c){var d=2*this.currentBorder;this.width="width" in c?c.width:((this.getElement().width||0)+d);this.height="height" in c?c.height:((this.getElement().height||0)+d)},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc;fabric.Image.fromObject=function(d,f){var c=fabric.document.createElement("img"),e=d.src;if(d.width){c.width=d.width}if(d.height){c.height=d.height}c.onload=function(){fabric.Image.prototype._initFilters.call(d,d);var g=new fabric.Image(c,d);f&&f(g);c=c.onload=null};c.src=e};fabric.Image.fromURL=function(d,f,e){var c=fabric.document.createElement("img");c.onload=function(){if(f){f(new fabric.Image(c,e))}c=c.onload=null};c.src=d};fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" ");fabric.Image.fromElement=function(d,f,c){c||(c={});var e=fabric.parseAttributes(d,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(e["xlink:href"],f,b(e,c))};fabric.Image.async=true})(typeof exports!="undefined"?exports:this);fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var a=this.get("angle");if(a>-225&&a<=-135){return -180}else{if(a>-135&&a<=-45){return -90}else{if(a>-45&&a<=45){return 0}else{if(a>45&&a<=135){return 90}else{if(a>135&&a<=225){return 180}else{if(a>225&&a<=315){return 270}else{if(a>315){return 360}}}}}}}return 0},straighten:function(){var a=this._getAngleValueForStraighten();this.setAngle(a);return this},fxStraighten:function(b){b=b||{};var c=function(){},d=b.onComplete||c,a=b.onChange||c,e=this;fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(f){e.setAngle(f);a()},onComplete:function(){e.setCoords();d()},onStart:function(){e.setActive(false)}});return this}});fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(a){a.straighten();this.renderAll();return this},fxStraightenObject:function(a){a.fxStraighten({onChange:this.renderAll.bind(this)});return this}});fabric.Image.filters={};fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(d){var c=d.getContext("2d"),a=c.getImageData(0,0,d.width,d.height),h=a.data,e=a.width,l=a.height,k,b,g,f;for(g=0;gh&&m>h&&o>h&&p(a-m)0){l[m]=o;l[m+1]=e;l[m+2]=k}}f.putImageData(c,0,0)},toJSON:function(){return{type:this.type,color:this.color}}});fabric.Image.filters.Tint.fromObject=function(a){return new fabric.Image.filters.Tint(a)};(function(b){var c=b.fabric||(b.fabric={}),e=c.util.object.extend,d=c.util.object.clone,a=c.util.toFixed;if(c.Text){c.warn("fabric.Text is already defined");return}if(!c.Object){c.warn("fabric.Text requires fabric.Object");return}c.Text=c.util.createClass(c.Object,{fontSize:40,fontWeight:100,fontFamily:"Times New Roman",textDecoration:"",textShadow:"",textAlign:"left",fontStyle:"",lineHeight:1.3,strokeStyle:"",strokeWidth:1,backgroundColor:"",path:null,type:"text",useNative:true,initialize:function(g,f){this._initStateProperties();this.text=g;this.setOptions(f||{});this.theta=this.angle*Math.PI/180;this._initDimensions();this.setCoords()},_initDimensions:function(){var f=c.document.createElement("canvas");if(!f.getContext&&typeof G_vmlCanvasManager!="undefined"){G_vmlCanvasManager.initElement(f)}this._render(f.getContext("2d"))},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat();this.stateProperties.push("fontFamily","fontWeight","fontSize","path","text","textDecoration","textShadow","textAlign","fontStyle","lineHeight","strokeStyle","strokeWidth","backgroundColor");c.util.removeFromArray(this.stateProperties,"width")},toString:function(){return"#'},_render:function(f){if(typeof Cufon==="undefined"||this.useNative===true){this._renderViaNative(f)}else{this._renderViaCufon(f)}},_renderViaCufon:function(f){var h=Cufon.textOptions||(Cufon.textOptions={});h.left=this.left;h.top=this.top;h.context=f;h.color=this.fill;var g=this._initDummyElementForCufon();this.transform(f);Cufon.replaceElement(g,{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,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor});this.width=h.width;this.height=h.height;this._totalLineHeight=h.totalLineHeight;this._fontAscent=h.fontAscent;this._boundaries=h.boundaries;this._shadowOffsets=h.shadowOffsets;this._shadows=h.shadows||[];this.setCoords()},_renderViaNative:function(f){this.transform(f);this._setTextStyles(f);var g=this.text.split(/\r?\n/);this.width=this._getTextWidth(f,g);this.height=this._getTextHeight(f,g);this._renderTextBackground(f,g);if(this.textAlign!=="left"){f.save();f.translate(this.textAlign==="center"?(this.width/2):this.width,0)}this._setTextShadow(f);this._renderTextFill(f,g);this.textShadow&&f.restore();this._renderTextStroke(f,g);if(this.textAlign!=="left"){f.restore()}this._renderTextDecoration(f,g);this._setBoundaries(f,g);this._totalLineHeight=0;this.setCoords()},_setBoundaries:function(h,k){this._boundaries=[];for(var j=0,g=k.length;jk){k=l}}return k},_setTextShadow:function(f){if(this.textShadow){var j=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/;var g=this.textShadow;var i=j.exec(this.textShadow);var h=g.replace(j,"");f.save();f.shadowColor=h;f.shadowOffsetX=parseInt(i[1],10);f.shadowOffsetY=parseInt(i[2],10);f.shadowBlur=parseInt(i[3],10);this._shadows=[{blur:f.shadowBlur,color:f.shadowColor,offX:f.shadowOffsetX,offY:f.shadowOffsetY}];this._shadowOffsets=[[parseInt(f.shadowOffsetX,10),parseInt(f.shadowOffsetY,10)]]}},_renderTextFill:function(g,j){this._boundaries=[];for(var h=0,f=j.length;h-1){f.call(this,this.fontSize)}if(this.textDecoration.indexOf("line-through")>-1){f.call(this,this.fontSize/2)}if(this.textDecoration.indexOf("overline")>-1){f.call(this,0)}},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var g=c.document.createElement("pre"),f=c.document.createElement("div");f.appendChild(g);if(typeof G_vmlCanvasManager=="undefined"){g.innerHTML=this.text}else{g.innerText=this.text.replace(/\r?\n/gi,"\r")}g.style.fontSize=this.fontSize+"px";g.style.letterSpacing="normal";return g},render:function(f,g){f.save();this._render(f);if(!g&&this.active){this.drawBorders(f);this.hideCorners||this.drawCorners(f)}f.restore()},toObject:function(){return e(this.callSuper("toObject"),{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,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor})},toSVG:function(){var i=this.text.split(/\r?\n/),j=this.useNative?this.fontSize*this.lineHeight:(-this._fontAscent-((this._fontAscent/5)*this.lineHeight)),g=-(this.width/2),f=this.useNative?this.fontSize-1:(this.height/2)-(i.length*this.fontSize)-this._totalLineHeight,h=this._getSVGTextAndBg(j,g,i),k=this._getSVGShadows(j,i);f+=(this._fontAscent?((this._fontAscent/5)*this.lineHeight):0);return['',h.textBgRects.join(""),"',k.join(""),h.textSpans.join(""),"",""].join("")},_getSVGShadows:function(h,n){var o=[],k,l,p,g,f=1;if(!this._shadows||!this._boundaries){return o}for(k=0,p=this._shadows.length;k",c.util.string.escapeXml(n[l]),"");f=1}else{f++}}}return o},_getSVGTextAndBg:function(j,h,n){var g=[],k=[],l,m,o,f=1;for(l=0,o=n.length;l",c.util.string.escapeXml(n[l]),"");f=1}else{f++}if(!this.backgroundColor||!this._boundaries){continue}k.push("')}return{textSpans:g,textBgRects:k}},_getFillAttributes:function(f){var g=f?new c.Color(f):"";if(!g||!g.getSource()||g.getAlpha()===1){return'fill="'+f+'"'}return'opacity="'+g.getAlpha()+'" fill="'+g.setAlpha(1).toRgb()+'"'},setColor:function(f){this.set("fill",f);return this},setFontsize:function(f){this.set("fontSize",f);this.setCoords();return this},getText:function(){return this.text},setText:function(f){this.set("text",f);this.setCoords();return this},set:function(f,g){if(typeof f=="object"){for(var h in f){this.set(h,f[h])}}else{this[f]=g;if(f==="fontFamily"&&this.path){this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+g+"$3")}}return this}});c.Text.ATTRIBUTE_NAMES=("x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration").split(" ");c.Text.fromObject=function(f){return new c.Text(f.text,d(f))};c.Text.fromElement=function(g,f){if(!g){return null}var h=c.parseAttributes(g,c.Text.ATTRIBUTE_NAMES);var f=c.util.object.extend((f?c.util.object.clone(f):{}),h);var i=new c.Text(g.textContent,f);return i}})(typeof exports!="undefined"?exports:this);(function(){if(typeof document!="undefined"&&typeof window!="undefined"){return}var DOMParser=new require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;function request(url,encoding,callback){var oURL=URL.parse(url),client=HTTP.createClient(oURL.port,oURL.hostname),request=client.request("GET",oURL.pathname,{host:oURL.hostname});client.addListener("error",function(err){if(err.errno===process.ECONNREFUSED){fabric.log("ECONNREFUSED: connection refused to "+client.host+":"+client.port)}else{fabric.log(err.message)}});request.end();request.on("response",function(response){var body="";if(encoding){response.setEncoding(encoding)}response.on("end",function(){callback(body)});response.on("data",function(chunk){if(response.statusCode==200){body+=chunk}})})}fabric.util.loadImage=function(url,callback){request(url,"binary",function(body){var img=new Image();img.src=new Buffer(body,"binary");img._src=url;callback(img)})};fabric.loadSVGFromURL=function(url,callback){url=url.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();request(url,"",function(body){fabric.loadSVGFromString(body,callback)})};fabric.loadSVGFromString=function(string,callback){var doc=new DOMParser().parseFromString(string);fabric.parseSVGDocument(doc.documentElement,function(results,options){callback(results,options)})};fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body);callback&&callback()})};fabric.Image.fromObject=function(object,callback){fabric.util.loadImage(object.src,function(img){var oImg=new fabric.Image(img);oImg._initConfig(object);oImg._initFilters(object);callback(oImg)})};fabric.createCanvasForNode=function(width,height){var canvasEl=fabric.document.createElement("canvas"),nodeCanvas=new Canvas(width||600,height||600);canvasEl.style={};canvasEl.width=nodeCanvas.width;canvasEl.height=nodeCanvas.height;var canvas=fabric.Canvas||fabric.StaticCanvas;var fabricCanvas=new canvas(canvasEl);fabricCanvas.contextContainer=nodeCanvas.getContext("2d");fabricCanvas.nodeCanvas=nodeCanvas;return fabricCanvas};fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};if(fabric.Canvas){fabric.Canvas.prototype.createPNGStream}var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(width){origSetWidth.call(this);this.nodeCanvas.width=width;return this};if(fabric.Canvas){fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth}var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(height){origSetHeight.call(this);this.nodeCanvas.height=height;return this};if(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 2b1bd888240eb901ef405202acc12af169699414..caa6c5e5be01f74c3cf0bc0515273aec36048a67 100644 GIT binary patch delta 39556 zcmV(zK<2-%!~(Fz0z@B+2nd3VCQtwaVQg$JZE0>UYI6XjI%{{@$dcdZS72?fM>0ZS z&&=IB$Q>^agCB8{89S5l%H*B~8jukZkpx(P?r)JqYkyBAHtmrbMswzkO6+Cs`C)KG zl!ZHFBim&|Mcc?(qd+Onu!i1XF=K96Ks!E`Z&$WE^j1401q~y?B*}v*UkD^3eq!bX zY!Ag}Ul+E|ROLAsdNV~c_^+y*AGJTU9v(klmL}oMd3!GZGdg^GUKKxmZy3Qq{%`C^=#pL4*Re79-Ck>VIhA4nXZ(Romd~l;kFS7A}0ZG&OuS zcj$l_bUt??)m=D_PW>_8Z=l5{A}+|(Xn(jPfJBE;eV6VUBoD`}H_68F=#UNTr~1H~ z%^eo9`l%oh5v!*+@(h47t`j!mH3|I%Ge@4Ua{kR0iHu-kk3v;5TdJmQVy^VNCqswB z%YP+2yt9Llxy;{F(>(}Pft|GA$Z?KytLP1#Z(v8C4xrBIm<1DWm7$XmJ%e$|yO^9fuQbgKKj4vc3S#s7J0c=$1LP$ zo9#SGQCzkvQ5CEU0kl~Ey70gYqK?Rx)Yf^m*PE^%We(q_i^%Oka_f9UX zFHcWB?dfc5ebIYm4IrvxJu+7l+katdMAim-VFRE82PRG^vVH;4Mb>Fgi<9lfnts@) zG=xtvg?|Ain)%%~iteIqwqd=*U9_dU5N_u~|CtR!WA1yQhi(|3z(B+3I=FN}vwYfj z*u_XyxI7fCz7cv>uL%k*0`DB#or1P6giY=8+9fr;lQMG&qc&+tbu~MrWq)1v^vmA(@c^H$7n(SWHM#0SnyfR+i7w_NVVhYUPO%{MWQx8OC! zQ@IPCB{7umIgohY`r4dRP|S8}ZQ>N$($4fi1kfPUv4*}D0*PJ;#WH?^tmo8)@Xt4Z zZauOZJqU|wR7{nXD?!X(uYVIBCGa}dL-rCj9DD3$JT$>GN5}_qZ-5=BN(!Z*WO4TMCLl2UHQVv{&~zOJ0Yd>LQFiKaHiYHc>~e2Ob&OSX0Cs^F(ZxEUt)htd)n zyx|cW^oZ4Yi1n8F5h@s~gcILej3)}8i&KS)NZSM_M|}_-rW(h``G1k&!oLSlY(h>= zA^v93IvSYL2#KsgblL`dP-wg0l3=El$tc?!91VD9_VNKW;E13&5R*vYf#-O>qQy;N zqeuqaMIVlM8t)1qB6((0!a|cLVsqdO+GG>sF_W4p zoJCdrFL2SLTIKg%d4G$}x>tTujgyNfO^&p!TDh>EhDNU}eYv*PtM)kcR}JB>TAEM| zaPz=}4h%FCy*K%)ux6$z=*u>3gA0V@e*-@JJi<@kS@=rNT9?bc9sr*8 zz=$%!sg7wnCzTgSYEqjRv_P!1PLejY`o$mj>640k)pYdIVt($`EHT+2ov0uToNh)6khqWL6%De)jC zS1?|Q$3Co#8GnHgz%{s{$Wkz71{L79!e&Yj9il0z&uj{df?3|RCvGtUPr`#oYp|?uFxyD^af%z zi;=uZI&Wbyj1nC}eyc&u?GT(u;!_vn6Y$y1tbekbaB$SxZoB6^uy%Q=)qwHa24;ZW z_)0j?F0Xz%2nER&e@2K72=mGaAVtY+>PEj#_Mk8}){CBD&bI_4=&`?{t$emi4>xa~KgH(js6eb3_$r*;o zwtq~PK6-&IbFkyne`f1Mn3Rc>w2et4Bviu($mdv?NUEWt^5_`DlDeADXc>_vM%caC z^-lSgv*ENs02>=}kKNKBj^Nus$22Jp{Xy zPo!LqVvgT|a&onq0IE{`7MfNf`NG^}RtC=<;Ej_VQp%g}h} z%7m*obMdz&91C!P1)gIdtePOgK>)BODM7$x?y$f^+IT@*gfZVv6aK}yLNm8F4}YUS zRP8*eJkW*NpHri(XOiSkYpF0CkRxS7Re?OT9O--Eq}1T03ouY@yD&~9E+~L6k`!?W zLVMTTuQU=B&LoJABQhqahL~aV2dvQoYt3`)_jJaJu^)V6U$P8j)#ik)Z! zSA^YiOGxr)ZA@tJVdZ|5H7d-@)PFmAr9YRRej4^g3`8uo*vmi@lHT(Q_12$C}Fn9y(qTz+|*~0G=Y}J`G}S7 zX_V_>?3R~6MAnu;GkTz7JSzatkjHA4M(^xoO?F#Mu%oru5yCamBvKGwK!2fClKd1} zX`E)v>8dlxyl?ciev6?|FmO$7jevo>2k(uNy56gFR@SWnY=95wy>jMA=jxRbI|(8k zpN@I0t?8FMUF?t>nM1nPbx(r>6 zC<+g?kc7S|yysyUUuH3#H-AAoi9ox&`_a`lmn646kWO^r7-@a3cC2m>#MOleT9?mU zbUNTe5sFM+YMUz*3plVARBl6Y@nWIoFs*kDzY`{wyK~!;Q5K5ppl}JGx|?=LJ&7mDNo}-q5)=MIhv+zRoQy zT31bDNJE;tUh4jPv*QaN1Ov~1X0rtlxCDPc-kyZZX(Q>s0@{2N3Abl#UXG1DjTaIi zBqSuj62NwNvL)H_B_khWu$ABbRaM`z3&dm3^(QRB$%!TSsY`!u?k>5?W(6Lq7T6qX05QyuR@JPus-`Db)vUCt zc6w3GN{gzzi0m`XCMxIDta1CTeDYzd=lVFM_Vr0vuQ+d&(9G-C8s}fzN9FE1v&nWc8rvYSPXbX}wC{xRrswN}GvXBO50?`|s4(WYwSqC0UD_NRK|{Pus>44)d* zObN9xgOOMpGg#6Q40xa(Sr{pj5(#|hdvmXbRVc5JGwRD_VNEuHq=iJ17Bqy0Us9Fy z%-aOxwAlVQ3QlabJKAaIHNGos#xfRQKQywYYf3q)PYEf13M0YD2JP4WuVRxdfm^&T z4d4SW@>aejhlo?!itT*nsw#ghk1>5MU7%8738b$Lk_w@&zV6i;8ja4*BI|zPzKQYc z#w)x@3<&2#fLTc%K2Qubh2D_H=Ru>b)o>io!&QBr4)bi4CF}Yyo3}7uu)Twijt0uM z;BK-+-N!)Ow_!z$!)==79Qv5~|BB)y+|1VhdhyHSz@zg@lH*2ZebRyiE^PwaBN*?@oP!d3AU;SCF#;U-@JQkGeY zCuvcsD8b%tRcb#p?27%s{>y)U5!>jP`|q{b9ZmUA zg!%)D`lP({xg&$0@F%1#1wx1(ND=(u;2$TFk%5s8lhA(X|Cc?ni~>=7FU3;qxe?+E zzV)%y(_<;aM*tr?_QY7KQr3T5nLp-O*%tr*_1DCadWQhu<3P;rn$0CX*8GR|9B@*W ztgf#qxm=%;tm1!G3Ard%eGffcueJHH9Mo(V)SM;VoYS0Mm1V9^ui4kr6EfGQpCWU8 z9|R?+o(i)KpuqJt8mc@lq}28`Ut2=khkS0mC0tLge@}@m*&mkZGZB>bGymfvp{Jkt zJ>j_WNIbl1KU6onKj5(>i=9}q*ymal+kSW?g*63#g8YBis!5alT!Ck#uFI1$qpLu< zx*lKlUY=CQz{0Om#QX^V-x_7ij^*qwzp}JjTCVsEO8yT2f8#F|NA~RUH(=FT;`giRs` z+8ZJjBh9b6zxTyW$u=3y9V133Pr9S#pTsfEoyC&}MJ`$Lhb$WbN+}F;RTlECz zX^iQ@X9ZbZxz`lYSnr)N)orL~CbboC%z z;AO-_aCnlyUyNA18iq?`kg(HU&+F~5t6ekc?Y>Rm;k)F20K_O&;0lvmrMYtDPZ& zy76khhqLb0!gDn9{vHn0yKBD@XrE)h`Aq=K3>j?KzY2<=MkChn;H$aWK^lJ&8yjb{ z2z}KMoRm%3mI*cn{ih?2xQ8nq-p`o`79+}cp(>r_l&C{Hi6XeyQM?h)%}~VdZWp4C zU4RyWwdnvJE9*eIaDo#sF&qx%1ckJ8vwN2oZxX95iEuIDqJXdrThQ9o1@smr%5)^I z#aqk6eZUhH2V!x1E!hlYs78OBN}{yHPz(2F37?EWKs5`%e2ojTZ_61#!x<=k6w5^s zfRyfu)(~S|(aDXwc^3;_oaOwof*&UDo*x;~GBu&Fqk2586h_rR#0u6-e=YySz;g_gkk%IPYqrpsE$ zxVX;+iqqs>iEVH*&53^~a3J^6oRQR3ZdcTs=e5N$p(ouJmBT5O>sd(91sPDDq5`Tb z!`vvPSGf&M7P2SGK>N)lSAewzS<f0T{2XjoUfbKNHBO;o?TH4 ztNVEl!}46@dD>^ME`mOv8UR-KyhaV$RL0a5lBJ zVHs%;4wKI~G=hI*xe!DufjYhEh{z}lErqvY)}t5$_1#d(xMm~{<(N+$HHa4#Dh;1u zf8RO$0`v_j#3WFDKmv76`Uu4$40r7K-tn2oJ~^lU+3odNYhUzM7_ZIrZh0y8{7$Qj zT+qcJS>)^fVbgzY)V~Ys$=&*c{{E{1?ajUac!8PK?7FbZFj@-X{gN1b@t8dG>Cx4tIa{k|7#Lm)!!dgz|Dd%bfTv zg${@q<_kB&EG4)ctl;=}Ltffvj4XhSm*ZkuSxP}w4T&87QF&jc*zVEAan}g{slG9< z)OmThrQS`A%I=k$#FN1)&bM@j*k|-?#p4UvKxhK#s`KVeY{yDi$smR0WW2wkF1X~c z&dDWN$>o2B<;^Z+2X6a1Xlb+uU)hR>=&o<#2Gw*4%lj)EybwO$>kpz z>uFdemN)BkCgo@-vL}Y`WGzNuCTVWX#E?aw2c1x9R(Cb*3)Q4nNUGUE8EeP~ib0Dn z!**P&1^Yoa?)woM7b69=k4OmRSrv(btg4D9NkxBoXM);}D8yhB<5O6U^chC#zrVP9%U2k?4OqNadsnbIvT(q! zzQ7}!f*bETyK|G&YOoFW;zi^ZPzkMOqtSmJyrX9TNIo47oBF(s!+VAeot^1NKQL5v zBZom{Hon?Y&52=#cy{NivuycU9cXFguYD_z&6(_pEd!!7D111)#lW6~R2f`YbgbUA zK}In};dda7ZS^{k?(GH;q7fDO6CHJiOdUymruM$K4CanKnqh4d8@6nujCA_#7qx zL-^X=zztQ3Co+JwJ?FZRkR8s?SNV`H#DQcNUfAK2Qb<@?GFsrnOW_2%_7NZ@PeVY~ z40X$uc}udT#=uBHAcC2_6+VXzhP!`TlFrt!Q5eSG2!;JM3IBuhaP@96EL2>HwlL?$ zL!b@yv-~~=12Q)_wh?E`R@Am_d)6HCMKWf;|VK z1#;MCX>_9jw{P((^seUSfYB1fy&;gNvZN^rA;-`rMUu*$J9Oj23vI)kP)(|pirZkB zbHxC>skTU(w(hNT)RpjGDP>da!-GP3(c6@n~@ZgW#!c+ zMgz0c7yk7H9n1;sE!7)nA)-x-kT2D{iE4W!&?Dkb9WP)NTd%NP^QS7R!iYzrx*i6* z9WZCjj%nhiijNrs9Aktd>5ltcIcRjI@YbCu?|pm&l5MF}>H=Q^Gh2=Ur8sDAjt_^i zC4JXKs+k430jqyP^(KHe>fo*l#L~jQI8)G?z+Y0YQ^T?VAsh}O@uoBn$3?AjhQ6%p z-td10@#XaZzO07VW>|<}+NXKb&-ub1SmBA7G@hz$PENQ50D# zakW*a7D<71vlL*{Ms+1{XDA>(3+KzWBbcUC)POn3Uy8!ZY~>_hQu53#dxsK7m{=U& zn)qH_sc?T%^$iNBjFkKF%lQmv8HLDY=5<)jyt0rh_S?#$9fl2#q|7%f$_{{|4fZE8 zObe0P3@Ivd%!lPYu?c%3v8?*rGD!ush4xtsOJ%hV7el=849Hlg6|opiu7=^-FZU1x zO78l34clVnff=Vb%=BwJv9j>U8MMveS$VBUPRxHy?4n;xVpSkCI@I?{5rgru>8MAA zgbv>SA(ko75g5%$&4|ZPJ*3#fgqo#CYg^FzGb@d>*tR0ClxGGpHE_8|nRE4p9-#aU z257@5VsTC;&+QN7@v;2o(1gO~&{0VwXQuCi)yb}WinnL9w@7Jy8SKqy4pVuzFAZw~ zKgfS}3<*&atr~;IP8v%%xG{12P33}`lIB-cEy*mmA(_Z^&7!cs-4G&0S&~)tNit$^ zCOj#x&4wM(ZbF~qaOQUk9my~LxM6+?(*}{%^HGfK37EF=bwDriN*bF0orKo9np*2^ zR9bH#hPKo71rIw43Y*me;xMe%Ot4x5qZFI{vEaz9Y-N^>7{F}?Xy}_Yw)%WpM-K*}V zFSH|Ybo(8xh&c!r;;>mv7unS!_~IfE%G>P+FJFSYFEJRhvyXho55Jc6b`wAPp)7y6 zD(?>_O883GDP$xEZ53Bp`pp|v{&4W^SL{$cy?Nu+a==lcH^qbvk9O>wv@*P+lf1j? z7ww^Cu7G0Gyu0r6m1xrvspd>q+>gUWG>h}rie2SsbR7LC6J}Jbur(xBJu}dCuoqE` zee^75>#{6cMr606GOt*E+|HFaJYatuXJ`1^&HG}|8!lhKY0WoU`g*x;Z;`$> z-L1Ti&_cgD1&WxpjQiuNSdBJuFs~fJ-eaDSRJy4F+{VivwYzTBfX%N5iiwL4O+~SJ ztL*)B>3}UTuJH(e25^l>)e3Ax7G1HN(YzkT?}v01zrQ`Ls8BILyN(v&&7FV#)=+&T zW_!g^F5ezPlfsk#<^pCv*yFF%22%==hkQWAw4jR=s%?U{Oc#6bmK=@B-xSE%_S~g- zcSKtT1f&QshDO+qd;?(LIy=K(f=W^38YnX7GFj2(8uq<4(&bL&z;Yy~7gSlvg$D;3 zc5`k`kN|MSc4YwDrWv6`(FT8ZAH*e{Dg^GxLZV({BaKAqgt6`l4E3d%-N?meq4T*| z%7s&4x3jeZ`(uC0_Sky|Kcaa! z>{s*=&Brp#j5^KE@#~^5;ha#%7y1dNQ0*moJkY7=b#!8@5!B#FF>M_Vx%C#*AyX7p zVU;XKY59+h;(4|_8pNxLLA{NX(Rpy{=o8OB%z4H!Q#$5!c+G$NRXFSK7orvi)Cp$>h;GTb4>(2Y~+9U1?qELcH z9p2$UF90JMd3Zrb4Q3(0r)2kA%N6GHG4Uc`mT>So<-@_3*bbR zy(@=ohKE#5IT4oZa-VA{DTUrtK{oV0ZfeZ~)ttBDy*%{M<&$Lam- z?53N5X0DIJciCo*!PDPo*_=0#Vk2=Wm@3T$+DlIE@W%Of@DHO*`yLJ3SMYf?e{!qY zfQ^O>DOE+T9<(4V0x-o0R2JGsf1t6#4BQo*$!~S=xKe-kGCrZxwQjK!BkGhFVB0O` zbQtD)?;b@^8CRGQb(+Sc)@XvUW-v~)(98~w{j9a$YG8|{2y7WkI)vLi?kB0k&B@5W z6S@@(Q#_?%2-wVM8-%EPhNA9Cch=`q_%X}w|EYV@?zV9x|4Pj5c1Q_2)1IE8%xHZ{ zwi6#6r?-E*pRDYYMe3HN=&%k;|9z_pCrQzErguN=%Zo(-8SabS09~vVum_0E4mRD{zR`5QDJO>>=yX!lV|8P>`Y? z?DW)-~p*?T!HUubk+$wf_JXL)b2Pj1kgn>zBl2QgIAk;#n5n1w5Vfi_6CbmqM;;x5H1wkP5|M1rTy#QeEy(r(!c%|X z3=^SKB4!?s7}|*tlA5wHfFe04_UpJ@=869A)Spf=@v8ofYKAIl^vL5v+RojVg>_5dl&yVOSIV$U zw6^h&HeBea#XmsNF5N^IP=5-gF6&DA?#ljo_4)kk*IUck?ufy-tK@V!92Ea%vFwLz zKDj6Y&1PevA!|EZePy8a&`JS$FqVJvP220BYP}<*St$uY+E$1%(5u_XMQQkB1>VyG zPz!@!DMfJnWHAh8osnOb57Do~)w8b_>jIqCQI05rcVL@#SWxP`I4!w8Kxh_vzd$0! z)Yw_F!QCd1(1?{lEdm)*Kwgcb7yt_rM$9r7)VAkiYmHnGbbtsNH;^OXl1!4ERsCh0ckmYKz3kwJ$vnfV0xhkguU zdE6ozI0Oeu{^&$BMu~v;@X~y#urqd!Q2+&s^ORl5c~vJ>NuQZ_+flfT0<rifI@!;DYl)-R0KNo7H(iXexaJ-ihkb(X;-{Tu8R7O2pvW} ze`96M>hjuFGG38m3^#xFVr9eCZSU;YP<>OCNN4olT;m;GtSX&~a&7fWwZj$fz1q(^ z`ugz)YW_lh@96W^u6|TTA5f{V(Z{)2cC@1@1U&6N#)}#SpLP(%nks*~qFf4)L`U># zv@C}G&O7BZR}deM7Iu*p^2h`1(opHr4b8 z*UbX7+hm4Ct1BvN@-A8-oahk_c6QDL&WG=lnO(@p!5HnzaU%a@IW;On<(99FMuVFI zRYg%ZTNftAM`^Ubr*?l8h<#$0T+lf83fW)tg@b>}XgR|77P&{S#<*cubKa#x28@a& zpXg@c!g;>%E>rpJ2Oi#C>0*Dvn6rS7Q@hChqOSYPMEGw)$1s#ggy^?Of-$TL6hP zPW?3EKjK>>_dEQbPnx8u9*Gxz%jS{U$Y1QC?4RBjOFExMCH&f zCc^g%c$@qRhx|hpzgHC^9DV z0lKcFups!zEbbLELoO8QOQ7;`Z!zVbALz(OSipZL-KB_=nemmoLMR*dUx*~7|7#?v zViNM?1-Zf$8GrB>S%M$GBX#-1$*Ku z_=}J+>Wa-V*!fm?2UcGQ_V;t&+RFR2nM0wJMNE72U`_V+>JD-mf(4o)FvXKF(9vV- z2%~=hue=3bhUqKJwNsjVh6z89Z_MLklYeSrr?uIv#b*y-AnHQV_g1>U7yO9Ft zBLOpPg2PM3k?&hh+47-z-ACeK2EA2U?n)I^!+?s4mMTZOy3Q+SyY?Dbb&UD#b*I;j zYkTgLSMFT0;%Lk8{%Glq?Ij!ABYWX6fslWgu8}PqN8NplZB(S$CQ|lxUVzN(D|XE% z?u~birn* zMjibfpogAJx?a8)etYh-_vEJsy~C>vr|ekl69M1fPtyz%r>PCYzmRcE8TPavEdF#b z?f%}zAKOaL)0Rka0C24V|9TPdf&)%Qc$2pS5;8529WC){K09TN=Ch!OVcA~CVwODP zB~{FfA1i&%OAl$S+)*^C?r(Y4R4RW&#Y&&2t&NpFqrac&?*;umroU?}&rSqvC2fg% z!;^!|TX@ztsv0Jrq^&Yh_{qXJq`~6dm!J)MI8M%``Cd^oQq4Cp!LGa`X#&EP?yg~n zyx!m6JLL=KwWFoItL?Q?IWT-*eUVc&M3Bce{^G=36Wpo$kvsgjV(st4FWG-?!*+b@ z-C)S#-@F@PY*cj6jMoU_sv;ua3g?iD>6VKV>^CPA$e4zt<<4R`G|FJHjA!7yu-wa? z8Gl*sQ!IlI9Lv4(eiP=DTh-rJk^A|n&>7ad7(N(;o$3aK9bb8(Lj;d1wxo0nulQ4}|Q_TFOyqw_4;L!7CArEA zRj{_GM?X6wfkg~0LK?pA3@K?MD>{eW{)FNvWE=F=>Ov^PpbmO@ZU*yoT={`zPk9a5 zYW}ViZ|UO{H?COWAmY(4P?(|K&V8Ft2KTo3vbS*5fD<$MfGw2CDUZ*QZKE6vlGbU^ zn%0(e3{i)JQ{e>(qbh$u$R~*Wz8ovbW(&ID>Y~m^a{j`1?dJR^t$xc zWelesj9>AI4kXj1;U_V7pF$hjyLzg8pSsU+4~3;Qzz8+Z+PCL=>i$^)ZF6nRU(;@* zMSRtpM`|9I*71Mkp~9Qy9uTVi%l0C=`*-?sIX17sW!1Ws{}JA$90TpmCMIZ9fQ zV6{(`;D3&9(DPcQj%Fhj(u$Y8bppM0=AFylIypQmoygug_Rec3bpxAA*f2B*3cpqO zDb!1dv361Ss_2a;zV43Xx_bm8TArYGtiM8K4TQ&NP8WZJ1~14ONK|@7PDoH&7mv47 zIZ^GW{e450K!GP~rJsaR)yi=|L|I2b{sTm(5I`u`N+0P=`j)J>%VoF{wN)L12ruhi zC=C+yio1{}n!Eq1o(dJ1nBKz7%YCyk8pWpBoiqo*W;`0K+M`GM#ZUp8U@+*8r@>}| z#$%MyMQ49J8}c~%Q%>yfZx{K6DMX~}q!^nfNs*rgel+DL%Mf7}ApEVQdw}KszKv7Q zP}HLpbj7=SX&$ysDzUxeTK9sGuhr5IGWWv1W@K3i!v=~yZa@;4qB$XVfwe~t{Qzz$_ptCy zh<6#8aU$FmOuN%q9=}3zU>S<$@USN|g~`PA6aP75CnRVB!&k7D^L6eCj|XS`zT*P+ ziWPsZY=u1Rg=Sijr>)Jj4?OLYnf42%ZP(su*$@#=9d`|IM`qfQL+q`dp>_B^m6=|2b^o%@1&~REkJ<~Nsa*ZXv`dA-@u^# z3@p4tSDoMOE61>m?0e6h##H<6oT0tb+!lW(W(+DA$=kB2nKnmLHPb4&31ClLK+*mr z?jLbwr@ccQCii$wFRh+n?(!Q>H0m1h;JiwV#g=zM8ZCh7 znJW{y79h5mRvmKZTk_&&=yxooP=K5Ebd1WCe_nm2LB5Ep#-h(4p9<_aeDg3D2!Mcr?~J1XiywjIW3xS!ZNy*c^%*X^0y*6sV6c)YJWsq)8M zmwX^^ceX%H)A+Vw$AC3M*0{{}NgjsI70hruhX0f-cb@`~)@*bmTyZnOEO&(pUxZ~F zb|La44+&3-#WM=-L*+_y*t$bvkUoE_3TYKx|J6-5eG6x+b)jWV=c*<%)7uCR@C6^a z#))@ssCWUFaGG%^>*je#Z*U5PUt560@WlHTo$*O;0ocGuBGBeqs7ng&sXlM*9%8be z-Zre}kzqAg!|LA|NxKHiJbAFJ&|+~xKW1kSZDkN@S+C00xH8}o4Ecb4k3D~7Z8m$9 zh_Z|kENq_kYSw>>oBn3-?m2w#@4mAb71Ou>%qqRZZy1xN`wruaz84UPm|5=~$lF?V z5uCu1@ptDy<`6f+j}}XcfBK$ThkLb?)1$9PHH*!eRj&iIB_nInBS&GNS2FI{?y%>` zR{%F)q5Z&ZvmKY+ZkMN$S=@hACr@!fKe@Z3{l)bejsxH$4#VHSe0G~=f^bCg$hZzQ zrc#eJgXvXc(w~pr;g+oCl0!+AMWXwHWnI(mNT)KLw-y$e zWsJtQ_8HOA#xgB+We|A%T5HD<#PgP)fL*N-rNS+E>z<0_uD5?RY)yi^ghtU^Bj zv&B~N{1xTrw}#U;?L~w}h3}yQky6Wx7Ugy}c;GNUqqUrzo%>lvMQAx?Ang{MQh@#| z(SOxu6Gdc>n{9)Pgw!o~c;pC9+Czpt)Q16r-O-2Pfo+HPBDQ}K-iu5R0~Z5xFlZm& z5j1<+(CO&@48~nR+QAj@w8C5EeoNQuxB>@x6jO>~DoWAsK6U-zHF`NoFNgGa znM7(iMJ*Sl7JT19Nzm|+F~S;cg)hj?!7dhv0*40tp#z<-qB zFA(@>68I=v5KP9pNWc>2jtv`MhCe%syO_G-sVjdc#k-z=)Iu>@V{L^T=PolXm=(S! z##l=aajhaAq=K~12T%7gnfu(mc2_o#LHisQPFyi;Cn9PrUqjSb?m#3H6(Z%SFm6~T zItxSf@-lR1^ygo%ubKdceMXD-jxlR23dlErUo=d%NwGjwza=`iBuWRmG;pjG5OH|& zxKn?}f9D`0VsAcp4ZV#uBHP$Q_5yvAOam(7JU@hYGc)tWP0ctm`ES|C$it%jGKifFp9(RFYP#b4d5M1k-%z}6q+B{glLt!@&(T~ z_}_H?-C`(BbL(L^C)pq(X9hS|?GDVb0gQj#45aZVOyjw5zO!L6W;zi_n3Iqef^2(6 zd08f7(2-?G4Bf*EeLm;Axi(5_xi)6x54~W2KREOX`}^?h@9+DEXt%%vfi!K)Y%zr) zH+z))k#YeCE0zv)O&E~o@4Oa{xE582uSf5~xb;m_*YomZc$haTaspJEU7y6q2&#YE z#-uSA1aw;^CjRhcZr$<^O`f^V$^&C^4PhD&OfQK1)Rr%G4qM#mBfl6JpxZ|{{nqSG zy5RiWsspc@@zFvw(FKMwZRW$$Zi_yq>mAkMdSVUbTnIDg4NVu#jKCijzD++vS7#}o2f zY>4^Yr2HYQDUjbu${)b73i3yZOe~GUo!yt69nI(^WptA=Iw}L*4#xR5dYON3qyO7& zk8YA;`yHk3*yyq^>~wo-Ka$~Z>{^~{ph|yMJZju*vJxM{h>X|->6vyvdNQ}YXo=AF z#Fy@7c1k2sGC2=$Xwvr}@+5EOeQBc;beus!thRWj#JgAinj|y*H%CTtP!v-3fPnFQ z6v2R`iOZ0F6fG6Q%bGy_th9e$%hyRX^J@k9P^^>lC62K1Ll_$`prnTn3ODp!6m=(# znlFeQx_vdGl9pPyN6Qc81*dFVc`My=+*V0AE1(-%vqa!2H{`lR;JDlO?D33mE?M z>#<554;sz>ADwRGq{erHShaxpZCRVPs!e-mZ33^2AMt(9-)suSUvc1wa7ZoZP(1mL zQ_j1^gM(OwTMYjN(F%W~1;e1R`lCDR==yTERC^R&Sh@6SI_OE8?*)Bsq~T+Lm!4`B zG1x{~5?aCHQ-Feqn2a{!*_2v`A9!>Vp9_OL-s1??Y?}gHr0hbb?Kp5I#g{fpfHY2e zuZ)weS{x_Am+EoD%YDPyUB0*Nd;ht>K5YM|xi|4^<4O|8{}q#1ML2&BR2UQNeX#hO z1MkWt6}%S}fTH8yQEkX{0GI&U|I2YGg9KmPf4zCozoDuB*iUrv0i)KqfNSkirkqe7 z6-Q=LPF60S0g5+SZ=@@yPbgjov^v*^qA&GGgq3obOJN-n(LaB2aqNhwUtB~@G@|e) z*N(gDr;~*X^*QtA>#2Wm-cC~kj*eqZ8nPqxbTg2eu>+&({g(hOMFBFyvC&p~j#N|s z7=5d$&>U6kchnrC4|kU1hYgIEGjfU_Sj7*#;)mh|y~0_=53S;dUhx;=YX#3{vl0PF z-R#TA{p`_aZZ~*U3qXXAG+Zl%hp7Lhq!h;)khBr{qDi`}Ankv|PS(_uU1B>Ci<`?V=J2c>3liqRc3QEr&EshEC1pL&3{$;+-IPjN7?i9 z!g>vX$Q%-N$%GKL$HghXs0B~SoKWqiRk+-SC@gRe`)HN>4qRtL!oy5PGHuil75V>B zAWRX8ZP*NQNk4x|AFl^~2GA&dIH^rkQ53+DPnNy@Yw5-mLqlYoLmrC;%L#v_u*?1Q z$Jt4*m*6ULYIl-ceVmhSy_nBl_2F{qe?aQsJ(;9f&xNS#HJ`n`%6`7;VGdQXR=w$N z4{wUpu|ds5PLPk$Y$$-MhCY_e2L8yJIM5qOOzQHYrCEO)D*8t&)hi^VV>F!W$z(zS zYuJ-7k>bO;x0I&QS8hhW=(eUg`bc}y<>P|1p82u~Ex9bx8yO2xCuTL?Ogu`%o2~tP zJ90yG>nNF_6<#S(ValyG;-rNU6>*G=ef$o+m9RH95mpGs!p=vg^RevQTSp*1a3^+l z!k`%716F@UD6TEb#JTN}8Jm)}<(b*qwk(rxTV`yMot;Fl+eS!eR$J%kKPd9`5hsL< z`vU1pp1m|;ND}&?J<6+qckPWiEKa|8WaP#SHzJ?!oMiL7KD2CXTwl)G5%M>mZl)7% z>xcFXR>RYG+u6yNAepmPE8L!skzAfKAhQH=eiDCKI5YFrS#Y%|;2!+LOGmHrhOfz= zK&e*)BpdovrF?#!-&%=_s9K2%ckdRGn=7y6vI265X0+AdY8A9fi_6hjBc%!&J}qqP ztW~~2p9Uaz$HRzY*Vc=`J+!g6n^T0_io7`%6chn{*6gz(07^i$zn?M|{giKUg-a>? z5LYCvx1xT3C4Oe8Lf~pA7@448MJ5tncb1k;VJQ$( zF2lLn>m^H0ZR>lk4(VpUXB=%t*edVk!mDIuwr`Y3_IAG2~O)jI<|)F z98|p)BK^6uV}iX7$#8OcMQ%1>?fjh6`8@4qYLy2`imG}kFLjPgKao7&q1aPm0l`vmg5HEb<%IA5)nGMVpyjve834&;BHW$u&`Xd=UiKE z&pv9FBPfSbDRq$dvpw9fut9T$$Q%rRa=*QQG8WlvhZ3D(fr*lv5Dp1ZGJ>3zgg5&F zI}S`oK{N1&99(?qn9)!Gx+VR7;F48P43C^DYHG|P%2`~r+G1*imIf1r>J5%fjLevc zv!q}r?HkM(*E{`TGW)5$7%6z>GSF*lOuvD)9-}eZgu^>{G&-@;EiUjV0D2y_eI6u# zmZvCi1~{C|JM9TcWc|)<9z)Num`%VY5eqXzR8&xG89C#Tr?h~JmG-j*uutC*sHxM02diQl z>H03O@0XM`XzpD5>*NRnXpwaLMtGrrSToBqZqo7#h5z$E;X$L(*dHneUn1859N{LP zd>_YhDu!(GG1s;eTQ;}W|JKs5g{ip}KOv-Dv5S6uvo#y|L6r;{Qw)nyf;7??DypLx ztvsI-|^6^`V+n0T=+E_xQ4T z^wK;{hTkT=zAP3G>m&2k;(Tt2^%92lj`?air8!E4Qy^B7W%^$fK(2KAAg5!Wn^CT_ zk<-~|TgzxhvUPF2d5@eqd#m70BDV^UOrzsW!LQrvqd9LSm$6}P{AoE2+(; z6kJ=+NzEb>ds9Z=($Vt>>7sHNEvA(#swDT@2v2 zYC5R^{ez;aI5?;`f(kwY_S)zc6+K!8mE)JYVprQeSF)R7<)@#2Uw!}GX(g!b@BjMz zbbtT#$JZ6;p>o)095nvkc(K3#=3P*MYQbo+xN7e2-`?KVZ=VC=8Sa04zmLWC-@iGn zL7kee1C8uM;|Gm;Z_#6;VC*XpyD-LC78kU2h-4@fqQ0n9b2Uk3mqld{{{HvB?^7<7 zw&r|534B)vyEgxSu}eAf;#OHwqP?p+ZDz1ZuvS-a31HkK9(u2zbzh#6V7OPg1=6VU zmSw!-45lRIy>bw2-wfq-Mwu~js4$z9SfE3(ZBR+dFS|!X$yHWy0NcB!f6FIaI$Jfr zlk5t*evdv&vD7w>@0eYpHUnU;k%+}+XbYO7v_H^&6dV(OEXglD%Bya(xUf7SQ2yo7 zKF#yxuCZpuNO6~OZqb0U)K<>pqhV`|szP$LF3-oL@Ak_#u(%tUh_>iA!@5vR1hR?}Sz|e@I)0kQ4&{NJ&ULnBxi)ec&hFXKk5R%6-1*l0p$ z$Q;SF&dCZM9-w5V_|qO1O=e|<(WvxN`Kk0*VeGGef+c7jJFgT4%lvkp;#xS0dzR44 zIX|O#rkCW>S(2IY5~$Z^8jq?6O0~~B4z20YxK*uAX~iy!S8Rr1FCQK*pSVg>UZts7 zr5PHJ&+OH>%!4!>WZ+>+Nk4o3C|VaBS8kP*pM1MY&i^#MKn$zsr%X3=Y=4ANvtb>x z2AivY8`|I6DB%cKeN?AyBiQHH5Tl=7azxgV7^6Y>(1Q-L&AXas{bF%VSn}}LDUdRV zU^-uB{T_zjR${W*518~ClA_j@I*1{?IzK=X)^URNi2!aU@^-GuzNc^hS&mE5tpO;- zw&P0Fp-=c8e0WG?z)<3AEJ1|ga~R%{w&ZJnbhJ0zkdvfs`cGPoI?e%1@RuW{_|Hmf zp|lFL;h`Et&B}d6k=_+q!~rwj>S|EgybMZoxWxUNAAb6H_KEnD-FqqV&4Om-{6bVL z1rbOIZc+I-*z6W-NKdp~QSOD9?pR2q^+pzhSZ1X~pcDhph5xYLgKRN{ADoGducSMF zuEj{q#f)Co=73x0N7L3EZ);4LLBi}PZOt&@Iu7T1FQUD)8qVNvYZQl9=hqii_@{cn ze-1CA{pT%A1$@Qn^2Z@QRBbNd*09DqWMQDlIMRETd&@{ZM~CH!S|g8Yg(U2yDtUN# zmRO7KK6kRvFUf66ODfISWu-&rk#xv^Y;Rf6R42$%LeaVIz}cCymR90>d8Rk zO?ymFIZ6n=@nePfV0^Lv9jWPCsvUamYle`;Q9t!GKij>YR{I=o(+Qo%_lvX{%=$Hj z(mL>&S)UX5yw#rz_?($fU`7J#YXO<&3mP)*Ogqqy`r3F}uI!v_n#{zgD80RZ60=yF zUyCGGA&JDCf5JA;4&h*{FiK(&D?4j3iIt_aXrpF-%RzevF=iqKFnxFk(_&p#%(qg% zGxv}QvAR{eRT)oRVnEDG%h+ivNO?`0TKHsgDUEFIty@v5oNAKV{j{}U4;l?op??m) z`btz9_2*GwN?P(dS)NLnf4uU4XnV){GzVgk_WQ5X_N}(wA|ofGa%<(=)kgR*a=J`2 ztihKt{_Cd5)2kBYXCTORJI+vMpu4qf)K1bsbk$1?sW~+zmaOUIK=@mlfA8)tQ}kG> zV^VOK(Sk=BJHwjiZ$Bv`?R?&upNFIQRq4dI>RpWRe>T*MqxkjahMZAe$X`|KWzn;C}b7FzMiofb4x-s#5OiJz~^_TlF%+=byE--UuE%66fw zx6fXX&)J2}pR)@E%{+O37ckA)2Smmcy<19ocXs>~lvBsxr9bqHae6Co3#%Y~pWi5(j@d0$tx&}QHlxRB{hs1AWo)fQxu(N{LKkT6)F|=sQ=OU_ zO1;sKvOI~nN<=h&gz{zGA~2-Xru2%>X$G3s@Ew}2+wev#^L+)(BEMB^^^Q;sBdFRAAmukZSbD~f9xARnH!Wb0E)4qa#`p&t$EtooE7ns=Xla8ik zj&~Ew#%8^bv~(O0Nr9PUu`sa&_QcYFb2dWDx>FQe86BNlt-s|0(tUr`T-8^izlJ|+ zfe+see&=q;d&1H4KpEugB)cN>P}{+RIn+0#M5lCF5wFBIe4Kb{{O%v#DwIlBjT&8n z;TfJf4Z6#Jt5a_sDa>Ar(bH|6wNRDd z3JR><0_Z#y^4B(6{78;|)#g3hc1bSdJO#kU0IjkUN_gkS2>lnu_v3=};PpDI+i`&! zmwr;+wP>+2G!Q8l{F`OHOK3UHUmCUsdI9>TBZJTkz#tn%8*jd?Nh{}4W5Pr828tB-PMqKdwTc&9(j4ZVCuOEmOi62kh(1=)(PTg}ecH9c7iG&+ zmWq=iU3uox@d{Q4YwIAjAf{{*+_-L)MU~sD0MYYamY04^NDbSB+Xe zzaHHQjz;(Y&d5J+;J=lPTm-A&|M}6Mm5+XZ{eL!kuA*ZbZU=^`q=G+hJRX^BBy&$2 zurkJ1?!LI!&R3l~89{C|frIx%{9coJD=$3Sv_ zLLiCUfSZ;m`^LFdbL46Y<6Mbb_?Kt3h{Gj{FH{@{q7?#U8?;42rUPN6HHuL;ShQ~O z7hL>uWcRCPD%P+SXpvYz1zQnocz9XvR$t)QirG8qEcRLU@DOG@JIHXP_V6GHhMwWA zZf>TCjU)4Ps~0JUM-%kYHXMso+`wIbx}^ESXbQGz>2FgOLrGY;DMo7MUnxdgmguf2 za~C?dqjS%Krp!!(V;z7rEV!qRRS;5Ds*JzZ=UOo8YG#55(p<1Q_iy}troPVv&*Zn} z4HAB|yE5qvl7Q61Z5F_++%U5OX;K}R%aX<}m067Xi#Gnozk*{eEu?#Q)%&J@3}K+2 zFiK(K`@+T%uzUu=+eie_xSUDI0UT5!ZFnLZfMr4M6%IitkAR7owXsAwMWTn4`nDjF zPOp4!L%vPgvMi)D!l5RqfjUa^NYm;-u`{;fl-eCxiZRfCrnrkw;7@CfDmki!@1fdCR=<;VH>dHb)}cj&dy2R250wV| z?|b?;aD;+O8>i83oU)L6GGY1eQf_g{;ZWI6IuL-&k>FU`<|?<nAk$*a$ax z+uOn>d*>h9_Zw&5Ne-&`R2;&4sYT+Ug1NoJH?(8+=H9R=89>oIymLyWUXhmWjo}=r z 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 E0C{w#ivR!s delta 39429 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≠+Q#+J#4Vpl#igms+t({Dfi@V&W^nSqyCBw94QhPK*aZey5;;CDEY8$_;a z)b5gN6z5m0rOHhD3pmCfP@8!+i~|nY9w<$|Vcvq1Xsm(bMo3GnSUNU*f6O0`B4D>0 zY7U~!;E9Hs{jG+YxK@VW7Fzo1lF3_m{zoJQpUb!Zn?wk1)PjGzbfCl?LQ={LE58m} zcy+uLAvPr%wd4ggX%Av0?SB>JF)7^1ez2y&*1l^8O)r#FEleDaL8H`KA=@Y{_8t}m z&*{mm_i6~F@lYg@@^T@we|aY}io)C)ppPeSR>x19XtVKU5fettkqzIIg9;rmI5@&& zj9lPB`7sGJYXka-e-CzpoJ2F&{T;Av6PpR01v}oQy6D_3wk4s2iO}_{UkBk+RdVc; zb#75LKB=xI!i7_`pPs`=n)M&wRc^W7+uzsVIzY zErq(Ol8JA9#qq7N+=OUjD{k*l`&q>py(rBIlt;MG?^E6&RtnN$#|4QbX>K-Ja~6T@ z9xXChu*wQIr5%RTf9gQG;c|Jm^UDkLzYWXIPO2NeWIZ~D?OX3Q;oshR7j}mm^sq<> zY{?{Y>G87e4lbf*II41Y$EAhfP)7s~2t7s!0>q_d@Z&5$dY|P-Y;>b6x{izbe%5VY z^?#dAXw?~haD~uUGC+Vd(XCdEWyxFvl15{;6G073LjorJe`kVf%mhzr6_lp6;#^}%LF?=EZF%eFJJN29tUf{R6PtiU$(2`+^)jjjrRsm+!>1E^hY*BpG)uB zEj*t1s*=o>ed7u{MMpHj_A&bGuh>np>;5hrWJY4xzk_EIs@#4K>X)+fz4#tbi zO1ldx{PJiYe`oe`S6PkUYXsRG3hPd5UMgP0nRxDXYZwp6SwXkX-scAqpmnBUVWo$J z(8`;MS>2k$!9X>Fo*V4|RZV}r-P%n1jvCL;3-Ilb|V z@S{Ds(gx%%49_$`|E-dcH!>x(61IC9i2({#ZNIF8i2&Ie*X2w;wF|ok?&vu;1WaVLiA_d zc@HqHKvobjoTPhjEbt#2&SJ?(bSJ0^7vqq$f0_=agmWqg%P8pAXr3)*?P)&}vZI)5 z)>Xg3H*Y=$Toxe+%Zhuf)pY73XmG`LulIeDE&4NLRQnh{I54i(;F~rJ{?_5Y*&G1) zDxG&x{rAo3kMG{SfAjX|4{u&;Tkgqx7zTDuvjP{wtgjYl0QXw2vY1zbs_Y*}RD~N* ze|_Uzm9GxdCJtZ#Gg+8~4} zE<(;EWU9&D=xpo(`m`Fy7`eQ=A-2qhhgNA+|FepBN6Q(DeNC5(_F|cx&U^hhK5R6i zdu*o~Q%RUB{Lj{VMEh~+nN78cux3Eae}=%Ilg!%b+UlRi$h`5Ct?AiBJ!-+X?@o&Lq`Z9{4>6V@~q>`gOy<6=bP-|~}6MJ`%@P(}y1oz*+&+r8Z-)<~P(s6z7KRAs8 zzqOpn<))P%g4CjKe=dYJ zwA@ajRR>m=lSL-xtjc0Rm!D(JLis!S&`p!8#ghOdw|4!T_Jn`xt=-wto!h;Y`<39! z(dx1gaAmPNIUv)nrvQo=JAOAU@bZA!EzEM9-El*9hH|&3a`XhSh&>63WC@GEou}{c z^y$IaKJTP4A&d9vrJ88j&Ge-fMw{|u$ek*^yKp*)AcZyY8!&tg!tO4cb%y_)9a z6M)W_B&$_G>cN;{t3h-A!$W~pH8FTYnw+VmFd", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "repository": "git://github.com/kangax/fabric.js", diff --git a/src/parser.js b/src/parser.js index 4f658be6..8af78f54 100644 --- a/src/parser.js +++ b/src/parser.js @@ -13,15 +13,20 @@ clone = fabric.util.object.clone; var attributesMap = { - 'cx': 'left', - 'x': 'left', - 'cy': 'top', - 'y': 'top', - 'r': 'radius', - 'fill-opacity': 'opacity', - 'fill-rule': 'fillRule', - 'stroke-width': 'strokeWidth', - 'transform': 'transformMatrix' + 'cx': 'left', + 'x': 'left', + 'cy': 'top', + 'y': 'top', + 'r': 'radius', + 'fill-opacity': 'opacity', + 'fill-rule': 'fillRule', + 'stroke-width': 'strokeWidth', + 'transform': 'transformMatrix', + 'text-decoration': 'textDecoration', + 'font-size': 'fontSize', + 'font-weight': 'fontWeight', + 'font-style': 'fontStyle', + 'font-family': 'fontFamily' }; function normalizeAttr(attr) { @@ -436,7 +441,7 @@ */ fabric.parseSVGDocument = (function() { - var reAllowedSVGTagNames = /^(path|circle|polygon|polyline|ellipse|rect|line|image)$/; + var reAllowedSVGTagNames = /^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/; // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute // \d doesn't quite cut it (as we need to match an actual float number) diff --git a/src/text.class.js b/src/text.class.js index 3f97e740..bf45d7b7 100644 --- a/src/text.class.js +++ b/src/text.class.js @@ -119,7 +119,7 @@ initialize: function(text, options) { this._initStateProperties(); this.text = text; - this.setOptions(options); + this.setOptions(options || { }); this.theta = this.angle * Math.PI / 180; this._initDimensions(); this.setCoords(); @@ -748,6 +748,14 @@ } }); + /** + * List of attribute names to account for when parsing SVG element (used by `fabric.Text.fromElement`) + * @static + */ + fabric.Text.ATTRIBUTE_NAMES = + ('x y fill fill-opacity opacity stroke stroke-width transform ' + + 'font-family font-style font-weight font-size text-decoration').split(' '); + /** * Returns fabric.Text instance from an object representation * @static @@ -763,10 +771,20 @@ * Returns fabric.Text instance from an SVG element (not yet implemented) * @static * @method fabric.Text.fromElement + * @param element + * @param options * @return {fabric.Text} an instance */ - fabric.Text.fromElement = function(element) { - // TODO (kangax): implement this + fabric.Text.fromElement = function(element, options) { + if (!element) { + return null; + } + + var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES); + var options = fabric.util.object.extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes); + var text = new fabric.Text(element.textContent, options); + + return text; }; })(typeof exports != 'undefined' ? exports : this); \ No newline at end of file diff --git a/test/unit/rect.js b/test/unit/rect.js index 4fc8fd2c..050eaa96 100644 --- a/test/unit/rect.js +++ b/test/unit/rect.js @@ -68,8 +68,11 @@ ok(rect instanceof fabric.Rect); deepEqual(rect.toObject(), REFERENCE_RECT); + }); + test('fabric.Rect.fromElement with custom attributes', function() { var elRectWithAttrs = fabric.document.createElement('rect'); + elRectWithAttrs.setAttribute('x', 10); elRectWithAttrs.setAttribute('y', 20); elRectWithAttrs.setAttribute('width', 222); @@ -98,7 +101,9 @@ ry: 12 }); deepEqual(rectWithAttrs.toObject(), expectedObject); + }); + test('empty fromElement', function() { ok(fabric.Rect.fromElement() === null); }); diff --git a/test/unit/text.js b/test/unit/text.js index b96aaa72..47ad6090 100644 --- a/test/unit/text.js +++ b/test/unit/text.js @@ -1,21 +1,22 @@ (function() { + QUnit.module('fabric.Text'); + function createTextObject() { - return new fabric.Text('foo', { - fontFamily: 'Modernist_One_400' - }); + return new fabric.Text('foo'); } var REFERENCE_TEXT_OBJECT = { 'type': 'text', 'left': 0, 'top': 0, - 'width': 0, - 'height': 0, + 'width': 50, + 'height': 52, 'fill': 'rgb(0,0,0)', 'overlayFill': null, 'stroke': null, 'strokeWidth': 1, + 'strokeDashArray': null, 'scaleX': 1, 'scaleY': 1, 'angle': 0, @@ -23,22 +24,23 @@ 'flipY': false, 'opacity': 1, 'selectable': true, + 'hasControls': true, + 'hasBorders': true, + 'hasRotatingPoint': false, 'text': 'foo', 'fontSize': 40, 'fontWeight': 100, - 'fontFamily': 'Modernist_One_400', - 'lineHeight': 1.6, - 'textDecoration': '', - 'textShadow': null, - 'textAlign': 'left', - 'strokeStyle': '', + 'fontFamily': 'Times New Roman', 'fontStyle': '', - 'path': null, + 'lineHeight': 1.3, + 'textDecoration': '', + 'textShadow': '', + 'textAlign': 'left', + 'path': null, + 'strokeStyle': '', 'backgroundColor': '' }; - QUnit.module('fabric.Text'); - test('constructor', function() { ok(fabric.Text); var text = createTextObject(); @@ -54,7 +56,7 @@ test('toString', function() { var text = createTextObject(); ok(typeof text.toString == 'function'); - equal(text.toString(), '#'); + equal(text.toString(), '#'); }); test('toObject', function() { @@ -118,4 +120,65 @@ deepEqual(text.toObject(), REFERENCE_TEXT_OBJECT); }); -}); \ No newline at end of file + test('fabric.Text.fromElement', function() { + ok(typeof fabric.Text.fromElement == 'function'); + + var elText = fabric.document.createElement('text'); + elText.textContent = 'foo'; + + var text = fabric.Text.fromElement(elText); + + ok(text instanceof fabric.Text); + + // temp workaround for text objects not obtaining width under node + text.width = 50; + + deepEqual(text.toObject(), REFERENCE_TEXT_OBJECT); + }); + + test('fabric.Text.fromElement with custom attributes', function() { + + var elTextWithAttrs = fabric.document.createElement('text'); + elTextWithAttrs.textContent = 'foo'; + + elTextWithAttrs.setAttribute('x', 10); + elTextWithAttrs.setAttribute('y', 20); + elTextWithAttrs.setAttribute('fill', 'rgb(255,255,255)'); + elTextWithAttrs.setAttribute('fill-opacity', 0.45); + elTextWithAttrs.setAttribute('stroke', 'blue'); + elTextWithAttrs.setAttribute('stroke-width', 3); + elTextWithAttrs.setAttribute('font-family', 'Monaco'); + elTextWithAttrs.setAttribute('font-style', 'italic'); + elTextWithAttrs.setAttribute('font-weight', 'bold'); + elTextWithAttrs.setAttribute('font-size', '123'); + elTextWithAttrs.setAttribute('text-decoration', 'underline'); + + var textWithAttrs = fabric.Text.fromElement(elTextWithAttrs); + // temp workaround for text objects not obtaining width under node + textWithAttrs.width = 50; + + ok(textWithAttrs instanceof fabric.Text); + + var expectedObject = fabric.util.object.extend(REFERENCE_TEXT_OBJECT, { + left: 10, + top: 20, + height: 159.9, + fill: 'rgb(255,255,255)', + opacity: 0.45, + stroke: 'blue', + strokeWidth: 3, + fontFamily: 'Monaco', + fontStyle: 'italic', + fontWeight: 'bold', + fontSize: 123, + textDecoration: 'underline' + }); + + deepEqual(textWithAttrs.toObject(), expectedObject); + }); + + test('empty fromElement', function() { + ok(fabric.Text.fromElement() === null); + }); + +})(); \ No newline at end of file