From 776d966bdb7e3836fae895c5466c5a52f99c5fec Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 6 Feb 2013 21:04:14 +0100 Subject: [PATCH] Remove polygon offsetting fix which broke some SVG shapes --- dist/all.js | 12 ++++++------ dist/all.min.js | 4 ++-- dist/all.min.js.gz | Bin 44127 -> 44099 bytes src/polygon.class.js | 12 ++++++------ 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/dist/all.js b/dist/all.js index ad52ab50..4f2fb2f8 100644 --- a/dist/all.js +++ b/dist/all.js @@ -12270,14 +12270,14 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati this.width = (maxX - minX) || 1; this.height = (maxY - minY) || 1; - var halfWidth = this.width / 2, - halfHeight = this.height / 2; + // var halfWidth = this.width / 2, + // halfHeight = this.height / 2; // change points to offset polygon into a bounding box - this.points.forEach(function(p) { - p.x -= halfWidth; - p.y -= halfHeight; - }, this); + // this.points.forEach(function(p) { + // p.x -= halfWidth; + // p.y -= halfHeight; + // }, this); this.minX = minX; this.minY = minY; diff --git a/dist/all.min.js b/dist/all.min.js index bdcf9f29..f137789c 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,5 +1,5 @@ /* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.0.6"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e,t,n){if(e){var r=new Image;r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function d(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function v(e,t,n){var r;if(e.length>1){var i=e.some(function(e){return e.type==="text"});i?(r=new fabric.Group([],t),e.reverse().forEach(function(e){e.cx&&(e.left=e.cx),e.cy&&(e.top=e.cy),r.addWithUpdate(e)})):r=new fabric.PathGroup(e,t)}else r=e[0];return typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(){var e=fabric.document.createElement("canvas");return!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}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}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==1/0&&r!==-1/0&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function g(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function y(e){var t="";for(var n=0,r=e.length;n",'",""].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,p=f.length;c0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t=n.sourceFromHex(e);t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),t.push("',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},isEmpty:function(){return this._objects.length===0},remove:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared"));var t=this._objects,n=t.indexOf(e);return n!==-1&&(t.splice(n,1),this.fire("object:removed",{target:e})),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,t){if(this.width===0||this.height===0)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=this.stroke;this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),n&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(n[0],n[1],n[2],n[3],n[4],n[5])),this._setShadow(e),this._render(e,t),this._removeShadow(e),this.active&&!t&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new o;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",!1).set("flipY",!1),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL("png");r.dispose(),r=t=null,e&&e(i)}var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradientFill:function(e){this.set("fill",t.Gradient.forObject(this,e))},setPatternFill:function(e){this.set("fill",new t.Pattern(e))},setShadow:function(e){this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e,arguments[0][e],arguments[1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this,s;n=n.toString(),r?r=t.util.object.clone(r):r={},~e.indexOf(".")&&(s=e.split("."));var o=s?this.get(s[0])[s[1]]:this.get(e);"from"in r||(r.from= -o),~n.indexOf("=")?n=o+parseFloat(n.replace("=","")):n=parseFloat(n),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){s?i[s[0]][s[1]]=t:i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}});var f=t.Object.prototype;for(var l=f.stateProperties.length;l--;){var c=f.stateProperties[l],h=c.charAt(0).toUpperCase()+c.slice(1),p="set"+h,d="get"+h;f[d]||(f[d]=function(e){return new Function('return this.get("'+e+'")')}(c)),f[p]||(f[p]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(c))}t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+this.getWidth()/2:n==="right"&&(i=t.x-this.getWidth()/2),r==="top"?s=t.y+this.getHeight()/2:r==="bottom"&&(s=t.y-this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-this.getWidth()/2:n==="right"&&(i=t.x+this.getWidth()/2),r==="top"?s=t.y-this.getHeight()/2:r==="bottom"&&(s=t.y+this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){return this.translateToCenterPoint(new fabric.Point(this.left,this.top),this.originX,this.originY)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-this.getWidth()/2:n==="right"?s=i.x+this.getWidth()/2:s=i.x,r==="top"?o=i.y-this.getHeight()/2:r==="bottom"?o=i.y+this.getHeight()/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y);return r.x>e.x&&i.xe.y&&s.y1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(this.currentHeight/this.currentWidth),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawCorners:function(e){if(!this.hasControls)return;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){return'"},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.stroke&&e.stroke()},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this._removeShadow(e),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions()},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[];for(var t=0,r=this.points.length;t"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[];for(var t=0,n=this.path.length;t',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke,o=t.util.removeFromArray;if(t.Group)return;var u={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n -.set("top",i-t),n.setCoords(),n.hideCorners=!0},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this.objects.length;this[e]=t;while(n--)this.objects[n].set(e,t)}else this[e]=t},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this.objects,"toObject",e)})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hideCorners=!1,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale();return this},toSVG:function(){var e=[];for(var t=0,n=this.objects.length;t'+e.join("")+""},get:function(e){if(e in u){if(this[e])return this[e];for(var t=0,n=this.objects.length;t'+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.util.createCanvasElement(),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").substring(22);i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){r||(r={});var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(i,r))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.setActive(!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},setFontsize:function(e){return this.set("fontSize",e),this._initDimensions(),this.setCoords(),this},getText:function(){return this.text},setText:function(e){return this.set("text",e),this._initDimensions(),this.setCoords(),this},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t)}}),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}}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=new Image;e&&e.indexOf("data")===0?(r.src=r._src=e,t&&t.call(n,r)):e&&request(e,"binary",function(i){r.src=new Buffer(i,"binary"),r._src=e,t&&t.call(n,r)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +o),~n.indexOf("=")?n=o+parseFloat(n.replace("=","")):n=parseFloat(n),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){s?i[s[0]][s[1]]=t:i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}});var f=t.Object.prototype;for(var l=f.stateProperties.length;l--;){var c=f.stateProperties[l],h=c.charAt(0).toUpperCase()+c.slice(1),p="set"+h,d="get"+h;f[d]||(f[d]=function(e){return new Function('return this.get("'+e+'")')}(c)),f[p]||(f[p]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(c))}t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+this.getWidth()/2:n==="right"&&(i=t.x-this.getWidth()/2),r==="top"?s=t.y+this.getHeight()/2:r==="bottom"&&(s=t.y-this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-this.getWidth()/2:n==="right"&&(i=t.x+this.getWidth()/2),r==="top"?s=t.y-this.getHeight()/2:r==="bottom"&&(s=t.y+this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){return this.translateToCenterPoint(new fabric.Point(this.left,this.top),this.originX,this.originY)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-this.getWidth()/2:n==="right"?s=i.x+this.getWidth()/2:s=i.x,r==="top"?o=i.y-this.getHeight()/2:r==="bottom"?o=i.y+this.getHeight()/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y);return r.x>e.x&&i.xe.y&&s.y1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(this.currentHeight/this.currentWidth),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawCorners:function(e){if(!this.hasControls)return;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){return'"},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.stroke&&e.stroke()},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this._removeShadow(e),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions()},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[];for(var t=0,r=this.points.length;t"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[];for(var t=0,n=this.path.length;t',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke,o=t.util.removeFromArray;if(t.Group)return;var u={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.hideCorners=!0},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this.objects.length;this[e]=t;while(n--)this.objects[n].set(e,t)}else this[e]=t},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this.objects,"toObject",e)})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hideCorners=!1,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale();return this},toSVG:function(){var e=[];for(var t=0,n=this.objects.length;t'+e.join("")+""},get:function(e){if(e in u){if(this[e])return this[e];for(var t=0,n=this.objects.length;t'+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.util.createCanvasElement(),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").substring(22);i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){r||(r={});var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(i,r))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.setActive(!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},setFontsize:function(e){return this.set("fontSize",e),this._initDimensions(),this.setCoords(),this},getText:function(){return this.text},setText:function(e){return this.set("text",e),this._initDimensions(),this.setCoords(),this},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t)}}),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}}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=new Image;e&&e.indexOf("data")===0?(r.src=r._src=e,t&&t.call(n,r)):e&&request(e,"binary",function(i){r.src=new Buffer(i,"binary"),r._src=e,t&&t.call(n,r)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index 2b3bcb57b761a603e62b938a8d962c6f1bf4ded0..9e176bcb10d15e84cc8d6f13b7a7297e00a58908 100644 GIT binary patch delta 30704 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 delta 30753 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 diff --git a/src/polygon.class.js b/src/polygon.class.js index 4c9b22c4..e3b30379 100644 --- a/src/polygon.class.js +++ b/src/polygon.class.js @@ -56,14 +56,14 @@ this.width = (maxX - minX) || 1; this.height = (maxY - minY) || 1; - var halfWidth = this.width / 2, - halfHeight = this.height / 2; + // var halfWidth = this.width / 2, + // halfHeight = this.height / 2; // change points to offset polygon into a bounding box - this.points.forEach(function(p) { - p.x -= halfWidth; - p.y -= halfHeight; - }, this); + // this.points.forEach(function(p) { + // p.x -= halfWidth; + // p.y -= halfHeight; + // }, this); this.minX = minX; this.minY = minY;