From 9be89b2f2f40964d8408a2bcd8337772cb99ccbf Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 20 Feb 2013 13:19:22 +0100 Subject: [PATCH] drawCorners -> drawControls, for consistency. Remove unused hasCorners and use hasControls instead of hideCorners. Version 1.0.12 --- HEADER.js | 2 +- dist/all.js | 56 +++++++++++++++--------------- dist/all.min.js | 10 +++--- dist/all.min.js.gz | Bin 44450 -> 44437 bytes package.json | 2 +- src/group.class.js | 6 ++-- src/image.class.js | 2 +- src/object.class.js | 2 +- src/object_interactivity.mixin.js | 4 +-- src/path.class.js | 2 +- src/path_group.class.js | 2 +- src/static_canvas.class.js | 34 +++++++++--------- src/text.class.js | 2 +- test/unit/object.js | 6 ++-- 14 files changed, 65 insertions(+), 65 deletions(-) diff --git a/HEADER.js b/HEADER.js index 4e750b4f..f9ebfee5 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.0.11" }; +var fabric = fabric || { version: "1.0.12" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; diff --git a/dist/all.js b/dist/all.js index 12899629..7a67c288 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.0.11" }; +var fabric = fabric || { version: "1.0.12" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; @@ -5744,7 +5744,7 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { clipTo: null, /** - * Indicates whether object controls (borders/corners) are rendered above overlay image + * Indicates whether object controls (borders/controls) are rendered above overlay image * @property * @type Boolean */ @@ -6056,11 +6056,11 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { if (!object) return; if (this.controlsAboveOverlay) { - var hasBorders = object.hasBorders, hasCorners = object.hasCorners; - object.hasBorders = object.hasCorners = false; + var hasBorders = object.hasBorders, hasControls = object.hasControls; + object.hasBorders = object.hasControls = false; object.render(ctx); object.hasBorders = hasBorders; - object.hasCorners = hasCorners; + object.hasControls = hasControls; } else { object.render(ctx); @@ -6288,7 +6288,7 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { } // delegate rendering to group selection if one exists - // used for drawing selection borders/corners + // used for drawing selection borders/controls var activeGroup = this.getActiveGroup(); if (activeGroup) { activeGroup.render(ctx); @@ -6304,7 +6304,7 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { }, /** - * Draws objects' controls (borders/corners) + * Draws objects' controls (borders/controls) * @method drawControls * @param {Object} ctx context to render controls on */ @@ -6313,7 +6313,7 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { if (activeGroup) { ctx.save(); fabric.Group.prototype.transform.call(activeGroup, ctx); - activeGroup.drawBorders(ctx).drawCorners(ctx); + activeGroup.drawBorders(ctx).drawControls(ctx); ctx.restore(); } else { @@ -6322,7 +6322,7 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { ctx.save(); fabric.Object.prototype.transform.call(this._objects[i], ctx); - this._objects[i].drawBorders(ctx).drawCorners(ctx); + this._objects[i].drawBorders(ctx).drawControls(ctx); ctx.restore(); this.lastRenderedObjectWithControlsAboveOverlay = this._objects[i]; @@ -6374,7 +6374,7 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { if (activeGroup) { // not removing group due to complications with restoring it with correct state afterwords - this._tempRemoveBordersCornersFromGroup(activeGroup); + this._tempRemoveBordersControlsFromGroup(activeGroup); } else if (activeObject && this.deactivateAll) { this.deactivateAll(); @@ -6393,7 +6393,7 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { this.setWidth(origWidth).setHeight(origHeight); if (activeGroup) { - this._restoreBordersCornersOnGroup(activeGroup); + this._restoreBordersControlsOnGroup(activeGroup); } else if (activeObject && this.setActiveObject) { this.setActiveObject(activeObject); @@ -6407,13 +6407,13 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { /** * @private - * @method _tempRemoveBordersCornersFromGroup + * @method _tempRemoveBordersControlsFromGroup */ - _tempRemoveBordersCornersFromGroup: function(group) { - group.origHideCorners = group.hideCorners; + _tempRemoveBordersControlsFromGroup: function(group) { + group.origHasControls = group.hasControls; group.origBorderColor = group.borderColor; - group.hideCorners = true; + group.hasControls = true; group.borderColor = 'rgba(0,0,0,0)'; group.forEachObject(function(o) { @@ -6424,10 +6424,10 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { /** * @private - * @method _restoreBordersCornersOnGroup + * @method _restoreBordersControlsOnGroup */ - _restoreBordersCornersOnGroup: function(group) { - group.hideCorners = group.origHideCorners; + _restoreBordersControlsOnGroup: function(group) { + group.hideControls = group.origHideControls; group.borderColor = group.origBorderColor; group.forEachObject(function(o) { @@ -9761,7 +9761,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati if (this.active && !noTransform) { this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + this.drawControls(ctx); } ctx.restore(); }, @@ -11065,12 +11065,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati * Draws corners of an object's bounding box. * Requires public properties: width, height, scaleX, scaleY * Requires public options: cornerSize, padding - * @method drawCorners + * @method drawControls * @param {CanvasRenderingContext2D} ctx Context to draw on * @return {fabric.Object} thisArg * @chainable */ - drawCorners: function(ctx) { + drawControls: function(ctx) { if (!this.hasControls) return; var size = this.cornerSize, @@ -13035,7 +13035,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati } if (!noTransform && this.active) { this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + this.drawControls(ctx); } ctx.restore(); }, @@ -13342,7 +13342,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati if (this.active) { this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + this.drawControls(ctx); } ctx.restore(); }, @@ -13593,7 +13593,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati object.setCoords(); // do not display corners of objects enclosed in a group - object.hideCorners = true; + object.hasControls = false; }, this); }, @@ -13759,7 +13759,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati if (!noTransform && this.active) { this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + this.drawControls(ctx); } ctx.restore(); this.setCoords(); @@ -13823,7 +13823,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati object.set('scaleY', object.get('scaleY') * this.get('scaleY')); object.setCoords(); - object.hideCorners = false; + object.hasControls = true; object.setActive(false); object.setCoords(); @@ -14168,7 +14168,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati if (this.active && !noTransform) { this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + this.drawControls(ctx); } ctx.restore(); }, @@ -16024,7 +16024,7 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { this._render(ctx); if (!noTransform && this.active) { this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + this.drawControls(ctx); } ctx.restore(); }, diff --git a/dist/all.min.js b/dist/all.min.js index ade96146..53b22e04 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,5 +1,5 @@ -/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.0.11"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_r?n:i-t;s(u(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;if(e.length>1){var i=e.some(function(e){return e.type==="text"});i?(r=new fabric.Group([],t),e.reverse().forEach(function(e){e.cx&&(e.left=e.cx),e.cy&&(e.top=e.cy),r.addWithUpdate(e)})):r=new fabric.PathGroup(e,t)}else r=e[0];return 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))}}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}(),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!==1/0&&r!==-1/0&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?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){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function g(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function y(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function b(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={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,p=f.length;c0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t=n.sourceFromHex(e);t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),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("")},isEmpty:function(){return this._objects.length===0},remove:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared"));var t=this._objects,n=t.indexOf(e);return n!==-1&&(t.splice(n,1),this.fire("object:removed",{target:e})),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,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.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.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,t){if(this.width===0||this.height===0)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||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),n&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(n[0],n[1],n[2],n[3],n[4],n[5])),this._setShadow(e),this._render(e,t),this._removeShadow(e),this.active&&!t&&(this.drawBorders(e),this.hideCorners||this.drawCorners(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.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",!1).set("flipY",!1),this.toDataURL -(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL("png");r.dispose(),r=t=null,e&&e(i)}var n=t.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(){return this.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)},setGradientFill:function(e){this.set("fill",t.Gradient.forObject(this,e))},setPatternFill:function(e){this.set("fill",new t.Pattern(e))},setShadow:function(e){this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e,arguments[0][e],arguments[1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this,s;n=n.toString(),r?r=t.util.object.clone(r):r={},~e.indexOf(".")&&(s=e.split("."));var o=s?this.get(s[0])[s[1]]:this.get(e);"from"in r||(r.from=o),~n.indexOf("=")?n=o+parseFloat(n.replace("=","")):n=parseFloat(n),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){s?i[s[0]][s[1]]=t:i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+this.getWidth()/2:n==="right"&&(i=t.x-this.getWidth()/2),r==="top"?s=t.y+this.getHeight()/2:r==="bottom"&&(s=t.y-this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-this.getWidth()/2:n==="right"&&(i=t.x+this.getWidth()/2),r==="top"?s=t.y-this.getHeight()/2:r==="bottom"&&(s=t.y+this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){return this.translateToCenterPoint(new fabric.Point(this.left,this.top),this.originX,this.originY)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-this.getWidth()/2:n==="right"?s=i.x+this.getWidth()/2:s=i.x,r==="top"?o=i.y-this.getHeight()/2:r==="bottom"?o=i.y+this.getHeight()/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y);return r.x>e.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;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},drawCorners:function(e){if(!this.hasControls)return;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",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(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){return'"},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this.fill&&e.fill(),this._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=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this._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,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this._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 e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,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=[];for(var t=0,r=this.points.length;t"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[];for(var t=0,n=this.path.length;t',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke,o=t.util.removeFromArray;if(t.Group)return;var u={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.hideCorners=!0},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this.objects.length;this[e]=t;while(n--)this.objects[n].set(e,t)}else this[e]=t},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this.objects,"toObject",e)})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hideCorners=!1,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale();return this},toSVG:function(){var e=[];for(var t=this.objects.length;t--;)e.push(this.objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in u){if(this[e])return this[e];for(var t=0,n=this.objects.length;t'+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.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){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){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.setActive(!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];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){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[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){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},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),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=new Image;e&&e.indexOf("data")===0?(r.src=r._src=e,t&&t.call(n,r)):e&&request(e,"binary",function(i){r.src=new Buffer(i,"binary"),r._src=e,t&&t.call(n,r)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.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),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.0.12"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_r?n:i-t;s(u(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;if(e.length>1){var i=e.some(function(e){return e.type==="text"});i?(r=new fabric.Group([],t),e.reverse().forEach(function(e){e.cx&&(e.left=e.cx),e.cy&&(e.top=e.cy),r.addWithUpdate(e)})):r=new fabric.PathGroup(e,t)}else r=e[0];return 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))}}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}(),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!==1/0&&r!==-1/0&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?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){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function g(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function y(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function b(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={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,p=f.length;c0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t=n.sourceFromHex(e);t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),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("")},isEmpty:function(){return this._objects.length===0},remove:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared"));var t=this._objects,n=t.indexOf(e);return n!==-1&&(t.splice(n,1),this.fire("object:removed",{target:e})),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,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.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.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,t){if(this.width===0||this.height===0)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||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),n&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(n[0],n[1],n[2],n[3],n[4],n[5])),this._setShadow(e),this._render(e,t),this._removeShadow(e),this.active&&!t&&(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.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",!1).set("flipY",!1),this.toDataURL( +function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL("png");r.dispose(),r=t=null,e&&e(i)}var n=t.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(){return this.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)},setGradientFill:function(e){this.set("fill",t.Gradient.forObject(this,e))},setPatternFill:function(e){this.set("fill",new t.Pattern(e))},setShadow:function(e){this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e,arguments[0][e],arguments[1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this,s;n=n.toString(),r?r=t.util.object.clone(r):r={},~e.indexOf(".")&&(s=e.split("."));var o=s?this.get(s[0])[s[1]]:this.get(e);"from"in r||(r.from=o),~n.indexOf("=")?n=o+parseFloat(n.replace("=","")):n=parseFloat(n),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){s?i[s[0]][s[1]]=t:i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+this.getWidth()/2:n==="right"&&(i=t.x-this.getWidth()/2),r==="top"?s=t.y+this.getHeight()/2:r==="bottom"&&(s=t.y-this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-this.getWidth()/2:n==="right"&&(i=t.x+this.getWidth()/2),r==="top"?s=t.y-this.getHeight()/2:r==="bottom"&&(s=t.y+this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){return this.translateToCenterPoint(new fabric.Point(this.left,this.top),this.originX,this.originY)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-this.getWidth()/2:n==="right"?s=i.x+this.getWidth()/2:s=i.x,r==="top"?o=i.y-this.getHeight()/2:r==="bottom"?o=i.y+this.getHeight()/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y);return r.x>e.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;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;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(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){return'"},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this.fill&&e.fill(),this._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=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this._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,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this._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 e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,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=[];for(var t=0,r=this.points.length;t"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[];for(var t=0,n=this.path.length;t',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor +:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke,o=t.util.removeFromArray;if(t.Group)return;var u={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this.objects.length;this[e]=t;while(n--)this.objects[n].set(e,t)}else this[e]=t},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this.objects,"toObject",e)})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hasControls=!0,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale();return this},toSVG:function(){var e=[];for(var t=this.objects.length;t--;)e.push(this.objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in u){if(this[e])return this[e];for(var t=0,n=this.objects.length;t'+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.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){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){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.setActive(!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];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){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[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){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,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},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),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=new Image;e&&e.indexOf("data")===0?(r.src=r._src=e,t&&t.call(n,r)):e&&request(e,"binary",function(i){r.src=new Buffer(i,"binary"),r._src=e,t&&t.call(n,r)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.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),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index 9ee31092e2eb6c47a81a69ae51638069feebcb82..e8c2937b21369c3be65c8941d822573e8a9c9b05 100644 GIT binary patch delta 42491 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 bkO+mJKMJ4M8Q{^P@&5;EpC%zJasmMWii*}e delta 42438 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", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "repository": "git://github.com/kangax/fabric.js", diff --git a/src/group.class.js b/src/group.class.js index c9a835fc..ca257f41 100644 --- a/src/group.class.js +++ b/src/group.class.js @@ -91,7 +91,7 @@ object.setCoords(); // do not display corners of objects enclosed in a group - object.hideCorners = true; + object.hasControls = false; }, this); }, @@ -257,7 +257,7 @@ if (!noTransform && this.active) { this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + this.drawControls(ctx); } ctx.restore(); this.setCoords(); @@ -321,7 +321,7 @@ object.set('scaleY', object.get('scaleY') * this.get('scaleY')); object.setCoords(); - object.hideCorners = false; + object.hasControls = true; object.setActive(false); object.setCoords(); diff --git a/src/image.class.js b/src/image.class.js index 2ec6d295..df4d1b58 100644 --- a/src/image.class.js +++ b/src/image.class.js @@ -109,7 +109,7 @@ if (this.active && !noTransform) { this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + this.drawControls(ctx); } ctx.restore(); }, diff --git a/src/object.class.js b/src/object.class.js index f0232ba5..d59273bc 100644 --- a/src/object.class.js +++ b/src/object.class.js @@ -663,7 +663,7 @@ if (this.active && !noTransform) { this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + this.drawControls(ctx); } ctx.restore(); }, diff --git a/src/object_interactivity.mixin.js b/src/object_interactivity.mixin.js index f76467b7..4c3e7d8b 100644 --- a/src/object_interactivity.mixin.js +++ b/src/object_interactivity.mixin.js @@ -383,12 +383,12 @@ * Draws corners of an object's bounding box. * Requires public properties: width, height, scaleX, scaleY * Requires public options: cornerSize, padding - * @method drawCorners + * @method drawControls * @param {CanvasRenderingContext2D} ctx Context to draw on * @return {fabric.Object} thisArg * @chainable */ - drawCorners: function(ctx) { + drawControls: function(ctx) { if (!this.hasControls) return; var size = this.cornerSize, diff --git a/src/path.class.js b/src/path.class.js index 3605cd09..2fa80f88 100644 --- a/src/path.class.js +++ b/src/path.class.js @@ -571,7 +571,7 @@ } if (!noTransform && this.active) { this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + this.drawControls(ctx); } ctx.restore(); }, diff --git a/src/path_group.class.js b/src/path_group.class.js index f912f92f..b2cbaecf 100644 --- a/src/path_group.class.js +++ b/src/path_group.class.js @@ -82,7 +82,7 @@ if (this.active) { this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + this.drawControls(ctx); } ctx.restore(); }, diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index 8a67dfa5..076f39af 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -117,7 +117,7 @@ clipTo: null, /** - * Indicates whether object controls (borders/corners) are rendered above overlay image + * Indicates whether object controls (borders/controls) are rendered above overlay image * @property * @type Boolean */ @@ -429,11 +429,11 @@ if (!object) return; if (this.controlsAboveOverlay) { - var hasBorders = object.hasBorders, hasCorners = object.hasCorners; - object.hasBorders = object.hasCorners = false; + var hasBorders = object.hasBorders, hasControls = object.hasControls; + object.hasBorders = object.hasControls = false; object.render(ctx); object.hasBorders = hasBorders; - object.hasCorners = hasCorners; + object.hasControls = hasControls; } else { object.render(ctx); @@ -661,7 +661,7 @@ } // delegate rendering to group selection if one exists - // used for drawing selection borders/corners + // used for drawing selection borders/controls var activeGroup = this.getActiveGroup(); if (activeGroup) { activeGroup.render(ctx); @@ -677,7 +677,7 @@ }, /** - * Draws objects' controls (borders/corners) + * Draws objects' controls (borders/controls) * @method drawControls * @param {Object} ctx context to render controls on */ @@ -686,7 +686,7 @@ if (activeGroup) { ctx.save(); fabric.Group.prototype.transform.call(activeGroup, ctx); - activeGroup.drawBorders(ctx).drawCorners(ctx); + activeGroup.drawBorders(ctx).drawControls(ctx); ctx.restore(); } else { @@ -695,7 +695,7 @@ ctx.save(); fabric.Object.prototype.transform.call(this._objects[i], ctx); - this._objects[i].drawBorders(ctx).drawCorners(ctx); + this._objects[i].drawBorders(ctx).drawControls(ctx); ctx.restore(); this.lastRenderedObjectWithControlsAboveOverlay = this._objects[i]; @@ -747,7 +747,7 @@ if (activeGroup) { // not removing group due to complications with restoring it with correct state afterwords - this._tempRemoveBordersCornersFromGroup(activeGroup); + this._tempRemoveBordersControlsFromGroup(activeGroup); } else if (activeObject && this.deactivateAll) { this.deactivateAll(); @@ -766,7 +766,7 @@ this.setWidth(origWidth).setHeight(origHeight); if (activeGroup) { - this._restoreBordersCornersOnGroup(activeGroup); + this._restoreBordersControlsOnGroup(activeGroup); } else if (activeObject && this.setActiveObject) { this.setActiveObject(activeObject); @@ -780,13 +780,13 @@ /** * @private - * @method _tempRemoveBordersCornersFromGroup + * @method _tempRemoveBordersControlsFromGroup */ - _tempRemoveBordersCornersFromGroup: function(group) { - group.origHideCorners = group.hideCorners; + _tempRemoveBordersControlsFromGroup: function(group) { + group.origHasControls = group.hasControls; group.origBorderColor = group.borderColor; - group.hideCorners = true; + group.hasControls = true; group.borderColor = 'rgba(0,0,0,0)'; group.forEachObject(function(o) { @@ -797,10 +797,10 @@ /** * @private - * @method _restoreBordersCornersOnGroup + * @method _restoreBordersControlsOnGroup */ - _restoreBordersCornersOnGroup: function(group) { - group.hideCorners = group.origHideCorners; + _restoreBordersControlsOnGroup: function(group) { + group.hideControls = group.origHideControls; group.borderColor = group.origBorderColor; group.forEachObject(function(o) { diff --git a/src/text.class.js b/src/text.class.js index 3ff57d1e..bf146c6c 100644 --- a/src/text.class.js +++ b/src/text.class.js @@ -643,7 +643,7 @@ this._render(ctx); if (!noTransform && this.active) { this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + this.drawControls(ctx); } ctx.restore(); }, diff --git a/test/unit/object.js b/test/unit/object.js index aa30ef65..64561bb6 100644 --- a/test/unit/object.js +++ b/test/unit/object.js @@ -392,7 +392,7 @@ equal(cObj.drawBorders(dummyContext), cObj, 'chainable'); }); - test('drawCorners', function() { + test('drawControls', function() { var cObj = new fabric.Object(), canvas = fabric.document.createElement('canvas'); //let excanvas kick in for IE8 and lower @@ -400,8 +400,8 @@ G_vmlCanvasManager.initElement(canvas) } var dummyContext = canvas.getContext('2d'); - ok(typeof cObj.drawCorners == 'function'); - equal(cObj.drawCorners(dummyContext), cObj, 'chainable'); + ok(typeof cObj.drawControls == 'function'); + equal(cObj.drawControls(dummyContext), cObj, 'chainable'); }); test('clone', function() {