From c451f32c9f0cd11df1b4b116581461473c85857b Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 4 Jan 2012 17:18:42 -0500 Subject: [PATCH] Fix text alignment in SVG export. Center- and right-aligned text now displays properly. Add more tests to SVG export test suite. --- HEADER.js | 2 +- dist/all.js | 59 ++++++++++++++++++++++++++------------------- dist/all.min.js | 4 +-- dist/all.min.js.gz | Bin 36619 -> 36735 bytes lib/cufon.js | 42 ++++++++++++++++++-------------- package.json | 2 +- src/text.class.js | 15 +++++++----- 7 files changed, 71 insertions(+), 53 deletions(-) diff --git a/HEADER.js b/HEADER.js index 91e969d2..ffdd39c7 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2011, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "0.7.5" }; +var fabric = fabric || { version: "0.7.6" }; if (typeof exports != 'undefined') { exports.fabric = fabric; diff --git a/dist/all.js b/dist/all.js index d83e26c0..f0a24049 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2011, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "0.7.5" }; +var fabric = fabric || { version: "0.7.6" }; if (typeof exports != 'undefined') { exports.fabric = fabric; @@ -1253,6 +1253,7 @@ Cufon.registerEngine('canvas', (function() { scale = roundedHeight / viewBox.height; Cufon.textOptions.fontAscent = font.ascent * scale; + Cufon.textOptions.boundaries = null; g.save(); g.scale(scale, scale); @@ -1287,15 +1288,16 @@ Cufon.registerEngine('canvas', (function() { g.fillStyle = options.backgroundColor; - var left = 0, lineNum = 0; + var left = 0, lineNum = 0, boundaries = [{ left: 0 }]; if (options.textAlign === 'right') { g.translate(lineOffsets[lineNum], 0); + boundaries[0].left = lineOffsets[lineNum] * scale; } else if (options.textAlign === 'center') { g.translate(lineOffsets[lineNum] / 2, 0); + boundaries[0].left = lineOffsets[lineNum] / 2 * scale; } - var bgBoundaries = []; for (var i = 0, l = chars.length; i < l; ++i) { if (chars[i] === '\n') { @@ -1303,25 +1305,30 @@ Cufon.registerEngine('canvas', (function() { lineNum++; var topOffset = -font.ascent - ((font.ascent / 5) * options.lineHeight); + var boundary = boundaries[boundaries.length - 1]; + var nextBoundary = { left: 0 }; + + boundary.width = left * scale; + boundary.height = (-font.ascent + font.descent) * scale; if (options.textAlign === 'right') { g.translate(-width, topOffset); g.translate(lineOffsets[lineNum], 0); + nextBoundary.left = lineOffsets[lineNum] * scale; } else if (options.textAlign === 'center') { // offset to the start of text in previous line AND half of its offset // (essentially moving caret to the left edge of bounding box) g.translate(-left - (lineOffsets[lineNum - 1] / 2), topOffset); g.translate(lineOffsets[lineNum] / 2, 0); + nextBoundary.left = lineOffsets[lineNum] / 2 * scale; } else { g.translate(-left, topOffset); } - bgBoundaries.push({ - width: left * scale, - height: (-font.ascent + font.descent) * scale - }); + /* push next boundary (for the next line) */ + boundaries.push(nextBoundary); left = 0; @@ -1332,24 +1339,25 @@ Cufon.registerEngine('canvas', (function() { var charWidth = Number(glyph.w || font.w) + letterSpacing; - g.save(); - g.translate(0, font.ascent); - g.fillRect(0, 0, charWidth + 10, -font.ascent + font.descent); - g.restore(); + // only draw background when there's some kind of value + if (options.backgroundColor) { + g.save(); + g.translate(0, font.ascent); + g.fillRect(0, 0, charWidth + 10, -font.ascent + font.descent); + g.restore(); + } g.translate(charWidth, 0); left += charWidth; if (i == l-1) { - bgBoundaries.push({ - width: left * scale, - height: (-font.ascent + font.descent) * scale - }); + boundaries[boundaries.length - 1].width = left * scale; + boundaries[boundaries.length - 1].height = (-font.ascent + font.descent) * scale; } } g.restore(); - Cufon.textOptions.bgBoundaries = bgBoundaries; + Cufon.textOptions.boundaries = boundaries; } function renderText() { @@ -1461,9 +1469,7 @@ Cufon.registerEngine('canvas', (function() { } g.save(); - if (options.backgroundColor) { - renderBackground(); - } + renderBackground(); renderText(); g.restore(); g.restore(); @@ -11569,7 +11575,7 @@ fabric.Image.filters.RemoveWhite.fromObject = function(object) { this.height = o.height; this._totalLineHeight = o.totalLineHeight; this._fontAscent = o.fontAscent; - this._bgBoundaries = o.bgBoundaries; + this._boundaries = o.boundaries; // need to set coords _after_ the width/height was retreived from Cufon this.setCoords(); @@ -11656,22 +11662,25 @@ fabric.Image.filters.RemoveWhite.fromObject = function(object) { textTopOffset = (this.height/2) - (textLines.length * this.fontSize) - this._totalLineHeight; for (var i = 0, len = textLines.length; i < len; i++) { - textSpans.push('', textLines[i], ''); + + var lineLeftOffset = (this._boundaries && this._boundaries[i]) ? this._boundaries[i].left : 0; + textSpans.push('', textLines[i], ''); + if (!this.backgroundColor) continue; textBgRects.push( ''); } - + return [ '', textBgRects.join(''), diff --git a/dist/all.min.js b/dist/all.min.js index 3f5ef003..47a1f875 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,7 +1,7 @@ /* Fabric.js Copyright 2008-2011, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ -var fabric=fabric||{version:"0.7.5"};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;if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i");fabric.window=fabric.document.createWindow()}fabric.isTouchSupported="ontouchstart" in fabric.document.documentElement;if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i=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:JU){U=P}if(O>S){S=O}if(Pw){w=h}K.push(h);h=0;continue}var A=aa.glyphs[af[Z]]||aa.missingGlyph;if(!A){continue}h+=C=Number(A.w||aa.w)+T}K.push(h);h=Math.max(w,h);var m=[];for(var Z=K.length;Z--;){m[Z]=h-K[Z]}if(C===null){return null}U+=(G.width-C);B+=G.minX;var v,p;if(n){v=I;p=I.firstChild}else{v=fabric.document.createElement("span");v.className="cufon cufon-canvas";v.alt=D;p=fabric.document.createElement("canvas");v.appendChild(p);if(z.printable){var X=fabric.document.createElement("span");X.className="cufon-alt";X.appendChild(fabric.document.createTextNode(D));v.appendChild(X)}}var ag=v.style;var N=p.style||{};var k=o.convert(G.height-H+S);var ae=Math.ceil(k);var R=ae/k;p.width=Math.ceil(o.convert(h+U-B)*R);p.height=ae;H+=G.minY;N.top=Math.round(o.convert(H-aa.ascent))+"px";N.left=Math.round(o.convert(B))+"px";var j=Math.ceil(o.convert(h*R));var t=j+"px";var s=o.convert(aa.height);var E=(z.lineHeight-1)*o.convert(-aa.ascent/5)*(L-1);Cufon.textOptions.width=j;Cufon.textOptions.height=(s*L)+E;Cufon.textOptions.lines=L;Cufon.textOptions.totalLineHeight=E;if(a){ag.width=t;ag.height=s+"px"}else{ag.paddingLeft=t;ag.paddingBottom=(s-1)+"px"}var ac=Cufon.textOptions.context||p.getContext("2d"),J=ae/G.height;Cufon.textOptions.fontAscent=aa.ascent*J;ac.save();ac.scale(J,J);ac.translate(-B-((1/J*p.width)/2)+(Cufon.fonts[aa.family].offsetLeft||0),-H-(Cufon.textOptions.height/J)/2);ac.lineWidth=aa.face["underline-thickness"];ac.save();function q(i,g){ac.strokeStyle=g;ac.beginPath();ac.moveTo(0,i);ac.lineTo(h,i);ac.stroke()}var r=Cufon.getTextDecoration(z),u=z.fontStyle==="italic";function ad(){ac.save();ac.fillStyle=z.backgroundColor;var ak=0,al=0;if(z.textAlign==="right"){ac.translate(m[al],0)}else{if(z.textAlign==="center"){ac.translate(m[al]/2,0)}}var aj=[];for(var ah=0,x=af.length;ah.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;St?1:(l-k)/m;p(j+(r-j)*q(s));if(l>t||n()){u.onComplete&&u.onComplete();return}h(o)})()}var h=(function(){return fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(k,j){fabric.window.setTimeout(k,1000/60)}})();function a(k,m,l){if(k){var j=new Image();j.onload=function(){m&&m.call(l,j);j=j.onload=null};j.src=k}}fabric.util.removeFromArray=g;fabric.util.degreesToRadians=b;fabric.util.toFixed=d;fabric.util.getRandomInt=e;fabric.util.falseFunction=i;fabric.util.animate=c;fabric.util.requestAnimFrame=h;fabric.util.loadImage=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]-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(i){var g=i.fabric||(i.fabric={}),o=g.util.object.extend,e=g.util.string.capitalize,p=g.util.object.clone;var k={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix"};function d(v,u){if(!v){return}var x,t,s={};if(v.parentNode&&/^g$/i.test(v.parentNode.nodeName)){s=g.parseAttributes(v.parentNode,u)}var w=u.reduce(function(z,y){x=v.getAttribute(y);t=parseFloat(x);if(x){if((y==="fill"||y==="stroke")&&x==="none"){x=""}if(y==="fill-rule"){x=(x==="evenodd")?"destination-over":x}if(y==="transform"){x=g.parseTransformAttribute(x)}if(y in k){y=k[y]}z[y]=isNaN(t)?x:t}return z},{});w=o(w,o(n(v),g.parseStyleAttribute(v)));return o(s,w)}g.parseTransformAttribute=(function(){function s(L,M){var N=M[0];L[0]=Math.cos(N);L[1]=Math.sin(N);L[2]=-Math.sin(N);L[3]=Math.cos(N)}function x(N,O){var M=O[0],L=(O.length===2)?O[1]:O[0];N[0]=M;N[3]=L}function I(L,M){L[2]=M[0]}function u(L,M){L[1]=M[0]}function F(L,M){L[4]=M[0];if(M.length===2){L[5]=M[1]}}var z=[1,0,0,1,0,0],t="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",J="(?:\\s+,?\\s*|,\\s*)",A="(?:(skewX)\\s*\\(\\s*("+t+")\\s*\\))",y="(?:(skewY)\\s*\\(\\s*("+t+")\\s*\\))",H="(?:(rotate)\\s*\\(\\s*("+t+")(?:"+J+"("+t+")"+J+"("+t+"))?\\s*\\))",K="(?:(scale)\\s*\\(\\s*("+t+")(?:"+J+"("+t+"))?\\s*\\))",D="(?:(translate)\\s*\\(\\s*("+t+")(?:"+J+"("+t+"))?\\s*\\))",G="(?:(matrix)\\s*\\(\\s*("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")\\s*\\))",E="(?:"+G+"|"+D+"|"+K+"|"+H+"|"+A+"|"+y+")",B="(?:"+E+"(?:"+J+E+")*)",v="^\\s*(?:"+B+"?)\\s*$",C=new RegExp(v),w=new RegExp(E);return function(M){var L=z.concat();if(!M||(M&&!C.test(M))){return L}M.replace(w,function(Q){var N=new RegExp(E).exec(Q).filter(function(R){return(R!==""&&R!=null)}),O=N[1],P=N.slice(2).map(parseFloat);switch(O){case"translate":F(L,P);break;case"rotate":s(L,P);break;case"scale":x(L,P);break;case"skewX":I(L,P);break;case"skewY":u(L,P);break;case"matrix":L=P;break}});return L}})();function r(v){if(!v){return null}v=v.trim();var x=v.indexOf(",")>-1;v=v.split(/\s+/);var t=[];if(x){for(var u=0,s=v.length;u",'",""].join("")}return t}o(g,{parseAttributes:d,parseElements:f,parseStyleAttribute:h,parsePointsAttribute:r,getCSSRules:c,loadSVGFromURL:b,loadSVGFromString:m,createSVGFontFacesMarkup:l})})(typeof exports!="undefined"?exports:this);(function(){function c(h){var g=h.getAttribute("style");if(g){var k=g.split(/\s*;\s*/);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 k=d.getElementsByTagName("stop"),d,f,e={},g;for(var h=k.length;h--;){d=k[h];f=parseInt(d.getAttribute("offset"),10)/100;e[f]=c(d)||d.getAttribute("stop-color")}var j={x1:d.getAttribute("x1")||0,y1:d.getAttribute("y1")||0,x2:d.getAttribute("x2")||"100%",y2:d.getAttribute("y2")||0};a(l,j);return fabric.Gradient.create(m,{x1:j.x1,y1:j.y1,x2:j.x2,y2:j.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()),];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.discardActiveObject()}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.CONTAINER_CLASS});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)},getContext:function(){return this.contextTop},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});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;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){var o=new fabric.PathGroup(q,n)}else{var o=q[0]}o.setSourcePath(m);if(!(o instanceof fabric.PathGroup)){fabric.util.object.extend(o,n);if(typeof n.angle!=="undefined"){o.setAngle(n.angle)}}g(o,l)})}}}},this)}catch(c){fabric.log(c.message)}},loadFromJSON:function(a,d){if(!a){return}var b=JSON.parse(a);if(!b||(b&&!b.objects)){return}this.clear();var c=this;this._enlivenObjects(b.objects,function(){c.backgroundColor=b.background;if(d){d()}});return this},_enlivenObjects:function(b,e){var c=0,a=b.filter(function(f){return f.type==="image"}).length;var d=this;b.forEach(function(h,g){if(!h.type){return}switch(h.type){case"image":case"font":fabric[fabric.util.string.capitalize(h.type)].fromObject(h,function(i){d.insertAt(i,g,true);if(++c===a){if(e){e()}}});break;default:var f=fabric[fabric.util.string.camelize(fabric.util.string.capitalize(h.type))];if(f&&f.fromObject){d.insertAt(f.fromObject(h),g,true)}break}});if(a===0&&e){e()}},_toDataURL:function(a,b){this.clone(function(c){b(c.toDataURL(a))})},_toDataURLWithMultiplier:function(a,c,b){this.clone(function(d){b(d.toDataURLWithMultiplier(a,c))})},clone:function(c){var a=fabric.document.createElement("canvas");a.width=this.getWidth();a.height=this.getHeight();var b=this.__clone||(this.__clone=new fabric.Canvas(a));b.clipTo=this.clipTo;return b.loadFromJSON(JSON.stringify(this.toJSON()),function(){if(c){c(b)}})}});(function(a){var d=a.fabric||(a.fabric={}),l=d.util.object.extend,m=d.util.object.clone,c=d.util.toFixed,k=d.util.string.capitalize,p=d.util.getPointer,b=d.util.degreesToRadians,o=Array.prototype.slice;if(d.Object){return}d.Object=d.util.createClass({type:"object",includeDefaultValues:true,NUM_FRACTION_DIGITS:2,FX_DURATION:500,MIN_SCALE_LIMIT:0.1,stateProperties:("top left width height scaleX scaleY flipX flipY theta angle opacity cornersize fill overlayFill stroke strokeWidth fillRule borderScaleFactor transformMatrix selectable").split(" "),top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:false,flipY:false,theta:0,opacity:1,angle:0,cornersize:12,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",fill:"rgb(0,0,0)",fillRule:"source-over",overlayFill:null,stroke:null,strokeWidth:1,borderOpacityWhenMoving:0.4,borderScaleFactor:1,transformMatrix:null,selectable:true,hasControls:true,hasBorders:true,callSuper:function(i){var q=this.constructor.superclass.prototype[i];return(arguments.length>1)?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,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};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"),"; ","fill: ",(this.fill?this.fill:"none"),"; ","opacity: ",(this.opacity?this.opacity:"1"),";",].join("")},getSvgTransform:function(){var i=this.getAngle();return["translate(",this.left," ",this.top,")",i!==0?(" rotate("+i+")"):"",(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(q,i){var s=(q==="scaleX"||q==="scaleY")&&ir.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 t=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);t.tl.corner={tl:{x:t.tl.x-r,y:t.tl.y-i},tr:{x:t.tl.x+i,y:t.tl.y-r},bl:{x:t.tl.x-i,y:t.tl.y+r},br:{x:t.tl.x+r,y:t.tl.y+i}};t.tr.corner={tl:{x:t.tr.x-r,y:t.tr.y-i},tr:{x:t.tr.x+i,y:t.tr.y-r},br:{x:t.tr.x+r,y:t.tr.y+i},bl:{x:t.tr.x-i,y:t.tr.y+r}};t.bl.corner={tl:{x:t.bl.x-r,y:t.bl.y-i},bl:{x:t.bl.x-i,y:t.bl.y+r},br:{x:t.bl.x+r,y:t.bl.y+i},tr:{x:t.bl.x+i,y:t.bl.y-r}};t.br.corner={tr:{x:t.br.x+i,y:t.br.y-r},bl:{x:t.br.x-i,y:t.br.y+r},br:{x:t.br.x+r,y:t.br.y+i},tl:{x:t.br.x-r,y:t.br.y-i}};t.ml.corner={tl:{x:t.ml.x-r,y:t.ml.y-i},tr:{x:t.ml.x+i,y:t.ml.y-r},bl:{x:t.ml.x-i,y:t.ml.y+r},br:{x:t.ml.x+r,y:t.ml.y+i}};t.mt.corner={tl:{x:t.mt.x-r,y:t.mt.y-i},tr:{x:t.mt.x+i,y:t.mt.y-r},bl:{x:t.mt.x-i,y:t.mt.y+r},br:{x:t.mt.x+r,y:t.mt.y+i}};t.mr.corner={tl:{x:t.mr.x-r,y:t.mr.y-i},tr:{x:t.mr.x+i,y:t.mr.y-r},bl:{x:t.mr.x-i,y:t.mr.y+r},br:{x:t.mr.x+r,y:t.mr.y+i}};t.mb.corner={tl:{x:t.mb.x-r,y:t.mb.y-i},tr:{x:t.mb.x+i,y:t.mb.y-r},bl:{x:t.mb.x-i,y:t.mb.y+r},br:{x:t.mb.x+r,y:t.mb.y+i}}},toGrayscale:function(){var i=this.get("fill");if(i){this.set("overlayFill",new d.Color(i).toGrayscale().toRgb())}return this},complexity:function(){return 0},getCenter:function(){return{x:this.get("left")+this.width/2,y:this.get("top")+this.height/2}},straighten:function(){var i=this._getAngleValueForStraighten();this.setAngle(i);return this},fxStraighten:function(q){q=q||{};var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(u){t.setAngle(u);i()},onComplete:function(){t.setCoords();s()},onStart:function(){t.setActive(false)}});return this},fxRemove:function(q){q||(q={});var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("opacity"),endValue:0,duration:this.FX_DURATION,onChange:function(u){t.set("opacity",u);i()},onComplete:s,onStart:function(){t.setActive(false)}});return this},_getAngleValueForStraighten:function(){var i=this.get("angle");if(i>-225&&i<=-135){return -180}else{if(i>-135&&i<=-45){return -90}else{if(i>-45&&i<=45){return 0}else{if(i>45&&i<=135){return 90}else{if(i>135&&i<=225){return 180}else{if(i>225&&i<=315){return 270}else{if(i>315){return 360}}}}}}}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;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,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)}}})(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()},_setWidthHeight:function(){this.set("width",(this.x2-this.x1)||1);this.set("height",(this.y2-this.y1)||1);this.set("left",this.x1+this.width/2);this.set("top",this.y1+this.height/2)},set:function(f,g){d.call(this,f,g);if(f in a){this._setWidthHeight()}return this},_render:function(f){f.beginPath();f.moveTo(-this.width/2,-this.height/2);f.lineTo(this.width/2,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(){console.log();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.get("scaleX");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")},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",options:{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.bezierCurveTo(d+e,k,d+e,k+i,d+e,k+i);f.lineTo(d+e,k+g-i);f.bezierCurveTo(d+e,k+g,d+e-j,k+g,d+e-j,k+g);f.lineTo(d+j,k+g);f.bezierCurveTo(d,k+g,d,k+g-i,d,k+g-i);f.lineTo(d,k+i);f.bezierCurveTo(d,k,d+j,k,d+j,k);f.closePath();if(this.fill){f.fill()}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},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();for(var g=0,d=this.points.length;g"].join("")},_render:function(l){var k;l.beginPath();for(var m=0,j=this.points.length;m1){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},add:function(h){this._restoreObjectsState();this.objects.push(h);h.setActive(true);this._calcBounds();this._updateObjectsCoords();return this},remove:function(h){this._restoreObjectsState();f(this.objects,h);h.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},size:function(){return this.getObjects().length},set:function(h,k){if(typeof k=="function"){this.set(h,k(this[h]))}else{if(h==="fill"||h==="opacity"){var j=this.objects.length;this[h]=k;while(j--){this.objects[j].set(h,k)}}else{this[h]=k}}return this},contains:function(h){return this.objects.indexOf(h)>-1},toObject:function(){return g(this.callSuper("toObject"),{objects:b(this.objects,"clone")})},render:function(j){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}this.hideBorders||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(){return this.setActive(true)},setActive:function(h){this.forEachObject(function(i){i.setActive(h)});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()}}});e.Group.fromObject=function(h){return new e.Group(h.objects,h)}})(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,{maxwidth:null,maxheight:null,active:false,bordervisibility:false,cornervisibility:false,type:"image",filters:[],initialize:function(d,c){c||(c={});this.callSuper("initialize",c);this._initElement(d);this._originalImage=this.getElement();this._initConfig(c);if(c.filters){this.filters=c.filters;this.applyFilters()}},getElement:function(){return this._element},setElement:function(c){this._element=c;this._initConfig();return this},getNormalizedSize:function(d,c,e){if(e&&c&&(d.width>d.height&&(d.width/d.height)<(c/e))){normalizedWidth=~~((d.width*e)/d.height);normalizedHeight=e}else{if(e&&((d.height==d.width)||(d.height>d.width)||(d.height>e))){normalizedWidth=~~((d.width*e)/d.height);normalizedHeight=e}else{if(c&&(c'},getSrc:function(){return 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;e.width=g.width;e.height=g.height;e.getContext("2d").drawImage(g,0,0);this.filters.forEach(function(j){j&&j.applyTo(e)});f.onload=function(){h.setElement(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.setElement(f);i&&i()}else{f.src=e.toDataURL("image/png")}return this},_render:function(d){var c=this.getOriginalSize();d.drawImage(this.getElement(),-c.width/2,-c.height/2,c.width,c.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){this.setOptions(c||{});this._setBorder();this._setWidthHeight()},_initFilters:function(c){if(c.filters&&c.filters.length){this.filters=c.filters.map(function(d){return fabric.Image.filters[d.type].fromObject(d)})}},_setBorder:function(){if(this.bordervisibility){this.currentBorder=this.borderwidth}else{this.currentBorder=0}},_setWidthHeight:function(){var c=2*this.currentBorder;this.width=(this.getElement().width||0)+c;this.height=(this.getElement().height||0)+c},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";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.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)'},_render:function(e){var g=Cufon.textOptions||(Cufon.textOptions={});g.left=this.left;g.top=this.top;g.context=e;g.color=this.fill;var f=this._initDummyElement();this.transform(e);Cufon.replaceElement(f,{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=g.width;this.height=g.height;this._totalLineHeight=g.totalLineHeight;this._fontAscent=g.fontAscent;this._bgBoundaries=g.bgBoundaries;this.setCoords()},_initDummyElement:function(){var f=b.document.createElement("div"),e=b.document.createElement("div");e.appendChild(f);f.innerHTML=this.text;f.style.fontSize=this.fontSize+"px";f.style.letterSpacing="normal";return f},render:function(e,f){e.save();this._render(e);if(!f&&this.active){this.drawBorders(e);this.hideCorners||this.drawCorners(e)}e.restore()},toObject:function(){return d(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 m=[],j=this.text.split("\n"),l=-this._fontAscent-((this._fontAscent/5)*this.lineHeight),k=[];var g=-(this.width/2),f=(this.height/2)-(j.length*this.fontSize)-this._totalLineHeight;for(var h=0,e=j.length;h',j[h],"");if(!this.backgroundColor){continue}k.push('')}return['',k.join(""),"',m.join(""),"",""].join("")},setColor:function(e){this.set("fill",e);return this},setFontsize:function(e){this.set("fontSize",e);this.setCoords();return this},getText:function(){return this.text},setText:function(e){this.set("text",e);this.setCoords();return this},set:function(e,f){if(typeof e=="object"){for(var g in e){this.set(g,e[g])}}else{this[e]=f;if(e==="fontFamily"&&this.path){this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+f+"$3")}}return this}});b.Text.fromObject=function(e){return new b.Text(e.text,c(e))};b.Text.fromElement=function(e){}})(typeof exports!="undefined"?exports:this);(function(){if(typeof document!="undefined"&&typeof window!="undefined"){return}var XML=require("o3-xml"),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(80,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");callback(img)})};fabric.loadSVGFromURL=function(url,callback){url=url.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();request(url,"",function(body){var doc=XML.parseFromString(body);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:JU){U=P}if(O>S){S=O}if(Pw){w=h}K.push(h);h=0;continue}var A=aa.glyphs[af[Z]]||aa.missingGlyph;if(!A){continue}h+=C=Number(A.w||aa.w)+T}K.push(h);h=Math.max(w,h);var m=[];for(var Z=K.length;Z--;){m[Z]=h-K[Z]}if(C===null){return null}U+=(G.width-C);B+=G.minX;var v,p;if(n){v=I;p=I.firstChild}else{v=fabric.document.createElement("span");v.className="cufon cufon-canvas";v.alt=D;p=fabric.document.createElement("canvas");v.appendChild(p);if(z.printable){var X=fabric.document.createElement("span");X.className="cufon-alt";X.appendChild(fabric.document.createTextNode(D));v.appendChild(X)}}var ag=v.style;var N=p.style||{};var k=o.convert(G.height-H+S);var ae=Math.ceil(k);var R=ae/k;p.width=Math.ceil(o.convert(h+U-B)*R);p.height=ae;H+=G.minY;N.top=Math.round(o.convert(H-aa.ascent))+"px";N.left=Math.round(o.convert(B))+"px";var j=Math.ceil(o.convert(h*R));var t=j+"px";var s=o.convert(aa.height);var E=(z.lineHeight-1)*o.convert(-aa.ascent/5)*(L-1);Cufon.textOptions.width=j;Cufon.textOptions.height=(s*L)+E;Cufon.textOptions.lines=L;Cufon.textOptions.totalLineHeight=E;if(a){ag.width=t;ag.height=s+"px"}else{ag.paddingLeft=t;ag.paddingBottom=(s-1)+"px"}var ac=Cufon.textOptions.context||p.getContext("2d"),J=ae/G.height;Cufon.textOptions.fontAscent=aa.ascent*J;Cufon.textOptions.boundaries=null;ac.save();ac.scale(J,J);ac.translate(-B-((1/J*p.width)/2)+(Cufon.fonts[aa.family].offsetLeft||0),-H-(Cufon.textOptions.height/J)/2);ac.lineWidth=aa.face["underline-thickness"];ac.save();function q(i,g){ac.strokeStyle=g;ac.beginPath();ac.moveTo(0,i);ac.lineTo(h,i);ac.stroke()}var r=Cufon.getTextDecoration(z),u=z.fontStyle==="italic";function ad(){ac.save();ac.fillStyle=z.backgroundColor;var ah=0,al=0,x=[{left:0}];if(z.textAlign==="right"){ac.translate(m[al],0);x[0].left=m[al]*J}else{if(z.textAlign==="center"){ac.translate(m[al]/2,0);x[0].left=m[al]/2*J}}for(var aj=0,ai=af.length;aj.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;St?1:(l-k)/m;p(j+(r-j)*q(s));if(l>t||n()){u.onComplete&&u.onComplete();return}h(o)})()}var h=(function(){return fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(k,j){fabric.window.setTimeout(k,1000/60)}})();function a(k,m,l){if(k){var j=new Image();j.onload=function(){m&&m.call(l,j);j=j.onload=null};j.src=k}}fabric.util.removeFromArray=g;fabric.util.degreesToRadians=b;fabric.util.toFixed=d;fabric.util.getRandomInt=e;fabric.util.falseFunction=i;fabric.util.animate=c;fabric.util.requestAnimFrame=h;fabric.util.loadImage=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]-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(i){var g=i.fabric||(i.fabric={}),o=g.util.object.extend,e=g.util.string.capitalize,p=g.util.object.clone;var k={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix"};function d(v,u){if(!v){return}var x,t,s={};if(v.parentNode&&/^g$/i.test(v.parentNode.nodeName)){s=g.parseAttributes(v.parentNode,u)}var w=u.reduce(function(z,y){x=v.getAttribute(y);t=parseFloat(x);if(x){if((y==="fill"||y==="stroke")&&x==="none"){x=""}if(y==="fill-rule"){x=(x==="evenodd")?"destination-over":x}if(y==="transform"){x=g.parseTransformAttribute(x)}if(y in k){y=k[y]}z[y]=isNaN(t)?x:t}return z},{});w=o(w,o(n(v),g.parseStyleAttribute(v)));return o(s,w)}g.parseTransformAttribute=(function(){function s(L,M){var N=M[0];L[0]=Math.cos(N);L[1]=Math.sin(N);L[2]=-Math.sin(N);L[3]=Math.cos(N)}function x(N,O){var M=O[0],L=(O.length===2)?O[1]:O[0];N[0]=M;N[3]=L}function I(L,M){L[2]=M[0]}function u(L,M){L[1]=M[0]}function F(L,M){L[4]=M[0];if(M.length===2){L[5]=M[1]}}var z=[1,0,0,1,0,0],t="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",J="(?:\\s+,?\\s*|,\\s*)",A="(?:(skewX)\\s*\\(\\s*("+t+")\\s*\\))",y="(?:(skewY)\\s*\\(\\s*("+t+")\\s*\\))",H="(?:(rotate)\\s*\\(\\s*("+t+")(?:"+J+"("+t+")"+J+"("+t+"))?\\s*\\))",K="(?:(scale)\\s*\\(\\s*("+t+")(?:"+J+"("+t+"))?\\s*\\))",D="(?:(translate)\\s*\\(\\s*("+t+")(?:"+J+"("+t+"))?\\s*\\))",G="(?:(matrix)\\s*\\(\\s*("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")\\s*\\))",E="(?:"+G+"|"+D+"|"+K+"|"+H+"|"+A+"|"+y+")",B="(?:"+E+"(?:"+J+E+")*)",v="^\\s*(?:"+B+"?)\\s*$",C=new RegExp(v),w=new RegExp(E);return function(M){var L=z.concat();if(!M||(M&&!C.test(M))){return L}M.replace(w,function(Q){var N=new RegExp(E).exec(Q).filter(function(R){return(R!==""&&R!=null)}),O=N[1],P=N.slice(2).map(parseFloat);switch(O){case"translate":F(L,P);break;case"rotate":s(L,P);break;case"scale":x(L,P);break;case"skewX":I(L,P);break;case"skewY":u(L,P);break;case"matrix":L=P;break}});return L}})();function r(v){if(!v){return null}v=v.trim();var x=v.indexOf(",")>-1;v=v.split(/\s+/);var t=[];if(x){for(var u=0,s=v.length;u",'",""].join("")}return t}o(g,{parseAttributes:d,parseElements:f,parseStyleAttribute:h,parsePointsAttribute:r,getCSSRules:c,loadSVGFromURL:b,loadSVGFromString:m,createSVGFontFacesMarkup:l})})(typeof exports!="undefined"?exports:this);(function(){function c(h){var g=h.getAttribute("style");if(g){var k=g.split(/\s*;\s*/);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 k=d.getElementsByTagName("stop"),d,f,e={},g;for(var h=k.length;h--;){d=k[h];f=parseInt(d.getAttribute("offset"),10)/100;e[f]=c(d)||d.getAttribute("stop-color")}var j={x1:d.getAttribute("x1")||0,y1:d.getAttribute("y1")||0,x2:d.getAttribute("x2")||"100%",y2:d.getAttribute("y2")||0};a(l,j);return fabric.Gradient.create(m,{x1:j.x1,y1:j.y1,x2:j.x2,y2:j.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()),];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.discardActiveObject()}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.CONTAINER_CLASS});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)},getContext:function(){return this.contextTop},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});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;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){var o=new fabric.PathGroup(q,n)}else{var o=q[0]}o.setSourcePath(m);if(!(o instanceof fabric.PathGroup)){fabric.util.object.extend(o,n);if(typeof n.angle!=="undefined"){o.setAngle(n.angle)}}g(o,l)})}}}},this)}catch(c){fabric.log(c.message)}},loadFromJSON:function(a,d){if(!a){return}var b=JSON.parse(a);if(!b||(b&&!b.objects)){return}this.clear();var c=this;this._enlivenObjects(b.objects,function(){c.backgroundColor=b.background;if(d){d()}});return this},_enlivenObjects:function(b,e){var c=0,a=b.filter(function(f){return f.type==="image"}).length;var d=this;b.forEach(function(h,g){if(!h.type){return}switch(h.type){case"image":case"font":fabric[fabric.util.string.capitalize(h.type)].fromObject(h,function(i){d.insertAt(i,g,true);if(++c===a){if(e){e()}}});break;default:var f=fabric[fabric.util.string.camelize(fabric.util.string.capitalize(h.type))];if(f&&f.fromObject){d.insertAt(f.fromObject(h),g,true)}break}});if(a===0&&e){e()}},_toDataURL:function(a,b){this.clone(function(c){b(c.toDataURL(a))})},_toDataURLWithMultiplier:function(a,c,b){this.clone(function(d){b(d.toDataURLWithMultiplier(a,c))})},clone:function(c){var a=fabric.document.createElement("canvas");a.width=this.getWidth();a.height=this.getHeight();var b=this.__clone||(this.__clone=new fabric.Canvas(a));b.clipTo=this.clipTo;return b.loadFromJSON(JSON.stringify(this.toJSON()),function(){if(c){c(b)}})}});(function(a){var d=a.fabric||(a.fabric={}),l=d.util.object.extend,m=d.util.object.clone,c=d.util.toFixed,k=d.util.string.capitalize,p=d.util.getPointer,b=d.util.degreesToRadians,o=Array.prototype.slice;if(d.Object){return}d.Object=d.util.createClass({type:"object",includeDefaultValues:true,NUM_FRACTION_DIGITS:2,FX_DURATION:500,MIN_SCALE_LIMIT:0.1,stateProperties:("top left width height scaleX scaleY flipX flipY theta angle opacity cornersize fill overlayFill stroke strokeWidth fillRule borderScaleFactor transformMatrix selectable").split(" "),top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:false,flipY:false,theta:0,opacity:1,angle:0,cornersize:12,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",fill:"rgb(0,0,0)",fillRule:"source-over",overlayFill:null,stroke:null,strokeWidth:1,borderOpacityWhenMoving:0.4,borderScaleFactor:1,transformMatrix:null,selectable:true,hasControls:true,hasBorders:true,callSuper:function(i){var q=this.constructor.superclass.prototype[i];return(arguments.length>1)?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,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};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"),"; ","fill: ",(this.fill?this.fill:"none"),"; ","opacity: ",(this.opacity?this.opacity:"1"),";",].join("")},getSvgTransform:function(){var i=this.getAngle();return["translate(",this.left," ",this.top,")",i!==0?(" rotate("+i+")"):"",(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(q,i){var s=(q==="scaleX"||q==="scaleY")&&ir.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 t=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);t.tl.corner={tl:{x:t.tl.x-r,y:t.tl.y-i},tr:{x:t.tl.x+i,y:t.tl.y-r},bl:{x:t.tl.x-i,y:t.tl.y+r},br:{x:t.tl.x+r,y:t.tl.y+i}};t.tr.corner={tl:{x:t.tr.x-r,y:t.tr.y-i},tr:{x:t.tr.x+i,y:t.tr.y-r},br:{x:t.tr.x+r,y:t.tr.y+i},bl:{x:t.tr.x-i,y:t.tr.y+r}};t.bl.corner={tl:{x:t.bl.x-r,y:t.bl.y-i},bl:{x:t.bl.x-i,y:t.bl.y+r},br:{x:t.bl.x+r,y:t.bl.y+i},tr:{x:t.bl.x+i,y:t.bl.y-r}};t.br.corner={tr:{x:t.br.x+i,y:t.br.y-r},bl:{x:t.br.x-i,y:t.br.y+r},br:{x:t.br.x+r,y:t.br.y+i},tl:{x:t.br.x-r,y:t.br.y-i}};t.ml.corner={tl:{x:t.ml.x-r,y:t.ml.y-i},tr:{x:t.ml.x+i,y:t.ml.y-r},bl:{x:t.ml.x-i,y:t.ml.y+r},br:{x:t.ml.x+r,y:t.ml.y+i}};t.mt.corner={tl:{x:t.mt.x-r,y:t.mt.y-i},tr:{x:t.mt.x+i,y:t.mt.y-r},bl:{x:t.mt.x-i,y:t.mt.y+r},br:{x:t.mt.x+r,y:t.mt.y+i}};t.mr.corner={tl:{x:t.mr.x-r,y:t.mr.y-i},tr:{x:t.mr.x+i,y:t.mr.y-r},bl:{x:t.mr.x-i,y:t.mr.y+r},br:{x:t.mr.x+r,y:t.mr.y+i}};t.mb.corner={tl:{x:t.mb.x-r,y:t.mb.y-i},tr:{x:t.mb.x+i,y:t.mb.y-r},bl:{x:t.mb.x-i,y:t.mb.y+r},br:{x:t.mb.x+r,y:t.mb.y+i}}},toGrayscale:function(){var i=this.get("fill");if(i){this.set("overlayFill",new d.Color(i).toGrayscale().toRgb())}return this},complexity:function(){return 0},getCenter:function(){return{x:this.get("left")+this.width/2,y:this.get("top")+this.height/2}},straighten:function(){var i=this._getAngleValueForStraighten();this.setAngle(i);return this},fxStraighten:function(q){q=q||{};var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(u){t.setAngle(u);i()},onComplete:function(){t.setCoords();s()},onStart:function(){t.setActive(false)}});return this},fxRemove:function(q){q||(q={});var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("opacity"),endValue:0,duration:this.FX_DURATION,onChange:function(u){t.set("opacity",u);i()},onComplete:s,onStart:function(){t.setActive(false)}});return this},_getAngleValueForStraighten:function(){var i=this.get("angle");if(i>-225&&i<=-135){return -180}else{if(i>-135&&i<=-45){return -90}else{if(i>-45&&i<=45){return 0}else{if(i>45&&i<=135){return 90}else{if(i>135&&i<=225){return 180}else{if(i>225&&i<=315){return 270}else{if(i>315){return 360}}}}}}}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;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,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)}}})(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()},_setWidthHeight:function(){this.set("width",(this.x2-this.x1)||1);this.set("height",(this.y2-this.y1)||1);this.set("left",this.x1+this.width/2);this.set("top",this.y1+this.height/2)},set:function(f,g){d.call(this,f,g);if(f in a){this._setWidthHeight()}return this},_render:function(f){f.beginPath();f.moveTo(-this.width/2,-this.height/2);f.lineTo(this.width/2,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(){console.log();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.get("scaleX");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")},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",options:{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.bezierCurveTo(d+e,k,d+e,k+i,d+e,k+i);f.lineTo(d+e,k+g-i);f.bezierCurveTo(d+e,k+g,d+e-j,k+g,d+e-j,k+g);f.lineTo(d+j,k+g);f.bezierCurveTo(d,k+g,d,k+g-i,d,k+g-i);f.lineTo(d,k+i);f.bezierCurveTo(d,k,d+j,k,d+j,k);f.closePath();if(this.fill){f.fill()}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},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();for(var g=0,d=this.points.length;g"].join("")},_render:function(l){var k;l.beginPath();for(var m=0,j=this.points.length;m1){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},add:function(h){this._restoreObjectsState();this.objects.push(h);h.setActive(true);this._calcBounds();this._updateObjectsCoords();return this},remove:function(h){this._restoreObjectsState();f(this.objects,h);h.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},size:function(){return this.getObjects().length},set:function(h,k){if(typeof k=="function"){this.set(h,k(this[h]))}else{if(h==="fill"||h==="opacity"){var j=this.objects.length;this[h]=k;while(j--){this.objects[j].set(h,k)}}else{this[h]=k}}return this},contains:function(h){return this.objects.indexOf(h)>-1},toObject:function(){return g(this.callSuper("toObject"),{objects:b(this.objects,"clone")})},render:function(j){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}this.hideBorders||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(){return this.setActive(true)},setActive:function(h){this.forEachObject(function(i){i.setActive(h)});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()}}});e.Group.fromObject=function(h){return new e.Group(h.objects,h)}})(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,{maxwidth:null,maxheight:null,active:false,bordervisibility:false,cornervisibility:false,type:"image",filters:[],initialize:function(d,c){c||(c={});this.callSuper("initialize",c);this._initElement(d);this._originalImage=this.getElement();this._initConfig(c);if(c.filters){this.filters=c.filters;this.applyFilters()}},getElement:function(){return this._element},setElement:function(c){this._element=c;this._initConfig();return this},getNormalizedSize:function(d,c,e){if(e&&c&&(d.width>d.height&&(d.width/d.height)<(c/e))){normalizedWidth=~~((d.width*e)/d.height);normalizedHeight=e}else{if(e&&((d.height==d.width)||(d.height>d.width)||(d.height>e))){normalizedWidth=~~((d.width*e)/d.height);normalizedHeight=e}else{if(c&&(c'},getSrc:function(){return 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;e.width=g.width;e.height=g.height;e.getContext("2d").drawImage(g,0,0);this.filters.forEach(function(j){j&&j.applyTo(e)});f.onload=function(){h.setElement(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.setElement(f);i&&i()}else{f.src=e.toDataURL("image/png")}return this},_render:function(d){var c=this.getOriginalSize();d.drawImage(this.getElement(),-c.width/2,-c.height/2,c.width,c.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){this.setOptions(c||{});this._setBorder();this._setWidthHeight()},_initFilters:function(c){if(c.filters&&c.filters.length){this.filters=c.filters.map(function(d){return fabric.Image.filters[d.type].fromObject(d)})}},_setBorder:function(){if(this.bordervisibility){this.currentBorder=this.borderwidth}else{this.currentBorder=0}},_setWidthHeight:function(){var c=2*this.currentBorder;this.width=(this.getElement().width||0)+c;this.height=(this.getElement().height||0)+c},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";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.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)'},_render:function(e){var g=Cufon.textOptions||(Cufon.textOptions={});g.left=this.left;g.top=this.top;g.context=e;g.color=this.fill;var f=this._initDummyElement();this.transform(e);Cufon.replaceElement(f,{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=g.width;this.height=g.height;this._totalLineHeight=g.totalLineHeight;this._fontAscent=g.fontAscent;this._boundaries=g.boundaries;this.setCoords()},_initDummyElement:function(){var f=b.document.createElement("div"),e=b.document.createElement("div");e.appendChild(f);f.innerHTML=this.text;f.style.fontSize=this.fontSize+"px";f.style.letterSpacing="normal";return f},render:function(e,f){e.save();this._render(e);if(!f&&this.active){this.drawBorders(e);this.hideCorners||this.drawCorners(e)}e.restore()},toObject:function(){return d(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 e=[],l=this.text.split("\n"),g=-this._fontAscent-((this._fontAscent/5)*this.lineHeight),h=[];var f=-(this.width/2),n=(this.height/2)-(l.length*this.fontSize)-this._totalLineHeight;for(var j=0,m=l.length;j',l[j],"");if(!this.backgroundColor){continue}h.push('')}return['',h.join(""),"',e.join(""),"",""].join("")},setColor:function(e){this.set("fill",e);return this},setFontsize:function(e){this.set("fontSize",e);this.setCoords();return this},getText:function(){return this.text},setText:function(e){this.set("text",e);this.setCoords();return this},set:function(e,f){if(typeof e=="object"){for(var g in e){this.set(g,e[g])}}else{this[e]=f;if(e==="fontFamily"&&this.path){this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+f+"$3")}}return this}});b.Text.fromObject=function(e){return new b.Text(e.text,c(e))};b.Text.fromElement=function(e){}})(typeof exports!="undefined"?exports:this);(function(){if(typeof document!="undefined"&&typeof window!="undefined"){return}var XML=require("o3-xml"),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(80,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");callback(img)})};fabric.loadSVGFromURL=function(url,callback){url=url.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();request(url,"",function(body){var doc=XML.parseFromString(body);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 00845f72a9465129a1b6a8671e5683df21b9b7a4..063dbf40c73b209b02762d98dc89195b9f4d8462 100644 GIT binary patch delta 35962 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 delta 35824 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 Q6pdQ{A5q+Xq*&Sk07mWQzW@LL diff --git a/lib/cufon.js b/lib/cufon.js index 1278539d..ac13471e 100644 --- a/lib/cufon.js +++ b/lib/cufon.js @@ -747,6 +747,7 @@ Cufon.registerEngine('canvas', (function() { scale = roundedHeight / viewBox.height; Cufon.textOptions.fontAscent = font.ascent * scale; + Cufon.textOptions.boundaries = null; g.save(); g.scale(scale, scale); @@ -781,15 +782,16 @@ Cufon.registerEngine('canvas', (function() { g.fillStyle = options.backgroundColor; - var left = 0, lineNum = 0; + var left = 0, lineNum = 0, boundaries = [{ left: 0 }]; if (options.textAlign === 'right') { g.translate(lineOffsets[lineNum], 0); + boundaries[0].left = lineOffsets[lineNum] * scale; } else if (options.textAlign === 'center') { g.translate(lineOffsets[lineNum] / 2, 0); + boundaries[0].left = lineOffsets[lineNum] / 2 * scale; } - var bgBoundaries = []; for (var i = 0, l = chars.length; i < l; ++i) { if (chars[i] === '\n') { @@ -797,25 +799,30 @@ Cufon.registerEngine('canvas', (function() { lineNum++; var topOffset = -font.ascent - ((font.ascent / 5) * options.lineHeight); + var boundary = boundaries[boundaries.length - 1]; + var nextBoundary = { left: 0 }; + + boundary.width = left * scale; + boundary.height = (-font.ascent + font.descent) * scale; if (options.textAlign === 'right') { g.translate(-width, topOffset); g.translate(lineOffsets[lineNum], 0); + nextBoundary.left = lineOffsets[lineNum] * scale; } else if (options.textAlign === 'center') { // offset to the start of text in previous line AND half of its offset // (essentially moving caret to the left edge of bounding box) g.translate(-left - (lineOffsets[lineNum - 1] / 2), topOffset); g.translate(lineOffsets[lineNum] / 2, 0); + nextBoundary.left = lineOffsets[lineNum] / 2 * scale; } else { g.translate(-left, topOffset); } - bgBoundaries.push({ - width: left * scale, - height: (-font.ascent + font.descent) * scale - }); + /* push next boundary (for the next line) */ + boundaries.push(nextBoundary); left = 0; @@ -826,24 +833,25 @@ Cufon.registerEngine('canvas', (function() { var charWidth = Number(glyph.w || font.w) + letterSpacing; - g.save(); - g.translate(0, font.ascent); - g.fillRect(0, 0, charWidth + 10, -font.ascent + font.descent); - g.restore(); + // only draw background when there's some kind of value + if (options.backgroundColor) { + g.save(); + g.translate(0, font.ascent); + g.fillRect(0, 0, charWidth + 10, -font.ascent + font.descent); + g.restore(); + } g.translate(charWidth, 0); left += charWidth; if (i == l-1) { - bgBoundaries.push({ - width: left * scale, - height: (-font.ascent + font.descent) * scale - }); + boundaries[boundaries.length - 1].width = left * scale; + boundaries[boundaries.length - 1].height = (-font.ascent + font.descent) * scale; } } g.restore(); - Cufon.textOptions.bgBoundaries = bgBoundaries; + Cufon.textOptions.boundaries = boundaries; } function renderText() { @@ -955,9 +963,7 @@ Cufon.registerEngine('canvas', (function() { } g.save(); - if (options.backgroundColor) { - renderBackground(); - } + renderBackground(); renderText(); g.restore(); g.restore(); diff --git a/package.json b/package.json index 9a4c951f..5059b821 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "0.7.5", + "version": "0.7.6", "author": "Juriy Zaytsev ", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "repository": "git://github.com/kangax/fabric.js", diff --git a/src/text.class.js b/src/text.class.js index 8f31e1f3..3b3be7ae 100644 --- a/src/text.class.js +++ b/src/text.class.js @@ -194,7 +194,7 @@ this.height = o.height; this._totalLineHeight = o.totalLineHeight; this._fontAscent = o.fontAscent; - this._bgBoundaries = o.bgBoundaries; + this._boundaries = o.boundaries; // need to set coords _after_ the width/height was retreived from Cufon this.setCoords(); @@ -281,22 +281,25 @@ textTopOffset = (this.height/2) - (textLines.length * this.fontSize) - this._totalLineHeight; for (var i = 0, len = textLines.length; i < len; i++) { - textSpans.push('', textLines[i], ''); + + var lineLeftOffset = (this._boundaries && this._boundaries[i]) ? this._boundaries[i].left : 0; + textSpans.push('', textLines[i], ''); + if (!this.backgroundColor) continue; textBgRects.push( ''); } - + return [ '', textBgRects.join(''),