From 22de40dc54774d586ba7694446700f74feb27dad Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 22 Apr 2013 09:16:58 -0400 Subject: [PATCH] Add support for pattern offsets (via fabric.Pattern#offsetX/offsetY). Version 1.1.8 --- HEADER.js | 2 +- dist/all.js | 89 ++++++++++++++++++++++++++----------- dist/all.min.js | 12 ++--- dist/all.min.js.gz | Bin 47509 -> 47603 bytes package.json | 2 +- src/circle.class.js | 6 +-- src/ellipse.class.js | 6 +-- src/object.class.js | 19 ++++++++ src/path.class.js | 6 +-- src/pattern.class.js | 26 ++++++++++- src/polygon.class.js | 6 +-- src/polyline.class.js | 6 +-- src/rect.class.js | 5 +-- src/static_canvas.class.js | 6 ++- src/triangle.class.js | 7 ++- test/unit/pattern.js | 6 ++- 16 files changed, 138 insertions(+), 66 deletions(-) diff --git a/HEADER.js b/HEADER.js index ecb8ba8c..a4d7239e 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.1.7" }; +var fabric = fabric || { version: "1.1.8" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; diff --git a/dist/all.js b/dist/all.js index a6bee584..98ea9e7d 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.1.7" }; +var fabric = fabric || { version: "1.1.8" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; @@ -5131,6 +5131,20 @@ fabric.Pattern = fabric.util.createClass(/** @scope fabric.Pattern.prototype */ */ repeat: 'repeat', + /** + * Pattern horizontal offset from object's left/top corner + * @property + * @type Number + */ + offsetX: 0, + + /** + * Pattern vertical offset from object's left/top corner + * @property + * @type String + */ + offsetY: 0, + /** * Constructor * @method initialize @@ -5148,6 +5162,12 @@ fabric.Pattern = fabric.util.createClass(/** @scope fabric.Pattern.prototype */ if (options.repeat) { this.repeat = options.repeat; } + if (options.offsetX) { + this.offsetX = options.offsetX; + } + if (options.offsetY) { + this.offsetY = options.offsetY; + } }, /** @@ -5171,7 +5191,9 @@ fabric.Pattern = fabric.util.createClass(/** @scope fabric.Pattern.prototype */ return { source: source, - repeat: this.repeat + repeat: this.repeat, + offsetX: this.offsetX, + offsetY: this.offsetY }; }, @@ -5186,6 +5208,7 @@ fabric.Pattern = fabric.util.createClass(/** @scope fabric.Pattern.prototype */ return ctx.createPattern(source, this.repeat); } }); + /** * Shadow class * @class Shadow @@ -6630,7 +6653,11 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { ? this.backgroundColor.toLive(canvasToDrawOn) : this.backgroundColor; - canvasToDrawOn.fillRect(0, 0, this.width, this.height); + canvasToDrawOn.fillRect( + this.backgroundColor.offsetX || 0, + this.backgroundColor.offsetY || 0, + this.width, + this.height); } if (typeof this.backgroundImage === 'object') { @@ -10616,6 +10643,25 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0; }, + /** + * @private + * @method _renderFill + */ + _renderFill: function(ctx) { + if (!this.fill) return; + + if (this.fill.toLive) { + ctx.save(); + ctx.translate( + -this.width / 2 + this.fill.offsetX, + -this.height / 2 + this.fill.offsetY); + } + ctx.fill(); + if (this.fill.toLive) { + ctx.restore(); + } + }, + /** * Clones an instance * @method clone @@ -12398,9 +12444,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati ctx.globalAlpha = this.group ? (ctx.globalAlpha * this.opacity) : this.opacity; ctx.arc(noTransform ? this.left : 0, noTransform ? this.top : 0, this.radius, 0, piBy2, false); ctx.closePath(); - if (this.fill) { - ctx.fill(); - } + this._renderFill(ctx); this._removeShadow(ctx); if (this.stroke) { ctx.stroke(); @@ -12500,6 +12544,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati }; })(typeof exports !== 'undefined' ? exports : this); + (function(global) { "use strict"; @@ -12555,9 +12600,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati ctx.lineTo(widthBy2, heightBy2); ctx.closePath(); - if (this.fill) { - ctx.fill(); - } + this._renderFill(ctx); + if (this.stroke) { ctx.stroke(); } @@ -12619,6 +12663,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati }; })(typeof exports !== 'undefined' ? exports : this); + (function(global){ "use strict"; @@ -12748,9 +12793,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati ctx.stroke(); } this._removeShadow(ctx); - if (this.fill) { - ctx.fill(); - } + this._renderFill(ctx); ctx.restore(); }, @@ -12813,6 +12856,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati }; })(typeof exports !== 'undefined' ? exports : this); + (function(global) { "use strict"; @@ -12940,10 +12984,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati ctx.quadraticCurveTo(x,y,x+rx,y,x+rx,y); ctx.closePath(); - if (this.fill) { - ctx.fill(); - } - + this._renderFill(ctx); this._removeShadow(ctx); if (this.strokeDashArray) { @@ -13236,9 +13277,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati point = this.points[i]; ctx.lineTo(point.x, point.y); } - if (this.fill) { - ctx.fill(); - } + this._renderFill(ctx); this._removeShadow(ctx); if (this.stroke) { ctx.stroke(); @@ -13301,6 +13340,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati }; })(typeof exports !== 'undefined' ? exports : this); + (function(global) { "use strict"; @@ -13431,9 +13471,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati point = this.points[i]; ctx.lineTo(point.x, point.y); } - if (this.fill) { - ctx.fill(); - } + this._renderFill(ctx); this._removeShadow(ctx); if (this.stroke) { ctx.closePath(); @@ -13496,6 +13534,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati }; })(typeof exports !== 'undefined' ? exports : this); + (function(global) { var commandLengths = { @@ -14061,11 +14100,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati this.clipTo && fabric.util.clipContext(this, ctx); ctx.beginPath(); - this._render(ctx); - if (this.fill) { - ctx.fill(); - } + this._render(ctx); + this._renderFill(ctx); this.clipTo && ctx.restore(); if (this.shadow && !this.shadow.affectStroke) { diff --git a/dist/all.min.js b/dist/all.min.js index bb11fc5a..529f36a0 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,6 +1,6 @@ -/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.1.7"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){e||(e={});var t=+(new Date),n=e.duration||500,r=t+n,i,s=e.onChange||function(){},o=e.abort||function(){return!1},u=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},a="startValue"in e?e.startValue:0,f="endValue"in e?e.endValue:100,l=e.byValue||f-a;e.onStart&&e.onStart(),function c(){i=+(new Date);var f=i>r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e,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 d(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,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function v(e,t,n){var r;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function w(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function E(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}var e=Math.sqrt,t=Math.atan2;fabric.util={};var i=Math.PI/180,c=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},h=function(){return c.apply(fabric.window,arguments)};fabric.util.removeFromArray=n,fabric.util.degreesToRadians=s,fabric.util.radiansToDegrees=o,fabric.util.rotatePoint=u,fabric.util.toFixed=a,fabric.util.getRandomInt=r,fabric.util.falseFunction=f,fabric.util.animate=l,fabric.util.requestAnimFrame=h,fabric.util.loadImage=p,fabric.util.enlivenObjects=d,fabric.util.groupSVGElements=v,fabric.util.populateWithProperties=m,fabric.util.drawDashedLine=g,fabric.util.createCanvasElement=y,fabric.util.createAccessors=b,fabric.util.clipContext=w,fabric.util.multiplyTransformMatrices=E}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=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){v.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),v.has(e,function(r){r?v.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function g(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 y(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 b(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function w(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.multiplyTransformMatrices,o={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 n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(n,r){var i=n.getElementsByTagName("stop"),s=n.nodeName==="linearGradient"?"linear":"radial",o=n.getAttribute("gradientUnits")||"objectBoundingBox",u=[],a={};s==="linear"?a={x1:n.getAttribute("x1")||0,y1:n.getAttribute("y1")||0,x2:n.getAttribute("x2")||"100%",y2:n.getAttribute("y2")||0}:s==="radial"&&(a={x1:n.getAttribute("fx")||n.getAttribute("cx")||"50%",y1:n.getAttribute("fy")||n.getAttribute("cy")||"50%",r1:0,x2:n.getAttribute("cx")||"50%",y2:n.getAttribute("cy")||"50%",r2:n.getAttribute("r")||"50%"});for(var f=i.length;f--;)u.push(e(i[f]));return t(r,a),new fabric.Gradient({type:s,coords:a,gradientUnits:o,colorStops:u})},forObject:function(e,n){return n||(n={}),t(e,n),new fabric.Gradient(n)}}),fabric.getGradientDefs=r}(),fabric.Pattern=fabric.util.createClass({repeat:"repeat",initialize:function(e){e||(e={}),e.source&&(this.source=typeof e.source=="string"?new Function(e.source):e.source),e.repeat&&(this.repeat=e.repeat)},toObject:function(){var e;return typeof this.source=="function"?e=String(this.source).match(/function\s+\w*\s*\(.*\)\s+\{([\s\S]*)\}/)[1]:typeof this.source.src=="string"&&(e=this.source.src),{source:e,repeat:this.repeat}},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;return e.createPattern(t,this.repeat)}}),fabric.Shadow=fabric.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,initialize:function(e){for(var t in e)this[t]=e[t]},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(){}}),function(e){"use strict";function n(e,t){arguments.length>0&&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;e in n.colorNameMap&&(e=n.colorNameMap[e]),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)',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll&&this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=this.stroke;this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},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 o;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.getAngle(),flipX:this.getFlipX(),flipY:this.getFlipY()};this.set({angle:0,flipX:!1,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.set("active",!1),r.add(t);var i=r.toDataURL();r.dispose(),r=t=null,e&&e(i)}var n=t.util.createCanvasElement();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(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;re.x&&i.xe.y&&s.y1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(this.currentHeight/this.currentWidth),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.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,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};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();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):e.translate(this.left,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 n=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,e.stroke(),e.strokeStyle=n},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(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.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(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),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");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this._removeShadow(e),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,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(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()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},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(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")}}),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,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t -;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;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;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;ie.x&&i-ne.y},toSVG:function(){var e=[];for(var t=this._objects.length;t--;)e.push(this._objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in o){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.util.createCanvasElement(),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;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").substring(22);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._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.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];var t=fabric.util.createCanvasElement();this.tmpCtx=t.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){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){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[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,stroke:this.stroke,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&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in s&&(this._initDimensions(),this.setCoords())}}),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},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.pathname,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.1.8"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){e||(e={});var t=+(new Date),n=e.duration||500,r=t+n,i,s=e.onChange||function(){},o=e.abort||function(){return!1},u=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},a="startValue"in e?e.startValue:0,f="endValue"in e?e.endValue:100,l=e.byValue||f-a;e.onStart&&e.onStart(),function c(){i=+(new Date);var f=i>r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e,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 d(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,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function v(e,t,n){var r;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function w(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function E(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}var e=Math.sqrt,t=Math.atan2;fabric.util={};var i=Math.PI/180,c=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},h=function(){return c.apply(fabric.window,arguments)};fabric.util.removeFromArray=n,fabric.util.degreesToRadians=s,fabric.util.radiansToDegrees=o,fabric.util.rotatePoint=u,fabric.util.toFixed=a,fabric.util.getRandomInt=r,fabric.util.falseFunction=f,fabric.util.animate=l,fabric.util.requestAnimFrame=h,fabric.util.loadImage=p,fabric.util.enlivenObjects=d,fabric.util.groupSVGElements=v,fabric.util.populateWithProperties=m,fabric.util.drawDashedLine=g,fabric.util.createCanvasElement=y,fabric.util.createAccessors=b,fabric.util.clipContext=w,fabric.util.multiplyTransformMatrices=E}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=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){v.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),v.has(e,function(r){r?v.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function g(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 y(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 b(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function w(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.multiplyTransformMatrices,o={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 n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(n,r){var i=n.getElementsByTagName("stop"),s=n.nodeName==="linearGradient"?"linear":"radial",o=n.getAttribute("gradientUnits")||"objectBoundingBox",u=[],a={};s==="linear"?a={x1:n.getAttribute("x1")||0,y1:n.getAttribute("y1")||0,x2:n.getAttribute("x2")||"100%",y2:n.getAttribute("y2")||0}:s==="radial"&&(a={x1:n.getAttribute("fx")||n.getAttribute("cx")||"50%",y1:n.getAttribute("fy")||n.getAttribute("cy")||"50%",r1:0,x2:n.getAttribute("cx")||"50%",y2:n.getAttribute("cy")||"50%",r2:n.getAttribute("r")||"50%"});for(var f=i.length;f--;)u.push(e(i[f]));return t(r,a),new fabric.Gradient({type:s,coords:a,gradientUnits:o,colorStops:u})},forObject:function(e,n){return n||(n={}),t(e,n),new fabric.Gradient(n)}}),fabric.getGradientDefs=r}(),fabric.Pattern=fabric.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,initialize:function(e){e||(e={}),e.source&&(this.source=typeof e.source=="string"?new Function(e.source):e.source),e.repeat&&(this.repeat=e.repeat),e.offsetX&&(this.offsetX=e.offsetX),e.offsetY&&(this.offsetY=e.offsetY)},toObject:function(){var e;return typeof this.source=="function"?e=String(this.source).match(/function\s+\w*\s*\(.*\)\s+\{([\s\S]*)\}/)[1]:typeof this.source.src=="string"&&(e=this.source.src),{source:e,repeat:this.repeat,offsetX:this.offsetX,offsetY:this.offsetY}},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;return e.createPattern(t,this.repeat)}}),fabric.Shadow=fabric.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,initialize:function(e){for(var t in e)this[t]=e[t]},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(){}}),function(e){"use strict";function n(e,t){arguments.length>0&&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;e in n.colorNameMap&&(e=n.colorNameMap[e]),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)',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll&&this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=this.stroke;this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX,-this.height/2+this.fill.offsetY)),e.fill(),this.fill.toLive&&e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new o;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.getAngle(),flipX:this.getFlipX(),flipY:this.getFlipY()};this.set({angle:0,flipX:!1,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.set("active",!1),r.add(t);var i=r.toDataURL();r.dispose(),r=t=null,e&&e(i)}var n=t.util.createCanvasElement();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(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;re.x&&i.xe.y&&s.y1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(this.currentHeight/this.currentWidth),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.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,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};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();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):e.translate(this.left,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 n=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,e.stroke(),e.strokeStyle=n},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(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.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(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._removeShadow(e),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");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this._removeShadow(e),this._renderFill(e),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,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._removeShadow(e),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(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()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},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(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")}}),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,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0 +,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;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;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;ie.x&&i-ne.y},toSVG:function(){var e=[];for(var t=this._objects.length;t--;)e.push(this._objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in o){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.util.createCanvasElement(),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;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").substring(22);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._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.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];var t=fabric.util.createCanvasElement();this.tmpCtx=t.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){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){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[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,stroke:this.stroke,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&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in s&&(this._initDimensions(),this.setCoords())}}),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},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.pathname,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index 1be3bae5bc81355fc5c0adf521d907fd4d2649a0..3e045f8a1c920a401b79f1d416df3f965d0d8dd2 100644 GIT binary patch delta 35956 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 delta 35909 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 diff --git a/package.json b/package.json index c4b8fbdd..26dbac90 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": "1.1.7", + "version": "1.1.8", "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/circle.class.js b/src/circle.class.js index 23cd8c8c..027423f6 100644 --- a/src/circle.class.js +++ b/src/circle.class.js @@ -91,9 +91,7 @@ ctx.globalAlpha = this.group ? (ctx.globalAlpha * this.opacity) : this.opacity; ctx.arc(noTransform ? this.left : 0, noTransform ? this.top : 0, this.radius, 0, piBy2, false); ctx.closePath(); - if (this.fill) { - ctx.fill(); - } + this._renderFill(ctx); this._removeShadow(ctx); if (this.stroke) { ctx.stroke(); @@ -192,4 +190,4 @@ return new fabric.Circle(object); }; -})(typeof exports !== 'undefined' ? exports : this); \ No newline at end of file +})(typeof exports !== 'undefined' ? exports : this); diff --git a/src/ellipse.class.js b/src/ellipse.class.js index 6b9543cd..36012cd7 100644 --- a/src/ellipse.class.js +++ b/src/ellipse.class.js @@ -127,9 +127,7 @@ ctx.stroke(); } this._removeShadow(ctx); - if (this.fill) { - ctx.fill(); - } + this._renderFill(ctx); ctx.restore(); }, @@ -191,4 +189,4 @@ return new fabric.Ellipse(object); }; -})(typeof exports !== 'undefined' ? exports : this); \ No newline at end of file +})(typeof exports !== 'undefined' ? exports : this); diff --git a/src/object.class.js b/src/object.class.js index ad769230..a8d01f2e 100644 --- a/src/object.class.js +++ b/src/object.class.js @@ -730,6 +730,25 @@ ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0; }, + /** + * @private + * @method _renderFill + */ + _renderFill: function(ctx) { + if (!this.fill) return; + + if (this.fill.toLive) { + ctx.save(); + ctx.translate( + -this.width / 2 + this.fill.offsetX, + -this.height / 2 + this.fill.offsetY); + } + ctx.fill(); + if (this.fill.toLive) { + ctx.restore(); + } + }, + /** * Clones an instance * @method clone diff --git a/src/path.class.js b/src/path.class.js index e1f4114e..aa46259f 100644 --- a/src/path.class.js +++ b/src/path.class.js @@ -563,11 +563,9 @@ this.clipTo && fabric.util.clipContext(this, ctx); ctx.beginPath(); - this._render(ctx); - if (this.fill) { - ctx.fill(); - } + this._render(ctx); + this._renderFill(ctx); this.clipTo && ctx.restore(); if (this.shadow && !this.shadow.affectStroke) { diff --git a/src/pattern.class.js b/src/pattern.class.js index da00bfc8..621fa655 100644 --- a/src/pattern.class.js +++ b/src/pattern.class.js @@ -12,6 +12,20 @@ fabric.Pattern = fabric.util.createClass(/** @scope fabric.Pattern.prototype */ */ repeat: 'repeat', + /** + * Pattern horizontal offset from object's left/top corner + * @property + * @type Number + */ + offsetX: 0, + + /** + * Pattern vertical offset from object's left/top corner + * @property + * @type String + */ + offsetY: 0, + /** * Constructor * @method initialize @@ -29,6 +43,12 @@ fabric.Pattern = fabric.util.createClass(/** @scope fabric.Pattern.prototype */ if (options.repeat) { this.repeat = options.repeat; } + if (options.offsetX) { + this.offsetX = options.offsetX; + } + if (options.offsetY) { + this.offsetY = options.offsetY; + } }, /** @@ -52,7 +72,9 @@ fabric.Pattern = fabric.util.createClass(/** @scope fabric.Pattern.prototype */ return { source: source, - repeat: this.repeat + repeat: this.repeat, + offsetX: this.offsetX, + offsetY: this.offsetY }; }, @@ -66,4 +88,4 @@ fabric.Pattern = fabric.util.createClass(/** @scope fabric.Pattern.prototype */ var source = typeof this.source === 'function' ? this.source() : this.source; return ctx.createPattern(source, this.repeat); } -}); \ No newline at end of file +}); diff --git a/src/polygon.class.js b/src/polygon.class.js index 1f136f13..69938553 100644 --- a/src/polygon.class.js +++ b/src/polygon.class.js @@ -128,9 +128,7 @@ point = this.points[i]; ctx.lineTo(point.x, point.y); } - if (this.fill) { - ctx.fill(); - } + this._renderFill(ctx); this._removeShadow(ctx); if (this.stroke) { ctx.closePath(); @@ -192,4 +190,4 @@ return new fabric.Polygon(object.points, object, true); }; -})(typeof exports !== 'undefined' ? exports : this); \ No newline at end of file +})(typeof exports !== 'undefined' ? exports : this); diff --git a/src/polyline.class.js b/src/polyline.class.js index dadfc27d..f2b02840 100644 --- a/src/polyline.class.js +++ b/src/polyline.class.js @@ -101,9 +101,7 @@ point = this.points[i]; ctx.lineTo(point.x, point.y); } - if (this.fill) { - ctx.fill(); - } + this._renderFill(ctx); this._removeShadow(ctx); if (this.stroke) { ctx.stroke(); @@ -165,4 +163,4 @@ return new fabric.Polyline(points, object, true); }; -})(typeof exports !== 'undefined' ? exports : this); \ No newline at end of file +})(typeof exports !== 'undefined' ? exports : this); diff --git a/src/rect.class.js b/src/rect.class.js index 6f680421..299dbc5d 100644 --- a/src/rect.class.js +++ b/src/rect.class.js @@ -125,10 +125,7 @@ ctx.quadraticCurveTo(x,y,x+rx,y,x+rx,y); ctx.closePath(); - if (this.fill) { - ctx.fill(); - } - + this._renderFill(ctx); this._removeShadow(ctx); if (this.strokeDashArray) { diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index 659266b7..75fa2e1a 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -544,7 +544,11 @@ ? this.backgroundColor.toLive(canvasToDrawOn) : this.backgroundColor; - canvasToDrawOn.fillRect(0, 0, this.width, this.height); + canvasToDrawOn.fillRect( + this.backgroundColor.offsetX || 0, + this.backgroundColor.offsetY || 0, + this.width, + this.height); } if (typeof this.backgroundImage === 'object') { diff --git a/src/triangle.class.js b/src/triangle.class.js index 6757adf4..db71fa59 100644 --- a/src/triangle.class.js +++ b/src/triangle.class.js @@ -53,9 +53,8 @@ ctx.lineTo(widthBy2, heightBy2); ctx.closePath(); - if (this.fill) { - ctx.fill(); - } + this._renderFill(ctx); + if (this.stroke) { ctx.stroke(); } @@ -116,4 +115,4 @@ return new fabric.Triangle(object); }; -})(typeof exports !== 'undefined' ? exports : this); \ No newline at end of file +})(typeof exports !== 'undefined' ? exports : this); diff --git a/test/unit/pattern.js b/test/unit/pattern.js index 035d1b14..f801d17c 100644 --- a/test/unit/pattern.js +++ b/test/unit/pattern.js @@ -43,6 +43,8 @@ equal(pattern.source, img); equal(pattern.repeat, 'repeat'); + equal(pattern.offsetX, 0); + equal(pattern.offsetY, 0); }); test('toObject', function() { @@ -57,6 +59,8 @@ equal(object.source, '../fixtures/greyfloral.png'); } equal(object.repeat, 'repeat'); + equal(object.offsetX, 0); + equal(object.offsetY, 0); var sourceExecuted; var patternWithGetSource = new fabric.Pattern({ @@ -74,4 +78,4 @@ ok(typeof pattern.toLive == 'function'); }); -})(); \ No newline at end of file +})();