From 987f165790fdb55800a2e50de51f48a802a081a9 Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 10 Nov 2013 15:15:31 +0100 Subject: [PATCH] Remove duplication in log.js --- build.js | 3 ++- dist/all.js | 49 +++++++++++++++++++++----------------------- dist/all.min.js | 14 ++++++------- dist/all.min.js.gz | Bin 58927 -> 58928 bytes dist/all.require.js | 49 +++++++++++++++++++++----------------------- src/log.js | 17 +++++++-------- 6 files changed, 62 insertions(+), 70 deletions(-) diff --git a/build.js b/build.js index b91d79aa..edd04b91 100644 --- a/build.js +++ b/build.js @@ -144,7 +144,6 @@ var filesToInclude = [ ifSpecifiedDependencyInclude('serialization', 'json', 'lib/json2.js'), ifSpecifiedInclude('gestures', 'lib/event.js'), - 'src/log.js', 'src/mixins/observable.mixin.js', 'src/mixins/collection.mixin.js', @@ -159,6 +158,8 @@ var filesToInclude = [ 'src/util/dom_misc.js', 'src/util/dom_request.js', + 'src/log.js', + ifSpecifiedInclude('animation', 'src/util/animate.js'), //'src/util/animate.js', ifSpecifiedInclude('easing', 'src/util/anim_ease.js'), diff --git a/dist/all.js b/dist/all.js index 22ca6b88..436ce917 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1756,32 +1756,6 @@ if (!JSON) { } }()); -/** - * Wrapper around `console.log` (when available) - * @param {Any} values Values to log - */ -fabric.log = function() { }; - -/** - * Wrapper around `console.warn` (when available) - * @param {Any} Values to log as a warning - */ -fabric.warn = function() { }; - -if (typeof console !== 'undefined') { - if (typeof console.log !== 'undefined' && console.log.apply) { - fabric.log = function() { - return console.log.apply(console, arguments); - }; - } - if (typeof console.warn !== 'undefined' && console.warn.apply) { - fabric.warn = function() { - return console.warn.apply(console, arguments); - }; - } -} - - (function(){ /** @@ -3773,6 +3747,29 @@ fabric.util.string = { })(); +/** + * Wrapper around `console.log` (when available) + * @param {Any} values Values to log + */ +fabric.log = function() { }; + +/** + * Wrapper around `console.warn` (when available) + * @param {Any} Values to log as a warning + */ +fabric.warn = function() { }; + +if (typeof console !== 'undefined') { + ['log', 'warn'].forEach(function(methodName) { + if (typeof console[methodName] !== 'undefined' && console[methodName].apply) { + fabric[methodName] = function() { + return console[methodName].apply(console, arguments); + }; + } + }); +} + + (function() { /** diff --git a/dist/all.min.js b/dist/all.min.js index 8c313bdb..170ab732 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.3.10"};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",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];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)}},function(e){function r(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function i(e,t){return Math.floor(Math.random()*(t-e+1))+e}function o(e){return e*s}function u(e){return e/s}function a(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 f(e,t){return parseFloat(Number(e).toFixed(t))}function l(){return!1}function c(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),h(t)[e]}function h(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function w(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 E(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function S(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 x(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]}function T(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=A(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 C=Math.sqrt(T);s===i&&(C=-C);var A=.5*(b+E)-C*(S-w),O=.5*(w+S)+C*(E-b),M=Math.atan2(w-O,b-A),_=Math.atan2(S-O,E-A),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=t})}function r(e,t){return i(e,t,function(e,t){return e>>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 t(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){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e-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){S.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),S.has(e,function(r){r?S.get(e,function(e){var t=T(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function T(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 N(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 C(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function k(e){var t=[];return L(t,e,"backgroundColor"),L(t,e,"overlayColor"),t.join("")}function L(e,t,n){t[n]&&t[n].toSVG&&e.push('','')}function A(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,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;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)} -}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),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=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!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)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();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.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},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"],n=this.getActiveGroup();return 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._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},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.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;r0&&(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;an.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.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,s=i(n),o=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),s,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+u-(n>0?0:s),f=t.ey+u-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+s,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+o-1,a+s,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,a+s-1,f,a+s-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+u-(n>0?0:s),t.ey+u-(r>0?0:o),s,o)},_findSelectedObjects:function(e){if(!this.selection)return;var t=this._collectObjects();t.length===1?this.setActiveObject(t[0],e):t.length>1&&(t=new fabric.Group(t.reverse()),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var e=[],t,n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,u=r+this._groupSelector.top,a=new fabric.Point(s(n,i),s(r,u)),f=new fabric.Point(o(n,i),o(r,u)),l=n===i&&r===u;for(var c=this._objects.length;c--;){t=this._objects[c];if(!t||!t.selectable||!t.visible)continue;if(t.intersectsWithRect(a,f)||t.isContainedWithinRect(a,f)||t.containsPoint(a)||t.containsPoint(f)){t.set("active",!0),e.push(t);if(l)break}}return e},findTarget:function(e,t){if(this.skipTargetFind)return;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._objects[o].evented&&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,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,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(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;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()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(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)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_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(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},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()})}return 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))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.group?t.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?t.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?t.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?t.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?t.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"?s=i.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:s=i.x,r==="top"?o=i.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"?o=i.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.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.get(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,{_controlsVisibility:null,_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(!this.isControlVisible(a))continue;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/2)*2;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)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=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,this.isControlVisible("tl")&&(o=i-p-r-l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.isControlVisible("tr")&&(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)),this.isControlVisible("bl")&&(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)),this.isControlVisible("br")&&(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")||(this.isControlVisible("mt")&&(o=i+g/2-p,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.isControlVisible("mb")&&(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)),this.isControlVisible("mr")&&(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)),this.isControlVisible("ml")&&(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&&this.isControlVisible("mtr")&&(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},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{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;r'),e?e(t.join("")):t.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)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.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(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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 i(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}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_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){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.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'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;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(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.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 r=0,i=t.length;r"),e?e(n.join("")):n.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)},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"#"},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._moveFlippedObject(e),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,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'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.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 n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.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._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return 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,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),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),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_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){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},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,fabric.Image.pngCompression=1}(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.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{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&&C-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_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){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_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){var t=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,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var 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;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_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()+'"'},_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.shadow&&this.shadow.toString(),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,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(){var e=fabric.util.object.clone,t=fabric.util.toFixed;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t.styles||{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this)},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(){var e=this.get2DCursorLocation();return this.styles[e.lineIndex]?this.styles[e.lineIndex][e.charIndex]||{}:{}},setSelectionStyles:function(e){if(this.selectionStart===this.selectionEnd)this._extendStyles(this.selectionStart,e);else for(var t=this.selectionStart;t-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0),o.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,s/this._fontSizeFraction),o.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction)},_renderCharDecorationAtOffset:function(e,t,n,r,i){e.fillRect(t,n-i,r,1)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r',fabric.util.string.escapeXml(a[d]),"");var y=this._getWidthOfChar(this.ctx,a[d],n,d);m.textBackgroundColor&&o.push(''),f+=y}}}),fabric.IText.fromObject=function(t){return new fabric.IText(t.text,e(t))},fabric.IText.instances=[]}(),function(){var e=fabric.util.object.clone;fabric.util.object.extend(fabric.IText.prototype,{initBehavior:function(){this.initKeyHandlers(),this.initCursorSelectionHandlers(),this.initDblClickSimulation(),this.initHiddenTextarea()},initKeyHandlers:function(){fabric.util.addListener(document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){if(!/(iPad|iPhone|iPod)/g.test(navigator.userAgent))return;this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},initDblClickSimulation:function(){var e=+(new Date),t,n={},r;this.on("mousedown",function(i){var s=i.e;t=+(new Date),r=this.canvas.getPointer(s);var o=t-e<500&&n.x===r.x&&n.y===r.y;o&&(this.fire("dblclick",i),s.preventDefault&&s.preventDefault(),s.stopPropagation&&s.stopPropagation()),e=t,n=r})},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&this.setCursorByClick(e.e)})},initMousemoveHandler:function(){this.on("mousemove",function(){this.__isMousedown&&this.isEditing&&console.log("mousemove: need to select text")})},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;var t=this.canvas.getPointer(e.e),n=this.__mousedownX!==t.x||this.__mousedownY!==t.y;if(n)return;this.selected&&this.enterEditing()})},initSelectedHandler:function(){this.on("selected",function(){var e=this;setTimeout(function(){e.selected=!0},100),this._hasClearSelectionListener||(this.canvas.on("selection:cleared",function(t){if(t.e&&e.canvas.containsPoint(t.e,e))return;e.exitEditing()}),this._hasClearSelectionListener=!0)})},_tick:function(){var e=this;if(this._abortCursorAnimation)return;this.animate("_currentCursorOpacity",1,{duration:this.cursorDuration,onComplete:function(){e._onTickComplete()},onChange:function(){e.canvas&&e.canvas.renderAll()},abort:function(){return e._abortCursorAnimation}})},_onTickComplete:function(){if(this._abortCursorAnimation)return;var e=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){e.animate("_currentCursorOpacity",0,{duration:this.cursorDuration/2,onComplete:function(){e._tick()},onChange:function(){e.canvas&&e.canvas.renderAll()},abort:function(){return e._abortCursorAnimation}})},100)},initDelayedCursor:function(){var e=this;this._cursorTimeout2&&clearTimeout(this._cursorTimeout2),this._cursorTimeout2=setTimeout(function(){e._abortCursorAnimation=!1,e._tick()},this.cursorDelay)},abortCursorAnimation:function(){this._abortCursorAnimation=!0,clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,this.canvas&&this.canvas.renderAll();var e=this;setTimeout(function(){e._abortCursorAnimation=!1},10)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing||e.ctrlKey)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},selectAll:function(){this.selectionStart=0,this.selectionEnd=this.text.length},getSelectedText:function(){return this.text.slice(this.selectionStart,this.selectionEnd)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e){var t=this.text.split(this._reNewline),n,r,i,s=this.text.slice(0,this.selectionStart),o=this.text.slice(this.selectionStart),u=s.slice(s.lastIndexOf("\n")+1),a=o.match(/(.*)\n?/)[1],f=(o.match(/.*\n(.*)\n?/)||{})[1]||"",l=this.get2DCursorLocation();if(l.lineIndex===t.length-1||e.metaKey)return this.text.length-this.selectionStart;var c=this._getWidthOfLine(this.ctx,l.lineIndex,t);r=this._getLineLeftOffset(c);var h=r,p=l.lineIndex;for(var d=0,v=u.length;dh){i=!0;var S=g-E,x=g,T=Math.abs(S-h),N=Math.abs(x-h);y=Nthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?(this.selectionStart=this.selectionEnd,this._selectionDirection="right"):(this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},getUpCursorOffset:function(e){var t=this.get2DCursorLocation();if(t.lineIndex===0||e.metaKey)return this.selectionStart;var n=this.text.slice(0,this.selectionStart),r=n.slice(n.lastIndexOf("\n")+1),i=(n.match(/\n?(.*)\n.*$/)||{})[1]||"",s=this.text.split(this._reNewline),o,u,a,f=this._getWidthOfLine(this.ctx,t.lineIndex,s);u=this._getLineLeftOffset(f);var l=u,c=t.lineIndex;for(var h=0,p=r.length;hl){a=!0;var w=v-b,E=v,S=Math.abs(w-l),x=Math.abs(E-l);m=x-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},getNumNewLinesInSelectedText:function(){var e=this.getSelectedText(),t=0;for(var n=0,r=e.split(""),i=r.length;n0&&nr&&o>n){var g=n-s,y=o-n;return y>g?f=a+l:f=a+l+1,this.flipX&&(f=v-f),f>this.text.length&&(f=this.text.length),f}a++}}if(typeof f=="undefined")return this.text.length},enterEditing:function(){if(this.isEditing||!this.editable)return;return fabric.IText.instances.forEach(function(e){if(e===this)return;e.exitEditing()},this),this.isEditing=!0,this._updateTextarea(),this._saveProps(),this.hoverCursor="text",this.canvas.defaultCursor="text",this.canvas.moveCursor="text",this.hasControls=!1,this.borderColor=this.editingBorderColor,this.selectable=!1,this.lockMovementX=!0,this.lockMovementY=!0,this._tick(),this.canvas.renderAll(),this},_updateTextarea:function(){if(!this.hiddenTextarea)return;this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.focus()},_saveProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas.defaultCursor,moveCursor:this.canvas.moveCursor}},_restoreProps:function(){if(!this._savedProps)return;this.hoverCursor=this._savedProps.overCursor,this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY},exitEditing:function(){return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.hiddenTextarea&&this.hiddenTextarea.blur(),this.abortCursorAnimation(),this._restoreProps(),this._currentCursorOpacity=0,this},removeChars:function(e){if(this.selectionStart===this.selectionEnd){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}else this._removeCharsFromTo(this.selectionStart,this.selectionEnd);this.selectionEnd=this.selectionStart;var i=this.text.split(this._reNewline);for(var s in this.styles)i[s]||delete this.styles[s];this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsFromTo:function(e,t){var n=t;while(n!==e)n--,this.removeStyleObject(!1,n);this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObject(e,t):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n){var r=this.styles[t],i=e(r);n===0&&(n=1);for(var s in i){var o=parseInt(s,10);o>=n&&(r[o+1]=i[o])}this.styles[t][n]=e(r[n-1])},insertStyleObject:function(e,t){if(this.isEmptyStyles())return;var n=this.get2DCursorLocation(),r=n.lineIndex,i=n.charIndex;this.styles[r]||(this.styles[r]={}),e==="\n"?this.insertNewlineStyleObject(r,i,t):this.insertCharStyleObject(r,i)},shiftLineStyles:function(t,n){var r=e(this.styles);for(var i in this.styles){var s=parseInt(i,10);s>t&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),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");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}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,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},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,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.3.10"};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",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];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)}},function(e){function r(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function i(e,t){return Math.floor(Math.random()*(t-e+1))+e}function o(e){return e*s}function u(e){return e/s}function a(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 f(e,t){return parseFloat(Number(e).toFixed(t))}function l(){return!1}function c(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),h(t)[e]}function h(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function w(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 E(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function S(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 x(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]}function T(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=A(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 C=Math.sqrt(T);s===i&&(C=-C);var A=.5*(b+E)-C*(S-w),O=.5*(w+S)+C*(E-b),M=Math.atan2(w-O,b-A),_=Math.atan2(S-O,E-A),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=t})}function r(e,t){return i(e,t,function(e,t){return e>>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 t(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}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e-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){S.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),S.has(e,function(r){r?S.get(e,function(e){var t=T(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function T(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 N(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 C(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function k(e){var t=[];return L(t,e,"backgroundColor"),L(t,e,"overlayColor"),t.join("")}function L(e,t,n){t[n]&&t[n].toSVG&&e.push('','')}function A(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,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;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined." +);return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),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=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!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)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();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.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:e}),e.fire("removed")},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"],n=this.getActiveGroup();return 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._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},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.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;r0&&(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;an.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.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,s=i(n),o=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),s,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+u-(n>0?0:s),f=t.ey+u-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+s,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+o-1,a+s,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,a+s-1,f,a+s-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+u-(n>0?0:s),t.ey+u-(r>0?0:o),s,o)},_findSelectedObjects:function(e){if(!this.selection)return;var t=this._collectObjects();t.length===1?this.setActiveObject(t[0],e):t.length>1&&(t=new fabric.Group(t.reverse()),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var e=[],t,n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,u=r+this._groupSelector.top,a=new fabric.Point(s(n,i),s(r,u)),f=new fabric.Point(o(n,i),o(r,u)),l=n===i&&r===u;for(var c=this._objects.length;c--;){t=this._objects[c];if(!t||!t.selectable||!t.visible)continue;if(t.intersectsWithRect(a,f)||t.isContainedWithinRect(a,f)||t.containsPoint(a)||t.containsPoint(f)){t.set("active",!0),e.push(t);if(l)break}}return e},findTarget:function(e,t){if(this.skipTargetFind)return;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._objects[o].evented&&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,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,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(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;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()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(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)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_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(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},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()})}return 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))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.group?t.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?t.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?t.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?t.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?t.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"?s=i.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:s=i.x,r==="top"?o=i.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"?o=i.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.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.get(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,{_controlsVisibility:null,_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(!this.isControlVisible(a))continue;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/2)*2;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)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=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,this.isControlVisible("tl")&&(o=i-p-r-l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.isControlVisible("tr")&&(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)),this.isControlVisible("bl")&&(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)),this.isControlVisible("br")&&(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")||(this.isControlVisible("mt")&&(o=i+g/2-p,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.isControlVisible("mb")&&(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)),this.isControlVisible("mr")&&(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)),this.isControlVisible("ml")&&(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&&this.isControlVisible("mtr")&&(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},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{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;r'),e?e(t.join("")):t.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)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.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(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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 i(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}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_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){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.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'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;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(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.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 r=0,i=t.length;r"),e?e(n.join("")):n.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)},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"#"},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._moveFlippedObject(e),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,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'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.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 n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.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._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return 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,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),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),this._element.crossOrigin=this.crossOrigin},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_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){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},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,fabric.Image.pngCompression=1}(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.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{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&&C-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_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){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_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){var t=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,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var 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;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_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()+'"'},_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.shadow&&this.shadow.toString(),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,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(){var e=fabric.util.object.clone,t=fabric.util.toFixed;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t.styles||{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this)},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(){var e=this.get2DCursorLocation();return this.styles[e.lineIndex]?this.styles[e.lineIndex][e.charIndex]||{}:{}},setSelectionStyles:function(e){if(this.selectionStart===this.selectionEnd)this._extendStyles(this.selectionStart,e);else for(var t=this.selectionStart;t-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0),o.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,s/this._fontSizeFraction),o.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction)},_renderCharDecorationAtOffset:function(e,t,n,r,i){e.fillRect(t,n-i,r,1)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r',fabric.util.string.escapeXml(a[d]),"");var y=this._getWidthOfChar(this.ctx,a[d],n,d);m.textBackgroundColor&&o.push(''),f+=y}}}),fabric.IText.fromObject=function(t){return new fabric.IText(t.text,e(t))},fabric.IText.instances=[]}(),function(){var e=fabric.util.object.clone;fabric.util.object.extend(fabric.IText.prototype,{initBehavior:function(){this.initKeyHandlers(),this.initCursorSelectionHandlers(),this.initDblClickSimulation(),this.initHiddenTextarea()},initKeyHandlers:function(){fabric.util.addListener(document,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(document,"keypress",this.onKeyPress.bind(this))},initHiddenTextarea:function(){if(!/(iPad|iPhone|iPod)/g.test(navigator.userAgent))return;this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea)},initDblClickSimulation:function(){var e=+(new Date),t,n={},r;this.on("mousedown",function(i){var s=i.e;t=+(new Date),r=this.canvas.getPointer(s);var o=t-e<500&&n.x===r.x&&n.y===r.y;o&&(this.fire("dblclick",i),s.preventDefault&&s.preventDefault(),s.stopPropagation&&s.stopPropagation()),e=t,n=r})},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.isEditing&&this.setCursorByClick(e.e)})},initMousemoveHandler:function(){this.on("mousemove",function(){this.__isMousedown&&this.isEditing&&console.log("mousemove: need to select text")})},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;var t=this.canvas.getPointer(e.e),n=this.__mousedownX!==t.x||this.__mousedownY!==t.y;if(n)return;this.selected&&this.enterEditing()})},initSelectedHandler:function(){this.on("selected",function(){var e=this;setTimeout(function(){e.selected=!0},100),this._hasClearSelectionListener||(this.canvas.on("selection:cleared",function(t){if(t.e&&e.canvas.containsPoint(t.e,e))return;e.exitEditing()}),this._hasClearSelectionListener=!0)})},_tick:function(){var e=this;if(this._abortCursorAnimation)return;this.animate("_currentCursorOpacity",1,{duration:this.cursorDuration,onComplete:function(){e._onTickComplete()},onChange:function(){e.canvas&&e.canvas.renderAll()},abort:function(){return e._abortCursorAnimation}})},_onTickComplete:function(){if(this._abortCursorAnimation)return;var e=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){e.animate("_currentCursorOpacity",0,{duration:this.cursorDuration/2,onComplete:function(){e._tick()},onChange:function(){e.canvas&&e.canvas.renderAll()},abort:function(){return e._abortCursorAnimation}})},100)},initDelayedCursor:function(){var e=this;this._cursorTimeout2&&clearTimeout(this._cursorTimeout2),this._cursorTimeout2=setTimeout(function(){e._abortCursorAnimation=!1,e._tick()},this.cursorDelay)},abortCursorAnimation:function(){this._abortCursorAnimation=!0,clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,this.canvas&&this.canvas.renderAll();var e=this;setTimeout(function(){e._abortCursorAnimation=!1},10)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},_ctrlKeysMap:{65:"selectAll",67:"copy",86:"paste",88:"cut"},onKeyDown:function(e){if(!this.isEditing||e.ctrlKey)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.preventDefault(),e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.moveCursorRight(e),this.removeChars(e)},copy:function(){var e=this.getSelectedText();this.copiedText=e},paste:function(){this.copiedText&&this.insertChars(this.copiedText)},cut:function(e){this.copy(),this.removeChars(e)},selectAll:function(){this.selectionStart=0,this.selectionEnd=this.text.length},getSelectedText:function(){return this.text.slice(this.selectionStart,this.selectionEnd)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode===8||e.keyCode===13)return;this.insertChars(String.fromCharCode(e.which)),e.preventDefault(),e.stopPropagation()},getDownCursorOffset:function(e){var t=this.text.split(this._reNewline),n,r,i,s=this.text.slice(0,this.selectionStart),o=this.text.slice(this.selectionStart),u=s.slice(s.lastIndexOf("\n")+1),a=o.match(/(.*)\n?/)[1],f=(o.match(/.*\n(.*)\n?/)||{})[1]||"",l=this.get2DCursorLocation();if(l.lineIndex===t.length-1||e.metaKey)return this.text.length-this.selectionStart;var c=this._getWidthOfLine(this.ctx,l.lineIndex,t);r=this._getLineLeftOffset(c);var h=r,p=l.lineIndex;for(var d=0,v=u.length;dh){i=!0;var S=g-E,x=g,T=Math.abs(S-h),N=Math.abs(x-h);y=Nthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?(this.selectionStart=this.selectionEnd,this._selectionDirection="right"):(this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},getUpCursorOffset:function(e){var t=this.get2DCursorLocation();if(t.lineIndex===0||e.metaKey)return this.selectionStart;var n=this.text.slice(0,this.selectionStart),r=n.slice(n.lastIndexOf("\n")+1),i=(n.match(/\n?(.*)\n.*$/)||{})[1]||"",s=this.text.split(this._reNewline),o,u,a,f=this._getWidthOfLine(this.ctx,t.lineIndex,s);u=this._getLineLeftOffset(f);var l=u,c=t.lineIndex;for(var h=0,p=r.length;hl){a=!0;var w=v-b,E=v,S=Math.abs(w-l),x=Math.abs(E-l);m=x-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},getNumNewLinesInSelectedText:function(){var e=this.getSelectedText(),t=0;for(var n=0,r=e.split(""),i=r.length;n0&&nr&&o>n){var g=n-s,y=o-n;return y>g?f=a+l:f=a+l+1,this.flipX&&(f=v-f),f>this.text.length&&(f=this.text.length),f}a++}}if(typeof f=="undefined")return this.text.length},enterEditing:function(){if(this.isEditing||!this.editable)return;return fabric.IText.instances.forEach(function(e){if(e===this)return;e.exitEditing()},this),this.isEditing=!0,this._updateTextarea(),this._saveProps(),this.hoverCursor="text",this.canvas.defaultCursor="text",this.canvas.moveCursor="text",this.hasControls=!1,this.borderColor=this.editingBorderColor,this.selectable=!1,this.lockMovementX=!0,this.lockMovementY=!0,this._tick(),this.canvas.renderAll(),this},_updateTextarea:function(){if(!this.hiddenTextarea)return;this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.focus()},_saveProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas.defaultCursor,moveCursor:this.canvas.moveCursor}},_restoreProps:function(){if(!this._savedProps)return;this.hoverCursor=this._savedProps.overCursor,this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY},exitEditing:function(){return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.hiddenTextarea&&this.hiddenTextarea.blur(),this.abortCursorAnimation(),this._restoreProps(),this._currentCursorOpacity=0,this},removeChars:function(e){if(this.selectionStart===this.selectionEnd){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}else this._removeCharsFromTo(this.selectionStart,this.selectionEnd);this.selectionEnd=this.selectionStart;var i=this.text.split(this._reNewline);for(var s in this.styles)i[s]||delete this.styles[s];this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsFromTo:function(e,t){var n=t;while(n!==e)n--,this.removeStyleObject(!1,n);this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObject(e,t):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n){var r=this.styles[t],i=e(r);n===0&&(n=1);for(var s in i){var o=parseInt(s,10);o>=n&&(r[o+1]=i[o])}this.styles[t][n]=e(r[n-1])},insertStyleObject:function(e,t){if(this.isEmptyStyles())return;var n=this.get2DCursorLocation(),r=n.lineIndex,i=n.charIndex;this.styles[r]||(this.styles[r]={}),e==="\n"?this.insertNewlineStyleObject(r,i,t):this.insertCharStyleObject(r,i)},shiftLineStyles:function(t,n){var r=e(this.styles);for(var i in this.styles){var s=parseInt(i,10);s>t&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),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");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}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,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},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,function(e){r.filters=e||[],t&&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 7bca573f69d7e578264b5abee22e40ce49bf0abc..5e2972977d6ef423d013b11ffc9fd38a373c6475 100644 GIT binary patch delta 41584 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 E02@wH#{d8T delta 41618 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 diff --git a/dist/all.require.js b/dist/all.require.js index 059b4745..0b0e59bb 100644 --- a/dist/all.require.js +++ b/dist/all.require.js @@ -1756,32 +1756,6 @@ if (!JSON) { } }()); -/** - * Wrapper around `console.log` (when available) - * @param {Any} values Values to log - */ -fabric.log = function() { }; - -/** - * Wrapper around `console.warn` (when available) - * @param {Any} Values to log as a warning - */ -fabric.warn = function() { }; - -if (typeof console !== 'undefined') { - if (typeof console.log !== 'undefined' && console.log.apply) { - fabric.log = function() { - return console.log.apply(console, arguments); - }; - } - if (typeof console.warn !== 'undefined' && console.warn.apply) { - fabric.warn = function() { - return console.warn.apply(console, arguments); - }; - } -} - - (function(){ /** @@ -3773,6 +3747,29 @@ fabric.util.string = { })(); +/** + * Wrapper around `console.log` (when available) + * @param {Any} values Values to log + */ +fabric.log = function() { }; + +/** + * Wrapper around `console.warn` (when available) + * @param {Any} Values to log as a warning + */ +fabric.warn = function() { }; + +if (typeof console !== 'undefined') { + ['log', 'warn'].forEach(function(methodName) { + if (typeof console[methodName] !== 'undefined' && console[methodName].apply) { + fabric[methodName] = function() { + return console[methodName].apply(console, arguments); + }; + } + }); +} + + (function() { /** diff --git a/src/log.js b/src/log.js index 65c4bda2..22d23763 100644 --- a/src/log.js +++ b/src/log.js @@ -11,14 +11,11 @@ fabric.log = function() { }; fabric.warn = function() { }; if (typeof console !== 'undefined') { - if (typeof console.log !== 'undefined' && console.log.apply) { - fabric.log = function() { - return console.log.apply(console, arguments); - }; - } - if (typeof console.warn !== 'undefined' && console.warn.apply) { - fabric.warn = function() { - return console.warn.apply(console, arguments); - }; - } + ['log', 'warn'].forEach(function(methodName) { + if (typeof console[methodName] !== 'undefined' && console[methodName].apply) { + fabric[methodName] = function() { + return console[methodName].apply(console, arguments); + }; + } + }); }