From 330784ac2c7297cd34c2c7fbe6ea69c8079b9e85 Mon Sep 17 00:00:00 2001 From: kangax Date: Mon, 4 Nov 2013 00:15:49 +0100 Subject: [PATCH] [BACK_INCOMPAT] Change default objects' originX/originY to left/top --- CHANGELOG.md | 2 + dist/all.js | 6 +-- dist/all.min.js | 2 +- dist/all.min.js.gz | Bin 57825 -> 57825 bytes dist/all.require.js | 6 +-- src/shapes/object.class.js | 6 +-- test/unit/canvas.js | 14 ++--- test/unit/canvas_static.js | 12 ++--- test/unit/circle.js | 4 +- test/unit/ellipse.js | 4 +- test/unit/group.js | 28 +++++----- test/unit/image.js | 4 +- test/unit/image_filters.js | 4 +- test/unit/line.js | 4 +- test/unit/object.js | 106 ++++++++++++++++++------------------- test/unit/path.js | 4 +- test/unit/path_group.js | 4 +- test/unit/polygon.js | 4 +- test/unit/polyline.js | 4 +- test/unit/rect.js | 6 +-- test/unit/text.js | 6 +-- 21 files changed, 115 insertions(+), 115 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 466afb4f..ac7af85d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ **Edge** +- [BACK_INCOMPAT] Change default objects' originX/originY to left/top + - [BACK_INCOMPAT] `fabric.StaticCanvas#backgroundImage` and `fabric.StaticCanvas#overlayImage` are `fabric.Image` instances. `fabric.StaticCanvas#backgroundImageOpacity`, `fabric.StaticCanvas#backgroundImageStretch`, `fabric.StaticCanvas#overlayImageLeft` and `fabric.StaticCanvas#overlayImageTop` were removed. - [BACK_INCOMPAT] `fabric.Text#backgroundColor` is now `fabric.Object#backgroundColor` diff --git a/dist/all.js b/dist/all.js index 288e46c4..23092e37 100644 --- a/dist/all.js +++ b/dist/all.js @@ -11287,14 +11287,14 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @type String * @default */ - originX: 'center', + originX: 'left', /** * Vertical origin of transformation of an object (one of "top", "bottom", "center") * @type String * @default */ - originY: 'center', + originY: 'top', /** * Top position of an object. Note that by default it's relative to object center. You can change this by setting originY={top/center/bottom} @@ -11426,7 +11426,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @type Boolean * @default */ - centeredRotation: false, + centeredRotation: true, /** * Color of object's fill diff --git a/dist/all.min.js b/dist/all.min.js index 6b0f63ae..f9d3c434 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.3.9"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined",fabric.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){function r(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function i(e,t){return Math.floor(Math.random()*(t-e+1))+e}function o(e){return e*s}function u(e){return e/s}function a(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function f(e,t){return parseFloat(Number(e).toFixed(t))}function l(){return!1}function c(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),h(t)[e]}function h(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function w(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function E(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function S(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}function x(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]}function T(e,t,n,r){var i=r[0],s=r[1],o=r[2],u=r[3],a=r[4],f=r[5],l=r[6],c=A(f,l,i,s,u,a,o,t,n);for(var h=0;h1&&(d=Math.sqrt(d),n*=d,r*=d);var v=c/n,m=l/n,g=-l/r,y=c/r,b=v*u+m*a,w=g*u+y*a,E=v*e+m*t,S=g*e+y*t,x=(E-b)*(E-b)+(S-w)*(S-w),T=1/x-.25;T<0&&(T=0);var C=Math.sqrt(T);s===i&&(C=-C);var A=.5*(b+E)-C*(S-w),O=.5*(w+S)+C*(E-b),M=Math.atan2(w-O,b-A),_=Math.atan2(S-O,E-A),D=_-M;D<0&&s===1?D+=2*Math.PI:D>0&&s===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B=t})}function r(e,t){return i(e,t,function(e,t){return e>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function t(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t,n,r={left:0,top:0},i=e&&e.ownerDocument,s={left:0,top:0},o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!i)return{left:0,top:0};for(var u in o)s[o[u]]+=parseInt(f(e,u),10)||0;return t=i.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),i!=null&&i===i.window?n=i:n=i.nodeType===9&&(i.defaultView||i.parentWindow),{left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)+s.left,top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0)+s.top}}function f(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementStyle=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e){e||(e={});var t=+(new Date),r=e.duration||500,i=t+r,s,o=e.onChange||function(){},u=e.abort||function(){return!1},a=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},f="startValue"in e?e.startValue:0,l="endValue"in e?e.endValue:100,c=e.byValue||l-f;e.onStart&&e.onStart(),function h(){s=+(new Date);var l=s>i?r:s-t;if(u()){e.onComplete&&e.onComplete();return}o(a(l,f,c,r));if(s>i){e.onComplete&&e.onComplete();return}n(h)}()}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return e-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){w.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),w.has(e,function(r){r?w.get(e,function(e){var t=S(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function S(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function x(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function T(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function N(e){var t=[];return C(t,e,"backgroundColor"),C(t,e,"overlayColor"),t.join("")}function C(e,t,n){t[n]&&t[n].toSVG&&e.push('','')}function k(e){var t=e.getElementsByTagName("linearGradient"),n=e.getElementsByTagName("radialGradient"),r,i,s={};i=t.length;for(;i--;)r=t[i],s[r.getAttribute("id")]=r;i=n.length;for(;i--;)r=n[i],s[r.getAttribute("id")]=r;return s}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices,u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;ce.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=fabric.util.removeListener,i=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw i;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw i},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.fire("object:removed",{target:e}),e.fire("removed")},getObjects:function(){return this._objects},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"],n=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i;if(t){i=r;for(var s=r-1;s>=0;--s){var o=e.intersectsWithObject(this._objects[s])||e.isContainedWithinObject(this._objects[s])||this._objects[s].isContainedWithinObject(e);if(o){i=s;break}}}else i=r-1;n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i;if(t){i=r;for(var s=r+1;s"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;r0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3,f=u.data.length;an.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,s=i(n),o=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),s,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+u-(n>0?0:s),f=t.ey+u-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+s,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+o-1,a+s,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,a+s-1,f,a+s-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+u-(n>0?0:s),t.ey+u-(r>0?0:o),s,o)},_findSelectedObjects:function(e){if(!this.selection)return;var t=this._collectObjects();t.length===1?this.setActiveObject(t[0],e):t.length>1&&(t=new fabric.Group(t.reverse()),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var e=[],t,n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,u=r+this._groupSelector.top,a=new fabric.Point(s(n,i),s(r,u)),f=new fabric.Point(o(n,i),o(r,u)),l=n===i&&r===u;for(var c=this._objects.length;c--;){t=this._objects[c];if(!t||!t.selectable||!t.visible)continue;if(t.intersectsWithRect(a,f)||t.isContainedWithinRect(a,f)||t.containsPoint(a)||t.containsPoint(f)){t.set("active",!0),e.push(t);if(l)break}}return e},findTarget:function(e,t){if(this.skipTargetFind)return;var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this._objects[o].evented&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.group?t.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?t.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?t.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?t.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?t.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"?s=i.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:s=i.x,r==="top"?o=i.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"?o=i.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2 +fire("before:selection:cleared",{target:e}),this.deactivateAll(),e&&this.fire("selection:cleared"),this},drawControls:function(e){var t=this.getActiveGroup();if(t)e.save(),fabric.Group.prototype.transform.call(t,e),t.drawBorders(e).drawControls(e),e.restore();else for(var n=0,r=this._objects.length;n"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.group?t.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?t.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?t.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?t.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?t.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"?s=i.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:s=i.x,r==="top"?o=i.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"?o=i.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2 )*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=this.transparentCorners,w=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;i'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke|| this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})})},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s=0&&N=0&&C-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){var t=n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Text.prototype,{_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.shadow&&this.shadow.toString(),textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,n=null,this.setCoords()},_initDummyElementForCufon:function(){var e=fabric.document.createElement("pre"),t=fabric.document.createElement("div");return t.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e}}),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t.styles||{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this)},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(){var e=this.get2DCursorLocation();return this.styles[e.lineIndex]?this.styles[e.lineIndex][e.charIndex]||{}:{}},setSelectionStyles:function(e){if(this.selectionStart===this.selectionEnd)this._extendStyles(this.selectionStart,e);else for(var t=this.selectionStart;t-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0),o.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,s/this._fontSizeFraction),o.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction)},_renderCharDecorationAtOffset:function(e,t,n,r,i){e.fillRect(t,n-i,r,1)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;ri.length?(i+r).length+1:(n+r).length+1},moveCursorDown:function(e){this.abortCursorAnimation(),this._currentCursorOpacity=1;var t=this.getSelectionStartOffset();e.metaKey&&(t=this.text.length-this.selectionStart),e.shiftKey?this.moveCursorDownWithShift(t):this.moveCursorDownWithoutShift(t),this.initDelayedCursor()},moveCursorDownWithoutShift:function(e){this._selectionDirection="right",this.selectionStart+=e,this.selectionStart>this.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?(this.selectionStart=this.selectionEnd,this._selectionDirection="right"):(this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorUp:function(e){var t=this.text.slice(0,this.selectionStart);this.abortCursorAnimation(),this._currentCursorOpacity=1;var n=t.slice(t.lastIndexOf("\n")+1),r=(t.match(/\n?(.*)\n.*$/)||{})[1]||"",i;n.length>r.length?i=n.length+1:i=r.length+1,e.metaKey&&(i=this.selectionStart),e.shiftKey?this.moveCursorUpWithShift(i):this.moveCursorUpWithoutShift(i),this.initDelayedCursor()},moveCursorUpWithShift:function(e){this.selectionStart===this.selectionEnd?this.selectionStart-=e:this._selectionDirection==="right"?this.selectionEnd=this.selectionStart:this.selectionStart-=e,this.selectionStart<0&&(this.selectionStart=0),this._selectionDirection="left"},moveCursorUpWithoutShift:function(e){this.selectionStart===this.selectionEnd&&(this.selectionStart-=e),this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd=this.selectionStart,this._selectionDirection="left"},moveCursorLeft:function(e){if(this.selectionStart===0&&this.selectionEnd===0)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorLeftWithShift(e):this.moveCursorLeftWithoutShift(e),this.initDelayedCursor()},findWordBoundaryLeft:function(e){var t=0,n=e-1;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n--;while(/\S/.test(this.text.charAt(n))&&n>-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},getNumNewLinesInSelectedText:function(){var e=this.getSelectedText(),t=0;for(var n=0,r=e.split(""),i=r.length;n0&&nr&&o>n){var g=n-s,y=o-n;return y>g?f=a+l:f=a+l+1,f>this.text.length&&(f=this.text.length),f}a++}}if(typeof f=="undefined")return this.text.length},enterEditing:function(){if(this.isEditing||!this.editable)return;return fabric.IText.instances.forEach(function(e){e.exitEditing()}),this.isEditing=!0,this._updateTextarea(),this._saveProps(),this.hoverCursor="text",this.canvas.defaultCursor="text",this.canvas.moveCursor="text",this.hasControls=!1,this.borderColor=this.editingBorderColor,this.selectable=!1,this.lockMovementX=!0,this.lockMovementY=!0,this._tick(),this.canvas.renderAll(),this},_updateTextarea:function(){if(!this.hiddenTextarea)return;this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.focus()},_saveProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas.defaultCursor,moveCursor:this.canvas.moveCursor}},_restoreProps:function(){if(!this._savedProps)return;this.hoverCursor=this._savedProps.overCursor,this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY},exitEditing:function(){return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.hiddenTextarea&&this.hiddenTextarea.blur(),this.abortCursorAnimation(),this._restoreProps(),this._currentCursorOpacity=0,this},removeChars:function(e){if(this.selectionStart===this.selectionEnd){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}else this._removeCharsFromTo(this.selectionStart,this.selectionEnd);this.selectionEnd=this.selectionStart;var i=this.text.split(this._reNewline);for(var s in this.styles)i[s]||delete this.styles[s];this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsFromTo:function(e,t){var n=t;while(n!==e)n--,this.removeStyleObject(!1,n);this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObject(e,t):this.selectionEnd-this.selectionStart>1,this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n){var r=this.styles[t],i=e(r);n===0&&(n=1);for(var s in i){var o=parseInt(s,10);o>=n&&(r[o+1]=i[o])}this.styles[t][n]=e(r[n-1])},insertStyleObject:function(e,t){if(this.isEmptyStyles())return;var n=this.get2DCursorLocation(),r=n.lineIndex,i=n.charIndex;this.styles[r]||(this.styles[r]={}),e==="\n"?this.insertNewlineStyleObject(r,i,t):this.insertCharStyleObject(r,i)},shiftLineStyles:function(t,n){var r=e(this.styles);for(var i in this.styles){var s=parseInt(i,10);s>t&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index a9dfb8693e31ce05d11c8805860b9072cf9ecbf1..63a15fb79339beeb2c2be73766594b16f48532f3 100644 GIT binary patch delta 24563 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 delta 24563 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 with Fabric.js ' + fabric.version + ''; - var PATH_JSON = '{"objects": [{"type": "path", "originX": "center", "originY": "center", "left": 268, "top": 266, "width": 51, "height": 49,'+ + var PATH_JSON = '{"objects": [{"type": "path", "originX": "left", "originY": "top", "left": 268, "top": 266, "width": 51, "height": 49,'+ ' "fill": "rgb(0,0,0)", "stroke": null, "strokeWidth": 1, "scaleX": 1, "scaleY": 1, '+ '"angle": 0, "flipX": false, "flipY": false, "opacity": 1, "path": [["M", 18.511, 13.99],'+ ' ["c", 0, 0, -2.269, -4.487, -12.643, 4.411], ["c", 0, 0, 4.824, -14.161, 19.222, -9.059],'+ @@ -25,17 +25,17 @@ '["c", 0.877, -9.979, 2.893, -12.905, 4.942, -15.621], ["C", 17.878, 21.775, 18.713, 17.397, 18.511, '+ '13.99], ["z", null]]}], "background": "#ff5555", "overlay":"rgba(0,0,0,0.2)"}'; - var PATH_DATALESS_JSON = '{"objects":[{"type":"path","originX":"center","originY":"center","left":200,"top":200,"width":200,"height":200,"fill":"rgb(0,0,0)",'+ + var PATH_DATALESS_JSON = '{"objects":[{"type":"path","originX":"left","originY":"top","left":200,"top":200,"width":200,"height":200,"fill":"rgb(0,0,0)",'+ '"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,'+ '"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,'+ '"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","path":"http://example.com/","pathOffset":{"x":100,"y":100}}],"background":""}'; - var RECT_JSON = '{"objects":[{"type":"rect","originX":"center","originY":"center","left":0,"top":0,"width":10,"height":10,"fill":"rgb(0,0,0)",'+ + var RECT_JSON = '{"objects":[{"type":"rect","originX":"left","originY":"top","left":0,"top":0,"width":10,"height":10,"fill":"rgb(0,0,0)",'+ '"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,'+ '"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,'+ '"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","rx":0,"ry":0,"x":0,"y":0}],"background":"#ff5555","overlay":"rgba(0,0,0,0.2)"}'; - var RECT_JSON_WITH_PADDING = '{"objects":[{"type":"rect","originX":"center","originY":"center","left":0,"top":0,"width":10,"height":20,"fill":"rgb(0,0,0)",'+ + var RECT_JSON_WITH_PADDING = '{"objects":[{"type":"rect","originX":"left","originY":"top","left":0,"top":0,"width":10,"height":20,"fill":"rgb(0,0,0)",'+ '"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,'+ '"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,'+ '"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","padding":123,"foo":"bar","rx":0,"ry":0,"x":0,"y":0}],"background":""}'; @@ -56,8 +56,8 @@ var REFERENCE_IMG_OBJECT = { 'type': 'image', - 'originX': 'center', - 'originY': 'center', + 'originX': 'left', + 'originY': 'top', 'left': 0, 'top': 0, 'width': IMG_WIDTH, // node-canvas doesn't seem to allow setting width/height on image objects diff --git a/test/unit/circle.js b/test/unit/circle.js index 2852348a..39429ed9 100644 --- a/test/unit/circle.js +++ b/test/unit/circle.js @@ -80,8 +80,8 @@ var circle = new fabric.Circle(); var defaultProperties = { 'type': 'circle', - 'originX': 'center', - 'originY': 'center', + 'originX': 'left', + 'originY': 'top', 'left': 0, 'top': 0, 'width': 0, diff --git a/test/unit/ellipse.js b/test/unit/ellipse.js index 6c854ecd..087e2a76 100644 --- a/test/unit/ellipse.js +++ b/test/unit/ellipse.js @@ -23,8 +23,8 @@ var ellipse = new fabric.Ellipse(); var defaultProperties = { 'type': 'ellipse', - 'originX': 'center', - 'originY': 'center', + 'originX': 'left', + 'originY': 'top', 'left': 0, 'top': 0, 'width': 0, diff --git a/test/unit/group.js b/test/unit/group.js index ee4d0af9..31fcfc96 100644 --- a/test/unit/group.js +++ b/test/unit/group.js @@ -134,12 +134,12 @@ var expectedObject = { 'type': 'group', - 'originX': 'center', - 'originY': 'center', - 'left': 80, - 'top': 117.5, - 'width': 70, - 'height': 45, + 'originX': 'left', + 'originY': 'top', + 'left': 90.5, + 'top': 130.5, + 'width': 80, + 'height': 60, 'fill': 'rgb(0,0,0)', 'stroke': null, 'strokeWidth': 1, @@ -174,10 +174,10 @@ test('toObject without default values', function() { var expectedObject = { 'type': 'group', - 'left': 80, - 'top': 117.5, - 'width': 70, - 'height': 45, + 'left': 90.5, + 'top': 130.5, + 'width': 80, + 'height': 60, 'objects': clone.objects }; @@ -299,20 +299,19 @@ test('toObject without default values', function() { test('containsPoint', function() { var group = makeGroupWith2Objects(); + group.set({ originX: 'center', originY: 'center' }).setCoords(); + // Rect #1 top: 100, left: 100, width: 30, height: 10 // Rect #2 top: 120, left: 50, width: 10, height: 40 ok(typeof group.containsPoint == 'function'); - ok(group.containsPoint({ x: 50, y: 120 })); - ok(group.containsPoint({ x: 100, y: 100 })); ok(!group.containsPoint({ x: 0, y: 0 })); group.scale(2); ok(group.containsPoint({ x: 50, y: 120 })); ok(group.containsPoint({ x: 100, y: 160 })); ok(!group.containsPoint({ x: 0, y: 0 })); - ok(!group.containsPoint({ x: 100, y: 170 })); group.scale(1); group.padding = 30; @@ -320,7 +319,6 @@ test('toObject without default values', function() { ok(group.containsPoint({ x: 50, y: 120 })); ok(group.containsPoint({ x: 100, y: 170 })); ok(!group.containsPoint({ x: 0, y: 0 })); - ok(!group.containsPoint({ x: 100, y: 172 })); }); test('forEachObject', function() { @@ -365,7 +363,7 @@ test('toObject without default values', function() { var group = makeGroupWith2Objects(); ok(typeof group.toSVG == 'function'); - var expectedSVG = ''; + var expectedSVG = ''; equal(group.toSVG(), expectedSVG); }); diff --git a/test/unit/image.js b/test/unit/image.js index 72fe1390..37e6e7df 100644 --- a/test/unit/image.js +++ b/test/unit/image.js @@ -16,8 +16,8 @@ var REFERENCE_IMG_OBJECT = { 'type': 'image', - 'originX': 'center', - 'originY': 'center', + 'originX': 'left', + 'originY': 'top', 'left': 0, 'top': 0, 'width': IMG_WIDTH, // node-canvas doesn't seem to allow setting width/height on image objects diff --git a/test/unit/image_filters.js b/test/unit/image_filters.js index 41966e22..019bfb86 100644 --- a/test/unit/image_filters.js +++ b/test/unit/image_filters.js @@ -16,8 +16,8 @@ var REFERENCE_IMG_OBJECT = { 'type': 'image', - 'originX': 'center', - 'originY': 'center', + 'originX': 'left', + 'originY': 'top', 'left': 0, 'top': 0, 'width': IMG_WIDTH, // node-canvas doesn't seem to allow setting width/height on image objects diff --git a/test/unit/line.js b/test/unit/line.js index e91aca43..1c3102e5 100644 --- a/test/unit/line.js +++ b/test/unit/line.js @@ -2,8 +2,8 @@ var LINE_OBJECT = { 'type': 'line', - 'originX': 'center', - 'originY': 'center', + 'originX': 'left', + 'originY': 'top', 'left': 12, 'top': 13, 'width': 2, diff --git a/test/unit/object.js b/test/unit/object.js index 1910f161..c7fafbb5 100644 --- a/test/unit/object.js +++ b/test/unit/object.js @@ -150,12 +150,12 @@ }); test('toJSON', function() { - var emptyObjectJSON = '{"type":"object","originX":"center","originY":"center","left":0,"top":0,"width":0,"height":0,"fill":"rgb(0,0,0)",'+ + var emptyObjectJSON = '{"type":"object","originX":"left","originY":"top","left":0,"top":0,"width":0,"height":0,"fill":"rgb(0,0,0)",'+ '"stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,'+ '"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,'+ '"shadow":null,"visible":true,"clipTo":null,"backgroundColor":""}'; - var augmentedJSON = '{"type":"object","originX":"center","originY":"center","left":0,"top":0,"width":122,"height":0,"fill":"rgb(0,0,0)",'+ + var augmentedJSON = '{"type":"object","originX":"left","originY":"top","left":0,"top":0,"width":122,"height":0,"fill":"rgb(0,0,0)",'+ '"stroke":null,"strokeWidth":1,"strokeDashArray":[5,2],"strokeLineCap":"round","strokeLineJoin":"bevil","strokeMiterLimit":5,'+ '"scaleX":1.3,"scaleY":1,"angle":0,"flipX":false,"flipY":true,"opacity":0.88,'+ '"shadow":null,"visible":true,"clipTo":null,"backgroundColor":""}'; @@ -178,9 +178,9 @@ test('toObject', function() { var emptyObjectRepr = { - 'type': "object", - 'originX': 'center', - 'originY': 'center', + 'type': 'object', + 'originX': 'left', + 'originY': 'top', 'left': 0, 'top': 0, 'width': 0, @@ -205,9 +205,9 @@ }; var augmentedObjectRepr = { - 'type': "object", - 'originX': 'center', - 'originY': 'center', + 'type': 'object', + 'originX': 'left', + 'originY': 'top', 'left': 10, 'top': 20, 'width': 30, @@ -330,29 +330,29 @@ cObj.setCoords(); boundingRect = cObj.getBoundingRect(); - equal(boundingRect.left, 0); - equal(boundingRect.top, 0); + equal(boundingRect.left, 0.5); + equal(boundingRect.top, 0.5); equal(boundingRect.width, 0); equal(boundingRect.height, 0); cObj.set('width', 123).setCoords(); boundingRect = cObj.getBoundingRect(); - equal(boundingRect.left, -61.5); - equal(boundingRect.top, 0); + equal(boundingRect.left, 0.5); + equal(boundingRect.top, 0.5); equal(boundingRect.width, 123); equal(boundingRect.height, 0); cObj.set('height', 167).setCoords(); boundingRect = cObj.getBoundingRect(); - equal(boundingRect.left, -61.5); - equal(boundingRect.top, -83.5); + equal(boundingRect.left, 0.5); + equal(boundingRect.top, 0.5); equal(boundingRect.width, 123); equal(boundingRect.height, 167); cObj.scale(2).setCoords(); boundingRect = cObj.getBoundingRect(); - equal(boundingRect.left, -123); - equal(boundingRect.top, -167); + equal(boundingRect.left, 1); + equal(boundingRect.top, 1); equal(boundingRect.width, 246); equal(boundingRect.height, 334); }); @@ -452,34 +452,34 @@ }); test('setCoords', function() { - var cObj = new fabric.Object({ left: 200, top: 200, width: 100, height: 100 }); + var cObj = new fabric.Object({ left: 150, top: 150, width: 100, height: 100 }); ok(typeof cObj.setCoords == 'function'); equal(cObj.setCoords(), cObj, 'chainable'); - cObj.set('left', 300).set('top', 300); + cObj.set('left', 250).set('top', 250); // coords should still correspond to initial one, even after invoking `set` - equal(cObj.oCoords.tl.x, 150); - equal(cObj.oCoords.tl.y, 150); - equal(cObj.oCoords.tr.x, 250); - equal(cObj.oCoords.tr.y, 150); - equal(cObj.oCoords.bl.x, 150); - equal(cObj.oCoords.bl.y, 250); - equal(cObj.oCoords.br.x, 250); - equal(cObj.oCoords.br.y, 250); + equal(cObj.oCoords.tl.x, 150.5); + equal(cObj.oCoords.tl.y, 150.5); + equal(cObj.oCoords.tr.x, 250.5); + equal(cObj.oCoords.tr.y, 150.5); + equal(cObj.oCoords.bl.x, 150.5); + equal(cObj.oCoords.bl.y, 250.5); + equal(cObj.oCoords.br.x, 250.5); + equal(cObj.oCoords.br.y, 250.5); // recalculate coords cObj.setCoords(); // check that coords are now updated - equal(cObj.oCoords.tl.x, 250); - equal(cObj.oCoords.tl.y, 250); - equal(cObj.oCoords.tr.x, 350); - equal(cObj.oCoords.tr.y, 250); - equal(cObj.oCoords.bl.x, 250); - equal(cObj.oCoords.bl.y, 350); - equal(cObj.oCoords.br.x, 350); - equal(cObj.oCoords.br.y, 350); + equal(cObj.oCoords.tl.x, 250.5); + equal(cObj.oCoords.tl.y, 250.5); + equal(cObj.oCoords.tr.x, 350.5); + equal(cObj.oCoords.tr.y, 250.5); + equal(cObj.oCoords.bl.x, 250.5); + equal(cObj.oCoords.bl.y, 350.5); + equal(cObj.oCoords.br.x, 350.5); + equal(cObj.oCoords.br.y, 350.5); }); test('drawBorders', function() { @@ -636,7 +636,7 @@ test('toDataURL & reference to canvas', function() { }); test('intersectsWithRectangle', function() { - var cObj = new fabric.Object({ left: 100, top: 100, width: 100, height: 100 }); + var cObj = new fabric.Object({ left: 50, top: 50, width: 100, height: 100 }); cObj.setCoords(); ok(typeof cObj.intersectsWithRect == 'function'); @@ -650,16 +650,16 @@ test('toDataURL & reference to canvas', function() { }); test('intersectsWithObject', function() { - var cObj = new fabric.Object({ left: 100, top: 100, width: 100, height: 100 }); + var cObj = new fabric.Object({ left: 50, top: 50, width: 100, height: 100 }); cObj.setCoords(); ok(typeof cObj.intersectsWithObject == 'function'); - var cObj2 = new fabric.Object({ left: 50, top: 50, width: 200, height: 200 }); + var cObj2 = new fabric.Object({ left: -150, top: -150, width: 200, height: 200 }); cObj2.setCoords(); ok(cObj.intersectsWithObject(cObj2)); ok(cObj2.intersectsWithObject(cObj)); - var cObj3 = new fabric.Object({ left: 400, top: 356, width: 13, height: 33 }); + var cObj3 = new fabric.Object({ left: 392.5, top: 339.5, width: 13, height: 33 }); cObj3.setCoords(); ok(!cObj.intersectsWithObject(cObj3)); ok(!cObj3.intersectsWithObject(cObj)); @@ -1094,8 +1094,8 @@ test('toDataURL & reference to canvas', function() { }); test('intersectsWithRect', function() { - var object = new fabric.Object({ left: 20, top: 30, width: 40, height: 50, angle: 160 }), - point1 = new fabric.Point(0, 0), + var object = new fabric.Object({ left: 0, top: 0, width: 40, height: 50, angle: 160 }), + point1 = new fabric.Point(-10, -10), point2 = new fabric.Point(20, 30), point3 = new fabric.Point(10, 15), point4 = new fabric.Point(30, 35), @@ -1118,10 +1118,10 @@ test('toDataURL & reference to canvas', function() { object2 = new fabric.Object({ left: 25, top: 35, width: 20, height: 20, angle: 50 }), object3 = new fabric.Object({ left: 50, top: 50, width: 20, height: 20, angle: 0 }); - object.setCoords(); - object1.setCoords(); - object2.setCoords(); - object3.setCoords(); + object.set({ originX: 'center', originY: 'center' }).setCoords(); + object1.set({ originX: 'center', originY: 'center' }).setCoords(); + object2.set({ originX: 'center', originY: 'center' }).setCoords(); + object3.set({ originX: 'center', originY: 'center' }).setCoords(); // object and object1 intersects equal(object.intersectsWithObject(object1), true); @@ -1137,10 +1137,10 @@ test('toDataURL & reference to canvas', function() { object2 = new fabric.Object({ left: 20, top: 30, width: 60, height: 30, angle: 10 }), object3 = new fabric.Object({ left: 50, top: 50, width: 20, height: 20, angle: 0 }); - object.setCoords(); - object1.setCoords(); - object2.setCoords(); - object3.setCoords(); + object.set({ originX: 'center', originY: 'center' }).setCoords(); + object1.set({ originX: 'center', originY: 'center' }).setCoords(); + object2.set({ originX: 'center', originY: 'center' }).setCoords(); + object3.set({ originX: 'center', originY: 'center' }).setCoords(); // object1 is fully contained within object equal(object1.isContainedWithinObject(object), true); @@ -1159,7 +1159,7 @@ test('toDataURL & reference to canvas', function() { point5 = new fabric.Point(80, 80), point6 = new fabric.Point(90, 90); - object.setCoords(); + object.set({ originX: 'center', originY: 'center' }).setCoords(); // area is contained in object (no intersection) equal(object.isContainedWithinRect(point1, point2), true); @@ -1178,7 +1178,7 @@ test('toDataURL & reference to canvas', function() { point5 = new fabric.Point(80, 80), point6 = new fabric.Point(90, 90); - object.setCoords(); + object.set({ originX: 'center', originY: 'center' }).setCoords(); // area is contained in object (no intersection) equal(object.isContainedWithinRect(point1, point2), true); @@ -1196,7 +1196,7 @@ test('toDataURL & reference to canvas', function() { point4 = new fabric.Point(15, 40), point5 = new fabric.Point(30, 15); - object.setCoords(); + object.set({ originX: 'center', originY: 'center' }).setCoords(); // point1 is contained in object equal(object.containsPoint(point1), true); @@ -1210,7 +1210,7 @@ test('toDataURL & reference to canvas', function() { equal(object.containsPoint(point5), false); }); - test('containsPoint width padding', function() { + test('containsPoint with padding', function() { var object = new fabric.Object({ left: 40, top: 40, width: 40, height: 50, angle: 160, padding: 5 }), point1 = new fabric.Point(30, 30), point2 = new fabric.Point(10, 20), @@ -1219,7 +1219,7 @@ test('toDataURL & reference to canvas', function() { point5 = new fabric.Point(10, 40), point6 = new fabric.Point(30, 5); - object.setCoords(); + object.set({ originX: 'center', originY: 'center' }).setCoords(); // point1 is contained in object equal(object.containsPoint(point1), true); diff --git a/test/unit/path.js b/test/unit/path.js index fc1c4379..fe7f2d55 100644 --- a/test/unit/path.js +++ b/test/unit/path.js @@ -2,8 +2,8 @@ var REFERENCE_PATH_OBJECT = { 'type': 'path', - 'originX': 'center', - 'originY': 'center', + 'originX': 'left', + 'originY': 'top', 'left': 200, 'top': 200, 'width': 200, diff --git a/test/unit/path_group.js b/test/unit/path_group.js index f448b2bd..620aff1c 100644 --- a/test/unit/path_group.js +++ b/test/unit/path_group.js @@ -2,8 +2,8 @@ var REFERENCE_PATH_GROUP_OBJECT = { 'type': 'path-group', - 'originX': 'center', - 'originY': 'center', + 'originX': 'left', + 'originY': 'top', 'left': 0, 'top': 0, 'width': 0, diff --git a/test/unit/polygon.js b/test/unit/polygon.js index e0d9c7ed..8e259e89 100644 --- a/test/unit/polygon.js +++ b/test/unit/polygon.js @@ -9,8 +9,8 @@ var REFERENCE_OBJECT = { 'type': 'polygon', - 'originX': 'center', - 'originY': 'center', + 'originX': 'left', + 'originY': 'top', 'left': 0, 'top': 0, 'width': 10, diff --git a/test/unit/polyline.js b/test/unit/polyline.js index 79ff034f..9239cb9b 100644 --- a/test/unit/polyline.js +++ b/test/unit/polyline.js @@ -9,8 +9,8 @@ var REFERENCE_OBJECT = { 'type': 'polyline', - 'originX': 'center', - 'originY': 'center', + 'originX': 'left', + 'originY': 'top', 'left': 0, 'top': 0, 'width': 10, diff --git a/test/unit/rect.js b/test/unit/rect.js index cfff84a2..641a867a 100644 --- a/test/unit/rect.js +++ b/test/unit/rect.js @@ -2,8 +2,8 @@ var REFERENCE_RECT = { 'type': 'rect', - 'originX': 'center', - 'originY': 'center', + 'originX': 'left', + 'originY': 'top', 'left': 0, 'top': 0, 'width': 0, @@ -135,7 +135,7 @@ var rect = new fabric.Rect({ width: 100, height: 100, rx: 20, ry: 30 }); var svg = rect.toSVG(); - equal(svg, ''); + equal(svg, ''); }); test('toObject without default values', function() { diff --git a/test/unit/text.js b/test/unit/text.js index c12702c3..0a45bc48 100644 --- a/test/unit/text.js +++ b/test/unit/text.js @@ -8,8 +8,8 @@ var REFERENCE_TEXT_OBJECT = { 'type': 'text', - 'originX': 'center', - 'originY': 'center', + 'originX': 'left', + 'originY': 'top', 'left': 0, 'top': 0, 'width': 20, @@ -44,7 +44,7 @@ 'useNative': true }; - var TEXT_SVG = 'x'; + var TEXT_SVG = 'x'; test('constructor', function() { ok(fabric.Text);