From 8c1447834035cd21335f86c7d17bdce0f6852678 Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 18 Dec 2012 18:01:30 +0100 Subject: [PATCH] Add support for "text-align: justify". SVG representation is not yet working. --- HEADER.js | 2 +- dist/all.js | 105 ++++++++++++++++++++++++++++++++++++++------- dist/all.min.js | 4 +- dist/all.min.js.gz | Bin 41239 -> 41430 bytes package.json | 2 +- src/text.class.js | 103 +++++++++++++++++++++++++++++++++++++------- 6 files changed, 181 insertions(+), 35 deletions(-) diff --git a/HEADER.js b/HEADER.js index 00100b3b..8831fe55 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "0.9.32" }; +var fabric = fabric || { version: "0.9.33" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; diff --git a/dist/all.js b/dist/all.js index 60e1b12a..fe8d0de1 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL` */ /*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "0.9.32" }; +var fabric = fabric || { version: "0.9.33" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; @@ -14590,7 +14590,7 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { this._renderTextBackground(ctx, textLines); - if (this.textAlign !== 'left') { + if (this.textAlign !== 'left' && this.textAlign !== 'justify') { ctx.save(); ctx.translate(this.textAlign === 'center' ? (this.width / 2) : this.width, 0); } @@ -14600,7 +14600,7 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { this.textShadow && ctx.restore(); this._renderTextStroke(ctx, textLines); - if (this.textAlign !== 'left') { + if (this.textAlign !== 'left' && this.textAlign !== 'justify') { ctx.restore(); } @@ -14620,7 +14620,7 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { for (var i = 0, len = textLines.length; i < len; i++) { - var lineWidth = ctx.measureText(textLines[i]).width; + var lineWidth = this._getLineWidth(ctx, textLines[i]); var lineLeftOffset = this._getLineLeftOffset(lineWidth); this._boundaries.push({ @@ -14706,6 +14706,46 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { } }, + /** + * @private + * @method _drawTextLine + * @param method + * @param ctx + * @param line + * @param left + * param top + */ + _drawTextLine: function(method, ctx, line, left, top) { + + // short-circuit + if (this.textAlign !== 'justify') { + ctx[method](line, left, top); + return; + } + + var lineWidth = ctx.measureText(line).width; + var totalWidth = this.width; + + if (totalWidth > lineWidth) { + // stretch the line + + var words = line.split(/\s+/); + var wordsWidth = ctx.measureText(line.replace(/\s+/g, '')).width; + var widthDiff = totalWidth - wordsWidth; + var numSpaces = words.length - 1; + var spaceWidth = widthDiff / numSpaces; + + var leftOffset = 0; + for (var i = 0, len = words.length; i < len; i++) { + ctx[method](words[i], left + leftOffset, top); + leftOffset += ctx.measureText(words[i]).width + spaceWidth; + } + } + else { + ctx[method](line, left, top); + } + }, + /** * @private * @method _renderTextFill @@ -14713,7 +14753,9 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { _renderTextFill: function(ctx, textLines) { this._boundaries = [ ]; for (var i = 0, len = textLines.length; i < len; i++) { - ctx.fillText( + this._drawTextLine( + 'fillText', + ctx, textLines[i], -this.width / 2, (-this.height / 2) + (i * this.fontSize * this.lineHeight) + this.fontSize @@ -14729,7 +14771,9 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { if (this.strokeStyle) { ctx.beginPath(); for (var i = 0, len = textLines.length; i < len; i++) { - ctx.strokeText( + this._drawTextLine( + 'strokeText', + ctx, textLines[i], -this.width / 2, (-this.height / 2) + (i * this.fontSize * this.lineHeight) + this.fontSize @@ -14741,9 +14785,18 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { /** * @private - * @_renderTextBackground + * @method _renderTextBackground */ _renderTextBackground: function(ctx, textLines) { + this._renderTextBoxBackground(ctx); + this._renderTextLinesBackground(ctx, textLines); + }, + + /** + * @private + * @method _renderTextBoxBackground + */ + _renderTextBoxBackground: function(ctx) { if (this.backgroundColor) { ctx.save(); ctx.fillStyle = this.backgroundColor; @@ -14757,7 +14810,13 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { ctx.restore(); } + }, + /** + * @private + * @method _renderTextLinesBackground + */ + _renderTextLinesBackground: function(ctx, textLines) { if (this.textBackgroundColor) { ctx.save(); ctx.fillStyle = this.textBackgroundColor; @@ -14765,7 +14824,8 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { for (var i = 0, len = textLines.length; i < len; i++) { if (textLines[i] !== '') { - var lineWidth = ctx.measureText(textLines[i]).width; + + var lineWidth = this._getLineWidth(ctx, textLines[i]); var lineLeftOffset = this._getLineLeftOffset(lineWidth); ctx.fillRect( @@ -14794,6 +14854,18 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { return 0; }, + /** + * @private + * @method _getLineWidth + * @param ctx + * @param line + */ + _getLineWidth: function(ctx, line) { + return this.textAlign === 'justify' + ? this.width + : ctx.measureText(line).width; + }, + /** * @private * @method _renderTextDecoration @@ -14807,7 +14879,7 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { function renderLinesAtOffset(offset) { for (var i = 0, len = textLines.length; i < len; i++) { - var lineWidth = ctx.measureText(textLines[i]).width; + var lineWidth = _this._getLineWidth(ctx, textLines[i]); var lineLeftOffset = _this._getLineLeftOffset(lineWidth); ctx.fillRect( @@ -15018,16 +15090,17 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { lineLeftOffset = (this._boundaries && this._boundaries[i]) ? toFixed(this._boundaries[i].left, 2) : 0; textSpans.push( ' elements since setting opacity on containing one doesn't work in Illustrator - this._getFillAttributes(this.fill), '>', - fabric.util.string.escapeXml(textLines[i]), + lineLeftOffset, '" ', + (i === 0 || this.useNative ? 'y' : 'dy'), '="', + toFixed(this.useNative ? ((lineTopOffset * i) - this.height / 2) : (lineTopOffset * lineTopOffsetMultiplier), 2) , '" ', + // doing this on elements since setting opacity on containing one doesn't work in Illustrator + this._getFillAttributes(this.fill), '>', + fabric.util.string.escapeXml(textLines[i]), '' ); lineTopOffsetMultiplier = 1; - } else { + } + else { // in some environments (e.g. IE 7 & 8) empty tspans are completely ignored, using a lineTopOffsetMultiplier // prevents empty tspans lineTopOffsetMultiplier++; diff --git a/dist/all.min.js b/dist/all.min.js index b73005bf..d15dbacf 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,5 +1,5 @@ -/* build: `node build.js modules=ALL` *//*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"0.9.32"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_r?n:i-t;s(u(l,a,c,n));if(i>r||o()){e.onComplete&&e.onComplete();return}f(h)}()}function l(e,t,n){if(e){var r=new Image;r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function c(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e){i[t]=e,r()}):(i[t]=s.fromObject(e),r())})}function h(e,t,n){var r=e.length>1?new fabric.PathGroup(e,t):e[0];return typeof n!="undefined"&&r.setSourcePath(n),r}function p(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;r=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==1/0&&r!==-1/0&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return; +/* build: `node build.js modules=ALL` *//*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"0.9.33"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_r?n:i-t;s(u(l,a,c,n));if(i>r||o()){e.onComplete&&e.onComplete();return}f(h)}()}function l(e,t,n){if(e){var r=new Image;r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function c(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e){i[t]=e,r()}):(i[t]=s.fromObject(e),r())})}function h(e,t,n){var r=e.length>1?new fabric.PathGroup(e,t):e[0];return typeof n!="undefined"&&r.setSourcePath(n),r}function p(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;r=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==1/0&&r!==-1/0&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return; i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function g(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function y(e){var t="";for(var n=0,r=e.length;n",'",""].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,p=f.length;c0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t=n.sourceFromHex(e);t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];this.backgroundImage&&e.push(''),this.overlayImage&&e.push('');for(var t=0,n=this.getObjects(),r=n.length;t"),e.join("")},isEmpty:function(){return this._objects.length===0},remove:function(e){return n(this._objects,e),this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,s),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var o=t.ex+p-(n>0?0:i),u=t.ey+p-(r>0?0:s);e.beginPath(),this.drawDashedLine(e,o,u,o+i,u,this.selectionDashArray),this.drawDashedLine(e,o,u+s-1,o+i,u+s-1,this.selectionDashArray),this.drawDashedLine(e,o,u,o,u+s,this.selectionDashArray),this.drawDashedLine(e,o+i-1,u,o+i-1,u+s,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+p-(n>0?0:i),t.ey+p-(r>0?0:s),i,s)},drawDashedLine:function(e,t,n,r,i,s){var o=r-t,u=i-n,a=Math.sqrt(o*o+u*u),f=Math.atan2(u,o),l=s.length,c=0,h=!0;e.save(),e.translate(t,n),e.moveTo(0,0),e.rotate(f),t=0;while(a>t)t+=s[c++%l],t>a&&(t=a),e[h?"lineTo":"moveTo"](t,0),h=!h;e.restore()},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,o,u=new fabric.Point(c(n,i),c(r,s)),a=new fabric.Point(h(n,i),h(r,s));for(var f=0,l=this._objects.length;f1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var r=(e==="scaleX"||e==="scaleY")&&n1?this.strokeWidth:0,t=this.padding,n=o(this.angle);this.currentWidth=(this.width+e)*this.scaleX+t*2,this.currentHeight=(this.height+e)*this.scaleY+t*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var r=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),i=Math.atan(this.currentHeight/this.currentWidth),s=Math.cos(i+n)*r,u=Math.sin(i+n)*r,a=Math.sin(n),f=Math.cos(n),l={x:this.left-s,y:this.top-u},c={x:l.x+this.currentWidth*f,y:l.y+this.currentWidth*a},h={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},p={x:l.x-this.currentHeight*a,y:l.y+this.currentHeight*f},d={x:l.x-this.currentHeight/2*a,y:l.y+this.currentHeight/2*f},v={x:l.x+this.currentWidth/2*f,y:l.y+this.currentWidth/2*a},m={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},g={x:p.x+this.currentWidth/2*f,y:p.y+this.currentWidth/2*a},y={x:l.x+this.currentWidth/2*f,y:l.y+this.currentWidth/2*a};return this.oCoords={tl:l,tr:c,br:h,bl:p,ml:d,mt:v,mr:m,mb:g,mtr:y},this._setCornerCoords(),this},getBoundingRectWidth:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},getBoundingRectHeight:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},drawBorders:function(e){if(!this.hasBorders)return;var n=t.Object.MIN_SCALE_LIMIT,r=this.padding,i=r*2,s=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var o=1/(this.scaleXc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},drawCorners:function(e){if(!this.hasControls)return;var t=this.cornersize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new Image;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",!1).set("flipY",!1),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL("png");r.dispose(),r=t=null,e&&e(i)}var n=t.document.createElement("canvas");!n.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(n),n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},intersectsWithRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y),u=new t.Point(r.br.x,r.br.y),a=t.Intersection.intersectPolygonRectangle([i,s,u,o],e,n);return a.status==="Intersection"},intersectsWithObject:function(e){function n(e){return{tl:new t.Point(e.tl.x,e.tl.y),tr:new t.Point(e.tr.x,e.tr.y),bl:new t.Point(e.bl.x,e.bl.y),br:new t.Point(e.br.x,e.br.y)}}var r=n(this.oCoords),i=n(e.oCoords),s=t.Intersection.intersectPolygonPolygon([r.tl,r.tr,r.br,r.bl],[i.tl,i.tr,i.br,i.bl]);return s.status==="Intersection"},isContainedWithinObject:function(e){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y);return i.x>e.x&&s.xe.y&&o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,t=o(this.angle),n=o(45-this.angle),r=Math.sqrt(2*Math.pow(this.cornersize,2))/2,i=r*Math.cos(n),s=r*Math.sin(n),u=Math.sin(t),a=Math.cos(t);e.tl.corner={tl:{x:e.tl.x-s,y:e.tl.y-i},tr:{x:e.tl.x+i,y:e.tl.y-s},bl:{x:e.tl.x-i,y:e.tl.y+s},br:{x:e.tl.x+s,y:e.tl.y+i}},e.tr.corner={tl:{x:e.tr.x-s,y:e.tr.y-i},tr:{x:e.tr.x+i,y:e.tr.y-s},br:{x:e.tr.x+s,y:e.tr.y+i},bl:{x:e.tr.x-i,y:e.tr.y+s}},e.bl.corner={tl:{x:e.bl.x-s,y:e.bl.y-i},bl:{x:e.bl.x-i,y:e.bl.y+s},br:{x:e.bl.x+s,y:e.bl.y+i},tr:{x:e.bl.x+i,y:e.bl.y-s}},e.br.corner={tr:{x:e.br.x+i,y:e.br.y-s},bl:{x:e.br.x-i,y:e.br.y+s},br:{x:e.br.x+s,y:e.br.y+i},tl:{x:e.br.x-s,y:e.br.y-i}},e.ml.corner={tl:{x:e.ml.x-s,y:e.ml.y-i},tr:{x:e.ml.x+i,y:e.ml.y-s},bl:{x:e.ml.x-i,y:e.ml.y+s},br:{x:e.ml.x+s,y:e.ml.y+i}},e.mt.corner={tl:{x:e.mt.x-s,y:e.mt.y-i},tr:{x:e.mt.x+i,y:e.mt.y-s},bl:{x:e.mt.x-i,y:e.mt.y+s},br:{x:e.mt.x+s,y:e.mt.y+i}},e.mr.corner={tl:{x:e.mr.x-s,y:e.mr.y-i},tr:{x:e.mr.x+i,y:e.mr.y-s},bl:{x:e.mr.x-i,y:e.mr.y+s},br:{x:e.mr.x+s,y:e.mr.y+i}},e.mb.corner={tl:{x:e.mb.x-s,y:e.mb.y-i},tr:{x:e.mb.x+i,y:e.mb.y-s},bl:{x:e.mb.x-i,y:e.mb.y+s},br:{x:e.mb.x+s,y:e.mb.y+i}},e.mtr.corner={tl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y-i-a*this.rotatingPointOffset},tr:{x:e.mtr.x+i+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},bl:{x:e.mtr.x-i+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset},br:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y+i-a*this.rotatingPointOffset}}},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradientFill:function(e){this.set("fill",t.Gradient.forObject(this,e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e,arguments[0][e],arguments [1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this;r||(r={}),"from"in r||(r.from=this.get(e)),/[+\-]/.test((n+"").charAt(0))&&(n=this.get(e)+parseFloat(n)),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}});var u=t.Object.prototype;for(var a=u.stateProperties.length;a--;){var f=u.stateProperties[a],l=f.charAt(0).toUpperCase()+f.slice(1),c="set"+l,h="get"+l;u[h]||(u[h]=function(e){return new Function('return this.get("'+e+'")')}(f)),u[c]||(u[c]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(f))}t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),n(t.Object,{NUM_FRACTION_DIGITS:2,MIN_SCALE_LIMIT:.1})}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){return'"},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");return"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0),new t.Circle(r(s,n))},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions()},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[];for(var t=0,r=this.points.length;t"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[];for(var t=0,n=this.path.length;t',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke,o=t.util.removeFromArray;if(t.Group)return;var u={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.hideCorners=!0},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this.objects.length;this[e]=t;while(n--)this.objects[n].set(e,t)}else this[e]=t},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this.objects,"toObject",e)})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hideCorners=!1,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale();return this},toSVG:function(){var e=[];for(var t=0,n=this.objects.length;t'+e.join("")+""},get:function(e){if(e in u){if(this[e])return this[e];for(var t=0,n=this.objects.length;t'+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.document.createElement("canvas"),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;!r.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(r),r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").replace(/data:image\/png;base64,/,"");i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return this},_render:function(e){e.drawImage(this.getElement(),-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=null},n.src=r},fabric.Image.fromURL=function(e,t,n){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){r||(r={});var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(i,r))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.get("angle");return e>-225&&e<=-135?-180:e>-135&&e<=-45?-90:e>-45&&e<=45?0:e>45&&e<=135?90:e>135&&e<=225?180:e>225&&e<=315?270:e>315?360:0},straighten:function(){var e=this._getAngleValueForStraighten();return this.setAngle(e),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.setActive(!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0],this.tmpCtx=fabric.document.createElement("canvas").getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_renderTextFill:function(e,t){this._boundaries=[];for(var n=0,r=t.length;n-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},setFontsize:function(e){return this.set("fontSize",e),this._initDimensions(),this.setCoords(),this},getText:function(){return this.text},setText:function(e){return this.set("text",e),this._initDimensions(),this.setCoords(),this},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t)}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i}}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t){var n=new Image;e&&e.indexOf("data")===0?(n.src=n._src=e,t(n)):e&&request(e,"binary",function(r){n.src=new Buffer(r,"binary"),n._src=e,t(n)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +{type:"Sepia",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=r.length,s,o;for(s=0;s0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0],this.tmpCtx=fabric.document.createElement("canvas").getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},setFontsize:function(e){return this.set("fontSize",e),this._initDimensions(),this.setCoords(),this},getText:function(){return this.text},setText:function(e){return this.set("text",e),this._initDimensions(),this.setCoords(),this},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t)}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i}}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t){var n=new Image;e&&e.indexOf("data")===0?(n.src=n._src=e,t(n)):e&&request(e,"binary",function(r){n.src=new Buffer(r,"binary"),n._src=e,t(n)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index d2269c467b3228c194e33afb47848c91a3502375..637fe062faa299862dd433389f818a64bd45af67 100644 GIT binary patch delta 41256 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", "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 8b82788e..4ecfe159 100644 --- a/src/text.class.js +++ b/src/text.class.js @@ -276,7 +276,7 @@ this._renderTextBackground(ctx, textLines); - if (this.textAlign !== 'left') { + if (this.textAlign !== 'left' && this.textAlign !== 'justify') { ctx.save(); ctx.translate(this.textAlign === 'center' ? (this.width / 2) : this.width, 0); } @@ -286,7 +286,7 @@ this.textShadow && ctx.restore(); this._renderTextStroke(ctx, textLines); - if (this.textAlign !== 'left') { + if (this.textAlign !== 'left' && this.textAlign !== 'justify') { ctx.restore(); } @@ -306,7 +306,7 @@ for (var i = 0, len = textLines.length; i < len; i++) { - var lineWidth = ctx.measureText(textLines[i]).width; + var lineWidth = this._getLineWidth(ctx, textLines[i]); var lineLeftOffset = this._getLineLeftOffset(lineWidth); this._boundaries.push({ @@ -392,6 +392,46 @@ } }, + /** + * @private + * @method _drawTextLine + * @param method + * @param ctx + * @param line + * @param left + * param top + */ + _drawTextLine: function(method, ctx, line, left, top) { + + // short-circuit + if (this.textAlign !== 'justify') { + ctx[method](line, left, top); + return; + } + + var lineWidth = ctx.measureText(line).width; + var totalWidth = this.width; + + if (totalWidth > lineWidth) { + // stretch the line + + var words = line.split(/\s+/); + var wordsWidth = ctx.measureText(line.replace(/\s+/g, '')).width; + var widthDiff = totalWidth - wordsWidth; + var numSpaces = words.length - 1; + var spaceWidth = widthDiff / numSpaces; + + var leftOffset = 0; + for (var i = 0, len = words.length; i < len; i++) { + ctx[method](words[i], left + leftOffset, top); + leftOffset += ctx.measureText(words[i]).width + spaceWidth; + } + } + else { + ctx[method](line, left, top); + } + }, + /** * @private * @method _renderTextFill @@ -399,7 +439,9 @@ _renderTextFill: function(ctx, textLines) { this._boundaries = [ ]; for (var i = 0, len = textLines.length; i < len; i++) { - ctx.fillText( + this._drawTextLine( + 'fillText', + ctx, textLines[i], -this.width / 2, (-this.height / 2) + (i * this.fontSize * this.lineHeight) + this.fontSize @@ -415,7 +457,9 @@ if (this.strokeStyle) { ctx.beginPath(); for (var i = 0, len = textLines.length; i < len; i++) { - ctx.strokeText( + this._drawTextLine( + 'strokeText', + ctx, textLines[i], -this.width / 2, (-this.height / 2) + (i * this.fontSize * this.lineHeight) + this.fontSize @@ -427,9 +471,18 @@ /** * @private - * @_renderTextBackground + * @method _renderTextBackground */ _renderTextBackground: function(ctx, textLines) { + this._renderTextBoxBackground(ctx); + this._renderTextLinesBackground(ctx, textLines); + }, + + /** + * @private + * @method _renderTextBoxBackground + */ + _renderTextBoxBackground: function(ctx) { if (this.backgroundColor) { ctx.save(); ctx.fillStyle = this.backgroundColor; @@ -443,7 +496,13 @@ ctx.restore(); } + }, + /** + * @private + * @method _renderTextLinesBackground + */ + _renderTextLinesBackground: function(ctx, textLines) { if (this.textBackgroundColor) { ctx.save(); ctx.fillStyle = this.textBackgroundColor; @@ -451,7 +510,8 @@ for (var i = 0, len = textLines.length; i < len; i++) { if (textLines[i] !== '') { - var lineWidth = ctx.measureText(textLines[i]).width; + + var lineWidth = this._getLineWidth(ctx, textLines[i]); var lineLeftOffset = this._getLineLeftOffset(lineWidth); ctx.fillRect( @@ -480,6 +540,18 @@ return 0; }, + /** + * @private + * @method _getLineWidth + * @param ctx + * @param line + */ + _getLineWidth: function(ctx, line) { + return this.textAlign === 'justify' + ? this.width + : ctx.measureText(line).width; + }, + /** * @private * @method _renderTextDecoration @@ -493,7 +565,7 @@ function renderLinesAtOffset(offset) { for (var i = 0, len = textLines.length; i < len; i++) { - var lineWidth = ctx.measureText(textLines[i]).width; + var lineWidth = _this._getLineWidth(ctx, textLines[i]); var lineLeftOffset = _this._getLineLeftOffset(lineWidth); ctx.fillRect( @@ -704,16 +776,17 @@ lineLeftOffset = (this._boundaries && this._boundaries[i]) ? toFixed(this._boundaries[i].left, 2) : 0; textSpans.push( ' elements since setting opacity on containing one doesn't work in Illustrator - this._getFillAttributes(this.fill), '>', - fabric.util.string.escapeXml(textLines[i]), + lineLeftOffset, '" ', + (i === 0 || this.useNative ? 'y' : 'dy'), '="', + toFixed(this.useNative ? ((lineTopOffset * i) - this.height / 2) : (lineTopOffset * lineTopOffsetMultiplier), 2) , '" ', + // doing this on elements since setting opacity on containing one doesn't work in Illustrator + this._getFillAttributes(this.fill), '>', + fabric.util.string.escapeXml(textLines[i]), '' ); lineTopOffsetMultiplier = 1; - } else { + } + else { // in some environments (e.g. IE 7 & 8) empty tspans are completely ignored, using a lineTopOffsetMultiplier // prevents empty tspans lineTopOffsetMultiplier++;