From 8879c73af7abf67efb9ac8ce86c134a40875670f Mon Sep 17 00:00:00 2001 From: kangax Date: Tue, 16 Apr 2013 12:43:20 -0400 Subject: [PATCH] Document lock* properties. Build distribution --- dist/all.js | 48 +++++++++++++++++++++++++++++++++++++++++--- dist/all.min.js | 10 ++++----- dist/all.min.js.gz | Bin 47260 -> 47301 bytes src/object.class.js | 42 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 8 deletions(-) diff --git a/dist/all.js b/dist/all.js index 793c90b3..63439f56 100644 --- a/dist/all.js +++ b/dist/all.js @@ -6545,7 +6545,7 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { var canvasToDrawOn = this[(allOnTop === true && this.interactive) ? 'contextTop' : 'contextContainer']; - if (this.contextTop && this.selection) { + if (this.contextTop && this.selection && !this._groupSelector) { this.clearContext(this.contextTop); } @@ -10127,6 +10127,48 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati */ clipTo: null, + /** + * When `true`, object horizontal movement is locked + * @property + * @type Boolean + */ + lockMovementX: false, + + /** + * When `true`, object vertical movement is locked + * @property + * @type Boolean + */ + lockMovementY: false, + + /** + * When `true`, object rotation is locked + * @property + * @type Boolean + */ + lockRotation: false, + + /** + * When `true`, object horizontal scaling is locked + * @property + * @type Boolean + */ + lockScalingX: false, + + /** + * When `true`, object vertical scaling is locked + * @property + * @type Boolean + */ + lockScalingY: false, + + /** + * When `true`, object non-uniform scaling is locked + * @property + * @type Boolean + */ + lockUniScaling: false, + /** * List of properties to consider when checking if state of an object is changed (fabric.Object#hasStateChanged); * as well as for history (undo/redo) purposes @@ -12921,11 +12963,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati * Since coordinate system differs from that of SVG */ _normalizeLeftTopProperties: function(parsedAttributes) { - if (parsedAttributes.left) { + if ('left' in parsedAttributes) { this.set('left', parsedAttributes.left + this.getWidth() / 2); } this.set('x', parsedAttributes.left || 0); - if (parsedAttributes.top) { + if ('top' in parsedAttributes) { this.set('top', parsedAttributes.top + this.getHeight() / 2); } this.set('y', parsedAttributes.top || 0); diff --git a/dist/all.min.js b/dist/all.min.js index e98942ab..d3d358e1 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,6 +1,6 @@ /* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.1.6"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){e||(e={});var t=+(new Date),n=e.duration||500,r=t+n,i,s=e.onChange||function(){},o=e.abort||function(){return!1},u=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},a="startValue"in e?e.startValue:0,f="endValue"in e?e.endValue:100,l=e.byValue||f-a;e.onStart&&e.onStart(),function c(){i=+(new Date);var f=i>r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e,t,n){if(e){var r=new Image;r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function d(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function v(e,t,n){var r;if(e.length>1){var i=e.some(function(e){return e.type==="text"});i?(r=new fabric.Group([],t),e.reverse().forEach(function(e){e.cx&&(e.left=e.cx),e.cy&&(e.top=e.cy),r.addWithUpdate(e)})):r=new fabric.PathGroup(e,t)}else r=e[0];return typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function w(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}var e=Math.sqrt,t=Math.atan2;fabric.util={};var i=Math.PI/180,c=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},h=function(){return c.apply(fabric.window,arguments)};fabric.util.removeFromArray=n,fabric.util.degreesToRadians=s,fabric.util.radiansToDegrees=o,fabric.util.rotatePoint=u,fabric.util.toFixed=a,fabric.util.getRandomInt=r,fabric.util.falseFunction=f,fabric.util.animate=l,fabric.util.requestAnimFrame=h,fabric.util.loadImage=p,fabric.util.enlivenObjects=d,fabric.util.groupSVGElements=v,fabric.util.populateWithProperties=m,fabric.util.drawDashedLine=g,fabric.util.createCanvasElement=y,fabric.util.createAccessors=b,fabric.util.clipContext=w}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function g(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function y(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function b(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,p=f.length;c']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(n,r){var i=n.getElementsByTagName("stop"),s=n.nodeName==="linearGradient"?"linear":"radial",o=n.getAttribute("gradientUnits")||"objectBoundingBox",u=[],a={};s==="linear"?a={x1:n.getAttribute("x1")||0,y1:n.getAttribute("y1")||0,x2:n.getAttribute("x2")||"100%",y2:n.getAttribute("y2")||0}:s==="radial"&&(a={x1:n.getAttribute("fx")||n.getAttribute("cx")||"50%",y1:n.getAttribute("fy")||n.getAttribute("cy")||"50%",r1:0,x2:n.getAttribute("cx")||"50%",y2:n.getAttribute("cy")||"50%",r2:n.getAttribute("r")||"50%"});for(var f=i.length;f--;)u.push(e(i[f]));return t(r,a),new fabric.Gradient({type:s,coords:a,gradientUnits:o,colorStops:u})},forObject:function(e,n){return n||(n={}),t(e,n),new fabric.Gradient(n)}}),fabric.getGradientDefs=r}(),fabric.Pattern=fabric.util.createClass({repeat:"repeat",initialize:function(e){e||(e={}),e.source&&(this.source=typeof e.source=="string"?new Function(e.source):e.source),e.repeat&&(this.repeat=e.repeat)},toObject:function(){var e;return typeof this.source=="function"?e=String(this.source).match(/function\s+\w*\s*\(.*\)\s+\{([\s\S]*)\}/)[1]:typeof this.source.src=="string"&&(e=this.source.src),{source:e,repeat:this.repeat}},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;return e.createPattern(t,this.repeat)}}),fabric.Shadow=fabric.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,initialize:function(e){for(var t in e)this[t]=e[t]},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(){}}),function(e){"use strict";function n(e,t){arguments.length>0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll&&this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=this.stroke;this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new o;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.getAngle(),flipX:this.getFlipX(),flipY:this.getFlipY()};this.set({angle:0,flipX:!1,flipY:!1}),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.set("active",!1),r.add(t);var i=r.toDataURL();r.dispose(),r=t=null,e&&e(i)}var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;re.x&&i.xe.y&&s.y1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(this.currentHeight/this.currentWidth),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var n=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=n},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.stroke&&e.stroke()},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this._removeShadow(e),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;ie.x&&i-ne.y},toSVG:function(){var e=[];for(var t=this._objects.length;t--;)e.push(this._objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t'+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.util.createCanvasElement(),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").substring(22);i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in s&&(this._initDimensions(),this.setCoords())}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.pathname,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +},v=function(e){return e.type!=="touchend"?e.touches&&e.touches[0]?e.touches[0].pageY-(e.touches[0].pageY-e.touches[0].clientY)||e.clientY:e.clientY:e.changedTouches&&e.changedTouches[0]?e.changedTouches[0].pageY-(e.changedTouches[0].pageY-e.changedTouches[0].clientY)||e.clientY:e.clientY}),fabric.util.getPointer=p,fabric.util.object.extend(fabric.util,fabric.Observable)}(),function(){function e(e,t){var n=e.style;if(!n)return e;if(typeof t=="string")return e.style.cssText+=";"+t,t.indexOf("opacity")>-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function g(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function y(e){var t="";for(var n=0,r=e.length;n',"",t,"",""].join("")),t}function b(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,p=f.length;c']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(n,r){var i=n.getElementsByTagName("stop"),s=n.nodeName==="linearGradient"?"linear":"radial",o=n.getAttribute("gradientUnits")||"objectBoundingBox",u=[],a={};s==="linear"?a={x1:n.getAttribute("x1")||0,y1:n.getAttribute("y1")||0,x2:n.getAttribute("x2")||"100%",y2:n.getAttribute("y2")||0}:s==="radial"&&(a={x1:n.getAttribute("fx")||n.getAttribute("cx")||"50%",y1:n.getAttribute("fy")||n.getAttribute("cy")||"50%",r1:0,x2:n.getAttribute("cx")||"50%",y2:n.getAttribute("cy")||"50%",r2:n.getAttribute("r")||"50%"});for(var f=i.length;f--;)u.push(e(i[f]));return t(r,a),new fabric.Gradient({type:s,coords:a,gradientUnits:o,colorStops:u})},forObject:function(e,n){return n||(n={}),t(e,n),new fabric.Gradient(n)}}),fabric.getGradientDefs=r}(),fabric.Pattern=fabric.util.createClass({repeat:"repeat",initialize:function(e){e||(e={}),e.source&&(this.source=typeof e.source=="string"?new Function(e.source):e.source),e.repeat&&(this.repeat=e.repeat)},toObject:function(){var e;return typeof this.source=="function"?e=String(this.source).match(/function\s+\w*\s*\(.*\)\s+\{([\s\S]*)\}/)[1]:typeof this.source.src=="string"&&(e=this.source.src),{source:e,repeat:this.repeat}},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;return e.createPattern(t,this.repeat)}}),fabric.Shadow=fabric.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,initialize:function(e){for(var t in e)this[t]=e[t]},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(){}}),function(e){"use strict";function n(e,t){arguments.length>0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll&&this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=this.stroke;this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new o;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.getAngle(),flipX:this.getFlipX(),flipY:this.getFlipY()};this.set({angle:0,flipX:!1,flipY:!1}),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.set("active",!1),r.add(t);var i=r.toDataURL();r.dispose(),r=t=null,e&&e(i)}var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;re.x&&i.xe.y&&s.y1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(this.currentHeight/this.currentWidth),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var n=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=n},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.stroke&&e.stroke()},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this._removeShadow(e),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;ie.x&&i-ne.y},toSVG:function(){var e=[];for(var t=this._objects.length;t--;)e.push(this._objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t'+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.util.createCanvasElement(),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").substring(22);i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in s&&(this._initDimensions(),this.setCoords())}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.pathname,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index f4f34ffc123824077e58b1c164ed6af113a058f0..e7bdb0b14f1e018f206996e995f3096f7eca0d5c 100644 GIT binary patch delta 35177 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%0AMjD6!|bEui<e^pKhUmpW@3hNB^r zh5slIP5SWTIV96UItNR0-wK~G1goRvAWOKpem3ctpgUf%nISF= z1eMeQiLTP^!@xmwDs174%T@mC9j?1Z;@_P9gpz;29IHwi4_@17)O|AlGYCg}q@2{l zNQS@y`q6D@0_tW*)i~2gvc@7O<1?{fN_;S5c1yh68zD@0@cX(qV&a1zYxp1vWRRBs zHB_j8gZLg~=u3D5X{dA$Ca_^wsN`g1sj_`ZyxDoGG}9951dDo0>A0%#AmrNyVk#Ni z1q**WMLc=%)G5WX5PyS>Wwd4Oqis~+jpSIE4aPg1lpzSmZZ6+pf~+w(atp{y6JrAK zM&S2ew)Kc0@NdG=&ZOQzgG5fsI~*`0J8$1vQlo;NJ5eO2QAUh;u$7hPBqE+8{;%8#5rzKBkh0MteMAr2NU{BcRIQZX>54I@(#>E4;8#etT@fu_JT$p4zmXK68?rC>f$ zOV#S(SH*1YkVBacoUHVp<;Mxt)fUMVE-bo3s5bS;aBJ6t&%kV4=X-bSir4VEL`#2z zwB7`*w>ki0AiZxfAV|mKh^Px@Vzq?R*RxZ4oxyBE}C`f#HcrKpdhl~ zVhhsJjzPd#N6;m~>*-!Aob5Rx!`&OikoI9(Hi+FUMeNh+q##GCdDX-(v*)!XlP#M#5Dr$zFe$#Dk~uUFEZo3w7xCT6;pt_vHhtf=4kf)>}{x z=LQ1!-M|YQ;XJ#-uIy%&X9VAOA`L~6NoFGvE6C9QAoxI~US@v0P*07CkN&dv=pRHR z-Wv`c2cAy(GN~>Jaxy}ZrVKS~d_*afSO3!}<&}Id1Wx}FRRLeD$_n$cmIZ(QYln!( zSs5rky>Jf8L%dkXxM^8bz=&l)PfCO~#O}4DrqZ;K=zb)qb6*8}A?&v|*>$=&Aq~E7 zvV4ZaS*x#;VgUn-x0PYoTr2IzndzzoeymngBP5P2WHXJt%?K>@uM%9xMwQ}4_>)#t zvGAryaYh9hgJhk4#wqvkp-F!_bhyyQmSo64E#z0I7maRpYUefkKduKnlx#&siX6Xq zhz?n17bwYO)5u>?C99S2T|42sW#=ZEZrBn$!c*9s1=syU64ID6+msfvWnQyQp_q)OmkV*Tt18>s_O) zcg?bXQ6=f(RZtKa?KCSSTMFSIae3FK(qi5GYoho+#U z$$L##!!@c5lE|5LlwliI*xDDu*YgTv;chT{f!kO(p~ylw1=K;fdiZelZ-1QYnj;aWH>*FoZn~Yq{C9tzENCm{B$I8m|cWG#KXyq=3X4CzSRzdUH0x zL1a@abZye7_pf;!X84O%A8^zqaMalbk^CxdJuNxzG#)cv?CE~2|&m--h)@MvV*}$^^YJ)2T9Fc&dfV*9PvmPG$DAf-<076P z#RQ00AiB{gU{zGPl#PSHk^|r)A;QdEB9QY7j8Rx1UDQ|a14GK)0TqH;Vl}MU27pcg zL8$Hv!KfCK&5?gXGTPm0x#bkVCs5QNDS-5C9JmXd9@G%tfOl7*eS zIIPIsI5|wdT6nj&{0lu>i(`eIDPPqp?p(&bQ*oG__ysiMpg51$%SzMJMExXPZM(u+ z{W@QG!AhP1j47g$mnymXbzV|(IgNs968ZS{CXE9 zVS0^u!gP)4I*|6M~(mJKN#R(~kwsFwJ zL4$@|Zf}Bk@O2i9La!F32@wTD=$+Q6a}LL%FAl{ZXukuyFn{vEB0>{iTE3v(=TFNS zf)}a_8x1m#iXP)U2nDmpthpy1;!yjVYjCs_Ptk_O@n37dc z-e}yAQHX9N%H)T{M(}tbroaj}9lDv=Nd9R%ZHSPi^1;IFZP|G=Y?>oD3^uruNHi>8 zyU~ar#{o^E+y2$WoXnocHV&J821nkyh=9?Z}4y{gD#?KR4e=)>sb`Q)tbj= z0!h_SpADnf*-AKlnkMsjHxI>A3aG z(JL|BP^>t8yP@dPxC!kaqE^unJNq*)Oy+-Apc`Oai{|L~*r@DXv$D0S?47D?ZC3Wq zs_Y$CHkN8=g4R#v&v!(Yu#yykX%=g!jEoHeH=&oSA5Uayjy+n8>I!G+_$g%vbteg?n?$j!i7AaDpi4Kt~I&v*@D=*~? z#7w>^DtbEnYRz=OPn;VS1vbRp-kX0kOaEYkmeKN;LKHQpZ-t~y9qi(&l|kBc-KV>4 zzalOQ0CLV?2=R5uh$0Rn!N9!CLm2oFFq|zR?gnwkEL{t~W3OEjMuR(tn22Kq) zpWAP=wglIF7e$eL-_M^7C&Q>uOc2b2U-CDi(1bSge6M+0`}?-l(KmqEWi zyBsd-bMyBysCzE|ZY#&q*ff7N%88cCZ?zDt!EO#UEd^E}o$*4HaF8xjvs10+ZY^D? zMM?S^5o=T=>$#$6siV2DD-xG~f-2%o)}-+B5S{k=Wr!|y7VQ)(PO;(?N;Wf%hvB8$ zEO~l#IqvnQ!A;V@x}2WT9VXG(oqp1=S*Bs0!+COho3xFNRc!0d_3(dTB0kWm6_EI( z#b!&mog_de+;9PEGw{l4dWguNQLT0y-UQpXf?8`VnS4Hp$4!?0j#rs_6IhB#LjOeH z1zo3&0qdY;#aprU#qix7we;Q@1|PF3qp47hP||KGb-H_L!TsysDeF>pnDIS}4yEL+ z^QxU8%uz?rGo#{66h(hZGTJe^b5|Ap{y0!KS-GW(vnF15adwxXHH+kGlCYLeZti(jbxxfghPG!H&TKP7Hhtv@7XH8QJ=W1t(uz0p>%lgToYA6(( zSd=oyMpN*XhHj8WqwBdME^7K%pQ823p;$mU)(t_d0BF39@_~O)%oi(?N%$JV*LFBi z?~QV_W4u$go<^;jBoEr{Pse8Fruce`{#j#>BBWy+p-QV9ld$9R7nj*$<}mSBmU~X8 zIj*Fdk#k@MJKW{8l?EJ|C5FG1-Q!>-CrVz|Wp=)*Q{^0o$AGlqcIS~!aVVkb_`-Tt ziXG)RdfR@uZgqcG&5fn`fuY@Ql0t8meS~wzqiOddlT?V8{Ef|Hp-!%zNmZxRNS1q2 z04cDK9TOzV03zkcrMPZI9_>9mryEsXCBI6gub*c)APsMH_e{KiPZ5m?Aw+#a=CNzgG({HZ(T{Ooa2ub9S^wDF1^^->}nR#F5u{SmbXx-}+U zE}mKyG)8}TEft$u1+KfB&=?n;* zJ0az0_?ni+-om(JqPsYk`{*gEgs3ben>I^>i>8089T2R1F*jkGnnf6G*5WX<=_PeA z6X-`DS%Rp>RzYMc*qrQ}x{SO$?Mry0bNH-`&joybQlB+^=KAvrK8>#$BJ~#(q|3QF zhjQfCrU{!dn<=l>E{E7EvZWm_SYGRBv{Y9+=k~_XsB>=tfqh`u8O5y-!wGO3L@I8D zbS8iQX&E=ZT}c^oDz-me2?bu3UK{kZ1?vamlrU5z5^go>JK|l19jkWY*PjD6wk6YN zfsMgZY9WoGiH@t5Z7^f*c5R0l+mffNFYHin8*YmkjcPs*I;n=5L20TW>Rv6q=3?ud zMQ15A8?cug#oWI&owIuH7Il`?-KhLCfZ%`bS=iR5>Dm5ixn-_@T5g}|{5P3tM=75* z(_O9koDu!aX8JSs; z`AoU}5p#_G=!FJGJs`afXaT8O%Maz|p~L6br^^iPvSq&?*uuZ^%*1>cqoxzgg4t*7 zbd?;qlFQW>mq~t+&iuee5*C-jt74YTvxbbFY_xf7M649MBZ$?<3`UHffPax?cB$FG zLHGAnrJjy`XCWPB$9$J@m)~jCAlHA4r*?1kU6otQW8Uhp>!!wXX7osbLnM6?8J91x|{Sm zs#)Qca6?eiCd6(V$EDZ2jiY8)heIz^(nrqJradJ+?MZ*nes&ktYWaj!A1|} z(*3X&vXW)&d{*mcs8m7Pm$B=84dd75@;xb*(ut{dOzLKoD%ZOejmp?%G{Sn^8sdH1 zd#}wN;bU+6HI_w|j%VPOK(n%D$vVkd*=6eyO-XJ#hhG?Y!03kw4)J*V>eigy(0aRV zsmv`9L&cvD*kS@n0b7*Z-nPPjesKl9Bh5%@h)8OzZJR^P*ESyvZf_sxjB}?7?%bg( zt7vPdtpfIH*hyM+4}=wsr2VGap}z_f*CPlU>LL%P7@chsA(^19lf@ONl7pbD%;qFb zd~Hb~gxM`)>q!@bEdri%nW98_2x)C{8VER}A1rV->`ba5a(i@6$UWMB@U>7@b~hzd z%FKaldc+Osx1SwdFy*=H6#b$WSF0b_-v139c-P&5_5W}OM7tWM99t?BP z%`A;uokj_8sh@S7-a9T*<{58l6{}+_CBb!;THyI*_fZB%-L^|G`5p-y| zWI*mSZ6cK;%kD_(*EVB+PYtUAyF~^PgElV2=d4sGOi!ybWuR0&5KJyKB1h52TS0A! zMZ06S?PwdaL89{yZT!ma*P9MRjhk2Mg%uU~ZdjwO7MxW2u; z*$AHq=DQi`WupcIdcvsF+uNK>zafO=IruFu|I)>?`FfRSS9o)Ox}jGNatIowLWiEr z1VZQu2g_Ap`Kk?PtC9wXqm4d=vH`~GB)xS52?6Z|%v(;z_;Io;rkpUfP)reMPH7$3 z1NZa)_`s1V#FlYGCF0K;HZ~Ibtw!x_)5+NX%y0=9E_29+TgT@Zi)i)IV$nBShf&se zuc54@)1TBH$jujjkbp&z%#ezAI87ENt`AaE`~#OxenL#~BWw1=j3fmV6 zB2TupKn2BJMwUWDDjYHy5+!lbNb?1ZVs3jxu6$LB`3hgs0r=I$kA~+wNQ##nJgMA8 zH9DxkoGSRPf*W*FT%~3G9B)e%sVv#6xYsLzY02P_#K(<)V515sOv9mcfH=d|gwTg8 zFQUI*h^IwLrV)6kA4o4UP-uE55Zmf24?nM*xD@7M-5FLUc@*krZ518%hiK_14A3!i zf`;DSDR*@5M+`ahCLQv5zYwzcVGxNAOKk*o5~pQ7;u?w%j+xa{YnbE1?i~_{ zj6`gO5gbZ7Fh);H=>YiluaoJe&xT5Y@T#-|IwObU0=_nzP}1HnqPYgi6{2HH+f7oy z&nBXO;;eQg=(LtZaL^D@bQ<1Tm3hurcDUb4X*RCYqk1dXPIv0993mpj?IW08ULHQI z9zHCYzy}e9rIv$M)g5zGd^?TZk(S%_v=wxFJ9M~RPn#i}%xrWe8l4%9uDH><(~cQn z_-r$g-Db0nQV&cf>!7d)t&t@}9NP!4l}Md`ond2zcCIRm+B8owsu z@Kx7mWxArNb|fE|ln5@xCS&{XAs&_+U9V9}x6i$Q zU2w1CTB^;9tBFwM4{NDJFC(NPzo3F9@H->?krniGku6Vz_?>_A&Av&2{MJccLNw9y~gzJ z>3Q7aMYAX7(j$k@a7K{pDz{&YRO@#9xWvGU)%q~`w}_9NHXM>L^aH90;$KG4K8B$K z4(5T+f#$8E9>`L(Svs@`lX)Q?JvxEN9mwiiXx#1EdB=6tEDGqXSVC9JdKJC_me0Se z8pO2itb^0FYvFL!KX&4O(L?~DKv5shrd1zjGO81X4OJ>V9d@9s9rg7)FilL?3asSAJI3_?)dZ6ory6+5bZE$Lyne;}g}hY?uoR() z#8^c_*%7zvq(6$J#-2bd(y{M27TaI6Ecg_&EDpoL4?n&B@XgzQ=Pyub`QhdF-+q5` z3@1CEhg2kq0Of(my%h>J@=!Da-wEVFVS$R0cU0O(96$~t7#jsVC@eeKEHhA^N;p_J zj)rjUl!Uj6`l;LlPuf9#ptD#<7dKZ2$YYF0Q|uPwqftpCP*%gi)-h;=GagLyR5TK( zKn0a(&OHu-giJJl!rx&ya}TA4EhGU&K;uSChh8><`OqsxF(D#*Az9DBJW9pBlHb;0 z$}^<{%%fGtNg&jY!_--E3!~6+dYPMBcEGcLoceTsk-Ms|_)6 z1qx@1zy(BH8j%QD0)A+UVAG3N*~fI^t;&V}hvT2W{r=?#ucxE4S0;TX%aM1wK!M#u=B2nEA;y#a+68_27AXoNHL)&%S+bolB?@;d# zM?$dS^)g?b&oF4uJX%3rWZ*PCBR0x`Oshr4;`$p%zA88PDwOS_ko`126VDhTV+|Q) zq25G)r%k1;9;-nr1s@S-*;}*d*eTUZEp@-t&;uIh1kuE$PGKToRf`)T3^D0xn3-XA zj)s9=R`CPlV5|`cQ@_p_wKTH5GqSyNWn%yl(Ncj7!r86sYFzr#|B62tg`)%IdCFjk z3^oW3heK<~U_#?s$ldGW;$kZXhUv9e&)Ru^Q7qCV_Y6iq4Ik7}nr}UPbsjI3N+LY4 zwY{gMD9V&-%Pi3YvLf^Yg(Qyx9+*T^iieaJHA7#habLvOLC#ChLUh+j4Sl~7!M#fK zqFtUI;y;h^pC|aw(=(u>qA9hZAgD3<=-?448mCau1_3mP{y-KBjaLF>@MT?o?7d2^tkied`CgGNCAwPlBgasW43P zz&_vL3?F*B{nkEGn&#r7t5>{su^5|w{HXFPs2nU>(ddCu#R@lzRsw;H` z7`NQ%xq)yDTPDiger~^!3f7u$sUCE^?Q+~$zDc#tr(#vp zBVQIof~(_iT%--N*Dhq9Cf8XNSE=943`#RG34Bde5R-_(C~}h)Z`~*VEfNt7W5Wu0rA)VMu5g|7}8c#?XD+X0;w-;=cud7J<0P?yH=T z-nI~aSpQES;9e+5jChF;P(4$X?+gFbzCv@Fl4jsF-Zk6n1q~#NhCay_nE|xLAvQ;n z4UChY1u)+np5RbHZFU;ppMhi648^Fpj?Zy01yb8kq&UFp37fkYa z)gu+KZ-61G$rFt5Asc(4=aIVsGhUsAE`4aOMr%Rm;rUv|oUg+)sZexL4)}*wk%og_ z{B&zQ7nAA~`+3IwjO$2k8AjPvx}Zv#8_kI2?{1Z7GjC;oYnmI1;-W0^MViwa;T80| zu0vOPtThcHeDkc~n4j;F|7S=3&g|SeApfEs_FZnP%R6fnI^y!IPthqGD!g=MqZ{0$ z?!tM~1+W^a&ci2fWY(<{TU|ZJ-E&fWQx@Gol{=bY7IBA$n8~fCU<fyL=kr#7?Ip+3ND(HqVrJM(F)G(tUpZc7I0GQCQp_O=0)K7 zbedLGQC3=`D0E0^S$6G`-%4%XF!$TBR8*Cg9|;3G+$K?v4|Vj1536hjS6n4ly++KB z%F0v30VhEJqzzS}xh0wqJ~9WwfXz|U3GJk(muZ0#o&6FvI(-B0 z%HKsx{di^ND8j_bQH;%=S>O@1T7cp`!Qla`HgZh#ChEtT+DH9Zp4Uw`TXyz#C3Z{1 zI@gu-j7oaDDskjq8M%{oZmWx;D6@wvqlbx}aNDJd^1v% zZNEBjLtMZHr9ZewoheFAfj%q3%9Y}r%Q&Yp3TFx~;b^=@lVkxrwFUF(0rj?krZx4esIl#yiI5ijzbegNsnvIEZ)?MsO>b7$0rrzQC5Dz5ss=gRGRRH8NINus+YO{ z{1CE!_^=wRA!JP)OiTRVd1bQG!X=vC5n6@tQGNGP_@$v$Ok38>gD78?4IE5=AvrTs z@u=D%Wi#Zw9Rj(|nn2*BKZSY+K3aVlFaTDMxXZndZx0=dp$ z(%mgW*JK?n%G9}wEvov3@~lG|r|fLHl8U8Lm2|bCiP*Xj*qbQN0;!5nmhICnoRjKI z_+D!3pt!cDYJVCWQC>?YWRf0#4JZ9}c;pC5H(}LPOX}8%fjLddl_teHbYSF9TgN3u z9T!vA_!pt*A=SK6_em`pcv3V5zonewc(6NYuw0gIB|mwj2YT`j(CApy)||Jk)hRZ- z$(MImDBd}1W|z6g&G((Ur3~_H)K-NYN(DY)(}PC;Cbue#@)+!gbxaI@6`Echm}|C& z-g(Uo+>_W;rM9!YYh|H2^a`^ zw5k>r0$<`v)NTaO4aJmKy)xL(B)LGgT!a{mI@*Oxo?-#_~tqSGTJY~HT+%o zSDWw>!>00bXtra24ymSp@}g(OB%5%F`7Y(f)9TWG0vRtG8Aa556V619T{)Xo>YN|D za~>RS$qSK?`>M027~j=bEEtGrcW*__?*4MkYs@{{QuD04=JU^QwYBlZp%o*;Iz^WB z5;@8xa-K8v%kdH2aa^Gnjtg|Yv4+nwI^P(WTf+R#B#U>rwrHe(&c@mOTij<_09OrI zE~S)YX!T3gJXY!uZz%$Ii>Q{MBP_ga;&jHqmk6K4mv@fwGiqQEawo_=U?|_U&!LkXuj||0>n5bMh5nO(J{Z0KX`Ii;7(^B0xkHuGk&@za6rgbb*T1fw|T`eBgrOBupfB*GRaQH41af zV-QL~>Ndy2aACXDfmDk)7w%YLoglaT@FA=w{9%nCMLvsVEd0{Z7 zs=dDgwhwAS9M4`nqCuQPBMt-h*C-*JV4$p7aXW49o6x)VYXSY{<;Xh!CYMHXDI_XKefq?GJg0Qg=@+qw=3T?VCa7*?PF&I6ak- zCLWw{d{%LPwr?J6h5Q!B-pZ6#$s>_vS!23=i*<-Z56CFr%jxvvyLlfq#Y!F3t8`Sc zLE5Nu>8Kt?nYna>YB?&&84on6g8VsI#;hU8dd5>mDH#W%Lpq{0KG$Y0 z9o6U2zH0aRO85DyG0#`J^;eB~zS6^S)fkQ|Jsekhp0Db5&9$z%Zq!`sn(Ic*wXV5t z)LiSDYh81Dg+7N2hsT^;UcvaG1J_k)sjmC!NX6X`<1(Tam@qBG0W>-mS>qjv}pA z-mT-ktsRH4HMGFpO5NJ>(L}na?K>Y(f4GH}ce^kuTZqtMgDerYIbRpP!YFi@6c|tv z;x0EjaEcI&3n!lAJ5#;GBSo7?i1aP{e`W4}j1QAz10>ygbZOnuWlu=(_TT^Q_xun&Q7&?9tKitlL&jgM5X@Q28X@~HDy&#a(pMMwRv7_w!P zUWT9-v;kmJQ3}EIE_5IWMlpv+T;hD64Nnoe1mTBpGx&%)-1S9p1 z>yZbesqA~N z*Q49pk(o#s`f|uxq*^yqu{I0;5gx?&@qdcT?Ad3T&PNI_^smT;Z(X8_o_*XoEvZ{( z!-)8^r##Cw21%iLw(NM(^3UKoEVvss2-UyI=Hr2aARdzo#;wMp+!K-#y39s7npC1v zQ$JK$6ptoD!Nn-sG(9v{ylIIl_@q`zI|_1^<2D2yOQdJx&>MFifd+fkI4AQRW`8}S z4!|F&8|OE7piJ$diY-zUefYp043M(ukTr$?!7z6(Uij#G6nl@tMjsw|d+SE{T7+L8Hqsx8^o{Vf z2q(7`W|Trw@iG43*&}R}0+t|kWq%~9gXbqFZ@>TQr<1Qg{P6ts*T*rm3>pRXLsd3# z8Y8J_I5Z3HOq7Pk7s~ax-sXm~Dp_(oui=C_U)3prb~_t_?DAtX zYRcF~2#fKnFo&BOSt}WB65xt$Lo-tzi$UW6?1CMWT0A?b5Z4v8E5AEk zaby12G(|*ciZYTM=NC|=k$*{*c&3mpO|N5b=fr3w&-dZi&+N=fEcrkcb`?pJCC(OxQw>*an5Hb%zvnDlFo0)!Nj}?~CUBS(_1<|3nJ>tV0+3k6YgcGF zA@qzDcmWYZ$yajP)alFJy?b04O{3j#b< zA>n#!!nI7evB%tTx>_fwXxDFbf^Iz&`NTUZGk%_Io_R82$9+>KyUVdxi?nw;_&QHE z$G+pG0Qa=vu(<)nBH%dpb;vj=t^GDyd+HuJV?vm@8~7c zEZ6v*wy;e6&)LLx=4`)SEV52)W`7a;dmY)e;xO2C{NKh1i&@2uS6dgZkNP6rLsdRo@l8Z*end1NwkSB|^;8TWpyH#6Bb8lDZ& zX2DKV%Y}`=bZrB%jYv`}x_uzVf*bOU_oa(+2Ctf zWxo+CEUUUJFWe=Q>1Z;FWin|8N-oSb8=Ijm@m4mLQ*^PhE5XK!s)3KqOg?snd@RZc z!WA;A1^wDIy1eTglV$(r(wx$?abO%W{)5dVp?FOH(&tXOPWOq24?MvQDm4^vbX$iW zM(yBh-+y+v7-^n%B@umn)Hz*d+~xdZ)Os5y%iksBF|xkBe!G_GuVb;9*9g<+D!FCH z)IjKpU4e*tHihfXDILT}-_NAW0Ia=LW_c|&DM|saT#A=)c|ewHmEu|&ECA^ial6@d zVg)37OAG)oLH6rG7Td1{!fmK{nJ=tI`_&y^L4USMURGa7^;ZsJZ#}JChgN?$5Ke&y zcPg**#imh5_uEaYVs#rTdv%x@_n)#?^+m`(R>`a+IFVH;(jo{t{R@{6@z>4^AqC&3 z+_`&2C~7c&S!Jk@b_tw|>yUrVys|y6oFSDQs{Vel46Ff@E>=B;rn6%{c2mnkfqhYQ zqmcY=`-kICml@n+=0{V`aT#aL=APEQ-r0EG zi!a0ZvnlN0MLh3MgK#y;A#8uu_ZRysJhq||zZ3jU=%7naM-S_X$16wR$H9*?AAusm z`dM5MEHqr%H=~EHkrLoy58aW-wHnx9Er0h6u0Sa=M}lJ0kg`cb7!^U15~&4P#9JC_ zYWRgBp1SE2cS4-#glmyZUEO})*U{F+j82T^-3$W%Z@Zo$8$z$Acz=iL zkM^zQi?5+(xLU?|X}jlTjvv=$6d$4xEMC=RxHwOLU$G3bXpUFey|wKp>$ki!P?a4Q zhRk;5x`&+KRw25p{lU13OTV(E)ugJF``N?=N0u#lB0#oj^=plB9KtDfw-2fP&k zqW=_GmhGF6`FMn5Sh%#IWW)|mUVkRL3pc+MX*)He$epLqjnY(%MUk2z-=QD%0ph1G zGgv@XhJMX*B;j_L6BS}0kSPrCvqmwURE~2(aWx|UGp0iAW8U-*`_`}l%XcRjrz>D>=6LAKK0<Hs$Z#~E5s4Y)qn4IF}WvBO>>mQ zeh!^C9(PS*=R&4Wag!vd@z#&$3R?e5?jc-RWL7L>Yug`&>;rcvsTK!rWzqlKIB;7r z|Jx7T*4yv@&(7Q5^tkoAEW++|{93Km=Pq)TzvHos#dqt@wohF`RBylG-2K$;y1jMu zRZnaI6T6}(AezqNXn!>>U^=tYf)3r%Jaj2=je%PaT|}jW!_`M81LgrM2W8h?PL?5$ z+b=v;l~_@nE?Rq;+(7}2N8Em3JkTZ7JSL}5i^ukmMih2i3(zf?)Wi}>UI#{)m#&x798{?&n> z?L$cy&qlDPFMkY_i3{Lo_T!5%gMYZDbv!%B!}E9v|9*=5%Y!WZ8iKO$I9~5BdguGo z@H+kkzrKcFClHoGSRMWVVJU>w;fvTm=^qFC^l#7qp??j(@!#;*cy#chKRA3k{*}WVeI3Kic_Zd7 z%@)3zsh08wz2s``T&tO}Rx`O)r}1Kc1zW8@ z-%ntf&f#MQK}q4Ev}Zt$^sn|!IFfZ-_l)n} z)xMDyR-cg<2-znyHGF>^pZBgTu#@BXQ~%0@Lw^|?eT+}1`xm{-{dKs6zcctd-TxZC zkKy}k_&$d3bNK!Q-{5Ry&9^RSxAWiO1V(&YkdqBLR^i+B==^q+dK031e+|DvO z6YtkISJ7d(fd4L|QTP%5n?`>OtLRDi5BRT!@Fe=vCM35a8U9nn;u%AUW{?>Pi*f5F zGn0mt6<5O9m#$F=yayfCT*3*^xY0o1*6R%ClU15`nR)Xrlc4U_PWwbDgA;z`efBZ( zAZ;rk|0kCCpUQKMsd+3MgXQs(_f#6-e4g@%?9oh|dE%CU&Ce$(;*;`}Fn{0oc^D|1 zJS1q3o%-QLJNop^1oDwy7vZ?533WMq$$^WS)QqFgGS*KVirsjM3Wk)O$-L4^?Oz7~X~j3ez4^KK`H49AnrfaAuu z&qoT0RQr>DCaWpO{s_Q6~HiV?hV_h=WIug}*tR8H(TqzKamvlyeePp=} zvXMi{rXU@6CajYdY2Hm48{cX zlM$9GC9vqchY#iN*PiRa+g0rA))4&$g-*RFiL+jfjQ2dQ;Kv`&2o{rImLmZ$lZ2Kf z0l<^0mODMDtK4O>{-fC)M>(I{@>;fhBwJ4Yfrn@6-29J!oYZFrc;+JEn;8VTld6e;B72oQUbV=r>- zMNZzoYlru5fm!~~_O9KOv2FJcK4}LvbiHIc0?L9}Bh0y>A-i-=y-2I7vom5ilm7s)Ry#G(hEE;o*o8pvrl2$ zi@m-FZ8>=6L4yu1o_Y3T%^hAY^t8f7Ox?GgOM`TS?T2)!CT^~df9hyOPwF?haa*d+ z@G>{37TGlQM*(bz42Dv9Z9VYc&w~EJMdNdQEpaWz_PxHa_ zGAW--VcRDJ z`X<-yQ#ke)gfLwwe<9YhX&`I8j7M;}lu_f$qviOr7f-CM>Fy}Z&F4W zBBXjWBHxo!x6v>d^CZp#gfFA@QTOuD7nFvqUU1vOZy*cV znK65mz}UjSg;GtHe?$f_b2)jH{D4-msfYmsp64n>f2k&3KpPRutR{h{(87Vy{}vCq zwjPd**`)`ZN|c>5*E zefjy)e@ll05)dZ9Px1J`MdrcbfWM79Eddsb$<3-`*eis`>Iar1IIHt)^aIPQvARA; zC+-`Ql`^gzm_V9OZ`X~=Ed64>o>Y-Ass|2|^Wqw{?=gBgMh%{ym8O34t3~Cw0(IUa z+N}qU#RFy=_}E=c@}uz4-Bgp1@qOksFDorNe=p8|rs8xB(DngJpQ_C|-}PF{)Y5sk z_2_Pk{KKB7Z?;~zM~s9FGw-#=y1c`nBF9CFzqI1*88p)kQrHD+%@7*+nPz_2FX`sa zmxcitrM6t?fJOZjPaP%*5E{_u|rxr#kX+aH9WsrU3P5A)ZUUQ&a5iN_H{-O ze^_EDw)RJ;ZOJL!uB5vXOj#8)G?QfZ-w^xnpP{5{avjVgFn?euju!C^0yw`0l8XG` zFVTZxXa>BK0TLlzeha+kUmD*ky@rH_kj+?By;aG#9>5-1usc!7X9yPKZmh)z9<3&K zA!HpgRvm(h!H_X{2sU{P_T!r@$he~#s1>JgLsK4stjVYQq=ez9UThw|`YE?$<6 z^Ikxae?LdE;kOu@2MPlQSP)qh9G;FUI`$rWJ6FEDg?1(1FvZcKGAdWvxq$md@f|r# z>B}gydkoB2&u}*0CLaLLRYIFk57n{Zxgp%j|wF0@Og|gAX6Dknc1ae?RK) z>#xxIiqRz%ZNR&cd|I1P7rjRszMI_0MTE}2$vf>&G#{PbZ$AjeM-)rzODz|7MUJr9{t>J{e@t=#&6pV`%Qtjo0!k@i6X53@*6ugSRkl!He`Skx z@r6z%)Nkahh|%G<=68?c0p0+$@JF?5;iht@?hA-fTzmm zoue-npWP&}7)VIoO{QB>Twvc6+fC9lmF3Iq4@CKq(Epe9+5Gm#39^*$f4=s$Z)?Kj zX{S31`(Aa2D;#UdI7c@-s>YdA#VqVJry0KT77iaa34}J?6_D;$p?a%)={fSpW!TP- z^2%bMU)@~!R<3->rt_ZpApcFCvRYyR(oAa6rd?EB31A)6jS4VGQ?rIf1uaj%>QK#% zAUap&GYzWl6Xagd(8uK0-zL+fnUP zpiz3`)ZjHUOHqQ`c{_6-sGCqTf!#~k;L6&I&Q5b8brFq4$nApxe|c@6e_N_~5VtCl zYKcZoRw}BCV2L|fSnHv2I}@RHyV{aX#`{FCvo1Jv*nPyrNmWlK_Mv1$m=A_+12b;!pbVYfkueEFhDT_?XSze+B6oWBz9=AfLm*jrg*jhbU@0KCYS4YKUdwV7l^_ z0-Ox9Y!l$1rn`1!w97;r1I62=zWT`{g_|cggG^>-g)@4dU8vV0xQ5lhND`5iACf}L zI29q@IMCYe8xA2mQe9K$$(V9H9d50(&5N^0EN#}!e`d?G49_Sjma;~)d6KCi5c7CL z^e__U388>QlST=@gN~!3ue$&T%lm=&-2uIij4yr@{mN~6iRM;tC?`tR%~D6a=c}5f z6!oE!V0reF+k^T`p55AjdQNwXMsuXLVz-i`;q$cbm^!5frQ=Lqprwwu1?OjnD4;5* zk%LYQe;~ZclXAodhzZ4}S8A{Lu^qzTGtTBmM?@a?u3?OSjV{Y{-pFxWPATmkq?J!> zR=jv(6G_~vXuUma0tf|v&z^Burnd2h|e{b{b5ipGiCe}QBXyK4o;1vofO#KhR zcgnATG<8hs-(;bzmBJhmp>p3y354vNW6eS7Ko1n17TP9)b@*yEpEtas0yW^cPgxGM zA~xeRcV^ZAl-O}@liO8&Py*{a0k*~$c7wh*r379e*oR0IF)OBIVQ4g-gYJ{IdpIOM& z;i9se50QJJ>Dk2PvmiCzanFAnQI&>{%ZaGj1D|AJekeJ%VUdEG)cYH_dJ*a)KS1rB9pTT~PHqW-S)vtB+*K zPNenj)Hxe(Nr3!-HImL-rBj$OJ$Le`P)RBSl+tK^ygVy9JBl!uQB9eGl^j%RQ1>+cj7aWK)ZNmHVC))5KRfk|Mxm$?W`5!jH!vP+NqDST&>XVQe-e3g$uw+X zf?mqu%?J6&@H0AG`=%&?Lric+(!Bcs60Z{f_V|wqbSQl`oX~3ry@C3E+8+f6e;Ee* ze;Gzbcq+m+==i`ww!jCb& zW*7~n8wcI&|NZ#Ke;?YLoCk*Qh45?BHTHUpos5EQ46-$U#~iXI%3m+Ddgm+}NxPjA z+AM4h$3S&iEN1AXM*hCNeJmKcS;mGH5G#M)-X0D&zxOJ!+a`4)WE0R@{pr&_+SN-$ zD}E|d?-u-IrtHb^g>2f3p9D!<;;R^8;e?tKu{Ojvnbd(ZcTC1{ zy3CSYb3uvze~D8O7VXI>;=$v6oQU4w>0kDF26}_hXrG6kP?}>P*u$ZmsiOCEDCY-ffd}c&FJp{HIP2p0=(jqK&eO#r{ZQb8h@%fAIJ(k9({A!Jq#4 zmtL|z82$M#!NF+o_~}Sa8Krsh7fkcVKmU=^{PEA2f97!bSWYFTIsDThrg{4K38i@q zocQ5j^yK%Q;KMJO;lqw8{)((d^R%jVO|wpU*Ms?7mz^3PTf58+L^W}`2=nE>DH@x|>u;ltl6&bIEKh zzW91Zy^iz%bgw&{+0R{Pn74af!L)uX7OUO2f0gjAE38;1|5)L9!#{-235GmM#gE(D zf74;e{~L+F!!w7Dn)8X79{}sC<%{~7m!q{tQ5lx9sR?Sl*qh>3E@jZjz_uh?c81X> z5~a5GiLiCswNHfZJ&TDo0C+9-3?b`N@O)9gYRyn32{|R&TPq2Vk6g8sdd=e%Ed2yA zYDn(d>=^=MBc2HtAr!TFrY56k*npE?e-Mtm4EqRSACKnakJ4b|DxM+Cdbp1L+5Wuu zG1z|+o&zEO1pj>v{~gD=z-#z@4Lj}HDDVWrP9W?=7WhMa)w}Lj;fwg9chV;xB|khv z1o9t_l7|mp(9ah~D^C1t?EkR8>b<~PU&Zz5^?uenIUAq%;^Oqzv;9}$C;A1Oe;0m# z&A$)v_c8x|48J#<%hUB)d>+Cd+~uF>2ki2%=?9!V$A~qL_xa;sliT}#de42&3nnra zPxsDO+wOC>zbc@c2E56xQ&jKSMFM2HJ6|%;c(;N?c*l^xZ*QOc?q`jX{Z>jKZ0Ng( z%x$b-(XC+7t$MND+CWQ+t8vnbf4wQ<6$y$HSZ^rmD_GEn+$p(gK<1R3H6X{LmEvPW zl3(@g(#Ff9*?4K~tt7mPlV-AyM_07nig-zNe}uY87Co1;=!KL;PeZ{gU2eYgawMyd z?ACOzR=Gkxcd^R+yjFi7dw25zQk%S6PN+^GPYd}51Gj?S@D=u^X<%uae_m>{%(jK) z7IRFYR;hlGW`!(;>@5oy5>SUv@?b2`%{<*CFZ6V4#m6xzObd8<533S?bh||W>zRrV zvI~_(V1MAZ?hbr#AJmV(vigqKFe4SEebowuweUkik94SA4a^Grin@x_L)!ahyUBE%ZAI2t^b(+CmfG>%#Zw4&Uv z+QEcQNeT~4lX+6qi0}%rz1J6aggn5aq^h_B4v7>$OsIO7Ii#J&@rb^YpHmvnt%Kl> z2Kcm3w?c{HkZJ8s{OmpQ!aZ{{=x80N)IVJsaY9ew#R}3}DwIMYe^t#;9LEoamgn-H zvxK7*l&y}S@>tEw4s#rx6i(d{QwNl>6-LG!wc!hZ0UWgB0QeCi5=$|hIX#7L(#pgu|FGA zVs2*@#ox`1tL9pVf0;X3Mf10@tyK(t8rxe{NT23b=YdtB2Y30Uy71 zpp!tTwl*RpN5)EFbz27$!UW62^9tujvUsI>5aR-|LPR?3{_|>z%0=}+e~8#~Y(P>1 z5rSC#A$1vPq}j&;Ca}J(G&;6IG?tJxYTf48){bgx9lA|2e~@Mf{rA+iL4gPbG+IvH z=LeRzMWxe%1+f2j)B&?c)=VSyHdP|g;uCAmjCi&1(7=Tb7-79(Mf`nL)!BUQF<7*; zw$OU}b`Hcn!&yp8Z(^$JMuvW_!qHX3b6@1RR{s!V&E4~3VThvQI?Y=24(*7%&se#P zW@M8zl`xwOe`E2LTE=EXbH5B-i_^;OG9NHEOdDjmiCZSr_tg4&C5>yaL`0laU=Jb^ zt*NE+7J1t08kr-!xol8VWSsV!1da7{GX^}ZHo=B_r?*jC5&5(5;kQ}^Z8auhB3Py5 z%-l;B%gf|Et+S~o;&>x8XnRUM)`Rv9e8ECkBw{7tekDt!uhQfL}6~sA)kpZqZGXX zCEIcEzUuk?$@^I^@F&soI+!>Etk3;}&=`DiuykKllIX)QZ zm_sWEf9n|eMGJq)z2ayXG*Y}XQykhUzFMqGGx{+{+b7fM%{e5C%sfJ{Yc(w_=JQ{o zM(Z%}T_f<_=FE9Mo}Q|fG)uuobws|y$g?xtpJ=gxlZ%v~;prH0qU|YeQA?mur|Fr` zN$neNZ7s4qkP;We*A!u7KNA2yD}?!$*xkJYe-!gKiqNRvnBW3uT$YLu014XvE5vPd z)ON54FAW*v5(wr@B~daK>cQ%Cc@~zvOT-Sl>@{k}NKsR7DnNvEw-tXOPqQzl;he>s z8U|ZDp=%w}@vSyBy?lQwsqR^^b{CGDwwl61*C3}zybYfipVJ*K==bW-*a7GW7x#9r zV)aimRDaHiG7=WoCiB(i2CyfU#h=yoP+BFlxy}af{_x?yn0#8}bZj#EoZvUHezhCj z=vBu;a9k%Wo8Ct29m#jC8mtMH1(F-@OSzh^!Rl4_TxVexZjBE%rd2T?=5}*B?ed+B zxZ$U+p9Yc{w~~_9h{>||(`cw`cCiti)k?Zw7pZ7qWEs?GX`f+=nA zs()<>*=aqs>0^IjIPuT*~ecEX@KlR&s$!5%>o`d1!|9)5*@=o zj1(t2#7i#0VwZ{BvP{JzQdf#u_E8(X=4kH=>;1)Lw&1gXC41j~_;|HoiRJ4gPcG6j zwvCZsj`Fnp?&S3=O$Z|q$}(ytP|)lRiGLI>ve0{9dhAqwy-3wS#*Sf?X%=Y>bmJK9 z#PW++$+FYW1m0-DOZ%IET1Qf&;5ECf4LNkJX4zX+yBs3OIP$I;-=BpI3!;*imbL6j{tbKYz6@ z=_;91xMMOPFci4ApXal$E_}R65pnl=9l>MQGhd2=vfeyVF{VcsX4$<<*e(>@Hb$urv}O_i-JziG_qej(q6PbDB<~o z<{ec+vz1Z}PCD$8d74hUFc~UoCUA>aN}9>IU_L%SElfUs5jX3T*h4x5a(_%5Ve~K+ z4acQ)#8y`@R(sdvOU+;O<~@g$1lUJJW+LsVI370N-hc_&TR)26-`N@_kBe#~N%xD! zMWLe}^j_cdsh&x9l3_rzkBdc%6@iB}46Uut0+NsZu40d{l+TX&e7%!pva?Nad7$ zQ~AN|Eqy-67Z4w@V}D0*h(e`!`lWOOdn5s5A;e6J2cb+!E)+N%eKQtsFU~2!BLX69 z_@ilvJ1XTtM!pIXs27r?F7yK&DJO(H`)|^E8e%6d6OC!3-JFuQL+wCvus;d>)4#nx zINJ~W_rx{4AN;)v4$!A0@H##3Umtt&+0*H(DI|1J1?#w5BY%bw1V|;t4FmGI$R7r$ zwx=1XJ%c;iQ!LqDgYU7hLPX+5kspI^^HTy+Fds&cz9M)=w(@0xq~XfJ?bY6ski zdz^x?TcOX-Ck}-^KPNx{wVWQQa|C&jha|&3+z`8w;qph36D)4}&4MYE4xyJO z3OXs4e$c0%LVtb)(TEJT2`%lW=hJCgRYh4zg~HFmZ#5)qh@=MBYKc+91Nqb2S3H#D zp=*F;+}`^91CBLP1q6OV3y?1BdRaw;B0ZcudGa{=^H2_!$Q8#BJo)bA7s#;14$-pZ#1 z!ut?H-T)GLDY~jQ#v*4BHjYGPUn90AsdSyxtLjBDLqc&lB=e0PB4fk<#ub-|s6bw5 zKTtzpj;tJv7tY$?>lZ)%@Wb1$zxnC->z5L~hH;3Dh-eRvwmg-yGl!#jwpSN>UQdrr z503C24}Xn>5vgtx)F050fY)12xL^U8b;R#1BLN|+Y#N_(3ov*Q|ml2S{C zLt45<2%m9#=)x;3oui8abQmZU$MZs!0<&#+fmWR94(jEPuixOpEMo#nQjNd9TFis5nRN%@80fr?*2UMqD%D3aTwh)5IIn=dwEr2_icqkIDng zXswu%5^8!OTL%%!1OPh>7lUsc2v~#|qz}%&z0c{z9xio;-q_9pnT~d^K8|Y9R(pOU*(R&=ti%fiK0TK<~8Tr#SmU`|M*i zFQY{gN$_}DW=rFwgases9OLZ>&s^>}hMHYJFJ^0)nUBeWf2u4GAIe{T8+@!2UakY; zY(RjuGNty|)dF_I)5ZjpMg%4c9FD}pM1QYUlT5YWZ;BG%1wIG#PHk^)7nkR!x3_;B z4iS49{*W6n65k-mmC)9cW>N|OPg+ZjEg&>5@AlS#>x2d+P-Et6_MwuxvM<<^0MNTO z7HNnE#6Ko#_i2-^4akyW1fb9*&{~xT#H5?bA0su*V-6H@1 delta 35057 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 diff --git a/src/object.class.js b/src/object.class.js index 86b9193a..0417310c 100644 --- a/src/object.class.js +++ b/src/object.class.js @@ -296,6 +296,48 @@ */ clipTo: null, + /** + * When `true`, object horizontal movement is locked + * @property + * @type Boolean + */ + lockMovementX: false, + + /** + * When `true`, object vertical movement is locked + * @property + * @type Boolean + */ + lockMovementY: false, + + /** + * When `true`, object rotation is locked + * @property + * @type Boolean + */ + lockRotation: false, + + /** + * When `true`, object horizontal scaling is locked + * @property + * @type Boolean + */ + lockScalingX: false, + + /** + * When `true`, object vertical scaling is locked + * @property + * @type Boolean + */ + lockScalingY: false, + + /** + * When `true`, object non-uniform scaling is locked + * @property + * @type Boolean + */ + lockUniScaling: false, + /** * List of properties to consider when checking if state of an object is changed (fabric.Object#hasStateChanged); * as well as for history (undo/redo) purposes