From f270ca0259a67c1b41af4b40b3925d3931ed3bac Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 28 Jul 2013 15:25:31 +0200 Subject: [PATCH] Move animation methods to an optional module --- README.md | 7 +- build.js | 4 +- dist/all.js | 330 +++++++++--------- dist/all.min.js | 12 +- dist/all.min.js.gz | Bin 49696 -> 49707 bytes ..._animation.mixin.js => animation.mixin.js} | 101 ++++++ src/shapes/object.class.js | 99 ------ src/util/animate.js | 64 ++++ src/util/misc.js | 60 ---- 9 files changed, 346 insertions(+), 331 deletions(-) rename src/mixins/{canvas_animation.mixin.js => animation.mixin.js} (53%) create mode 100644 src/util/animate.js diff --git a/README.md b/README.md index b011aa30..2c954430 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ Fabric.js started as a foundation for design editor on [printio.ru](http://print 1. [Install Node.js](https://github.com/joyent/node/wiki/Installation) -2. Build distribution file **[~76K minified, ~22K gzipped]** +2. Build distribution file **[~77K minified, ~20K gzipped]** $ node build.js @@ -105,6 +105,7 @@ These are the optional modules that could be specified for inclusion, when build - **freedrawing** — Adds support for free drawing - **gestures** — Adds support for multitouch gestures with help of [Event.js](https://github.com/mudcube/Event.js) - **object_straightening** — Adds support for rotating an object to one of 0, 90, 180, 270, etc. depending on which is angle is closer. +- **animation** — Adds support for animation (fabric.util.animate, fabric.util.requestAnimFrame, fabric.Object#animate, fabric.Canvas#fxCenterObjectH/#fxCenterObjectV/#fxRemove) Additional flags for build script are: @@ -140,8 +141,8 @@ Follow [@fabric.js](http://twitter.com/fabricjs) or [@kangax](http://twitter.com Questions, suggestions — [fabric.js on Google Groups](http://groups.google.com/group/fabricjs). -See [Fabric questions on Stackoverflow](stackoverflow.com/questions/tagged/fabricjs), -Fabric snippets on [jsfiddle](http://jsfiddle.net/user/fabricjs/fiddles/) +See [Fabric questions on Stackoverflow](stackoverflow.com/questions/tagged/fabricjs), +Fabric snippets on [jsfiddle](http://jsfiddle.net/user/fabricjs/fiddles/) or [codepen.io](http://codepen.io/tag/fabricjs). Get help in Fabric's IRC channel — irc://irc.freenode.net/#fabric.js diff --git a/build.js b/build.js index 587d3264..43a5a19c 100644 --- a/build.js +++ b/build.js @@ -123,6 +123,7 @@ var filesToInclude = [ 'src/util/dom_misc.js', 'src/util/dom_request.js', + ifSpecifiedInclude('animation', 'src/util/animate.js'), ifSpecifiedInclude('easing', 'src/util/anim_ease.js'), ifSpecifiedInclude('parser', 'src/parser.js'), @@ -147,7 +148,8 @@ var filesToInclude = [ ifSpecifiedInclude('interaction', 'src/canvas.class.js'), ifSpecifiedInclude('interaction', 'src/mixins/canvas_events.mixin.js'), - 'src/mixins/canvas_animation.mixin.js', + ifSpecifiedInclude('animation', 'src/mixins/animation.mixin.js'), + 'src/mixins/canvas_dataurl_exporter.mixin.js', ifSpecifiedInclude('serialization', 'src/mixins/canvas_serialization.mixin.js'), diff --git a/dist/all.js b/dist/all.js index 39f05624..8271e880 100644 --- a/dist/all.js +++ b/dist/all.js @@ -2106,64 +2106,6 @@ fabric.Collection = { return false; } - /** - * Changes value from one to another within certain period of time, invoking callbacks as value is being changed. - * @memberOf fabric.util - * @param {Object} [options] Animation options - * @param {Function} [options.onChange] Callback; invoked on every value change - * @param {Function} [options.onComplete] Callback; invoked when value change is completed - * @param {Number} [options.startValue=0] Starting value - * @param {Number} [options.endValue=100] Ending value - * @param {Number} [options.byValue=100] Value to modify the property by - * @param {Function} [options.easing] Easing function - * @param {Number} [options.duration=500] Duration of change - */ - function animate(options) { - - options || (options = { }); - - var start = +new Date(), - duration = options.duration || 500, - finish = start + duration, time, - onChange = options.onChange || function() { }, - abort = options.abort || function() { return false; }, - easing = options.easing || function(t, b, c, d) {return -c * Math.cos(t/d * (Math.PI/2)) + c + b;}, - startValue = 'startValue' in options ? options.startValue : 0, - endValue = 'endValue' in options ? options.endValue : 100, - byValue = options.byValue || endValue - startValue; - - options.onStart && options.onStart(); - - (function tick() { - time = +new Date(); - var currentTime = time > finish ? duration : (time - start); - onChange(easing(currentTime, startValue, byValue, duration)); - if (time > finish || abort()) { - options.onComplete && options.onComplete(); - return; - } - requestAnimFrame(tick); - })(); - } - - var _requestAnimFrame = fabric.window.requestAnimationFrame || - fabric.window.webkitRequestAnimationFrame || - fabric.window.mozRequestAnimationFrame || - fabric.window.oRequestAnimationFrame || - fabric.window.msRequestAnimationFrame || - function(callback) { - fabric.window.setTimeout(callback, 1000 / 60); - }; - /** - * requestAnimationFrame polyfill based on http://paulirish.com/2011/requestanimationframe-for-smart-animating/ - * @memberOf fabric.util - * @param {Function} callback Callback to invoke - * @param {DOMElement} element optional Element to associate with animation - */ - var requestAnimFrame = function() { - return _requestAnimFrame.apply(fabric.window, arguments); - }; - /** * Returns klass "Class" object of given fabric.Object type * @memberOf fabric.util @@ -2554,8 +2496,6 @@ fabric.Collection = { fabric.util.toFixed = toFixed; fabric.util.getRandomInt = getRandomInt; fabric.util.falseFunction = falseFunction; - fabric.util.animate = animate; - fabric.util.requestAnimFrame = requestAnimFrame; fabric.util.getKlass = getKlass; fabric.util.loadImage = loadImage; fabric.util.enlivenObjects = enlivenObjects; @@ -3723,6 +3663,72 @@ fabric.util.string = { })(); +(function() { + + /** + * Changes value from one to another within certain period of time, invoking callbacks as value is being changed. + * @memberOf fabric.util + * @param {Object} [options] Animation options + * @param {Function} [options.onChange] Callback; invoked on every value change + * @param {Function} [options.onComplete] Callback; invoked when value change is completed + * @param {Number} [options.startValue=0] Starting value + * @param {Number} [options.endValue=100] Ending value + * @param {Number} [options.byValue=100] Value to modify the property by + * @param {Function} [options.easing] Easing function + * @param {Number} [options.duration=500] Duration of change + */ + function animate(options) { + + options || (options = { }); + + var start = +new Date(), + duration = options.duration || 500, + finish = start + duration, time, + onChange = options.onChange || function() { }, + abort = options.abort || function() { return false; }, + easing = options.easing || function(t, b, c, d) {return -c * Math.cos(t/d * (Math.PI/2)) + c + b;}, + startValue = 'startValue' in options ? options.startValue : 0, + endValue = 'endValue' in options ? options.endValue : 100, + byValue = options.byValue || endValue - startValue; + + options.onStart && options.onStart(); + + (function tick() { + time = +new Date(); + var currentTime = time > finish ? duration : (time - start); + onChange(easing(currentTime, startValue, byValue, duration)); + if (time > finish || abort()) { + options.onComplete && options.onComplete(); + return; + } + requestAnimFrame(tick); + })(); + } + + var _requestAnimFrame = fabric.window.requestAnimationFrame || + fabric.window.webkitRequestAnimationFrame || + fabric.window.mozRequestAnimationFrame || + fabric.window.oRequestAnimationFrame || + fabric.window.msRequestAnimationFrame || + function(callback) { + fabric.window.setTimeout(callback, 1000 / 60); + }; + /** + * requestAnimationFrame polyfill based on http://paulirish.com/2011/requestanimationframe-for-smart-animating/ + * @memberOf fabric.util + * @param {Function} callback Callback to invoke + * @param {DOMElement} element optional Element to associate with animation + */ + var requestAnimFrame = function() { + return _requestAnimFrame.apply(fabric.window, arguments); + }; + + fabric.util.animate = animate; + fabric.util.requestAnimFrame = requestAnimFrame; + +})(); + + (function() { /** @@ -9791,6 +9797,107 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati } }); +fabric.util.object.extend(fabric.Object.prototype, { + /** + * Animates object's properties + * @param {String|Object} property to animate (if string) or properties to animate (if object) + * @param {Number|Object} value to animate property to (if string was given first) or options object + * @return {fabric.Object} thisArg + * @chainable + * + * As object — multiple properties + * + * object.animate({ left: ..., top: ... }); + * object.animate({ left: ..., top: ... }, { duration: ... }); + * + * As string — one property + * + * object.animate('left', ...); + * object.animate('left', { duration: ... }); + * + */ + animate: function() { + if (arguments[0] && typeof arguments[0] === 'object') { + var propsToAnimate = [ ], prop, skipCallbacks; + for (prop in arguments[0]) { + propsToAnimate.push(prop); + } + for (var i = 0, len = propsToAnimate.length; i"),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){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function d(e,t,n){if(e){var r=fabric.util.createImage();r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function v(e,t){function n(){++i===s&&t&&t(r)}var r=[],i=0,s=e.length;e.forEach(function(e,t){if(!e.type)return;var i=fabric.util.getKlass(e.type);i.async?i.fromObject(e,function(e,i){i||(r[t]=e),n()}):(r[t]=i.fromObject(e),n())})}function m(e,t,n){var r;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function g(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 b(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function w(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function E(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 S(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function x(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}function T(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]}function N(e,t,n,r){var i=r[0],s=r[1],o=r[2],u=r[3],a=r[4],f=r[5],l=r[6],c=O(f,l,i,s,u,a,o,t,n);for(var h=0;h1&&(d=Math.sqrt(d),n*=d,r*=d);var v=c/n,m=l/n,g=-l/r,y=c/r,b=v*u+m*a,w=g*u+y*a,E=v*e+m*t,S=g*e+y*t,x=(E-b)*(E-b)+(S-w)*(S-w),T=1/x-.25;T<0&&(T=0);var N=Math.sqrt(T);s===i&&(N=-N);var k=.5*(b+E)-N*(S-w),O=.5*(w+S)+N*(E-b),M=Math.atan2(w-O,b-k),_=Math.atan2(S-O,E-k),D=_-M;D<0&&s===1?D+=2*Math.PI:D>0&&s===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B=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,n,r={left:0,top:0},i=e&&e.ownerDocument,s={left:0,top:0},o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!i)return{left:0,top:0};for(var u in o)s[o[u]]+=parseInt(f(e,u),10)||0;return t=i.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),i!=null&&i===i.window?n=i:n=i.nodeType===9&&(i.defaultView||i.parentWindow),{left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)+s.left,top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0)+s.top}}function f(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementStyle=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,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){w.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),w.has(e,function(r){r?w.get(e,function(e){var t=S(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function S(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function x(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function T(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function N(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}function C(e){var t=e.getElementsByTagName("linearGradient"),n=e.getElementsByTagName("radialGradient"),r,i,s={};i=t.length;for(;i--;)r=t[i],s[r.getAttribute("id")]=r;i=n.length;for(;i--;)r=n[i],s[r.getAttribute("id")]=r;return s}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices;t.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];var u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;ce.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;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];this.id=fabric.Object.__uid++},toSVG:function(e){var t="SourceAlpha";if(e.fill===this.color||e.stroke===this.color)t="SourceGraphic";return''+''+''+""+""+''+""+""},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}}}),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=fabric.util.removeListener,i=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas.prototype,{backgroundColor:"",backgroundImage:"",backgroundImageOpacity:1,backgroundImageStretch:!0,overlayImage:"",overlayImageLeft:0,overlayImageTop -:0,includeDefaultValues:!0,stateful:!0,renderOnAddition:!0,clipTo:null,controlsAboveOverlay:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.overlayImage=e,n&&"overlayImageLeft"in n&&(this.overlayImageLeft=n.overlayImageLeft),n&&"overlayImageTop"in n&&(this.overlayImageTop=n.overlayImageTop),t&&t()},this),this},setBackgroundImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.backgroundImage=e,n&&"backgroundImageOpacity"in n&&(this.backgroundImageOpacity=n.backgroundImageOpacity),n&&"backgroundImageStretch"in n&&(this.backgroundImageStretch=n.backgroundImageStretch),t&&t()},this),this},setBackgroundColor:function(e,t){if(e.source){var n=this;fabric.util.loadImage(e.source,function(r){n.backgroundColor=new fabric.Pattern({source:r,repeat:e.repeat}),t&&t()})}else this.backgroundColor=e,t&&t();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw i;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw i},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.fire("object:removed",{target:e}),e.fire("removed")},getObjects:function(){return this._objects},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"];this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this.backgroundColor&&(t.fillStyle=this.backgroundColor.toLive?this.backgroundColor.toLive(t):this.backgroundColor,t.fillRect(this.backgroundColor.offsetX||0,this.backgroundColor.offsetY||0,this.width,this.height)),typeof this.backgroundImage=="object"&&this._drawBackroundImage(t);var n=this.getActiveGroup();for(var r=0,i=this._objects.length;r','\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('');var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"),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,t){var r=this._objects.indexOf(e);if(r!==0){var i;if(t){i=r;for(var s=r-1;s>=0;--s){var o=e.intersectsWithObject(this._objects[s])||e.isContainedWithinObject(this._objects[s])||this._objects[s].isContainedWithinObject(e);if(o){i=s;break}}}else i=r-1;n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i;if(t){i=r;for(var s=r+1;s"},e(fabric.StaticCanvas,{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,f=u.data.length;ao.padding?l.x<0?l.x+=o.padding:l.x-=o.padding:l.x=0,s(l.y)>o.padding?l.y<0?l.y+=o.padding:l.y-=o.padding:l.y=0;var c=o.scaleX,h=o.scaleY;if(n==="equally"&&!u&&!a){var p=l.y+l.x,d=(o.height+o.strokeWidth)*r.original.scaleY+(o.width+o.strokeWidth)*r.original.scaleX;c=r.original.scaleX*p/d,h=r.original.scaleY*p/d,o.set("scaleX",c),o.set("scaleY",h)}else n?n==="x"&&!o.get("lockUniScaling")?(c=l.x/(o.width+o.strokeWidth),u||o.set("scaleX",c)):n==="y"&&!o.get("lockUniScaling")&&(h=l.y/(o.height+o.strokeWidth),a||o.set("scaleY",h)):(c=l.x/(o.width+o.strokeWidth),h=l.y/(o.height+o.strokeWidth),u||o.set("scaleX",c),a||o.set("scaleY",h));c<0&&(r.originX==="left"?r.originX="right":r.originX==="right"&&(r.originX="left")),h<0&&(r.originY==="top"?r.originY="bottom":r.originY==="bottom"&&(r.originY="top")),o.setPositionByOrigin(f,r.originX,r.originY)},_rotateObject:function(e,t){var n=this._currentTransform,s=this._offset;if(n.target.get("lockRotation"))return;var o=i(n.ey-n.top-s.top,n.ex-n.left-s.left),u=i(t-n.top-s.top,e-n.left-s.left),a=r(u-o+n.theta);a<0&&(a=360+a),n.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,i=s(n),o=s(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?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)),c=n===i&&r===s;for(var h=this._objects.length;h--;){a=this._objects[h];if(!a)continue;if(a.intersectsWithRect(f,l)||a.isContainedWithinRect(f,l)||a.containsPoint(f)||a.containsPoint(l))if(this.selection&&a.selectable){a.set("active",!0),t.push(a);if(c)break}}t.length===1?this.setActiveObject(t[0],e):t.length>1&&(t=new fabric.Group(t.reverse()),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},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"&&e!=="clipTo"?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),this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke),this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);e.format==="jpeg"&&(r.backgroundColor="#fff");var i={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:n.width/2,top:n.height/2}),r.add(this);var s=r.toDataURL(e);return this.set(i).setCoords(),r.dispose(),r=null,s},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&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth>1?this.strokeWidth/2:0,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=this.transparentCorners,w=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1},i=t.StaticCanvas.supports("setLineDash");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",Math.abs(this.x2-this.x1)||1),this.set("height",Math.abs(this.y2-this.y1)||1),this.set("left","left"in e?e.left:Math.min(this.x1,this.x2)+this.width/2),this.set("top","top"in e?e.top:Math.min(this.y1,this.y2)+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top);if(!this.strokeDashArray||this.strokeDashArray&&i){var n=this.x1<=this.x2?-1:1,r=this.y1<=this.y2?-1:1;e.moveTo(this.width===1?0:n*this.width/2,this.height===1?0:r*this.height/2),e.lineTo(this.width===1?0:n*-1*this.width/2,this.height===1?0:r*-1*this.height/2)}e.lineWidth=this.strokeWidth;var s=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this._renderStroke(e),e.strokeStyle=s},_renderDashedStroke:function(e){var n=this.x1<=this.x2?-1:1,r=this.y1<=this.y2?-1:1,i=this.width===1?0:n*this.width/2,s=this.height===1?0:r*this.height/2;e.beginPath(),t.util.drawDashedLine(e,i,s,-i,-s,this.strokeDashArray),e.closePath()},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=this._createBaseSVGMarkup();return e.push("'),e.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);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=this._createBaseSVGMarkup();return e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(){var e=this._createBaseSVGMarkup(),t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return e.push("'),e.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=this._createBaseSVGMarkup();return 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._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function 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=e.x||0,this.y=e.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);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")})},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,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,r=t.util.array.min;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=this._createBaseSVGMarkup();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;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=this._createBaseSVGMarkup();for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._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;i'+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke||this.strokeDashArray){var t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=this._originalImage,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height;if(fabric.isLikelyNode){var s=n.toDataURL("image/png").substring(22);r.src=new Buffer(s,"base64"),i._element=r,e&&e()}else r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.Brightness=fabric.util.createClass({type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s=0&&N=0&&Co&&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)},function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.object.clone,i=t.util.toFixed,s=t.StaticCanvas.supports("setLineDash");if(t.Text){t.warn("fabric.Text is already defined");return}var o=t.Object.prototype.stateProperties.concat();o.push("fontFamily","fontWeight","fontSize","path","text","textDecoration","textShadow","textAlign","fontStyle","lineHeight","backgroundColor","textBackgroundColor","useNative"),t.Text=t.util.createClass(t.Object,{_dimensionAffectingProps:{fontSize:!0,fontWeight:!0,fontFamily:!0,textDecoration:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0},type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textShadow:"",textAlign:"left",fontStyle:"",lineHeight:1.3,backgroundColor:"",textBackgroundColor:"",path:null,useNative:!0,stateProperties:o,initialize:function(e,t){t=t||{},this.text=e,this.__skipDimension=!0,this.setOptions(t),this.__skipDimension=!1,this._initDimensions(),this.setCoords()},_initDimensions:function(){if(this.__skipDimension)return;var e=t.util.createCanvasElement();this._render(e.getContext("2d"))},toString:function(){return"#'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){this.transform(e,t.isLikelyNode),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),e.save(),this._setTextShadow(e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.textShadow&&e.restore(),e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),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)return;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(" ")},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,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 this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Text.prototype,{_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.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()},_initDummyElementForCufon:function(){var e=fabric.document.createElement("pre"),t=fabric.document.createElement("div");return t.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),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 instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.2.7"};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){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function c(e,t,n){if(e){var r=fabric.util.createImage();r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function h(e,t){function n(){++i===s&&t&&t(r)}var r=[],i=0,s=e.length;e.forEach(function(e,t){if(!e.type)return;var i=fabric.util.getKlass(e.type);i.async?i.fromObject(e,function(e,i){i||(r[t]=e),n()}):(r[t]=i.fromObject(e),n())})}function p(e,t,n){var r;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function d(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 m(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function g(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function y(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 b(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function w(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}function E(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]}function S(e,t,n,r){var i=r[0],s=r[1],o=r[2],u=r[3],a=r[4],f=r[5],l=r[6],c=k(f,l,i,s,u,a,o,t,n);for(var h=0;h1&&(d=Math.sqrt(d),n*=d,r*=d);var v=c/n,m=l/n,g=-l/r,y=c/r,b=v*u+m*a,w=g*u+y*a,E=v*e+m*t,S=g*e+y*t,T=(E-b)*(E-b)+(S-w)*(S-w),k=1/T-.25;k<0&&(k=0);var L=Math.sqrt(k);s===i&&(L=-L);var A=.5*(b+E)-L*(S-w),O=.5*(w+S)+L*(E-b),M=Math.atan2(w-O,b-A),_=Math.atan2(S-O,E-A),D=_-M;D<0&&s===1?D+=2*Math.PI:D>0&&s===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B=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,n,r={left:0,top:0},i=e&&e.ownerDocument,s={left:0,top:0},o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!i)return{left:0,top:0};for(var u in o)s[o[u]]+=parseInt(f(e,u),10)||0;return t=i.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),i!=null&&i===i.window?n=i:n=i.nodeType===9&&(i.defaultView||i.parentWindow),{left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)+s.left,top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0)+s.top}}function f(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementStyle=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e){e||(e={});var t=+(new Date),r=e.duration||500,i=t+r,s,o=e.onChange||function(){},u=e.abort||function(){return!1},a=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},f="startValue"in e?e.startValue:0,l="endValue"in e?e.endValue:100,c=e.byValue||l-f;e.onStart&&e.onStart(),function h(){s=+(new Date);var l=s>i?r:s-t;o(a(l,f,c,r));if(s>i||u()){e.onComplete&&e.onComplete();return}n(h)}()}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return 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){w.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),w.has(e,function(r){r?w.get(e,function(e){var t=S(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function S(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function x(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function T(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function N(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}function C(e){var t=e.getElementsByTagName("linearGradient"),n=e.getElementsByTagName("radialGradient"),r,i,s={};i=t.length;for(;i--;)r=t[i],s[r.getAttribute("id")]=r;i=n.length;for(;i--;)r=n[i],s[r.getAttribute("id")]=r;return s}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices;t.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];var u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;ce.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;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];this.id=fabric.Object.__uid++},toSVG:function(e){var t="SourceAlpha";if(e.fill===this.color||e.stroke===this.color)t="SourceGraphic";return''+''+''+""+""+''+""+""},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}}}),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=fabric.util.removeListener,i=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas.prototype,{backgroundColor:"",backgroundImage:"",backgroundImageOpacity:1,backgroundImageStretch:!0,overlayImage:"",overlayImageLeft:0 +,overlayImageTop:0,includeDefaultValues:!0,stateful:!0,renderOnAddition:!0,clipTo:null,controlsAboveOverlay:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.overlayImage=e,n&&"overlayImageLeft"in n&&(this.overlayImageLeft=n.overlayImageLeft),n&&"overlayImageTop"in n&&(this.overlayImageTop=n.overlayImageTop),t&&t()},this),this},setBackgroundImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.backgroundImage=e,n&&"backgroundImageOpacity"in n&&(this.backgroundImageOpacity=n.backgroundImageOpacity),n&&"backgroundImageStretch"in n&&(this.backgroundImageStretch=n.backgroundImageStretch),t&&t()},this),this},setBackgroundColor:function(e,t){if(e.source){var n=this;fabric.util.loadImage(e.source,function(r){n.backgroundColor=new fabric.Pattern({source:r,repeat:e.repeat}),t&&t()})}else this.backgroundColor=e,t&&t();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw i;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw i},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.fire("object:removed",{target:e}),e.fire("removed")},getObjects:function(){return this._objects},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"];this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this.backgroundColor&&(t.fillStyle=this.backgroundColor.toLive?this.backgroundColor.toLive(t):this.backgroundColor,t.fillRect(this.backgroundColor.offsetX||0,this.backgroundColor.offsetY||0,this.width,this.height)),typeof this.backgroundImage=="object"&&this._drawBackroundImage(t);var n=this.getActiveGroup();for(var r=0,i=this._objects.length;r','\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('');var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"),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,t){var r=this._objects.indexOf(e);if(r!==0){var i;if(t){i=r;for(var s=r-1;s>=0;--s){var o=e.intersectsWithObject(this._objects[s])||e.isContainedWithinObject(this._objects[s])||this._objects[s].isContainedWithinObject(e);if(o){i=s;break}}}else i=r-1;n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i;if(t){i=r;for(var s=r+1;s"},e(fabric.StaticCanvas,{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,f=u.data.length;ao.padding?l.x<0?l.x+=o.padding:l.x-=o.padding:l.x=0,s(l.y)>o.padding?l.y<0?l.y+=o.padding:l.y-=o.padding:l.y=0;var c=o.scaleX,h=o.scaleY;if(n==="equally"&&!u&&!a){var p=l.y+l.x,d=(o.height+o.strokeWidth)*r.original.scaleY+(o.width+o.strokeWidth)*r.original.scaleX;c=r.original.scaleX*p/d,h=r.original.scaleY*p/d,o.set("scaleX",c),o.set("scaleY",h)}else n?n==="x"&&!o.get("lockUniScaling")?(c=l.x/(o.width+o.strokeWidth),u||o.set("scaleX",c)):n==="y"&&!o.get("lockUniScaling")&&(h=l.y/(o.height+o.strokeWidth),a||o.set("scaleY",h)):(c=l.x/(o.width+o.strokeWidth),h=l.y/(o.height+o.strokeWidth),u||o.set("scaleX",c),a||o.set("scaleY",h));c<0&&(r.originX==="left"?r.originX="right":r.originX==="right"&&(r.originX="left")),h<0&&(r.originY==="top"?r.originY="bottom":r.originY==="bottom"&&(r.originY="top")),o.setPositionByOrigin(f,r.originX,r.originY)},_rotateObject:function(e,t){var n=this._currentTransform,s=this._offset;if(n.target.get("lockRotation"))return;var o=i(n.ey-n.top-s.top,n.ex-n.left-s.left),u=i(t-n.top-s.top,e-n.left-s.left),a=r(u-o+n.theta);a<0&&(a=360+a),n.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,i=s(n),o=s(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?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)),c=n===i&&r===s;for(var h=this._objects.length;h--;){a=this._objects[h];if(!a)continue;if(a.intersectsWithRect(f,l)||a.isContainedWithinRect(f,l)||a.containsPoint(f)||a.containsPoint(l))if(this.selection&&a.selectable){a.set("active",!0),t.push(a);if(c)break}}t.length===1?this.setActiveObject(t[0],e):t.length>1&&(t=new fabric.Group(t.reverse()),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},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"&&e!=="clipTo"?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),this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke),this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);e.format==="jpeg"&&(r.backgroundColor="#fff");var i={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:n.width/2,top:n.height/2}),r.add(this);var s=r.toDataURL(e);return this.set(i).setCoords(),r.dispose(),r=null,s},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))},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.group?t.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?t.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?t.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?t.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?t.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){return this.translateToCenterPoint(new fabric.Point(this.left,this.top),this.originX,this.originY)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"?s=i.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:s=i.x,r==="top"?o=i.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"?o=i.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){var t=e(this.angle),n=this.getWidth()/2,r=Math.cos(t)*n,i=Math.sin(t)*n,s=this.left,o=this.top;if(this.originX==="center"||this.originX==="right")s-=r;if(this.originY==="center"||this.originY==="bottom")o-=i;return{x:s,y:o}}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth>1?this.strokeWidth/2:0,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=this.transparentCorners,w=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1},i=t.StaticCanvas.supports("setLineDash");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",Math.abs(this.x2-this.x1)||1),this.set("height",Math.abs(this.y2-this.y1)||1),this.set("left","left"in e?e.left:Math.min(this.x1,this.x2)+this.width/2),this.set("top","top"in e?e.top:Math.min(this.y1,this.y2)+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top);if(!this.strokeDashArray||this.strokeDashArray&&i){var n=this.x1<=this.x2?-1:1,r=this.y1<=this.y2?-1:1;e.moveTo(this.width===1?0:n*this.width/2,this.height===1?0:r*this.height/2),e.lineTo(this.width===1?0:n*-1*this.width/2,this.height===1?0:r*-1*this.height/2)}e.lineWidth=this.strokeWidth;var s=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this._renderStroke(e),e.strokeStyle=s},_renderDashedStroke:function(e){var n=this.x1<=this.x2?-1:1,r=this.y1<=this.y2?-1:1,i=this.width===1?0:n*this.width/2,s=this.height===1?0:r*this.height/2;e.beginPath(),t.util.drawDashedLine(e,i,s,-i,-s,this.strokeDashArray),e.closePath()},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=this._createBaseSVGMarkup();return e.push("'),e.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);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=this._createBaseSVGMarkup();return e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(){var e=this._createBaseSVGMarkup(),t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return e.push("'),e.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=this._createBaseSVGMarkup();return 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._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function 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=e.x||0,this.y=e.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);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")})},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,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,r=t.util.array.min;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=this._createBaseSVGMarkup();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;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=this._createBaseSVGMarkup();for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._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;i'+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke||this.strokeDashArray){var t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=this._originalImage,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){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=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.Brightness=fabric.util.createClass({type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s=0&&N=0&&Co&&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)},function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.object.clone,i=t.util.toFixed,s=t.StaticCanvas.supports("setLineDash");if(t.Text){t.warn("fabric.Text is already defined");return}var o=t.Object.prototype.stateProperties.concat();o.push("fontFamily","fontWeight","fontSize","path","text","textDecoration","textShadow","textAlign","fontStyle","lineHeight","backgroundColor","textBackgroundColor","useNative"),t.Text=t.util.createClass(t.Object,{_dimensionAffectingProps:{fontSize:!0,fontWeight:!0,fontFamily:!0,textDecoration:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0},type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textShadow:"",textAlign:"left",fontStyle:"",lineHeight:1.3,backgroundColor:"",textBackgroundColor:"",path:null,useNative:!0,stateProperties:o,initialize:function(e,t){t=t||{},this.text=e,this.__skipDimension=!0,this.setOptions(t),this.__skipDimension=!1,this._initDimensions(),this.setCoords()},_initDimensions:function(){if(this.__skipDimension)return;var e=t.util.createCanvasElement();this._render(e.getContext("2d"))},toString:function(){return"#'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){this.transform(e,t.isLikelyNode),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),e.save(),this._setTextShadow(e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.textShadow&&e.restore(),e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),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)return;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(" ")},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,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 this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Text.prototype,{_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.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()},_initDummyElementForCufon:function(){var e=fabric.document.createElement("pre"),t=fabric.document.createElement("div");return t.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),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 instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){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 8f36c8cf883d1cd39c60fc7a554b4e651bea37eb..47af1fd56defd57800c8ce1e1b6449d4e95a4236 100644 GIT binary patch delta 44727 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 bGDsi8_g{zmO$RviX!8F7w&&xaZ^;4xM4z3J delta 44716 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 Q(4)!!ACF finish ? duration : (time - start); + onChange(easing(currentTime, startValue, byValue, duration)); + if (time > finish || abort()) { + options.onComplete && options.onComplete(); + return; + } + requestAnimFrame(tick); + })(); + } + + var _requestAnimFrame = fabric.window.requestAnimationFrame || + fabric.window.webkitRequestAnimationFrame || + fabric.window.mozRequestAnimationFrame || + fabric.window.oRequestAnimationFrame || + fabric.window.msRequestAnimationFrame || + function(callback) { + fabric.window.setTimeout(callback, 1000 / 60); + }; + /** + * requestAnimationFrame polyfill based on http://paulirish.com/2011/requestanimationframe-for-smart-animating/ + * @memberOf fabric.util + * @param {Function} callback Callback to invoke + * @param {DOMElement} element optional Element to associate with animation + */ + var requestAnimFrame = function() { + return _requestAnimFrame.apply(fabric.window, arguments); + }; + + fabric.util.animate = animate; + fabric.util.requestAnimFrame = requestAnimFrame; + +})(); diff --git a/src/util/misc.js b/src/util/misc.js index 26e155f1..d1208331 100644 --- a/src/util/misc.js +++ b/src/util/misc.js @@ -104,64 +104,6 @@ return false; } - /** - * Changes value from one to another within certain period of time, invoking callbacks as value is being changed. - * @memberOf fabric.util - * @param {Object} [options] Animation options - * @param {Function} [options.onChange] Callback; invoked on every value change - * @param {Function} [options.onComplete] Callback; invoked when value change is completed - * @param {Number} [options.startValue=0] Starting value - * @param {Number} [options.endValue=100] Ending value - * @param {Number} [options.byValue=100] Value to modify the property by - * @param {Function} [options.easing] Easing function - * @param {Number} [options.duration=500] Duration of change - */ - function animate(options) { - - options || (options = { }); - - var start = +new Date(), - duration = options.duration || 500, - finish = start + duration, time, - onChange = options.onChange || function() { }, - abort = options.abort || function() { return false; }, - easing = options.easing || function(t, b, c, d) {return -c * Math.cos(t/d * (Math.PI/2)) + c + b;}, - startValue = 'startValue' in options ? options.startValue : 0, - endValue = 'endValue' in options ? options.endValue : 100, - byValue = options.byValue || endValue - startValue; - - options.onStart && options.onStart(); - - (function tick() { - time = +new Date(); - var currentTime = time > finish ? duration : (time - start); - onChange(easing(currentTime, startValue, byValue, duration)); - if (time > finish || abort()) { - options.onComplete && options.onComplete(); - return; - } - requestAnimFrame(tick); - })(); - } - - var _requestAnimFrame = fabric.window.requestAnimationFrame || - fabric.window.webkitRequestAnimationFrame || - fabric.window.mozRequestAnimationFrame || - fabric.window.oRequestAnimationFrame || - fabric.window.msRequestAnimationFrame || - function(callback) { - fabric.window.setTimeout(callback, 1000 / 60); - }; - /** - * requestAnimationFrame polyfill based on http://paulirish.com/2011/requestanimationframe-for-smart-animating/ - * @memberOf fabric.util - * @param {Function} callback Callback to invoke - * @param {DOMElement} element optional Element to associate with animation - */ - var requestAnimFrame = function() { - return _requestAnimFrame.apply(fabric.window, arguments); - }; - /** * Returns klass "Class" object of given fabric.Object type * @memberOf fabric.util @@ -552,8 +494,6 @@ fabric.util.toFixed = toFixed; fabric.util.getRandomInt = getRandomInt; fabric.util.falseFunction = falseFunction; - fabric.util.animate = animate; - fabric.util.requestAnimFrame = requestAnimFrame; fabric.util.getKlass = getKlass; fabric.util.loadImage = loadImage; fabric.util.enlivenObjects = enlivenObjects;