From a6a5cb4a546faf72f6bcb78033a9148b4420eb88 Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 29 Apr 2013 15:16:51 -0400 Subject: [PATCH] Load image via `fabric.util.loadImage` in `cloneAsImage`. Add `fabric.util.createImage` helper. Closes #593 --- dist/all.js | 54 ++++++++++++++++++++------------------------ dist/all.min.js | 12 +++++----- dist/all.min.js.gz | Bin 47687 -> 47652 bytes src/image.class.js | 9 +++----- src/object.class.js | 30 ++++++------------------ src/util/misc.js | 15 +++++++++++- 6 files changed, 54 insertions(+), 66 deletions(-) diff --git a/dist/all.js b/dist/all.js index bb9a9f0d..9673c9e2 100644 --- a/dist/all.js +++ b/dist/all.js @@ -2167,7 +2167,7 @@ fabric.Collection = { */ function loadImage(url, callback, context) { if (url) { - var img = new Image(); + var img = fabric.util.createImage(); /** @ignore */ img.onload = function () { callback && callback.call(context, img); @@ -2336,6 +2336,18 @@ fabric.Collection = { return canvasEl; } + /** + * Creates image element (works on client and node) + * @static + * @memberOf fabric.util + * @return {Image} image element + */ + function createImage() { + return fabric.isLikelyNode + ? new (require('canvas').Image)() + : fabric.document.createElement('img'); + } + /** * Creates accessors (getXXX, setXXX) for a "class", based on "stateProperties" array * @static @@ -2439,6 +2451,7 @@ fabric.Collection = { fabric.util.populateWithProperties = populateWithProperties; fabric.util.drawDashedLine = drawDashedLine; fabric.util.createCanvasElement = createCanvasElement; + fabric.util.createImage = createImage; fabric.util.createAccessors = createAccessors; fabric.util.clipContext = clipContext; fabric.util.multiplyTransformMatrices = multiplyTransformMatrices; @@ -9615,17 +9628,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati return; } - var Image = global.Image; - try { - var NodeImage = (typeof require !== 'undefined') && require('canvas').Image; - if (NodeImage) { - Image = NodeImage; - } - } - catch(err) { - fabric.log(err); - } - /** * Root object class from which all 2d shape classes inherit from * @class fabric.Object @@ -10307,16 +10309,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati */ cloneAsImage: function(callback) { if (fabric.Image) { - var i = new Image(); - - /** @ignore */ - i.onload = function() { - if (callback) { - callback(new fabric.Image(i), orig); - } - i = i.onload = null; - }; - var orig = { angle: this.getAngle(), flipX: this.getFlipX(), @@ -10325,9 +10317,14 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati // normalize angle this.set({ angle: 0, flipX: false, flipY: false }); - this.toDataURL(function(dataURL) { - i.src = dataURL; + this.toDataURL(function(dataUrl) { + fabric.util.loadImage(dataUrl, function(img) { + if (callback) { + callback(new fabric.Image(img), orig); + } + }); }); + } return this; }, @@ -14761,12 +14758,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati return; } - var isLikelyNode = typeof Buffer !== 'undefined' && typeof window === 'undefined', - imgEl = this._originalImage, + var imgEl = this._originalImage, canvasEl = fabric.util.createCanvasElement(), - replacement = isLikelyNode - ? new (require('canvas').Image)() - : fabric.document.createElement('img'), + replacement = fabric.util.createImage(), _this = this; canvasEl.width = imgEl.width; @@ -14787,7 +14781,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati replacement.width = imgEl.width; replacement.height = imgEl.height; - if (isLikelyNode) { + if (fabric.isLikelyNode) { // cut off data:image/png;base64, part in the beginning var base64str = canvasEl.toDataURL('image/png').substring(22); replacement.src = new Buffer(base64str, 'base64'); diff --git a/dist/all.min.js b/dist/all.min.js index bea224a7..c5c67189 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,6 +1,6 @@ -/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.1.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";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){e||(e={});var t=+(new Date),n=e.duration||500,r=t+n,i,s=e.onChange||function(){},o=e.abort||function(){return!1},u=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},a="startValue"in e?e.startValue:0,f="endValue"in e?e.endValue:100,l=e.byValue||f-a;e.onStart&&e.onStart(),function c(){i=+(new Date);var f=i>r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e,t,n){if(e){var r=new Image;r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function d(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function v(e,t,n){var r;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function w(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function E(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}var e=Math.sqrt,t=Math.atan2;fabric.util={};var i=Math.PI/180,c=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},h=function(){return c.apply(fabric.window,arguments)};fabric.util.removeFromArray=n,fabric.util.degreesToRadians=s,fabric.util.radiansToDegrees=o,fabric.util.rotatePoint=u,fabric.util.toFixed=a,fabric.util.getRandomInt=r,fabric.util.falseFunction=f,fabric.util.animate=l,fabric.util.requestAnimFrame=h,fabric.util.loadImage=p,fabric.util.enlivenObjects=d,fabric.util.groupSVGElements=v,fabric.util.populateWithProperties=m,fabric.util.drawDashedLine=g,fabric.util.createCanvasElement=y,fabric.util.createAccessors=b,fabric.util.clipContext=w,fabric.util.multiplyTransformMatrices=E}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){v.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),v.has(e,function(r){r?v.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function g(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function y(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function b(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function w(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.multiplyTransformMatrices,o={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(n,r){var i=n.getElementsByTagName("stop"),s=n.nodeName==="linearGradient"?"linear":"radial",o=n.getAttribute("gradientUnits")||"objectBoundingBox",u=[],a={};s==="linear"?a={x1:n.getAttribute("x1")||0,y1:n.getAttribute("y1")||0,x2:n.getAttribute("x2")||"100%",y2:n.getAttribute("y2")||0}:s==="radial"&&(a={x1:n.getAttribute("fx")||n.getAttribute("cx")||"50%",y1:n.getAttribute("fy")||n.getAttribute("cy")||"50%",r1:0,x2:n.getAttribute("cx")||"50%",y2:n.getAttribute("cy")||"50%",r2:n.getAttribute("r")||"50%"});for(var f=i.length;f--;)u.push(e(i[f]));return t(r,a),new fabric.Gradient({type:s,coords:a,gradientUnits:o,colorStops:u})},forObject:function(e,n){return n||(n={}),t(e,n),new fabric.Gradient(n)}}),fabric.getGradientDefs=r}(),fabric.Pattern=fabric.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,initialize:function(e){e||(e={}),e.source&&(this.source=typeof e.source=="string"?new Function(e.source):e.source),e.repeat&&(this.repeat=e.repeat),e.offsetX&&(this.offsetX=e.offsetX),e.offsetY&&(this.offsetY=e.offsetY)},toObject:function(){var e;return typeof this.source=="function"?e=String(this.source).match(/function\s+\w*\s*\(.*\)\s+\{([\s\S]*)\}/)[1]:typeof this.source.src=="string"&&(e=this.source.src),{source:e,repeat:this.repeat,offsetX:this.offsetX,offsetY:this.offsetY}},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;return e.createPattern(t,this.repeat)}}),fabric.Shadow=fabric.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,initialize:function(e){for(var t in e)this[t]=e[t]},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(){}}),function(e){"use strict";function n(e,t){arguments.length>0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll&&this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=this.stroke;this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX,-this.height/2+this.fill.offsetY)),e.fill(),this.fill.toLive&&e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new o;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.getAngle(),flipX:this.getFlipX(),flipY:this.getFlipY()};this.set({angle:0,flipX:!1,flipY:!1}),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.set("active",!1),r.add(t);var i=r.toDataURL();r.dispose(),r=t=null,e&&e(i)}var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;re.x&&i.xe.y&&s.y1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(this.currentHeight/this.currentWidth),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):e.translate(this.left,this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var n=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,e.stroke(),e.strokeStyle=n},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._removeShadow(e),this.stroke&&e.stroke()},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this._removeShadow(e),this._renderFill(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._removeShadow(e),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;ie.x&&i-ne.y},toSVG:function(){var e=[];for(var t=this._objects.length;t--;)e.push(this._objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t'+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.util.createCanvasElement(),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").substring(22);i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.originX==="left"?e.translate(this.left,this.top):this.transform(e),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i); -return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in s&&(this._initDimensions(),this.setCoords())}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.pathname,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.1.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";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){e||(e={});var t=+(new Date),n=e.duration||500,r=t+n,i,s=e.onChange||function(){},o=e.abort||function(){return!1},u=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},a="startValue"in e?e.startValue:0,f="endValue"in e?e.endValue:100,l=e.byValue||f-a;e.onStart&&e.onStart(),function c(){i=+(new Date);var f=i>r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e,t,n){if(e){var r=fabric.util.createImage();r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function d(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function v(e,t,n){var r;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(){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]]}var e=Math.sqrt,t=Math.atan2;fabric.util={};var i=Math.PI/180,c=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},h=function(){return c.apply(fabric.window,arguments)};fabric.util.removeFromArray=n,fabric.util.degreesToRadians=s,fabric.util.radiansToDegrees=o,fabric.util.rotatePoint=u,fabric.util.toFixed=a,fabric.util.getRandomInt=r,fabric.util.falseFunction=f,fabric.util.animate=l,fabric.util.requestAnimFrame=h,fabric.util.loadImage=p,fabric.util.enlivenObjects=d,fabric.util.groupSVGElements=v,fabric.util.populateWithProperties=m,fabric.util.drawDashedLine=g,fabric.util.createCanvasElement=y,fabric.util.createImage=b,fabric.util.createAccessors=w,fabric.util.clipContext=E,fabric.util.multiplyTransformMatrices=S}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){v.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),v.has(e,function(r){r?v.get(e,function(e){var t=g(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function g(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function y(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function b(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function w(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.multiplyTransformMatrices,o={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(n,r){var i=n.getElementsByTagName("stop"),s=n.nodeName==="linearGradient"?"linear":"radial",o=n.getAttribute("gradientUnits")||"objectBoundingBox",u=[],a={};s==="linear"?a={x1:n.getAttribute("x1")||0,y1:n.getAttribute("y1")||0,x2:n.getAttribute("x2")||"100%",y2:n.getAttribute("y2")||0}:s==="radial"&&(a={x1:n.getAttribute("fx")||n.getAttribute("cx")||"50%",y1:n.getAttribute("fy")||n.getAttribute("cy")||"50%",r1:0,x2:n.getAttribute("cx")||"50%",y2:n.getAttribute("cy")||"50%",r2:n.getAttribute("r")||"50%"});for(var f=i.length;f--;)u.push(e(i[f]));return t(r,a),new fabric.Gradient({type:s,coords:a,gradientUnits:o,colorStops:u})},forObject:function(e,n){return n||(n={}),t(e,n),new fabric.Gradient(n)}}),fabric.getGradientDefs=r}(),fabric.Pattern=fabric.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,initialize:function(e){e||(e={}),e.source&&(this.source=typeof e.source=="string"?new Function(e.source):e.source),e.repeat&&(this.repeat=e.repeat),e.offsetX&&(this.offsetX=e.offsetX),e.offsetY&&(this.offsetY=e.offsetY)},toObject:function(){var e;return typeof this.source=="function"?e=String(this.source).match(/function\s+\w*\s*\(.*\)\s+\{([\s\S]*)\}/)[1]:typeof this.source.src=="string"&&(e=this.source.src),{source:e,repeat:this.repeat,offsetX:this.offsetX,offsetY:this.offsetY}},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;return e.createPattern(t,this.repeat)}}),fabric.Shadow=fabric.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,initialize:function(e){for(var t in e)this[t]=e[t]},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(){}}),function(e){"use strict";function n(e,t){arguments.length>0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll&&this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=this.stroke;this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX,-this.height/2+this.fill.offsetY)),e.fill(),this.fill.toLive&&e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n={angle:this.getAngle(),flipX:this.getFlipX(),flipY:this.getFlipY()};this.set({angle:0,flipX:!1,flipY:!1}),this.toDataURL(function(r){t.util.loadImage(r,function(r){e&&e(new t.Image(r),n)})})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.set("active",!1),r.add(t);var i=r.toDataURL();r.dispose(),r=t=null,e&&e(i)}var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;re.x&&i.xe.y&&s.y1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(this.currentHeight/this.currentWidth),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):e.translate(this.left,this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var n=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,e.stroke(),e.strokeStyle=n},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._removeShadow(e),this.stroke&&e.stroke()},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this._removeShadow(e),this._renderFill(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._removeShadow(e),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;ie.x&&i-ne.y},toSVG:function(){var e=[];for(var t=this._objects.length;t--;)e.push(this._objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t'+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=this._originalImage,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.width=t.width,r.height=t.height;if(fabric.isLikelyNode){var s=n.toDataURL("image/png").substring(22);r.src=new Buffer(s,"base64"),i._element=r,e&&e()}else r.src=n.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.originX==="left"?e.translate(this.left,this.top):this.transform(e),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s +){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in s&&(this._initDimensions(),this.setCoords())}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.pathname,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index 46ae62d0e0f2c23b3bc4c141452f735828358397..275aa896d81eec568e0a52e8f109b2ec19bdc6f8 100644 GIT binary patch delta 38707 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 DEGnnu diff --git a/src/image.class.js b/src/image.class.js index 4539c77a..1501f5a1 100644 --- a/src/image.class.js +++ b/src/image.class.js @@ -202,12 +202,9 @@ return; } - var isLikelyNode = typeof Buffer !== 'undefined' && typeof window === 'undefined', - imgEl = this._originalImage, + var imgEl = this._originalImage, canvasEl = fabric.util.createCanvasElement(), - replacement = isLikelyNode - ? new (require('canvas').Image)() - : fabric.document.createElement('img'), + replacement = fabric.util.createImage(), _this = this; canvasEl.width = imgEl.width; @@ -228,7 +225,7 @@ replacement.width = imgEl.width; replacement.height = imgEl.height; - if (isLikelyNode) { + if (fabric.isLikelyNode) { // cut off data:image/png;base64, part in the beginning var base64str = canvasEl.toDataURL('image/png').substring(22); replacement.src = new Buffer(base64str, 'base64'); diff --git a/src/object.class.js b/src/object.class.js index c18b6c85..7fa4ed93 100644 --- a/src/object.class.js +++ b/src/object.class.js @@ -12,17 +12,6 @@ return; } - var Image = global.Image; - try { - var NodeImage = (typeof require !== 'undefined') && require('canvas').Image; - if (NodeImage) { - Image = NodeImage; - } - } - catch(err) { - fabric.log(err); - } - /** * Root object class from which all 2d shape classes inherit from * @class fabric.Object @@ -704,16 +693,6 @@ */ cloneAsImage: function(callback) { if (fabric.Image) { - var i = new Image(); - - /** @ignore */ - i.onload = function() { - if (callback) { - callback(new fabric.Image(i), orig); - } - i = i.onload = null; - }; - var orig = { angle: this.getAngle(), flipX: this.getFlipX(), @@ -722,9 +701,14 @@ // normalize angle this.set({ angle: 0, flipX: false, flipY: false }); - this.toDataURL(function(dataURL) { - i.src = dataURL; + this.toDataURL(function(dataUrl) { + fabric.util.loadImage(dataUrl, function(img) { + if (callback) { + callback(new fabric.Image(img), orig); + } + }); }); + } return this; }, diff --git a/src/util/misc.js b/src/util/misc.js index fbd12fe6..3d1faaa9 100644 --- a/src/util/misc.js +++ b/src/util/misc.js @@ -171,7 +171,7 @@ */ function loadImage(url, callback, context) { if (url) { - var img = new Image(); + var img = fabric.util.createImage(); /** @ignore */ img.onload = function () { callback && callback.call(context, img); @@ -340,6 +340,18 @@ return canvasEl; } + /** + * Creates image element (works on client and node) + * @static + * @memberOf fabric.util + * @return {Image} image element + */ + function createImage() { + return fabric.isLikelyNode + ? new (require('canvas').Image)() + : fabric.document.createElement('img'); + } + /** * Creates accessors (getXXX, setXXX) for a "class", based on "stateProperties" array * @static @@ -443,6 +455,7 @@ fabric.util.populateWithProperties = populateWithProperties; fabric.util.drawDashedLine = drawDashedLine; fabric.util.createCanvasElement = createCanvasElement; + fabric.util.createImage = createImage; fabric.util.createAccessors = createAccessors; fabric.util.clipContext = clipContext; fabric.util.multiplyTransformMatrices = multiplyTransformMatrices;