From d3e2b03856db007892429fca468ff0b58388f75e Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 21 Jul 2013 12:33:13 +0200 Subject: [PATCH] Start implementing pattern toSVG support --- dist/all.js | 72 +++++++++++++++++++++++++++++++------ dist/all.min.js | 10 +++--- dist/all.min.js.gz | Bin 49515 -> 49637 bytes src/pattern.class.js | 34 ++++++++++++++++++ src/shapes/object.class.js | 38 ++++++++++++++------ 5 files changed, 129 insertions(+), 25 deletions(-) diff --git a/dist/all.js b/dist/all.js index 7e2a75c9..d9463cc7 100644 --- a/dist/all.js +++ b/dist/all.js @@ -6236,6 +6236,8 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ initialize: function(options) { options || (options = { }); + this.id = fabric.Object.__uid++; + if (options.source) { if (typeof options.source === 'string') { // function string @@ -6292,6 +6294,38 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ }; }, + /* _TO_SVG_START_ */ + /** + * Returns SVG representation of a pattern + * @return {String} SVG representation of a pattern + */ + toSVG: function() { + var patternSource = typeof this.source === 'function' ? this.source() : this.source; + var patternWidth = patternSource.width; + var patternHeight = patternSource.height; + var patternImgSrc = ''; + + if (patternSource.src) { + patternImgSrc = patternSource.src; + } + else if (patternSource.toDataURL) { + patternImgSrc = patternSource.toDataURL(); + } + + return '' + + '' + + ''; + }, + /* _TO_SVG_END_ */ + /** * Returns an instance of CanvasPattern * @param ctx @@ -10563,17 +10597,35 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @return {String} */ getSvgStyles: function() { + + var fill = this.fill + ? (this.fill.toLive ? 'url(#SVGID_' + this.fill.id + ')' : this.fill) + : 'none'; + + var stroke = this.stroke + ? (this.stroke.toLive ? 'url(#SVGID_' + this.stroke.id + ')' : this.stroke) + : 'none'; + + var strokeWidth = this.strokeWidth ? this.strokeWidth : '0'; + var strokeDashArray = this.strokeDashArray ? this.strokeDashArray.join(' ') : ''; + var strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt'; + var strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter'; + var strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4'; + var opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1'; + + var visibility = this.visible ? '' : " visibility: hidden;"; + return [ - "stroke: ", (this.stroke ? this.stroke : 'none'), "; ", - "stroke-width: ", (this.strokeWidth ? this.strokeWidth : '0'), "; ", - "stroke-dasharray: ", (this.strokeDashArray ? this.strokeDashArray.join(' ') : ''), "; ", - "stroke-linecap: ", (this.strokeLineCap ? this.strokeLineCap : 'butt'), "; ", - "stroke-linejoin: ", (this.strokeLineJoin ? this.strokeLineJoin : 'miter'), "; ", - "stroke-miterlimit: ", (this.strokeMiterLimit ? this.strokeMiterLimit : '4'), "; ", - "fill: ", (this.fill ? (this.fill && this.fill.toLive ? 'url(#SVGID_' + this.fill.id + ')' : this.fill) : 'none'), "; ", - "opacity: ", (typeof this.opacity !== 'undefined' ? this.opacity : '1'), ";", - (this.visible ? '' : " visibility: hidden;") - ].join(""); + "stroke: ", stroke, "; ", + "stroke-width: ", strokeWidth, "; ", + "stroke-dasharray: ", strokeDashArray, "; ", + "stroke-linecap: ", strokeLineCap, "; ", + "stroke-linejoin: ", strokeLineJoin, "; ", + "stroke-miterlimit: ", strokeMiterLimit, "; ", + "fill: ", fill, "; ", + "opacity: ", opacity, ";", + visibility + ].join(''); }, /** diff --git a/dist/all.min.js b/dist/all.min.js index b9af3c91..45cb4a6e 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,6 +1,6 @@ /* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.2.5"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){e||(e={});var t=+(new Date),n=e.duration||500,r=t+n,i,s=e.onChange||function(){},o=e.abort||function(){return!1},u=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},a="startValue"in e?e.startValue:0,f="endValue"in e?e.endValue:100,l=e.byValue||f-a;e.onStart&&e.onStart(),function c(){i=+(new Date);var f=i>r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function d(e,t,n){if(e){var r=fabric.util.createImage();r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function v(e,t){function n(){++i===s&&t&&t(r)}var r=[],i=0,s=e.length;e.forEach(function(e,t){if(!e.type)return;var i=fabric.util.getKlass(e.type);i.async?i.fromObject(e,function(e,i){i||(r[t]=e),n()}):(r[t]=i.fromObject(e),n())})}function m(e,t,n){var r;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function g(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 b(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function w(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function E(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function S(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function x(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}function T(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]}function N(e,t,n,r){var i=r[0],s=r[1],o=r[2],u=r[3],a=r[4],f=r[5],l=r[6],c=O(f,l,i,s,u,a,o,t,n);for(var h=0;h1&&(d=Math.sqrt(d),n*=d,r*=d);var v=c/n,m=l/n,g=-l/r,y=c/r,b=v*u+m*a,w=g*u+y*a,E=v*e+m*t,S=g*e+y*t,x=(E-b)*(E-b)+(S-w)*(S-w),T=1/x-.25;T<0&&(T=0);var N=Math.sqrt(T);s===i&&(N=-N);var k=.5*(b+E)-N*(S-w),O=.5*(w+S)+N*(E-b),M=Math.atan2(w-O,b-k),_=Math.atan2(S-O,E-k),D=_-M;D<0&&s===1?D+=2*Math.PI:D>0&&s===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t,n,r={left:0,top:0},i=e&&e.ownerDocument,s={left:0,top:0},o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!i)return{left:0,top:0};for(var u in o)s[o[u]]+=parseInt(f(e,u),10)||0;return t=i.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),i!=null&&i===i.window?n=i:n=i.nodeType===9&&(i.defaultView||i.parentWindow),{left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)+s.left,top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0)+s.top}}function f(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}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}),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.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.getElementStyle=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){w.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),w.has(e,function(r){r?w.get(e,function(e){var t=S(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function S(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 x(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 T(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function N(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}function C(e){var t=e.getElementsByTagName("linearGradient"),n=e.getElementsByTagName("radialGradient"),r,i,s={};i=t.length;for(;i--;)r=t[i],s[r.getAttribute("id")]=r;i=n.length;for(;i--;)r=n[i],s[r.getAttribute("id")]=r;return s}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices;t.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];var u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;ce.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){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={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}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,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,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;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])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;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('');var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i;if(t){i=r;for(var s=r-1;s>=0;--s){var o=e.intersectsWithObject(this._objects[s])||e.isContainedWithinObject(this._objects[s])||this._objects[s].isContainedWithinObject(e);if(o){i=s;break}}}else i=r-1;n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i;if(t){i=r;for(var s=r+1;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,f=u.data.length;ao.padding?l.x<0?l.x+=o.padding:l.x-=o.padding:l.x=0,s(l.y)>o.padding?l.y<0?l.y+=o.padding:l.y-=o.padding:l.y=0;var c=o.scaleX,h=o.scaleY;if(n==="equally"&&!u&&!a){var p=l.y+l.x,d=(o.height+o.strokeWidth)*r.original.scaleY+(o.width+o.strokeWidth)*r.original.scaleX;c=r.original.scaleX*p/d,h=r.original.scaleY*p/d,o.set("scaleX",c),o.set("scaleY",h)}else n?n==="x"&&!o.get("lockUniScaling")?(c=l.x/(o.width+o.strokeWidth),u||o.set("scaleX",c)):n==="y"&&!o.get("lockUniScaling")&&(h=l.y/(o.height+o.strokeWidth),a||o.set("scaleY",h)):(c=l.x/(o.width+o.strokeWidth),h=l.y/(o.height+o.strokeWidth),u||o.set("scaleX",c),a||o.set("scaleY",h));c<0&&(r.originX==="left"?r.originX="right":r.originX==="right"&&(r.originX="left")),h<0&&(r.originY==="top"?r.originY="bottom":r.originY==="bottom"&&(r.originY="top")),o.setPositionByOrigin(f,r.originX,r.originY)},_rotateObject:function(e,t){var n=this._currentTransform,s=this._offset;if(n.target.get("lockRotation"))return;var o=i(n.ey-n.top-s.top,n.ex-n.left-s.left),u=i(t-n.top-s.top,e-n.left-s.left),a=r(u-o+n.theta);a<0&&(a=360+a),n.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,i=s(n),o=s(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?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)),c=n===i&&r===s;for(var h=this._objects.length;h--;){a=this._objects[h];if(!a)continue;if(a.intersectsWithRect(f,l)||a.isContainedWithinRect(f,l)||a.containsPoint(f)||a.containsPoint(l))if(this.selection&&a.selectable){a.set("active",!0),t.push(a);if(c)break}}t.length===1?this.setActiveObject(t[0],e):t.length>1&&(t=new fabric.Group(t.reverse()),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e),this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke),this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);e.format==="jpeg"&&(r.backgroundColor="#fff");var i={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:n.width/2,top:n.height/2}),r.add(this);var s=r.toDataURL(e);return this.set(i).setCoords(),r.dispose(),r=null,s},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;re.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?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(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),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:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),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),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth>1?this.strokeWidth/2:0,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=this.transparentCorners,w=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,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,w||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,w||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,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,w||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,w||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},i=t.StaticCanvas.supports("setLineDash");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",Math.abs(this.x2-this.x1)||1),this.set("height",Math.abs(this.y2-this.y1)||1),this.set("left","left"in e?e.left:Math.min(this.x1,this.x2)+this.width/2),this.set("top","top"in e?e.top:Math.min(this.y1,this.y2)+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top);if(!this.strokeDashArray||this.strokeDashArray&&i){var n=this.x1<=this.x2?-1:1,r=this.y1<=this.y2?-1:1;e.moveTo(this.width===1?0:n*this.width/2,this.height===1?0:r*this.height/2),e.lineTo(this.width===1?0:n*-1*this.width/2,this.height===1?0:r*-1*this.height/2)}e.lineWidth=this.strokeWidth;var s=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this._renderStroke(e),e.strokeStyle=s},_renderDashedStroke:function(e){var n=this.x1<=this.x2?-1:1,r=this.y1<=this.y2?-1:1,i=this.width===1?0:n*this.width/2,s=this.height===1?0:r*this.height/2;e.beginPath(),t.util.drawDashedLine(e,i,s,-i,-s,this.strokeDashArray),e.closePath()},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},_render:function(e,t){e. -beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},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=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".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,r=t.util.array.min;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];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,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;i'+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke||this.strokeDashArray){var t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.join("")},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=this._originalImage,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height;if(fabric.isLikelyNode){var s=n.toDataURL("image/png").substring(22);r.src=new Buffer(s,"base64"),i._element=r,e&&e()}else r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.Brightness=fabric.util.createClass({type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s=0&&N=0&&Co&&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)},function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.object.clone,i=t.util.toFixed,s=t.StaticCanvas.supports("setLineDash");if(t.Text){t.warn("fabric.Text is already defined");return}var o=t.Object.prototype.stateProperties.concat();o.push("fontFamily","fontWeight","fontSize","path","text","textDecoration","textShadow","textAlign","fontStyle","lineHeight","backgroundColor","textBackgroundColor","useNative"),t.Text=t.util.createClass(t.Object,{_dimensionAffectingProps:{fontSize:!0,fontWeight:!0,fontFamily:!0,textDecoration:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0},type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textShadow:"",textAlign:"left",fontStyle:"",lineHeight:1.3,backgroundColor:"",textBackgroundColor:"",path:null,useNative:!0,stateProperties:o,initialize:function(e,t){t=t||{},this.text=e,this.__skipDimension=!0,this.setOptions(t),this.__skipDimension=!1,this._initDimensions(),this.setCoords()},_initDimensions:function(){if(this.__skipDimension)return;var e=t.util.createCanvasElement();this._render(e.getContext("2d"))},toString:function(){return"#'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){this.transform(e,t.isLikelyNode),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),e.save(),this._setTextShadow(e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.textShadow&&e.restore(),e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(!this.textShadow)return;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(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),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.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Text.prototype,{_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_initDummyElementForCufon:function(){var e=fabric.document.createElement("pre"),t=fabric.document.createElement("div");return t.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}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +e)+u}}var t=function(){var e=0;return function(t){return t.__uniqueID||(t.__uniqueID="uniqueID__"+e++)}}(),n,r;(function(){var e={};n=function(t){return e[t]},r=function(t,n){e[t]=n}})();var u=e(fabric.document.documentElement,"addEventListener","removeEventListener")&&e(fabric.window,"addEventListener","removeEventListener"),a=e(fabric.document.documentElement,"attachEvent","detachEvent")&&e(fabric.window,"attachEvent","detachEvent"),f={},l={},c,h;u?(c=function(e,t,n){e.addEventListener(t,n,!1)},h=function(e,t,n){e.removeEventListener(t,n,!1)}):a?(c=function(e,n,s){var o=t(e);r(o,e),f[o]||(f[o]={}),f[o][n]||(f[o][n]=[]);var u=i(o,s);f[o][n].push(u),e.attachEvent("on"+n,u.wrappedHandler)},h=function(e,n,r){var i=t(e),s;if(f[i]&&f[i][n])for(var o=0,u=f[i][n].length;o-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,n,r={left:0,top:0},i=e&&e.ownerDocument,s={left:0,top:0},o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!i)return{left:0,top:0};for(var u in o)s[o[u]]+=parseInt(f(e,u),10)||0;return t=i.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),i!=null&&i===i.window?n=i:n=i.nodeType===9&&(i.defaultView||i.parentWindow),{left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)+s.left,top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0)+s.top}}function f(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}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}),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.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.getElementStyle=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){w.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),w.has(e,function(r){r?w.get(e,function(e){var t=S(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function S(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 x(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 T(e){var t="";for(var n=0,r=e.length;n',"",t,"",""].join("")),t}function N(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}function C(e){var t=e.getElementsByTagName("linearGradient"),n=e.getElementsByTagName("radialGradient"),r,i,s={};i=t.length;for(;i--;)r=t[i],s[r.getAttribute("id")]=r;i=n.length;for(;i--;)r=n[i],s[r.getAttribute("id")]=r;return s}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices;t.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];var u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;ce.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){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={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}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,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,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;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])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;return e.createPattern(t,this.repeat)}}),fabric.Shadow=fabric.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,initialize:function(e){for(var t in e)this[t]=e[t]},toSVG:function(){},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}}}),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=fabric.util.removeListener,i=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas.prototype,{backgroundColor:"",backgroundImage:"",backgroundImageOpacity:1,backgroundImageStretch:!0,overlayImage:"",overlayImageLeft:0,overlayImageTop:0,includeDefaultValues:!0,stateful:!0,renderOnAddition:!0,clipTo:null,controlsAboveOverlay:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset +:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.overlayImage=e,n&&"overlayImageLeft"in n&&(this.overlayImageLeft=n.overlayImageLeft),n&&"overlayImageTop"in n&&(this.overlayImageTop=n.overlayImageTop),t&&t()},this),this},setBackgroundImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.backgroundImage=e,n&&"backgroundImageOpacity"in n&&(this.backgroundImageOpacity=n.backgroundImageOpacity),n&&"backgroundImageStretch"in n&&(this.backgroundImageStretch=n.backgroundImageStretch),t&&t()},this),this},setBackgroundColor:function(e,t){if(e.source){var n=this;fabric.util.loadImage(e.source,function(r){n.backgroundColor=new fabric.Pattern({source:r,repeat:e.repeat}),t&&t()})}else this.backgroundColor=e,t&&t();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw i;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw i},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.fire("object:removed",{target:e}),e.fire("removed")},getObjects:function(){return this._objects},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"];this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this.backgroundColor&&(t.fillStyle=this.backgroundColor.toLive?this.backgroundColor.toLive(t):this.backgroundColor,t.fillRect(this.backgroundColor.offsetX||0,this.backgroundColor.offsetY||0,this.width,this.height)),typeof this.backgroundImage=="object"&&this._drawBackroundImage(t);var n=this.getActiveGroup();for(var r=0,i=this._objects.length;r',''),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('');var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i;if(t){i=r;for(var s=r-1;s>=0;--s){var o=e.intersectsWithObject(this._objects[s])||e.isContainedWithinObject(this._objects[s])||this._objects[s].isContainedWithinObject(e);if(o){i=s;break}}}else i=r-1;n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i;if(t){i=r;for(var s=r+1;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,f=u.data.length;ao.padding?l.x<0?l.x+=o.padding:l.x-=o.padding:l.x=0,s(l.y)>o.padding?l.y<0?l.y+=o.padding:l.y-=o.padding:l.y=0;var c=o.scaleX,h=o.scaleY;if(n==="equally"&&!u&&!a){var p=l.y+l.x,d=(o.height+o.strokeWidth)*r.original.scaleY+(o.width+o.strokeWidth)*r.original.scaleX;c=r.original.scaleX*p/d,h=r.original.scaleY*p/d,o.set("scaleX",c),o.set("scaleY",h)}else n?n==="x"&&!o.get("lockUniScaling")?(c=l.x/(o.width+o.strokeWidth),u||o.set("scaleX",c)):n==="y"&&!o.get("lockUniScaling")&&(h=l.y/(o.height+o.strokeWidth),a||o.set("scaleY",h)):(c=l.x/(o.width+o.strokeWidth),h=l.y/(o.height+o.strokeWidth),u||o.set("scaleX",c),a||o.set("scaleY",h));c<0&&(r.originX==="left"?r.originX="right":r.originX==="right"&&(r.originX="left")),h<0&&(r.originY==="top"?r.originY="bottom":r.originY==="bottom"&&(r.originY="top")),o.setPositionByOrigin(f,r.originX,r.originY)},_rotateObject:function(e,t){var n=this._currentTransform,s=this._offset;if(n.target.get("lockRotation"))return;var o=i(n.ey-n.top-s.top,n.ex-n.left-s.left),u=i(t-n.top-s.top,e-n.left-s.left),a=r(u-o+n.theta);a<0&&(a=360+a),n.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,i=s(n),o=s(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?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)),c=n===i&&r===s;for(var h=this._objects.length;h--;){a=this._objects[h];if(!a)continue;if(a.intersectsWithRect(f,l)||a.isContainedWithinRect(f,l)||a.containsPoint(f)||a.containsPoint(l))if(this.selection&&a.selectable){a.set("active",!0),t.push(a);if(c)break}}t.length===1?this.setActiveObject(t[0],e):t.length>1&&(t=new fabric.Group(t.reverse()),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e),this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke),this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);e.format==="jpeg"&&(r.backgroundColor="#fff");var i={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:n.width/2,top:n.height/2}),r.add(this);var s=r.toDataURL(e);return this.set(i).setCoords(),r.dispose(),r=null,s},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;re.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?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(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),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:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),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),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth>1?this.strokeWidth/2:0,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=this.transparentCorners,w=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,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,w||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,w||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,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,w||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,w||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},i=t.StaticCanvas.supports("setLineDash");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",Math.abs(this.x2-this.x1)||1),this.set("height",Math.abs(this.y2-this.y1)||1),this.set("left","left"in e?e.left:Math.min(this.x1,this.x2)+this.width/2),this.set("top","top"in e?e.top:Math.min(this.y1,this.y2)+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top);if(!this.strokeDashArray||this.strokeDashArray&&i){var n=this.x1<=this.x2?-1:1,r=this.y1<=this.y2?-1:1;e.moveTo(this.width===1?0:n*this.width/2,this.height===1?0:r*this.height/2),e.lineTo(this.width===1?0:n*-1*this.width/2,this.height===1?0:r*-1*this.height/2)}e.lineWidth=this.strokeWidth;var s=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this._renderStroke(e),e.strokeStyle=s},_renderDashedStroke:function(e){var n=this.x1<=this.x2?-1:1,r=this.y1<=this.y2?-1:1,i=this.width===1?0:n*this.width/2,s=this.height===1?0:r*this.height/2;e.beginPath(),t.util.drawDashedLine(e,i,s,-i,-s,this.strokeDashArray),e.closePath()},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius" +)*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},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=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".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,r=t.util.array.min;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];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,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;i'+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke||this.strokeDashArray){var t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.join("")},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=this._originalImage,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height;if(fabric.isLikelyNode){var s=n.toDataURL("image/png").substring(22);r.src=new Buffer(s,"base64"),i._element=r,e&&e()}else r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.Brightness=fabric.util.createClass({type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s=0&&N=0&&Co&&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)},function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.object.clone,i=t.util.toFixed,s=t.StaticCanvas.supports("setLineDash");if(t.Text){t.warn("fabric.Text is already defined");return}var o=t.Object.prototype.stateProperties.concat();o.push("fontFamily","fontWeight","fontSize","path","text","textDecoration","textShadow","textAlign","fontStyle","lineHeight","backgroundColor","textBackgroundColor","useNative"),t.Text=t.util.createClass(t.Object,{_dimensionAffectingProps:{fontSize:!0,fontWeight:!0,fontFamily:!0,textDecoration:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0},type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textShadow:"",textAlign:"left",fontStyle:"",lineHeight:1.3,backgroundColor:"",textBackgroundColor:"",path:null,useNative:!0,stateProperties:o,initialize:function(e,t){t=t||{},this.text=e,this.__skipDimension=!0,this.setOptions(t),this.__skipDimension=!1,this._initDimensions(),this.setCoords()},_initDimensions:function(){if(this.__skipDimension)return;var e=t.util.createCanvasElement();this._render(e.getContext("2d"))},toString:function(){return"#'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){this.transform(e,t.isLikelyNode),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),e.save(),this._setTextShadow(e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.textShadow&&e.restore(),e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(!this.textShadow)return;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(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),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.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Text.prototype,{_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_initDummyElementForCufon:function(){var e=fabric.document.createElement("pre"),t=fabric.document.createElement("div");return t.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}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index fbe4b777807ee5aad0079f80675917eeb35f635b..a8c8b3e5c766a6e82d48f23a3c25d98a450ec6ec 100644 GIT binary patch delta 27340 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 Z#_+?(;bGl@8+tVU{{e^4_^&y~0su#PxVZoT diff --git a/src/pattern.class.js b/src/pattern.class.js index dd34a406..362229b7 100644 --- a/src/pattern.class.js +++ b/src/pattern.class.js @@ -30,6 +30,8 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ initialize: function(options) { options || (options = { }); + this.id = fabric.Object.__uid++; + if (options.source) { if (typeof options.source === 'string') { // function string @@ -86,6 +88,38 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ }; }, + /* _TO_SVG_START_ */ + /** + * Returns SVG representation of a pattern + * @return {String} SVG representation of a pattern + */ + toSVG: function() { + var patternSource = typeof this.source === 'function' ? this.source() : this.source; + var patternWidth = patternSource.width; + var patternHeight = patternSource.height; + var patternImgSrc = ''; + + if (patternSource.src) { + patternImgSrc = patternSource.src; + } + else if (patternSource.toDataURL) { + patternImgSrc = patternSource.toDataURL(); + } + + return '' + + '' + + ''; + }, + /* _TO_SVG_END_ */ + /** * Returns an instance of CanvasPattern * @param ctx diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index 8cb9a3e5..09f08df3 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -513,17 +513,35 @@ * @return {String} */ getSvgStyles: function() { + + var fill = this.fill + ? (this.fill.toLive ? 'url(#SVGID_' + this.fill.id + ')' : this.fill) + : 'none'; + + var stroke = this.stroke + ? (this.stroke.toLive ? 'url(#SVGID_' + this.stroke.id + ')' : this.stroke) + : 'none'; + + var strokeWidth = this.strokeWidth ? this.strokeWidth : '0'; + var strokeDashArray = this.strokeDashArray ? this.strokeDashArray.join(' ') : ''; + var strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt'; + var strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter'; + var strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4'; + var opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1'; + + var visibility = this.visible ? '' : " visibility: hidden;"; + return [ - "stroke: ", (this.stroke ? this.stroke : 'none'), "; ", - "stroke-width: ", (this.strokeWidth ? this.strokeWidth : '0'), "; ", - "stroke-dasharray: ", (this.strokeDashArray ? this.strokeDashArray.join(' ') : ''), "; ", - "stroke-linecap: ", (this.strokeLineCap ? this.strokeLineCap : 'butt'), "; ", - "stroke-linejoin: ", (this.strokeLineJoin ? this.strokeLineJoin : 'miter'), "; ", - "stroke-miterlimit: ", (this.strokeMiterLimit ? this.strokeMiterLimit : '4'), "; ", - "fill: ", (this.fill ? (this.fill && this.fill.toLive ? 'url(#SVGID_' + this.fill.id + ')' : this.fill) : 'none'), "; ", - "opacity: ", (typeof this.opacity !== 'undefined' ? this.opacity : '1'), ";", - (this.visible ? '' : " visibility: hidden;") - ].join(""); + "stroke: ", stroke, "; ", + "stroke-width: ", strokeWidth, "; ", + "stroke-dasharray: ", strokeDashArray, "; ", + "stroke-linecap: ", strokeLineCap, "; ", + "stroke-linejoin: ", strokeLineJoin, "; ", + "stroke-miterlimit: ", strokeMiterLimit, "; ", + "fill: ", fill, "; ", + "opacity: ", opacity, ";", + visibility + ].join(''); }, /**