From cba1d4ca21ce1f1d9bec907e6f4d319efe585f48 Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 11 May 2012 15:31:30 +0400 Subject: [PATCH] [BACK_INCOMPAT] Move object straightening methods into its own, optional module (`fabric.Object#straighten`, `fabric.Object.fxStraighten`, `fabric.Canvas#straightenObject`). --- HEADER.js | 2 +- build.js | 2 + dist/all.js | 269 +++++++++++++++++------------------- dist/all.min.js | 4 +- dist/all.min.js.gz | Bin 37417 -> 37412 bytes package.json | 16 +-- src/canvas.animation.js | 47 ++++--- src/object.class.js | 106 -------------- src/object_straightening.js | 101 ++++++++++++++ src/static_canvas.class.js | 13 -- 10 files changed, 266 insertions(+), 294 deletions(-) create mode 100644 src/object_straightening.js diff --git a/HEADER.js b/HEADER.js index a1a804c6..a823ebbe 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2012, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "0.8.1" }; +var fabric = fabric || { version: "0.8.2" }; if (typeof exports != 'undefined') { exports.fabric = fabric; diff --git a/build.js b/build.js index 7dfc4647..f0f3e31c 100644 --- a/build.js +++ b/build.js @@ -94,6 +94,8 @@ var filesToInclude = [ 'src/group.class.js', 'src/image.class.js', + ifSpecifiedInclude('object_straightening', 'src/object_straightening.js'), + ifSpecifiedInclude('image_filters', 'src/image_filters.js'), ifSpecifiedInclude('text', 'src/text.class.js'), diff --git a/dist/all.js b/dist/all.js index be304c9f..13b92e24 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2012, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "0.8.1" }; +var fabric = fabric || { version: "0.8.2" }; if (typeof exports != 'undefined') { exports.fabric = fabric; @@ -5086,19 +5086,6 @@ fabric.util.string = { return this.centerObjectH(object).centerObjectV(object); }, - /** - * Straightens object, then rerenders canvas - * @method straightenObject - * @param {fabric.Object} object Object to straighten - * @return {fabric.Canvas} thisArg - * @chainable - */ - straightenObject: function (object) { - object.straighten(); - this.renderAll(); - return this; - }, - /** * Returs dataless JSON representation of canvas * @method toDatalessJSON @@ -6547,7 +6534,9 @@ fabric.util.string = { fabric.Element = fabric.Canvas; })(); fabric.util.object.extend(fabric.StaticCanvas.prototype, { - + + FX_DURATION: 500, + /** * Centers object horizontally with animation. * @method fxCenterObjectH @@ -6616,20 +6605,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { return this; }, - /** - * Same as `fabric.Canvas#straightenObject`, but animated - * @method fxStraightenObject - * @param {fabric.Object} object Object to straighten - * @return {fabric.Canvas} thisArg - * @chainable - */ - fxStraightenObject: function (object) { - object.fxStraighten({ - onChange: this.renderAll.bind(this) - }); - return this; - }, - /** * Same as `fabric.Canvas#remove` but animated * @method fxRemove @@ -6638,17 +6613,32 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { * @return {fabric.Canvas} thisArg * @chainable */ - fxRemove: function (object, callback) { - var _this = this; - object.fxRemove({ - onChange: this.renderAll.bind(this), + fxRemove: function (object, callbacks) { + callbacks = callbacks || { }; + + var empty = function() { }, + onComplete = callbacks.onComplete || empty, + onChange = callbacks.onChange || empty, + _this = this; + + fabric.util.animate({ + startValue: object.get('opacity'), + endValue: 0, + duration: this.FX_DURATION, + onStart: function() { + object.setActive(false); + }, + onChange: function(value) { + object.set('opacity', value); + _this.renderAll(); + onChange(); + }, onComplete: function () { _this.remove(object); - if (typeof callback === 'function') { - callback(); - } + onComplete(); } }); + return this; } }); @@ -6975,12 +6965,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { */ NUM_FRACTION_DIGITS: 2, - /** - * @constant - * @type Number - */ - FX_DURATION: 500, - /** * @constant * @type Number @@ -8120,106 +8104,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { return 0; }, - /** - * @method straighten - * @return {fabric.Object} thisArg - * @chainable - */ - straighten: function() { - var angle = this._getAngleValueForStraighten(); - this.setAngle(angle); - return this; - }, - - /** - * @method fxStraighten - * @param {Object} callbacks - * - onComplete: invoked on completion - * - onChange: invoked on every step of animation - * - * @return {fabric.Object} thisArg - * @chainable - */ - fxStraighten: function(callbacks) { - callbacks = callbacks || { }; - - var empty = function() { }, - onComplete = callbacks.onComplete || empty, - onChange = callbacks.onChange || empty, - _this = this; - - fabric.util.animate({ - startValue: this.get('angle'), - endValue: this._getAngleValueForStraighten(), - duration: this.FX_DURATION, - onChange: function(value) { - _this.setAngle(value); - onChange(); - }, - onComplete: function() { - _this.setCoords(); - onComplete(); - }, - onStart: function() { - _this.setActive(false); - } - }); - - return this; - }, - - /** - * @method fxRemove - * @param {Object} callbacks - * @return {fabric.Object} thisArg - * @chainable - */ - fxRemove: function(callbacks) { - callbacks || (callbacks = { }); - - var empty = function() { }, - onComplete = callbacks.onComplete || empty, - onChange = callbacks.onChange || empty, - _this = this; - - fabric.util.animate({ - startValue: this.get('opacity'), - endValue: 0, - duration: this.FX_DURATION, - onChange: function(value) { - _this.set('opacity', value); - onChange(); - }, - onComplete: onComplete, - onStart: function() { - _this.setActive(false); - } - }); - - return this; - }, - - /** - * @method _getAngleValueForStraighten - * @return {Number} angle value - * @private - */ - _getAngleValueForStraighten: function() { - var angle = this.get('angle'); - - // TODO (kangax): can this be simplified? - - if (angle > -225 && angle <= -135) { return -180; } - else if (angle > -135 && angle <= -45) { return -90; } - else if (angle > -45 && angle <= 45) { return 0; } - else if (angle > 45 && angle <= 135) { return 90; } - else if (angle > 135 && angle <= 225 ) { return 180; } - else if (angle > 225 && angle <= 315) { return 270; } - else if (angle > 315) { return 360; } - - return 0; - }, - /** * Returns a JSON representation of an instance * @method toJSON @@ -11283,6 +11167,107 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { })(typeof exports != 'undefined' ? exports : this); +fabric.util.object.extend(fabric.Object.prototype, { + + /** + * @method _getAngleValueForStraighten + * @return {Number} angle value + * @private + */ + _getAngleValueForStraighten: function() { + var angle = this.get('angle'); + + // TODO (kangax): can this be simplified? + + if (angle > -225 && angle <= -135) { return -180; } + else if (angle > -135 && angle <= -45) { return -90; } + else if (angle > -45 && angle <= 45) { return 0; } + else if (angle > 45 && angle <= 135) { return 90; } + else if (angle > 135 && angle <= 225 ) { return 180; } + else if (angle > 225 && angle <= 315) { return 270; } + else if (angle > 315) { return 360; } + + return 0; + }, + + /** + * @method straighten + * @return {fabric.Object} thisArg + * @chainable + */ + straighten: function() { + var angle = this._getAngleValueForStraighten(); + this.setAngle(angle); + return this; + }, + + /** + * @method fxStraighten + * @param {Object} callbacks + * - onComplete: invoked on completion + * - onChange: invoked on every step of animation + * + * @return {fabric.Object} thisArg + * @chainable + */ + fxStraighten: function(callbacks) { + callbacks = callbacks || { }; + + var empty = function() { }, + onComplete = callbacks.onComplete || empty, + onChange = callbacks.onChange || empty, + _this = this; + + fabric.util.animate({ + startValue: this.get('angle'), + endValue: this._getAngleValueForStraighten(), + duration: this.FX_DURATION, + onChange: function(value) { + _this.setAngle(value); + onChange(); + }, + onComplete: function() { + _this.setCoords(); + onComplete(); + }, + onStart: function() { + _this.setActive(false); + } + }); + + return this; + } +}); + +fabric.util.object.extend(fabric.StaticCanvas.prototype, { + + /** + * Straightens object, then rerenders canvas + * @method straightenObject + * @param {fabric.Object} object Object to straighten + * @return {fabric.Canvas} thisArg + * @chainable + */ + straightenObject: function (object) { + object.straighten(); + this.renderAll(); + return this; + }, + + /** + * Same as `fabric.Canvas#straightenObject`, but animated + * @method fxStraightenObject + * @param {fabric.Object} object Object to straighten + * @return {fabric.Canvas} thisArg + * @chainable + */ + fxStraightenObject: function (object) { + object.fxStraighten({ + onChange: this.renderAll.bind(this) + }); + return this; + } +}); /** * @namespace */ diff --git a/dist/all.min.js b/dist/all.min.js index 466b67c3..6fae91eb 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,7 +1,7 @@ /* Fabric.js Copyright 2008-2012, Bitsonnet (Juriy Zaytsev, Maxim Chernyak) */ -var fabric=fabric||{version:"0.8.1"};if(typeof exports!="undefined"){exports.fabric=fabric}if(typeof document!="undefined"&&typeof window!="undefined"){fabric.document=document;fabric.window=window}else{fabric.document=require("jsdom").jsdom("");fabric.window=fabric.document.createWindow()}fabric.isTouchSupported="ontouchstart" in fabric.document.documentElement;if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i");fabric.window=fabric.document.createWindow()}fabric.isTouchSupported="ontouchstart" in fabric.document.documentElement;if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i=y.length+G){B()}else{setTimeout(arguments.callee,10)}});return function(D){if(A){D()}else{z.push(D)}}})(),supports:function(A,z){var y=fabric.document.createElement("span").style;if(y[A]===undefined){return false}y[A]=z;return y[A]===z},textAlign:function(B,A,y,z){if(A.get("textAlign")=="right"){if(y>0){B=" "+B}}else{if(y400}if(F==500){F=400}for(var G in D){G=parseInt(G,10);if(!C||GA){A=G}H.push(G)}if(FA){F=A}H.sort(function(J,I){return(B?(J>F&&I>F)?JI:(JI:JV){V=Q}if(P>T){T=P}if(Qz){z=e}L.push(e);e=0;continue}var B=ab.glyphs[ag[aa]]||ab.missingGlyph;if(!B){continue}e+=D=Number(B.w||ab.w)+U}L.push(e);e=Math.max(z,e);var m=[];for(var aa=L.length;aa--;){m[aa]=e-L[aa]}if(D===null){return null}V+=(H.width-D);C+=H.minX;var v,p;if(n){v=J;p=J.firstChild}else{v=fabric.document.createElement("span");v.className="cufon cufon-canvas";v.alt=E;p=fabric.document.createElement("canvas");v.appendChild(p);if(A.printable){var Y=fabric.document.createElement("span");Y.className="cufon-alt";Y.appendChild(fabric.document.createTextNode(E));v.appendChild(Y)}}var ah=v.style;var O=p.style||{};var k=o.convert(H.height-I+T);var af=Math.ceil(k);var S=af/k;p.width=Math.ceil(o.convert(e+V-C)*S);p.height=af;I+=H.minY;O.top=Math.round(o.convert(I-ab.ascent))+"px";O.left=Math.round(o.convert(C))+"px";var j=Math.ceil(o.convert(e*S));var t=j+"px";var s=o.convert(ab.height);var F=(A.lineHeight-1)*o.convert(-ab.ascent/5)*(M-1);Cufon.textOptions.width=j;Cufon.textOptions.height=(s*M)+F;Cufon.textOptions.lines=M;Cufon.textOptions.totalLineHeight=F;if(a){ah.width=t;ah.height=s+"px"}else{ah.paddingLeft=t;ah.paddingBottom=(s-1)+"px"}var ad=Cufon.textOptions.context||p.getContext("2d"),K=af/H.height;Cufon.textOptions.fontAscent=ab.ascent*K;Cufon.textOptions.boundaries=null;for(var w=Cufon.textOptions.shadowOffsets,aa=R.length;aa--;){w[aa]=[R[aa][0]*K,R[aa][1]*K]}ad.save();ad.scale(K,K);ad.translate(-C-((1/K*p.width)/2)+(Cufon.fonts[ab.family].offsetLeft||0),-I-(Cufon.textOptions.height/K)/2);ad.lineWidth=ab.face["underline-thickness"];ad.save();function q(l,i){ad.strokeStyle=i;ad.beginPath();ad.moveTo(0,l);ad.lineTo(e,l);ad.stroke()}var r=Cufon.getTextDecoration(A),u=A.fontStyle==="italic";function ae(){ad.save();ad.fillStyle=A.backgroundColor;var aj=0,an=0,y=[{left:0}];if(A.textAlign==="right"){ad.translate(m[an],0);y[0].left=m[an]*K}else{if(A.textAlign==="center"){ad.translate(m[an]/2,0);y[0].left=m[an]/2*K}}for(var al=0,ak=ag.length;al.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 c(e,f){return a(e,/(?:em|ex|%)$/i.test(f)?"1em":f)}function a(h,i){if(/px$/i.test(i)){return parseFloat(i)}var g=h.style.left,f=h.runtimeStyle.left;h.runtimeStyle.left=h.currentStyle.left;h.style.left=i;var e=h.style.pixelLeft;h.style.left=g;h.runtimeStyle.left=f;return e}return function(T,z,O,w,D,U,M){var h=(z===null);if(h){z=D.alt}var B=T.viewBox;var j=O.computedFontSize||(O.computedFontSize=new Cufon.CSS.Size(c(U,O.get("fontSize"))+"px",T.baseSize));var L=O.computedLSpacing;if(L==undefined){L=O.get("letterSpacing");O.computedLSpacing=L=(L=="normal")?0:~~j.convertFrom(a(U,L))}var t,m;if(h){t=D;m=D.firstChild}else{t=fabric.document.createElement("span");t.className="cufon cufon-vml";t.alt=z;m=fabric.document.createElement("span");m.className="cufon-vml-canvas";t.appendChild(m);if(w.printable){var R=fabric.document.createElement("span");R.className="cufon-alt";R.appendChild(fabric.document.createTextNode(z));t.appendChild(R)}if(!M){t.appendChild(fabric.document.createElement("cvml:shape"))}}var Z=t.style;var G=m.style;var f=j.convert(B.height),W=Math.ceil(f);var K=W/f;var J=B.minX,I=B.minY;G.height=W;G.top=Math.round(j.convert(I-T.ascent));G.left=Math.round(j.convert(J));Z.height=j.convert(T.height)+"px";var p=Cufon.getTextDecoration(w);var y=O.get("color");var X=Cufon.CSS.textTransform(z,O).split("");var e=0,H=0,q=null;var x,r,A=w.textShadow;for(var S=0,Q=0,P=X.length;St?1:(l-k)/m;p(j+(r-j)*q(s));if(l>t||n()){u.onComplete&&u.onComplete();return}h(o)})()}var h=(function(){return fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(k,j){fabric.window.setTimeout(k,1000/60)}})();function a(k,m,l){if(k){var j=new Image();j.onload=function(){m&&m.call(l,j);j=j.onload=null};j.src=k}else{m&&m.call(l,k)}}fabric.util.removeFromArray=g;fabric.util.degreesToRadians=b;fabric.util.toFixed=d;fabric.util.getRandomInt=e;fabric.util.falseFunction=i;fabric.util.animate=c;fabric.util.requestAnimFrame=h;fabric.util.loadImage=a})();(function(){var d=Array.prototype.slice;if(!Array.prototype.indexOf){Array.prototype.indexOf=function(g){if(this===void 0||this===null){throw new TypeError()}var h=Object(this),e=h.length>>>0;if(e===0){return -1}var i=0;if(arguments.length>0){i=Number(arguments[1]);if(i!==i){i=0}else{if(i!==0&&i!==(1/0)&&i!==-(1/0)){i=(i>0||-1)*Math.floor(Math.abs(i))}}}if(i>=e){return -1}var f=i>=0?i:Math.max(e-Math.abs(i),0);for(;f>>0;f>>0;g>>0;f>>0;f>>0;g>>0,f=0,h;if(arguments.length>1){h=arguments[1]}else{do{if(f in this){h=this[f++];break}if(++f>=e){throw new TypeError()}}while(true)}for(;f=e){e=h[f][g]}}}else{while(f--){if(h[f]>=e){e=h[f]}}}return e}function c(h,g){if(!h||h.length===0){return undefined}var f=h.length-1,e=g?h[f][g]:h[f];if(g){while(f--){if(h[f][g]",">")}fabric.util.string={camelize:b,capitalize:c,escapeXml:a}}());(function(){var c=Array.prototype.slice,a=Function.prototype.apply,b=function(){};if(!Function.prototype.bind){Function.prototype.bind=function(d){var g=this,e=c.call(arguments,1),f;if(e.length){f=function(){return a.call(g,this instanceof b?this:d,e.concat(c.call(arguments)))}}else{f=function(){return a.call(g,this instanceof b?this:d,arguments)}}b.prototype=this.prototype;f.prototype=new b;return f}}})();(function(){var f=Array.prototype.slice,e=function(){};var c=(function(){for(var g in {toString:1}){if(g==="toString"){return false}}return true})();var b;if(c){b=function(g,i){if(i.toString!==Object.prototype.toString){g.prototype.toString=i.toString}if(i.valueOf!==Object.prototype.valueOf){g.prototype.valueOf=i.valueOf}for(var h in i){g.prototype[h]=i[h]}}}else{b=function(g,i){for(var h in i){g.prototype[h]=i[h]}}}function a(){}function d(){var k=null,j=f.call(arguments,0);if(typeof j[0]==="function"){k=j.shift()}function g(){this.initialize.apply(this,arguments)}g.superclass=k;g.subclasses=[];if(k){a.prototype=k.prototype;g.prototype=new a;k.subclasses.push(g)}for(var h=0,l=j.length;h-1?c(j,l.match(/opacity:\s*(\d?\.?\d*)/)[1]):j}for(var m in l){if(m==="opacity"){c(j,l[m])}else{var k=(m==="float"||m==="cssFloat")?(typeof n.styleFloat==="undefined"?"cssFloat":"styleFloat"):m;n[k]=l[m]}}return j}var h=fabric.document.createElement("div"),g=typeof h.style.opacity==="string",b=typeof h.style.filter==="string",a=fabric.document.defaultView,f=a&&typeof a.getComputedStyle!=="undefined",d=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,c=function(i){return i};if(g){c=function(i,j){i.style.opacity=j;return i}}else{if(b){c=function(i,j){var k=i.style;if(i.currentStyle&&!i.currentStyle.hasLayout){k.zoom=1}if(d.test(k.filter)){j=j>=0.9999?"":("alpha(opacity="+(j*100)+")");k.filter=k.filter.replace(d,j)}else{k.filter+=" alpha(opacity="+(j*100)+")"}return i}}}fabric.util.setStyle=e})();(function(){var h=Array.prototype.slice;function g(j){return typeof j==="string"?fabric.document.getElementById(j):j}function b(j){return h.call(j,0)}try{var i=b(fabric.document.childNodes) instanceof Array}catch(a){}if(!i){b=function(k){var j=new Array(k.length),l=k.length;while(l--){j[l]=k[l]}return j}}function c(k,j){var l=fabric.document.createElement(k);for(var m in j){if(m==="class"){l.className=j[m]}else{if(m==="for"){l.htmlFor=j[m]}else{l.setAttribute(m,j[m])}}}return l}function f(j,k){if((" "+j.className+" ").indexOf(" "+k+" ")===-1){j.className+=(j.className?" ":"")+k}}function e(k,l,j){if(typeof l==="string"){l=c(l,j)}if(k.parentNode){k.parentNode.replaceChild(l,k)}l.appendChild(k);return l}function d(k){var j=0,l=0;do{j+=k.offsetTop||0;l+=k.offsetLeft||0;k=k.offsetParent}while(k);return({left:l,top:j})}(function(){var k=fabric.document.documentElement.style;var l="userSelect" in k?"userSelect":"MozUserSelect" in k?"MozUserSelect":"WebkitUserSelect" in k?"WebkitUserSelect":"KhtmlUserSelect" in k?"KhtmlUserSelect":"";function m(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=fabric.util.falseFunction}if(l){n.style[l]="none"}else{if(typeof n.unselectable=="string"){n.unselectable="on"}}return n}function j(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=null}if(l){n.style[l]=""}else{if(typeof n.unselectable=="string"){n.unselectable=""}}return n}fabric.util.makeElementUnselectable=m;fabric.util.makeElementSelectable=j})();(function(){function j(k,o){var m=fabric.document.getElementsByTagName("head")[0],l=fabric.document.createElement("script"),n=true;l.type="text/javascript";l.setAttribute("runat","server");l.onload=l.onreadystatechange=function(p){if(n){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete"){return}n=false;o(p||fabric.window.event);l=l.onload=l.onreadystatechange=null}};l.src=k;m.appendChild(l)}fabric.util.getScript=j})();fabric.util.getById=g;fabric.util.toArray=b;fabric.util.makeElement=c;fabric.util.addClass=f;fabric.util.wrapElement=e;fabric.util.getElementOffset=d})();(function(){function d(e,f){return e+(/\?/.test(e)?"&":"?")+f}var c=(function(){var h=[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 e=h.length;e--;){try{var g=h[e]();if(g){return h[e]}}catch(f){}}})();function a(){}function b(g,f){f||(f={});var j=f.method?f.method.toUpperCase():"GET",i=f.onComplete||function(){},h=c(),e;h.onreadystatechange=function(){if(h.readyState===4){i(h);h.onreadystatechange=a}};if(j==="GET"){e=null;if(typeof f.parameters=="string"){g=d(g,f.parameters)}}h.open(j,g,true);if(j==="POST"||j==="PUT"){h.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}h.send(e);return h}fabric.util.request=b})();(function(i){var g=i.fabric||(i.fabric={}),o=g.util.object.extend,e=g.util.string.capitalize,p=g.util.object.clone;var k={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix"};function d(v,u){if(!v){return}var x,t,s={};if(v.parentNode&&/^g$/i.test(v.parentNode.nodeName)){s=g.parseAttributes(v.parentNode,u)}var w=u.reduce(function(z,y){x=v.getAttribute(y);t=parseFloat(x);if(x){if((y==="fill"||y==="stroke")&&x==="none"){x=""}if(y==="fill-rule"){x=(x==="evenodd")?"destination-over":x}if(y==="transform"){x=g.parseTransformAttribute(x)}if(y in k){y=k[y]}z[y]=isNaN(t)?x:t}return z},{});w=o(w,o(n(v),g.parseStyleAttribute(v)));return o(s,w)}g.parseTransformAttribute=(function(){function s(L,M){var N=M[0];L[0]=Math.cos(N);L[1]=Math.sin(N);L[2]=-Math.sin(N);L[3]=Math.cos(N)}function x(N,O){var M=O[0],L=(O.length===2)?O[1]:O[0];N[0]=M;N[3]=L}function I(L,M){L[2]=M[0]}function u(L,M){L[1]=M[0]}function F(L,M){L[4]=M[0];if(M.length===2){L[5]=M[1]}}var z=[1,0,0,1,0,0],t="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",J="(?:\\s+,?\\s*|,\\s*)",A="(?:(skewX)\\s*\\(\\s*("+t+")\\s*\\))",y="(?:(skewY)\\s*\\(\\s*("+t+")\\s*\\))",H="(?:(rotate)\\s*\\(\\s*("+t+")(?:"+J+"("+t+")"+J+"("+t+"))?\\s*\\))",K="(?:(scale)\\s*\\(\\s*("+t+")(?:"+J+"("+t+"))?\\s*\\))",D="(?:(translate)\\s*\\(\\s*("+t+")(?:"+J+"("+t+"))?\\s*\\))",G="(?:(matrix)\\s*\\(\\s*("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")\\s*\\))",E="(?:"+G+"|"+D+"|"+K+"|"+H+"|"+A+"|"+y+")",B="(?:"+E+"(?:"+J+E+")*)",v="^\\s*(?:"+B+"?)\\s*$",C=new RegExp(v),w=new RegExp(E);return function(M){var L=z.concat();if(!M||(M&&!C.test(M))){return L}M.replace(w,function(Q){var N=new RegExp(E).exec(Q).filter(function(R){return(R!==""&&R!=null)}),O=N[1],P=N.slice(2).map(parseFloat);switch(O){case"translate":F(L,P);break;case"rotate":s(L,P);break;case"scale":x(L,P);break;case"skewX":I(L,P);break;case"skewY":u(L,P);break;case"matrix":L=P;break}});return L}})();function r(v){if(!v){return null}v=v.trim();var x=v.indexOf(",")>-1;v=v.split(/\s+/);var t=[];if(x){for(var u=0,s=v.length;u/i,""))}if(!v.documentElement){return}g.parseSVGDocument(v.documentElement,function(y,x){j.set(s,{objects:g.util.array.invoke(y,"toObject"),options:x});u(y,x)})}}function a(u){var t=u.objects,s=u.options;t=t.map(function(v){return g[e(v.type)].fromObject(v)});return({objects:t,options:s})}function m(s,v){s=s.trim();var t;if(typeof DOMParser!=="undefined"){var u=new DOMParser();if(u&&u.parseFromString){t=u.parseFromString(s,"text/xml")}}else{if(g.window.ActiveXObject){var t=new ActiveXObject("Microsoft.XMLDOM");t.async="false";t.loadXML(s.replace(//i,""))}}g.parseSVGDocument(t.documentElement,function(x,w){v(x,w)})}function l(v){var t="";for(var u=0,s=v.length;u",'",""].join("")}return t}o(g,{parseAttributes:d,parseElements:f,parseStyleAttribute:h,parsePointsAttribute:r,getCSSRules:c,loadSVGFromURL:b,loadSVGFromString:m,createSVGFontFacesMarkup:l})})(typeof exports!="undefined"?exports:this);(function(){function c(h){var g=h.getAttribute("style");if(g){var k=g.split(/\s*;\s*/);for(var f=k.length;f--;){var e=k[f].split(/\s*:\s*/),d=e[0].trim(),j=e[1].trim();if(d==="stop-color"){return j}}}}fabric.Gradient={create:function(l,m){m||(m={});var f=m.x1||0,k=m.y1||0,e=m.x2||l.canvas.width,i=m.y2||0,g=m.colorStops;var j=l.createLinearGradient(f,k,e,i);for(var h in g){var d=g[h];j.addColorStop(parseFloat(h),d)}return j},fromElement:function(d,m,l){var j=d.getElementsByTagName("stop"),d,f,e={},g,k={x1:d.getAttribute("x1")||0,y1:d.getAttribute("y1")||0,x2:d.getAttribute("x2")||"100%",y2:d.getAttribute("y2")||0};for(var h=j.length;h--;){d=j[h];f=d.getAttribute("offset");f=parseFloat(f)/(/%$/.test(f)?100:1);e[f]=c(d)||d.getAttribute("stop-color")}a(l,k);return fabric.Gradient.create(m,{x1:k.x1,y1:k.y1,x2:k.x2,y2:k.y2,colorStops:e})},forObject:function(g,d,e){e||(e={});a(g,e);var f=fabric.Gradient.create(d,{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,colorStops:e.colorStops});return f}};function a(f,e){for(var g in e){if(typeof e[g]==="string"&&/^\d+%$/.test(e[g])){var d=parseFloat(e[g],10);if(g==="x1"||g==="x2"){e[g]=f.width*d/100}else{if(g==="y1"||g==="y2"){e[g]=f.height*d/100}}}if(g==="x1"||g==="x2"){e[g]-=f.width/2}else{if(g==="y1"||g==="y2"){e[g]-=f.height/2}}}}function b(j){var f=j.getElementsByTagName("linearGradient"),d=j.getElementsByTagName("radialGradient"),g,h={};for(var e=f.length;e--;){g=f[e];h[g.id]=g}for(var e=d.length;e--;){g=d[e];h[g.id]=g}return h}fabric.getGradientDefs=b})();(function(b){var c=b.fabric||(b.fabric={});if(c.Point){c.warn("fabric.Point is already defined");return}c.Point=a;function a(d,e){if(arguments.length>0){this.init(d,e)}}a.prototype={constructor:a,init:function(d,e){this.x=d;this.y=e},add:function(d){return new a(this.x+d.x,this.y+d.y)},addEquals:function(d){this.x+=d.x;this.y+=d.y;return this},scalarAdd:function(d){return new a(this.x+d,this.y+d)},scalarAddEquals:function(d){this.x+=d;this.y+=d;return this},subtract:function(d){return new a(this.x-d.x,this.y-d.y)},subtractEquals:function(d){this.x-=d.x;this.y-=d.y;return this},scalarSubtract:function(d){return new a(this.x-d,this.y-d)},scalarSubtractEquals:function(d){this.x-=d;this.y-=d;return this},multiply:function(d){return new a(this.x*d,this.y*d)},multiplyEquals:function(d){this.x*=d;this.y*=d;return this},divide:function(d){return new a(this.x/d,this.y/d)},divideEquals:function(d){this.x/=d;this.y/=d;return this},eq:function(d){return(this.x==d.x&&this.y==d.y)},lt:function(d){return(this.xd.x&&this.y>d.y)},gte:function(d){return(this.x>=d.x&&this.y>=d.y)},lerp:function(e,d){return new a(this.x+(e.x-this.x)*d,this.y+(e.y-this.y)*d)},distanceFrom:function(f){var e=this.x-f.x,d=this.y-f.y;return Math.sqrt(e*e+d*d)},min:function(d){return new a(Math.min(this.x,d.x),Math.min(this.y,d.y))},max:function(d){return new a(Math.max(this.x,d.x),Math.max(this.y,d.y))},toString:function(){return this.x+","+this.y},setXY:function(d,e){this.x=d;this.y=e},setFromPoint:function(d){this.x=d.x;this.y=d.y},swap:function(e){var d=this.x,f=this.y;this.x=e.x;this.y=e.y;e.x=d;e.y=f}}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Intersection){b.warn("fabric.Intersection is already defined");return}function c(d){if(arguments.length>0){this.init(d)}}b.Intersection=c;b.Intersection.prototype={init:function(d){this.status=d;this.points=[]},appendPoint:function(d){this.points.push(d)},appendPoints:function(d){this.points=this.points.concat(d)}};b.Intersection.intersectLineLine=function(h,f,l,k){var m,i=(k.x-l.x)*(h.y-l.y)-(k.y-l.y)*(h.x-l.x),j=(f.x-h.x)*(h.y-l.y)-(f.y-h.y)*(h.x-l.x),g=(k.y-l.y)*(f.x-h.x)-(k.x-l.x)*(f.y-h.y);if(g!=0){var e=i/g,d=j/g;if(0<=e&&e<=1&&0<=d&&d<=1){m=new c("Intersection");m.points.push(new b.Point(h.x+e*(f.x-h.x),h.y+e*(f.y-h.y)))}else{m=new c("No Intersection")}}else{if(i==0||j==0){m=new c("Coincident")}else{m=new c("Parallel")}}return m};b.Intersection.intersectLinePolygon=function(e,d,l){var m=new c("No Intersection"),f=l.length;for(var h=0;h0){m.status="Intersection"}return m};b.Intersection.intersectPolygonPolygon=function(j,h){var f=new c("No Intersection"),l=j.length;for(var k=0;k0){f.status="Intersection"}return f};b.Intersection.intersectPolygonRectangle=function(n,e,d){var g=e.min(d),m=e.max(d),f=new b.Point(m.x,g.y),l=new b.Point(g.x,m.y),k=c.intersectLinePolygon(g,f,n),j=c.intersectLinePolygon(f,m,n),i=c.intersectLinePolygon(m,l,n),h=c.intersectLinePolygon(l,g,n),o=new c("No Intersection");o.appendPoints(k.points);o.appendPoints(j.points);o.appendPoints(i.points);o.appendPoints(h.points);if(o.points.length>0){o.status="Intersection"}return o}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Color){b.warn("fabric.Color is already defined.");return}function c(d){if(!d){this.setSource([0,0,0,1])}else{this._tryParsingColor(d)}}b.Color=c;b.Color.prototype={_tryParsingColor:function(d){var e=c.sourceFromHex(d);if(!e){e=c.sourceFromRgb(d)}if(e){this.setSource(e)}},getSource:function(){return this._source},setSource:function(d){this._source=d},toRgb:function(){var d=this.getSource();return"rgb("+d[0]+","+d[1]+","+d[2]+")"},toRgba:function(){var d=this.getSource();return"rgba("+d[0]+","+d[1]+","+d[2]+","+d[3]+")"},toHex:function(){var h=this.getSource();var f=h[0].toString(16);f=(f.length==1)?("0"+f):f;var e=h[1].toString(16);e=(e.length==1)?("0"+e):e;var d=h[2].toString(16);d=(d.length==1)?("0"+d):d;return f.toUpperCase()+e.toUpperCase()+d.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var d=this.getSource();d[3]=e;this.setSource(d);return this},toGrayscale:function(){var f=this.getSource(),e=parseInt((f[0]*0.3+f[1]*0.59+f[2]*0.11).toFixed(0),10),d=f[3];this.setSource([e,e,e,d]);return this},toBlackWhite:function(d){var g=this.getSource(),f=(g[0]*0.3+g[1]*0.59+g[2]*0.11).toFixed(0),e=g[3],d=d||127;f=(Number(f)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];for(var j=0,k=this.getObjects(),g=k.length;j");return h.join("")},isEmpty:function(){return this._objects.length===0},remove:function(g){e(this._objects,g);if(this.getActiveObject()===g){this.discardActiveObject()}this.renderAll();return g},sendToBack:function(g){e(this._objects,g);this._objects.unshift(g);return this.renderAll()},bringToFront:function(g){e(this._objects,g);this._objects.push(g);return this.renderAll()},sendBackwards:function(j){var h=this._objects.indexOf(j),g=h;if(h!==0){for(var k=h-1;k>=0;--k){if(j.intersectsWithObject(this._objects[k])||j.isContainedWithinObject(this._objects[k])){g=k;break}}e(this._objects,j);this._objects.splice(g,0,j)}return this.renderAll()},bringForward:function(k){var n=this.getObjects(),h=n.indexOf(k),g=h;if(h!==n.length-1){for(var m=h+1,j=this._objects.length;m"};f(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(l){var k=l.getContext("2d"),g=k.getImageData(0,0,l.width,l.height),p=g.data,m=g.width,r=g.height,q,h,o,n;for(o=0;o0)?0:-v),r.ey-((u>0)?0:-u),t,s);this.contextTop.lineWidth=this.selectionLineWidth;this.contextTop.strokeStyle=this.selectionBorderColor;this.contextTop.strokeRect(r.ex+a-((v>0)?0:t),r.ey+a-((u>0)?0:s),t,s)},_findSelectedObjects:function(x){var y,t,D=[],s=this._groupSelector.ex,C=this._groupSelector.ey,r=s+this._groupSelector.left,A=C+this._groupSelector.top,z,w=new fabric.Point(f(s,r),f(C,A)),B=new fabric.Point(l(s,r),l(C,A));for(var u=0,v=this._objects.length;u1){var D=new fabric.Group(D);this.setActiveGroup(D);D.saveCoords();this.fire("selection:created",{target:D})}}this.renderAll()},findTarget:function(v,s){var u,w=this.getPointer(v);var t=this.getActiveGroup();if(t&&!s&&this.containsPoint(v,t)){u=t;return u}for(var r=this._objects.length;r--;){if(this._objects[r]&&this.containsPoint(v,this._objects[r])){u=this._objects[r];this.relatedTarget=u;break}}if(u&&u.selectable){return u}},getPointer:function(r){var s=q(r);return{x:s.x-this._offset.left,y:s.y-this._offset.top}},_createUpperCanvas:function(){this.upperCanvasEl=this._createCanvasElement();this.upperCanvasEl.className="upper-canvas";this.wrapperEl.appendChild(this.upperCanvasEl);this._applyCanvasStyle(this.upperCanvasEl);this.contextTop=this.upperCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.CONTAINER_CLASS});fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"});fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(s){var t=this.getWidth()||s.width,r=this.getHeight()||s.height;fabric.util.setStyle(s,{position:"absolute",width:t+"px",height:r+"px",left:0,top:0});s.width=t;s.height=r;fabric.util.makeElementUnselectable(s)},getContext:function(){return this.contextTop},setActiveObject:function(r,s){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=r;r.setActive(true);this.renderAll();this.fire("object:selected",{target:r,e:s});return this},getActiveObject:function(){return this._activeObject},discardActiveObject:function(){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=null;return this},setActiveGroup:function(r){this._activeGroup=r;return this},getActiveGroup:function(){return this._activeGroup},discardActiveGroup:function(){var r=this.getActiveGroup();if(r){r.destroy()}return this.setActiveGroup(null)},deactivateAll:function(){var s=this.getObjects(),t=0,r=s.length;for(;t1){var o=new fabric.PathGroup(q,n)}else{var o=q[0]}o.setSourcePath(m);if(!(o instanceof fabric.PathGroup)){fabric.util.object.extend(o,n);if(typeof n.angle!=="undefined"){o.setAngle(n.angle)}}g(o,l)})}}}},this)}catch(c){fabric.log(c.message)}},loadFromJSON:function(a,d){if(!a){return}var b=JSON.parse(a);if(!b||(b&&!b.objects)){return}this.clear();var c=this;this._enlivenObjects(b.objects,function(){c.backgroundColor=b.background;if(d){d()}});return this},_enlivenObjects:function(b,e){var c=0,a=b.filter(function(f){return f.type==="image"}).length;var d=this;b.forEach(function(h,g){if(!h.type){return}switch(h.type){case"image":case"font":fabric[fabric.util.string.capitalize(h.type)].fromObject(h,function(i){d.insertAt(i,g,true);if(++c===a){if(e){e()}}});break;default:var f=fabric[fabric.util.string.camelize(fabric.util.string.capitalize(h.type))];if(f&&f.fromObject){d.insertAt(f.fromObject(h),g,true)}break}});if(a===0&&e){e()}},_toDataURL:function(a,b){this.clone(function(c){b(c.toDataURL(a))})},_toDataURLWithMultiplier:function(a,c,b){this.clone(function(d){b(d.toDataURLWithMultiplier(a,c))})},clone:function(b){var a=JSON.stringify(this);this.cloneWithoutData(function(c){c.loadFromJSON(a,function(){if(b){b(c)}})})},cloneWithoutData:function(c){var a=fabric.document.createElement("canvas");a.width=this.getWidth();a.height=this.getHeight();var b=this.__clone||(this.__clone=new fabric.Canvas(a));b.clipTo=this.clipTo;if(c){c(b)}}});(function(a){var d=a.fabric||(a.fabric={}),l=d.util.object.extend,m=d.util.object.clone,c=d.util.toFixed,k=d.util.string.capitalize,p=d.util.getPointer,b=d.util.degreesToRadians,o=Array.prototype.slice;if(d.Object){return}d.Object=d.util.createClass({type:"object",includeDefaultValues:true,NUM_FRACTION_DIGITS:2,FX_DURATION:500,MIN_SCALE_LIMIT:0.1,stateProperties:("top left width height scaleX scaleY flipX flipY theta angle opacity cornersize fill overlayFill stroke strokeWidth fillRule borderScaleFactor transformMatrix selectable").split(" "),top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:false,flipY:false,theta:0,opacity:1,angle:0,cornersize:12,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",fill:"rgb(0,0,0)",fillRule:"source-over",overlayFill:null,stroke:null,strokeWidth:1,borderOpacityWhenMoving:0.4,borderScaleFactor:1,transformMatrix:null,selectable:true,hasControls:true,hasBorders:true,callSuper:function(i){var q=this.constructor.superclass.prototype[i];return(arguments.length>1)?q.apply(this,o.call(arguments,1)):q.call(this)},initialize:function(i){i&&this.setOptions(i)},setOptions:function(q){var r=this.stateProperties.length,s;while(r--){s=this.stateProperties[r];if(s in q){this.set(s,q[s])}}},transform:function(i){i.globalAlpha=this.opacity;i.translate(this.left,this.top);i.rotate(this.theta);i.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(){var i={type:this.type,left:c(this.left,this.NUM_FRACTION_DIGITS),top:c(this.top,this.NUM_FRACTION_DIGITS),width:c(this.width,this.NUM_FRACTION_DIGITS),height:c(this.height,this.NUM_FRACTION_DIGITS),fill:this.fill,overlayFill:this.overlayFill,stroke:this.stroke,strokeWidth:this.strokeWidth,scaleX:c(this.scaleX,this.NUM_FRACTION_DIGITS),scaleY:c(this.scaleY,this.NUM_FRACTION_DIGITS),angle:c(this.getAngle(),this.NUM_FRACTION_DIGITS),flipX:this.flipX,flipY:this.flipY,opacity:c(this.opacity,this.NUM_FRACTION_DIGITS),selectable:this.selectable};if(!this.includeDefaultValues){i=this._removeDefaultValues(i)}return i},toDatalessObject:function(){return this.toObject()},getSvgStyles:function(){return["stroke: ",(this.stroke?this.stroke:"none"),"; ","stroke-width: ",(this.strokeWidth?this.strokeWidth:"0"),"; ","fill: ",(this.fill?this.fill:"none"),"; ","opacity: ",(this.opacity?this.opacity:"1"),";"].join("")},getSvgTransform:function(){var i=this.getAngle();return["translate(",c(this.left,2)," ",c(this.top,2),")",i!==0?(" rotate("+c(i,2)+")"):"",(this.scaleX===1&&this.scaleY===1)?"":(" scale("+c(this.scaleX,2)+" "+c(this.scaleY,2)+")")].join("")},_removeDefaultValues:function(q){var i=d.Object.prototype.options;if(i){this.stateProperties.forEach(function(r){if(q[r]===i[r]){delete q[r]}})}return q},isActive:function(){return !!this.active},setActive:function(i){this.active=!!i;return this},toString:function(){return"#"},set:function(q,i){var s=(q==="scaleX"||q==="scaleY")&&ir.x&&s.xr.y&&u.y=v)&&(s.d.y>=v)){continue}if((s.o.x==s.d.x)&&(s.o.x>=w)){x=s.o.x;u=v}else{z=0;y=(s.d.y-s.o.y)/(s.d.x-s.o.x);r=v-z*w;q=s.o.y-y*s.o.x;x=-(r-q)/(z-y);u=r+z*x}if(x>=w){t+=1}if(t==2){break}}return t},_getImageLines:function(r,q){return{topline:{o:r.tl,d:r.tr},rightline:{o:r.tr,d:r.br},bottomline:{o:r.br,d:r.bl},leftline:{o:r.bl,d:r.tl}}},_setCornerCoords:function(){var t=this.oCoords,q=b(45-this.getAngle()),s=Math.sqrt(2*Math.pow(this.cornersize,2))/2,i=s*Math.cos(q),r=s*Math.sin(q);t.tl.corner={tl:{x:t.tl.x-r,y:t.tl.y-i},tr:{x:t.tl.x+i,y:t.tl.y-r},bl:{x:t.tl.x-i,y:t.tl.y+r},br:{x:t.tl.x+r,y:t.tl.y+i}};t.tr.corner={tl:{x:t.tr.x-r,y:t.tr.y-i},tr:{x:t.tr.x+i,y:t.tr.y-r},br:{x:t.tr.x+r,y:t.tr.y+i},bl:{x:t.tr.x-i,y:t.tr.y+r}};t.bl.corner={tl:{x:t.bl.x-r,y:t.bl.y-i},bl:{x:t.bl.x-i,y:t.bl.y+r},br:{x:t.bl.x+r,y:t.bl.y+i},tr:{x:t.bl.x+i,y:t.bl.y-r}};t.br.corner={tr:{x:t.br.x+i,y:t.br.y-r},bl:{x:t.br.x-i,y:t.br.y+r},br:{x:t.br.x+r,y:t.br.y+i},tl:{x:t.br.x-r,y:t.br.y-i}};t.ml.corner={tl:{x:t.ml.x-r,y:t.ml.y-i},tr:{x:t.ml.x+i,y:t.ml.y-r},bl:{x:t.ml.x-i,y:t.ml.y+r},br:{x:t.ml.x+r,y:t.ml.y+i}};t.mt.corner={tl:{x:t.mt.x-r,y:t.mt.y-i},tr:{x:t.mt.x+i,y:t.mt.y-r},bl:{x:t.mt.x-i,y:t.mt.y+r},br:{x:t.mt.x+r,y:t.mt.y+i}};t.mr.corner={tl:{x:t.mr.x-r,y:t.mr.y-i},tr:{x:t.mr.x+i,y:t.mr.y-r},bl:{x:t.mr.x-i,y:t.mr.y+r},br:{x:t.mr.x+r,y:t.mr.y+i}};t.mb.corner={tl:{x:t.mb.x-r,y:t.mb.y-i},tr:{x:t.mb.x+i,y:t.mb.y-r},bl:{x:t.mb.x-i,y:t.mb.y+r},br:{x:t.mb.x+r,y:t.mb.y+i}}},toGrayscale:function(){var i=this.get("fill");if(i){this.set("overlayFill",new d.Color(i).toGrayscale().toRgb())}return this},complexity:function(){return 0},straighten:function(){var i=this._getAngleValueForStraighten();this.setAngle(i);return this},fxStraighten:function(q){q=q||{};var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(u){t.setAngle(u);i()},onComplete:function(){t.setCoords();s()},onStart:function(){t.setActive(false)}});return this},fxRemove:function(q){q||(q={});var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("opacity"),endValue:0,duration:this.FX_DURATION,onChange:function(u){t.set("opacity",u);i()},onComplete:s,onStart:function(){t.setActive(false)}});return this},_getAngleValueForStraighten:function(){var i=this.get("angle");if(i>-225&&i<=-135){return -180}else{if(i>-135&&i<=-45){return -90}else{if(i>-45&&i<=45){return 0}else{if(i>45&&i<=135){return 90}else{if(i>135&&i<=225){return 180}else{if(i>225&&i<=315){return 270}else{if(i>315){return 360}}}}}}}return 0},toJSON:function(){return this.toObject()},setGradientFill:function(i,q){this.set("fill",d.Gradient.forObject(this,i,q))},animate:function(q,s,i){var r=this;if(!("from" in i)){i.from=this.get(q)}if(/[+-]/.test(s.charAt(0))){s=this.get(q)+parseFloat(s)}d.util.animate({startValue:i.from,endValue:s,duration:i.duration,onChange:function(t){r.set(q,t);i.onChange&&i.onChange()},onComplete:function(){r.setCoords();i.onComplete&&i.onComplete()}})}});d.Object.prototype.rotate=d.Object.prototype.setAngle;var j=d.Object.prototype;for(var g=j.stateProperties.length;g--;){var h=j.stateProperties[g],e=h.charAt(0).toUpperCase()+h.slice(1),f="set"+e,n="get"+e;if(!j[n]){j[n]=(function(i){return new Function('return this.get("'+i+'")')})(h)}if(!j[f]){j[f]=(function(i){return new Function("value",'return this.set("'+i+'", value)')})(h)}}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),e=c.util.object.extend,d=c.Object.prototype.set,a={x1:1,x2:1,y1:1,y2:1};if(c.Line){c.warn("fabric.Line is already defined");return}c.Line=c.util.createClass(c.Object,{type:"line",initialize:function(g,f){if(!g){g=[0,0,0,0]}this.callSuper("initialize",f);this.set("x1",g[0]);this.set("y1",g[1]);this.set("x2",g[2]);this.set("y2",g[3]);this._setWidthHeight()},_setWidthHeight:function(){this.set("width",(this.x2-this.x1)||1);this.set("height",(this.y2-this.y1)||1);this.set("left",this.x1+this.width/2);this.set("top",this.y1+this.height/2)},set:function(f,g){d.call(this,f,g);if(f in a){this._setWidthHeight()}return this},_render:function(f){f.beginPath();f.moveTo(this.width===1?0:(-this.width/2),this.height===1?0:(-this.height/2));f.lineTo(this.width===1?0:(this.width/2),this.height===1?0:(this.height/2));f.lineWidth=this.strokeWidth;var g=f.strokeStyle;f.strokeStyle=f.fillStyle;f.stroke();f.strokeStyle=g},complexity:function(){return 1},toObject:function(){return e(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}});c.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");c.Line.fromElement=function(g,f){var i=c.parseAttributes(g,c.Line.ATTRIBUTE_NAMES);var h=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new c.Line(h,e(i,f))};c.Line.fromObject=function(f){var g=[f.x1,f.y1,f.x2,f.y2];return new c.Line(g,f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),d=Math.PI*2,e=b.util.object.extend;if(b.Circle){b.warn("fabric.Circle is already defined.");return}b.Circle=b.util.createClass(b.Object,{type:"circle",initialize:function(f){f=f||{};this.set("radius",f.radius||0);this.callSuper("initialize",f);var g=this.get("radius")*2*this.get("scaleX");this.set("width",g).set("height",g)},toObject:function(){return e(this.callSuper("toObject"),{radius:this.get("radius")})},toSVG:function(){return('')},_render:function(f,g){f.beginPath();f.globalAlpha*=this.opacity;f.arc(g?this.left:0,g?this.top:0,this.radius,0,d,false);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},complexity:function(){return 1}});b.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Circle.fromElement=function(g,f){f||(f={});var h=b.parseAttributes(g,b.Circle.ATTRIBUTE_NAMES);if(!c(h)){throw Error("value of `r` attribute is required and can not be negative")}if("left" in h){h.left-=(f.width/2)||0}if("top" in h){h.top-=(f.height/2)||0}return new b.Circle(e(h,f))};function c(f){return(("radius" in f)&&(f.radius>0))}b.Circle.fromObject=function(f){return new b.Circle(f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Triangle){b.warn("fabric.Triangle is already defined");return}b.Triangle=b.util.createClass(b.Object,{type:"triangle",initialize:function(c){c=c||{};this.callSuper("initialize",c);this.set("width",c.width||100).set("height",c.height||100)},_render:function(c){var d=this.width/2,e=this.height/2;c.beginPath();c.moveTo(-d,e);c.lineTo(0,-e);c.lineTo(d,e);c.closePath();if(this.fill){c.fill()}if(this.stroke){c.stroke()}},complexity:function(){return 1},toSVG:function(){var c=this.width/2,d=this.height/2;var e=[-c+" "+d,"0 "+-d,c+" "+d].join(",");return''}});b.Triangle.fromObject=function(c){return new b.Triangle(c)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),c=Math.PI*2,d=b.util.object.extend;if(b.Ellipse){b.warn("fabric.Ellipse is already defined.");return}b.Ellipse=b.util.createClass(b.Object,{type:"ellipse",initialize:function(e){e=e||{};this.callSuper("initialize",e);this.set("rx",e.rx||0);this.set("ry",e.ry||0);this.set("width",this.get("rx")*2);this.set("height",this.get("ry")*2)},toObject:function(){return d(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,f){if(this.rx===0||this.ry===0){return}return this.callSuper("render",e,f)},_render:function(e,f){e.beginPath();e.save();e.globalAlpha*=this.opacity;e.transform(1,0,0,this.ry/this.rx,0,0);e.arc(f?this.left:0,f?this.top:0,this.rx,0,c,false);if(this.stroke){e.stroke()}if(this.fill){e.fill()}e.restore()},complexity:function(){return 1}});b.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Ellipse.fromElement=function(f,e){e||(e={});var g=b.parseAttributes(f,b.Ellipse.ATTRIBUTE_NAMES);if("left" in g){g.left-=(e.width/2)||0}if("top" in g){g.top-=(e.height/2)||0}return new b.Ellipse(d(g,e))};b.Ellipse.fromObject=function(e){return new b.Ellipse(e)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={});if(c.Rect){console.warn("fabric.Rect is already defined");return}c.Rect=c.util.createClass(c.Object,{type:"rect",options:{rx:0,ry:0},initialize:function(d){this._initStateProperties();this.callSuper("initialize",d);this._initRxRy()},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){if(this.rx&&!this.ry){this.ry=this.rx}else{if(this.ry&&!this.rx){this.rx=this.ry}}},_render:function(f){var j=this.rx||0,i=this.ry||0,d=-this.width/2,k=-this.height/2,e=this.width,g=this.height;f.beginPath();f.globalAlpha*=this.opacity;if(this.group){f.translate(this.x||0,this.y||0)}f.moveTo(d+j,k);f.lineTo(d+e-j,k);f.bezierCurveTo(d+e,k,d+e,k+i,d+e,k+i);f.lineTo(d+e,k+g-i);f.bezierCurveTo(d+e,k+g,d+e-j,k+g,d+e-j,k+g);f.lineTo(d+j,k+g);f.bezierCurveTo(d,k+g,d,k+g-i,d,k+g-i);f.lineTo(d,k+i);f.bezierCurveTo(d,k,d+j,k,d+j,k);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},_normalizeLeftTopProperties:function(d){if(d.left){this.set("left",d.left+this.getWidth()/2)}this.set("x",d.left||0);if(d.top){this.set("top",d.top+this.getHeight()/2)}this.set("y",d.top||0);return this},complexity:function(){return 1},toSVG:function(){return''}});c.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");function a(d){d.left=d.left||0;d.top=d.top||0;return d}c.Rect.fromElement=function(e,d){if(!e){return null}var g=c.parseAttributes(e,c.Rect.ATTRIBUTE_NAMES);g=a(g);var f=new c.Rect(c.util.object.extend((d?c.util.object.clone(d):{}),g));f._normalizeLeftTopProperties(g);return f};c.Rect.fromObject=function(d){return new c.Rect(d)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),a=c.util.toFixed;if(c.Polyline){c.warn("fabric.Polyline is already defined");return}c.Polyline=c.util.createClass(c.Object,{type:"polyline",initialize:function(e,d){d=d||{};this.set("points",e);this.callSuper("initialize",d);this._calcDimensions()},_calcDimensions:function(){return c.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return c.Polygon.prototype.toObject.call(this)},toSVG:function(){var f=[];for(var e=0,d=this.points.length;e"].join("")},_render:function(f){var e;f.beginPath();for(var g=0,d=this.points.length;g"].join("")},_render:function(l){var k;l.beginPath();for(var m=0,j=this.points.length;m1){E=Math.sqrt(E);O*=E;N*=E}var R=aa/O;var Q=W/O;var D=(-W)/N;var C=(aa)/N;var H=R*M+Q*L;var q=D*M+C*L;var F=R*T+Q*S;var ab=D*T+C*S;var Z=(F-H)*(F-H)+(ab-q)*(ab-q);var U=1/Z-0.25;if(U<0){U=0}var w=Math.sqrt(U);if(P==J){w=-w}var V=0.5*(H+F)-w*(ab-q);var K=0.5*(q+ab)+w*(F-H);var v=Math.atan2(q-K,H-V);var u=Math.atan2(ab-K,F-V);var Y=u-v;if(Y<0&&P==1){Y+=2*Math.PI}else{if(Y>0&&P==0){Y-=2*Math.PI}}var B=Math.ceil(Math.abs(Y/(Math.PI*0.5+0.001)));var I=[];for(var X=0;X"},toObject:function(){var q=g(this.callSuper("toObject"),{path:this.path});if(this.sourcePath){q.sourcePath=this.sourcePath}if(this.transformMatrix){q.transformMatrix=this.transformMatrix}return q},toDatalessObject:function(){var q=this.toObject();if(this.sourcePath){q.path=this.sourcePath}delete q.sourcePath;return q},toSVG:function(){var t=[];for(var r=0,q=this.path.length;r',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var C=[],z,v,y;for(var u=0,t,q,w=this.path.length;uB){for(var r=1,x=q.length;r"];for(var l=0,j=m.length;l");return k.join("")},toString:function(){return"#"},isSameColor:function(){var j=this.getObjects()[0].get("fill");return this.getObjects().every(function(k){return k.get("fill")===j})},complexity:function(){return this.paths.reduce(function(j,k){return j+((k&&k.complexity)?k.complexity():0)},0)},toGrayscale:function(){var j=this.paths.length;while(j--){this.paths[j].toGrayscale()}return this},getObjects:function(){return this.paths}});function c(m){for(var l=0,j=m.length;l"},getObjects:function(){return this.objects},add:function(h){this._restoreObjectsState();this.objects.push(h);h.setActive(true);this._calcBounds();this._updateObjectsCoords();return this},remove:function(h){this._restoreObjectsState();f(this.objects,h);h.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},size:function(){return this.getObjects().length},set:function(h,k){if(typeof k=="function"){this.set(h,k(this[h]))}else{if(h==="fill"||h==="opacity"){var j=this.objects.length;this[h]=k;while(j--){this.objects[j].set(h,k)}}else{this[h]=k}}return this},contains:function(h){return this.objects.indexOf(h)>-1},toObject:function(){return g(this.callSuper("toObject"),{objects:b(this.objects,"clone")})},render:function(j){j.save();this.transform(j);var n=Math.max(this.scaleX,this.scaleY);for(var l=0,h=this.objects.length,k;k=this.objects[l];l++){var m=k.borderScaleFactor;k.borderScaleFactor=n;k.render(j);k.borderScaleFactor=m}this.hideBorders||this.drawBorders(j);this.hideCorners||this.drawCorners(j);j.restore();this.setCoords()},item:function(h){return this.getObjects()[h]},complexity:function(){return this.getObjects().reduce(function(i,h){i+=(typeof h.complexity=="function")?h.complexity():0;return i},0)},_restoreObjectsState:function(){this.objects.forEach(this._restoreObjectState,this);return this},_restoreObjectState:function(j){var l=this.get("left"),m=this.get("top"),h=this.getAngle()*(Math.PI/180),k=j.get("originalLeft"),n=j.get("originalTop"),i=Math.cos(h)*j.get("top")+Math.sin(h)*j.get("left"),o=-Math.sin(h)*j.get("top")+Math.cos(h)*j.get("left");j.setAngle(j.getAngle()+this.getAngle());j.set("left",l+o*this.get("scaleX"));j.set("top",m+i*this.get("scaleY"));j.set("scaleX",j.get("scaleX")*this.get("scaleX"));j.set("scaleY",j.get("scaleY")*this.get("scaleY"));j.setCoords();j.hideCorners=false;j.setActive(false);j.setCoords();return this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){this._originalLeft=this.get("left");this._originalTop=this.get("top");return this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){this.forEachObject(function(h){h.setCoords()});return this},activateAllObjects:function(){return this.setActive(true)},setActive:function(h){this.forEachObject(function(i){i.setActive(h)});return this},forEachObject:e.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var j=this.getObjects(),i=j[0]?j[0].get("opacity"):1;var h=j.every(function(k){return k.get("opacity")===i});if(h){this.opacity=i}},_calcBounds:function(){var s=[],q=[],p,n,k,h,m,l,u,r=0,t=this.objects.length;for(;ri.x&&j-hi.y},toGrayscale:function(){var h=this.objects.length;while(h--){this.objects[h].toGrayscale()}}});e.Group.fromObject=function(h){return new e.Group(h.objects,h)}})(typeof exports!="undefined"?exports:this);(function(a){var b=fabric.util.object.extend;if(!a.fabric){a.fabric={}}if(a.fabric.Image){fabric.warn("fabric.Image is already defined.");return}if(!fabric.Object){fabric.warn("fabric.Object is required for fabric.Image initialization");return}fabric.Image=fabric.util.createClass(fabric.Object,{active:false,bordervisibility:false,cornervisibility:false,type:"image",filters:[],initialize:function(d,c){c||(c={});this.callSuper("initialize",c);this._initElement(d);this._originalImage=this.getElement();this._initConfig(c);if(c.filters){this.filters=c.filters;this.applyFilters()}},getElement:function(){return this._element},setElement:function(c){this._element=c;this._initConfig();return this},getOriginalSize:function(){var c=this.getElement();return{width:c.width,height:c.height}},setBorderVisibility:function(c){this._resetWidthHeight();this._adjustWidthHeightToBorders(showBorder);this.setCoords()},setCornersVisibility:function(c){this.cornervisibility=!!c},render:function(c,d){c.save();if(!d){this.transform(c)}this._render(c);if(this.active&&!d){this.drawBorders(c);this.hideCorners||this.drawCorners(c)}c.restore()},toObject:function(){return b(this.callSuper("toObject"),{src:this._originalImage.src||this._originalImage._src,filters:this.filters.concat()})},toSVG:function(){return''},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(c){this.constructor.fromObject(this.toObject(),c)},applyFilters:function(i){if(this.filters.length===0){this.setElement(this._originalImage);i&&i();return}var c=typeof Buffer!=="undefined"&&typeof window==="undefined",g=this._originalImage,e=fabric.document.createElement("canvas"),f=c?new (require("canvas").Image):fabric.document.createElement("img"),h=this;if(!e.getContext&&typeof G_vmlCanvasManager!="undefined"){G_vmlCanvasManager.initElement(e)}e.width=g.width;e.height=g.height;e.getContext("2d").drawImage(g,0,0);this.filters.forEach(function(j){j&&j.applyTo(e)});f.onload=function(){h.setElement(f);i&&i();f.onload=e=g=null};f.width=g.width;f.height=g.height;if(c){var d=e.toDataURL("image/png").replace(/data:image\/png;base64,/,"");f.src=new Buffer(d,"base64");h.setElement(f);i&&i()}else{f.src=e.toDataURL("image/png")}return this},_render:function(d){var c=this.getOriginalSize();d.drawImage(this.getElement(),-c.width/2,-c.height/2,c.width,c.height)},_adjustWidthHeightToBorders:function(c){if(c){this.currentBorder=this.borderwidth;this.width+=(2*this.currentBorder);this.height+=(2*this.currentBorder)}else{this.currentBorder=0}},_resetWidthHeight:function(){var c=this.getElement();this.set("width",c.width);this.set("height",c.height)},_initElement:function(c){this.setElement(fabric.util.getById(c));fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(c){this.setOptions(c||{});this._setBorder();this._setWidthHeight()},_initFilters:function(c){if(c.filters&&c.filters.length){this.filters=c.filters.map(function(d){return fabric.Image.filters[d.type].fromObject(d)})}},_setBorder:function(){if(this.bordervisibility){this.currentBorder=this.borderwidth}else{this.currentBorder=0}},_setWidthHeight:function(){var c=2*this.currentBorder;this.width=(this.getElement().width||0)+c;this.height=(this.getElement().height||0)+c},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc;fabric.Image.fromObject=function(d,f){var c=fabric.document.createElement("img"),e=d.src;if(d.width){c.width=d.width}if(d.height){c.height=d.height}c.onload=function(){fabric.Image.prototype._initFilters.call(d,d);var g=new fabric.Image(c,d);f&&f(g);c=c.onload=null};c.src=e};fabric.Image.fromURL=function(d,f,e){var c=fabric.document.createElement("img");c.onload=function(){if(f){f(new fabric.Image(c,e))}c=c.onload=null};c.src=d};fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" ");fabric.Image.fromElement=function(d,f,c){c||(c={});var e=fabric.parseAttributes(d,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(e["xlink:href"],f,b(e,c))};fabric.Image.async=true})(typeof exports!="undefined"?exports:this);fabric.Image.filters={};fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(d){var c=d.getContext("2d"),a=c.getImageData(0,0,d.width,d.height),h=a.data,e=a.width,l=a.height,k,b,g,f;for(g=0;gh&&m>h&&o>h&&p(a-m)'},_render:function(f){var h=Cufon.textOptions||(Cufon.textOptions={});h.left=this.left;h.top=this.top;h.context=f;h.color=this.fill;var g=this._initDummyElement();this.transform(f);Cufon.replaceElement(g,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor});this.width=h.width;this.height=h.height;this._totalLineHeight=h.totalLineHeight;this._fontAscent=h.fontAscent;this._boundaries=h.boundaries;this._shadowOffsets=h.shadowOffsets;this._shadows=h.shadows||[];this.setCoords()},_initDummyElement:function(){var g=c.document.createElement("pre"),f=c.document.createElement("div");f.appendChild(g);if(typeof G_vmlCanvasManager=="undefined"){g.innerHTML=this.text}else{g.innerText=this.text.replace(/\r?\n/gi,"\r")}g.style.fontSize=this.fontSize+"px";g.style.letterSpacing="normal";return g},render:function(f,g){f.save();this._render(f);if(!g&&this.active){this.drawBorders(f);this.hideCorners||this.drawCorners(f)}f.restore()},toObject:function(){return e(this.callSuper("toObject"),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor})},toSVG:function(){var i=this.text.split(/\r?\n/),j=-this._fontAscent-((this._fontAscent/5)*this.lineHeight),g=-(this.width/2),f=(this.height/2)-(i.length*this.fontSize)-this._totalLineHeight,h=this._getSVGTextAndBg(j,g,i),k=this._getSVGShadows(j,i);f+=((this._fontAscent/5)*this.lineHeight);return['',h.textBgRects.join(""),"',k.join(""),h.textSpans.join(""),"",""].join("")},_getSVGShadows:function(h,n){var o=[],k,l,p,g,f=1;for(k=0,p=this._shadows.length;k",c.util.string.escapeXml(n[l]),"");f=1}else{f++}}}return o},_getSVGTextAndBg:function(j,h,n){var g=[],k=[],l,m,o,f=1;for(l=0,o=n.length;l",c.util.string.escapeXml(n[l]),"");f=1}else{f++}if(!this.backgroundColor){continue}k.push("')}return{textSpans:g,textBgRects:k}},_getFillAttributes:function(f){var g=f?new c.Color(f):"";if(!g||!g.getSource()||g.getAlpha()===1){return'fill="'+f+'"'}return'opacity="'+g.getAlpha()+'" fill="'+g.setAlpha(1).toRgb()+'"'},setColor:function(f){this.set("fill",f);return this},setFontsize:function(f){this.set("fontSize",f);this.setCoords();return this},getText:function(){return this.text},setText:function(f){this.set("text",f);this.setCoords();return this},set:function(f,g){if(typeof f=="object"){for(var h in f){this.set(h,f[h])}}else{this[f]=g;if(f==="fontFamily"&&this.path){this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+g+"$3")}}return this}});c.Text.fromObject=function(f){return new c.Text(f.text,d(f))};c.Text.fromElement=function(f){}})(typeof exports!="undefined"?exports:this);(function(){if(typeof document!="undefined"&&typeof window!="undefined"){return}var XML=require("o3-xml"),URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;function request(url,encoding,callback){var oURL=URL.parse(url),client=HTTP.createClient(80,oURL.hostname),request=client.request("GET",oURL.pathname,{host:oURL.hostname});client.addListener("error",function(err){if(err.errno===process.ECONNREFUSED){fabric.log("ECONNREFUSED: connection refused to "+client.host+":"+client.port)}else{fabric.log(err.message)}});request.end();request.on("response",function(response){var body="";if(encoding){response.setEncoding(encoding)}response.on("end",function(){callback(body)});response.on("data",function(chunk){if(response.statusCode==200){body+=chunk}})})}fabric.util.loadImage=function(url,callback){request(url,"binary",function(body){var img=new Image();img.src=new Buffer(body,"binary");img._src=url;callback(img)})};fabric.loadSVGFromURL=function(url,callback){url=url.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();request(url,"",function(body){var doc=XML.parseFromString(body);fabric.parseSVGDocument(doc.documentElement,function(results,options){callback(results,options)})})};fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body);callback&&callback()})};fabric.Image.fromObject=function(object,callback){fabric.util.loadImage(object.src,function(img){var oImg=new fabric.Image(img);oImg._initConfig(object);oImg._initFilters(object);callback(oImg)})};fabric.createCanvasForNode=function(width,height){var canvasEl=fabric.document.createElement("canvas"),nodeCanvas=new Canvas(width||600,height||600);canvasEl.style={};canvasEl.width=nodeCanvas.width;canvasEl.height=nodeCanvas.height;var canvas=fabric.Canvas||fabric.StaticCanvas;var fabricCanvas=new canvas(canvasEl);fabricCanvas.contextContainer=nodeCanvas.getContext("2d");fabricCanvas.nodeCanvas=nodeCanvas;return fabricCanvas};fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};if(fabric.Canvas){fabric.Canvas.prototype.createPNGStream}var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(width){origSetWidth.call(this);this.nodeCanvas.width=width;return this};if(fabric.Canvas){fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth}var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(height){origSetHeight.call(this);this.nodeCanvas.height=height;return this};if(fabric.Canvas){fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight}})(); \ No newline at end of file +var Cufon=(function(){var k=function(){return k.replace.apply(null,arguments)};var u=k.DOM={ready:(function(){var z=false,B={loaded:1,complete:1};var y=[],A=function(){if(z){return}z=true;for(var C;C=y.shift();C()){}};if(fabric.document.addEventListener){fabric.document.addEventListener("DOMContentLoaded",A,false);fabric.window.addEventListener("pageshow",A,false)}if(!fabric.window.opera&&fabric.document.readyState){(function(){B[fabric.document.readyState]?A():setTimeout(arguments.callee,10)})()}if(fabric.document.readyState&&fabric.document.createStyleSheet){(function(){try{fabric.document.body.doScroll("left");A()}catch(C){setTimeout(arguments.callee,1)}})()}o(fabric.window,"load",A);return function(C){if(!arguments.length){A()}else{z?C():y.push(C)}}})()};var l=k.CSS={Size:function(z,y){this.value=parseFloat(z);this.unit=String(z).match(/[a-z%]*$/)[0]||"px";this.convert=function(A){return A/y*this.value};this.convertFrom=function(A){return A/this.value*y};this.toString=function(){return this.value+this.unit}},getStyle:function(y){return new a(y.style)},quotedList:i(function(B){var A=[],z=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,y;while(y=z.exec(B)){A.push(y[3]||y[1])}return A}),ready:(function(){var A=false;var z=[],B=function(){A=true;for(var D;D=z.shift();D()){}};var y=Object.prototype.propertyIsEnumerable?f("style"):{length:0};var C=f("link");u.ready(function(){var G=0,F;for(var E=0,D=C.length;F=C[E],E=y.length+G){B()}else{setTimeout(arguments.callee,10)}});return function(D){if(A){D()}else{z.push(D)}}})(),supports:function(A,z){var y=fabric.document.createElement("span").style;if(y[A]===undefined){return false}y[A]=z;return y[A]===z},textAlign:function(B,A,y,z){if(A.get("textAlign")=="right"){if(y>0){B=" "+B}}else{if(y400}if(F==500){F=400}for(var G in D){G=parseInt(G,10);if(!C||GA){A=G}H.push(G)}if(FA){F=A}H.sort(function(J,I){return(B?(J>F&&I>F)?JI:(JI:JV){V=Q}if(P>T){T=P}if(Qz){z=e}L.push(e);e=0;continue}var B=ab.glyphs[ag[aa]]||ab.missingGlyph;if(!B){continue}e+=D=Number(B.w||ab.w)+U}L.push(e);e=Math.max(z,e);var m=[];for(var aa=L.length;aa--;){m[aa]=e-L[aa]}if(D===null){return null}V+=(H.width-D);C+=H.minX;var v,p;if(n){v=J;p=J.firstChild}else{v=fabric.document.createElement("span");v.className="cufon cufon-canvas";v.alt=E;p=fabric.document.createElement("canvas");v.appendChild(p);if(A.printable){var Y=fabric.document.createElement("span");Y.className="cufon-alt";Y.appendChild(fabric.document.createTextNode(E));v.appendChild(Y)}}var ah=v.style;var O=p.style||{};var k=o.convert(H.height-I+T);var af=Math.ceil(k);var S=af/k;p.width=Math.ceil(o.convert(e+V-C)*S);p.height=af;I+=H.minY;O.top=Math.round(o.convert(I-ab.ascent))+"px";O.left=Math.round(o.convert(C))+"px";var j=Math.ceil(o.convert(e*S));var t=j+"px";var s=o.convert(ab.height);var F=(A.lineHeight-1)*o.convert(-ab.ascent/5)*(M-1);Cufon.textOptions.width=j;Cufon.textOptions.height=(s*M)+F;Cufon.textOptions.lines=M;Cufon.textOptions.totalLineHeight=F;if(a){ah.width=t;ah.height=s+"px"}else{ah.paddingLeft=t;ah.paddingBottom=(s-1)+"px"}var ad=Cufon.textOptions.context||p.getContext("2d"),K=af/H.height;Cufon.textOptions.fontAscent=ab.ascent*K;Cufon.textOptions.boundaries=null;for(var w=Cufon.textOptions.shadowOffsets,aa=R.length;aa--;){w[aa]=[R[aa][0]*K,R[aa][1]*K]}ad.save();ad.scale(K,K);ad.translate(-C-((1/K*p.width)/2)+(Cufon.fonts[ab.family].offsetLeft||0),-I-(Cufon.textOptions.height/K)/2);ad.lineWidth=ab.face["underline-thickness"];ad.save();function q(l,i){ad.strokeStyle=i;ad.beginPath();ad.moveTo(0,l);ad.lineTo(e,l);ad.stroke()}var r=Cufon.getTextDecoration(A),u=A.fontStyle==="italic";function ae(){ad.save();ad.fillStyle=A.backgroundColor;var aj=0,an=0,y=[{left:0}];if(A.textAlign==="right"){ad.translate(m[an],0);y[0].left=m[an]*K}else{if(A.textAlign==="center"){ad.translate(m[an]/2,0);y[0].left=m[an]/2*K}}for(var al=0,ak=ag.length;al.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 c(e,f){return a(e,/(?:em|ex|%)$/i.test(f)?"1em":f)}function a(h,i){if(/px$/i.test(i)){return parseFloat(i)}var g=h.style.left,f=h.runtimeStyle.left;h.runtimeStyle.left=h.currentStyle.left;h.style.left=i;var e=h.style.pixelLeft;h.style.left=g;h.runtimeStyle.left=f;return e}return function(T,z,O,w,D,U,M){var h=(z===null);if(h){z=D.alt}var B=T.viewBox;var j=O.computedFontSize||(O.computedFontSize=new Cufon.CSS.Size(c(U,O.get("fontSize"))+"px",T.baseSize));var L=O.computedLSpacing;if(L==undefined){L=O.get("letterSpacing");O.computedLSpacing=L=(L=="normal")?0:~~j.convertFrom(a(U,L))}var t,m;if(h){t=D;m=D.firstChild}else{t=fabric.document.createElement("span");t.className="cufon cufon-vml";t.alt=z;m=fabric.document.createElement("span");m.className="cufon-vml-canvas";t.appendChild(m);if(w.printable){var R=fabric.document.createElement("span");R.className="cufon-alt";R.appendChild(fabric.document.createTextNode(z));t.appendChild(R)}if(!M){t.appendChild(fabric.document.createElement("cvml:shape"))}}var Z=t.style;var G=m.style;var f=j.convert(B.height),W=Math.ceil(f);var K=W/f;var J=B.minX,I=B.minY;G.height=W;G.top=Math.round(j.convert(I-T.ascent));G.left=Math.round(j.convert(J));Z.height=j.convert(T.height)+"px";var p=Cufon.getTextDecoration(w);var y=O.get("color");var X=Cufon.CSS.textTransform(z,O).split("");var e=0,H=0,q=null;var x,r,A=w.textShadow;for(var S=0,Q=0,P=X.length;St?1:(l-k)/m;p(j+(r-j)*q(s));if(l>t||n()){u.onComplete&&u.onComplete();return}h(o)})()}var h=(function(){return fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(k,j){fabric.window.setTimeout(k,1000/60)}})();function a(k,m,l){if(k){var j=new Image();j.onload=function(){m&&m.call(l,j);j=j.onload=null};j.src=k}else{m&&m.call(l,k)}}fabric.util.removeFromArray=g;fabric.util.degreesToRadians=b;fabric.util.toFixed=d;fabric.util.getRandomInt=e;fabric.util.falseFunction=i;fabric.util.animate=c;fabric.util.requestAnimFrame=h;fabric.util.loadImage=a})();(function(){var d=Array.prototype.slice;if(!Array.prototype.indexOf){Array.prototype.indexOf=function(g){if(this===void 0||this===null){throw new TypeError()}var h=Object(this),e=h.length>>>0;if(e===0){return -1}var i=0;if(arguments.length>0){i=Number(arguments[1]);if(i!==i){i=0}else{if(i!==0&&i!==(1/0)&&i!==-(1/0)){i=(i>0||-1)*Math.floor(Math.abs(i))}}}if(i>=e){return -1}var f=i>=0?i:Math.max(e-Math.abs(i),0);for(;f>>0;f>>0;g>>0;f>>0;f>>0;g>>0,f=0,h;if(arguments.length>1){h=arguments[1]}else{do{if(f in this){h=this[f++];break}if(++f>=e){throw new TypeError()}}while(true)}for(;f=e){e=h[f][g]}}}else{while(f--){if(h[f]>=e){e=h[f]}}}return e}function c(h,g){if(!h||h.length===0){return undefined}var f=h.length-1,e=g?h[f][g]:h[f];if(g){while(f--){if(h[f][g]",">")}fabric.util.string={camelize:b,capitalize:c,escapeXml:a}}());(function(){var c=Array.prototype.slice,a=Function.prototype.apply,b=function(){};if(!Function.prototype.bind){Function.prototype.bind=function(d){var g=this,e=c.call(arguments,1),f;if(e.length){f=function(){return a.call(g,this instanceof b?this:d,e.concat(c.call(arguments)))}}else{f=function(){return a.call(g,this instanceof b?this:d,arguments)}}b.prototype=this.prototype;f.prototype=new b;return f}}})();(function(){var f=Array.prototype.slice,e=function(){};var c=(function(){for(var g in {toString:1}){if(g==="toString"){return false}}return true})();var b;if(c){b=function(g,i){if(i.toString!==Object.prototype.toString){g.prototype.toString=i.toString}if(i.valueOf!==Object.prototype.valueOf){g.prototype.valueOf=i.valueOf}for(var h in i){g.prototype[h]=i[h]}}}else{b=function(g,i){for(var h in i){g.prototype[h]=i[h]}}}function a(){}function d(){var k=null,j=f.call(arguments,0);if(typeof j[0]==="function"){k=j.shift()}function g(){this.initialize.apply(this,arguments)}g.superclass=k;g.subclasses=[];if(k){a.prototype=k.prototype;g.prototype=new a;k.subclasses.push(g)}for(var h=0,l=j.length;h-1?c(j,l.match(/opacity:\s*(\d?\.?\d*)/)[1]):j}for(var m in l){if(m==="opacity"){c(j,l[m])}else{var k=(m==="float"||m==="cssFloat")?(typeof n.styleFloat==="undefined"?"cssFloat":"styleFloat"):m;n[k]=l[m]}}return j}var h=fabric.document.createElement("div"),g=typeof h.style.opacity==="string",b=typeof h.style.filter==="string",a=fabric.document.defaultView,f=a&&typeof a.getComputedStyle!=="undefined",d=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,c=function(i){return i};if(g){c=function(i,j){i.style.opacity=j;return i}}else{if(b){c=function(i,j){var k=i.style;if(i.currentStyle&&!i.currentStyle.hasLayout){k.zoom=1}if(d.test(k.filter)){j=j>=0.9999?"":("alpha(opacity="+(j*100)+")");k.filter=k.filter.replace(d,j)}else{k.filter+=" alpha(opacity="+(j*100)+")"}return i}}}fabric.util.setStyle=e})();(function(){var h=Array.prototype.slice;function g(j){return typeof j==="string"?fabric.document.getElementById(j):j}function b(j){return h.call(j,0)}try{var i=b(fabric.document.childNodes) instanceof Array}catch(a){}if(!i){b=function(k){var j=new Array(k.length),l=k.length;while(l--){j[l]=k[l]}return j}}function c(k,j){var l=fabric.document.createElement(k);for(var m in j){if(m==="class"){l.className=j[m]}else{if(m==="for"){l.htmlFor=j[m]}else{l.setAttribute(m,j[m])}}}return l}function f(j,k){if((" "+j.className+" ").indexOf(" "+k+" ")===-1){j.className+=(j.className?" ":"")+k}}function e(k,l,j){if(typeof l==="string"){l=c(l,j)}if(k.parentNode){k.parentNode.replaceChild(l,k)}l.appendChild(k);return l}function d(k){var j=0,l=0;do{j+=k.offsetTop||0;l+=k.offsetLeft||0;k=k.offsetParent}while(k);return({left:l,top:j})}(function(){var k=fabric.document.documentElement.style;var l="userSelect" in k?"userSelect":"MozUserSelect" in k?"MozUserSelect":"WebkitUserSelect" in k?"WebkitUserSelect":"KhtmlUserSelect" in k?"KhtmlUserSelect":"";function m(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=fabric.util.falseFunction}if(l){n.style[l]="none"}else{if(typeof n.unselectable=="string"){n.unselectable="on"}}return n}function j(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=null}if(l){n.style[l]=""}else{if(typeof n.unselectable=="string"){n.unselectable=""}}return n}fabric.util.makeElementUnselectable=m;fabric.util.makeElementSelectable=j})();(function(){function j(k,o){var m=fabric.document.getElementsByTagName("head")[0],l=fabric.document.createElement("script"),n=true;l.type="text/javascript";l.setAttribute("runat","server");l.onload=l.onreadystatechange=function(p){if(n){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete"){return}n=false;o(p||fabric.window.event);l=l.onload=l.onreadystatechange=null}};l.src=k;m.appendChild(l)}fabric.util.getScript=j})();fabric.util.getById=g;fabric.util.toArray=b;fabric.util.makeElement=c;fabric.util.addClass=f;fabric.util.wrapElement=e;fabric.util.getElementOffset=d})();(function(){function d(e,f){return e+(/\?/.test(e)?"&":"?")+f}var c=(function(){var h=[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 e=h.length;e--;){try{var g=h[e]();if(g){return h[e]}}catch(f){}}})();function a(){}function b(g,f){f||(f={});var j=f.method?f.method.toUpperCase():"GET",i=f.onComplete||function(){},h=c(),e;h.onreadystatechange=function(){if(h.readyState===4){i(h);h.onreadystatechange=a}};if(j==="GET"){e=null;if(typeof f.parameters=="string"){g=d(g,f.parameters)}}h.open(j,g,true);if(j==="POST"||j==="PUT"){h.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}h.send(e);return h}fabric.util.request=b})();(function(i){var g=i.fabric||(i.fabric={}),o=g.util.object.extend,e=g.util.string.capitalize,p=g.util.object.clone;var k={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix"};function d(v,u){if(!v){return}var x,t,s={};if(v.parentNode&&/^g$/i.test(v.parentNode.nodeName)){s=g.parseAttributes(v.parentNode,u)}var w=u.reduce(function(z,y){x=v.getAttribute(y);t=parseFloat(x);if(x){if((y==="fill"||y==="stroke")&&x==="none"){x=""}if(y==="fill-rule"){x=(x==="evenodd")?"destination-over":x}if(y==="transform"){x=g.parseTransformAttribute(x)}if(y in k){y=k[y]}z[y]=isNaN(t)?x:t}return z},{});w=o(w,o(n(v),g.parseStyleAttribute(v)));return o(s,w)}g.parseTransformAttribute=(function(){function s(L,M){var N=M[0];L[0]=Math.cos(N);L[1]=Math.sin(N);L[2]=-Math.sin(N);L[3]=Math.cos(N)}function x(N,O){var M=O[0],L=(O.length===2)?O[1]:O[0];N[0]=M;N[3]=L}function I(L,M){L[2]=M[0]}function u(L,M){L[1]=M[0]}function F(L,M){L[4]=M[0];if(M.length===2){L[5]=M[1]}}var z=[1,0,0,1,0,0],t="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",J="(?:\\s+,?\\s*|,\\s*)",A="(?:(skewX)\\s*\\(\\s*("+t+")\\s*\\))",y="(?:(skewY)\\s*\\(\\s*("+t+")\\s*\\))",H="(?:(rotate)\\s*\\(\\s*("+t+")(?:"+J+"("+t+")"+J+"("+t+"))?\\s*\\))",K="(?:(scale)\\s*\\(\\s*("+t+")(?:"+J+"("+t+"))?\\s*\\))",D="(?:(translate)\\s*\\(\\s*("+t+")(?:"+J+"("+t+"))?\\s*\\))",G="(?:(matrix)\\s*\\(\\s*("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")\\s*\\))",E="(?:"+G+"|"+D+"|"+K+"|"+H+"|"+A+"|"+y+")",B="(?:"+E+"(?:"+J+E+")*)",v="^\\s*(?:"+B+"?)\\s*$",C=new RegExp(v),w=new RegExp(E);return function(M){var L=z.concat();if(!M||(M&&!C.test(M))){return L}M.replace(w,function(Q){var N=new RegExp(E).exec(Q).filter(function(R){return(R!==""&&R!=null)}),O=N[1],P=N.slice(2).map(parseFloat);switch(O){case"translate":F(L,P);break;case"rotate":s(L,P);break;case"scale":x(L,P);break;case"skewX":I(L,P);break;case"skewY":u(L,P);break;case"matrix":L=P;break}});return L}})();function r(v){if(!v){return null}v=v.trim();var x=v.indexOf(",")>-1;v=v.split(/\s+/);var t=[];if(x){for(var u=0,s=v.length;u/i,""))}if(!v.documentElement){return}g.parseSVGDocument(v.documentElement,function(y,x){j.set(s,{objects:g.util.array.invoke(y,"toObject"),options:x});u(y,x)})}}function a(u){var t=u.objects,s=u.options;t=t.map(function(v){return g[e(v.type)].fromObject(v)});return({objects:t,options:s})}function m(s,v){s=s.trim();var t;if(typeof DOMParser!=="undefined"){var u=new DOMParser();if(u&&u.parseFromString){t=u.parseFromString(s,"text/xml")}}else{if(g.window.ActiveXObject){var t=new ActiveXObject("Microsoft.XMLDOM");t.async="false";t.loadXML(s.replace(//i,""))}}g.parseSVGDocument(t.documentElement,function(x,w){v(x,w)})}function l(v){var t="";for(var u=0,s=v.length;u",'",""].join("")}return t}o(g,{parseAttributes:d,parseElements:f,parseStyleAttribute:h,parsePointsAttribute:r,getCSSRules:c,loadSVGFromURL:b,loadSVGFromString:m,createSVGFontFacesMarkup:l})})(typeof exports!="undefined"?exports:this);(function(){function c(h){var g=h.getAttribute("style");if(g){var k=g.split(/\s*;\s*/);for(var f=k.length;f--;){var e=k[f].split(/\s*:\s*/),d=e[0].trim(),j=e[1].trim();if(d==="stop-color"){return j}}}}fabric.Gradient={create:function(l,m){m||(m={});var f=m.x1||0,k=m.y1||0,e=m.x2||l.canvas.width,i=m.y2||0,g=m.colorStops;var j=l.createLinearGradient(f,k,e,i);for(var h in g){var d=g[h];j.addColorStop(parseFloat(h),d)}return j},fromElement:function(d,m,l){var j=d.getElementsByTagName("stop"),d,f,e={},g,k={x1:d.getAttribute("x1")||0,y1:d.getAttribute("y1")||0,x2:d.getAttribute("x2")||"100%",y2:d.getAttribute("y2")||0};for(var h=j.length;h--;){d=j[h];f=d.getAttribute("offset");f=parseFloat(f)/(/%$/.test(f)?100:1);e[f]=c(d)||d.getAttribute("stop-color")}a(l,k);return fabric.Gradient.create(m,{x1:k.x1,y1:k.y1,x2:k.x2,y2:k.y2,colorStops:e})},forObject:function(g,d,e){e||(e={});a(g,e);var f=fabric.Gradient.create(d,{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,colorStops:e.colorStops});return f}};function a(f,e){for(var g in e){if(typeof e[g]==="string"&&/^\d+%$/.test(e[g])){var d=parseFloat(e[g],10);if(g==="x1"||g==="x2"){e[g]=f.width*d/100}else{if(g==="y1"||g==="y2"){e[g]=f.height*d/100}}}if(g==="x1"||g==="x2"){e[g]-=f.width/2}else{if(g==="y1"||g==="y2"){e[g]-=f.height/2}}}}function b(j){var f=j.getElementsByTagName("linearGradient"),d=j.getElementsByTagName("radialGradient"),g,h={};for(var e=f.length;e--;){g=f[e];h[g.id]=g}for(var e=d.length;e--;){g=d[e];h[g.id]=g}return h}fabric.getGradientDefs=b})();(function(b){var c=b.fabric||(b.fabric={});if(c.Point){c.warn("fabric.Point is already defined");return}c.Point=a;function a(d,e){if(arguments.length>0){this.init(d,e)}}a.prototype={constructor:a,init:function(d,e){this.x=d;this.y=e},add:function(d){return new a(this.x+d.x,this.y+d.y)},addEquals:function(d){this.x+=d.x;this.y+=d.y;return this},scalarAdd:function(d){return new a(this.x+d,this.y+d)},scalarAddEquals:function(d){this.x+=d;this.y+=d;return this},subtract:function(d){return new a(this.x-d.x,this.y-d.y)},subtractEquals:function(d){this.x-=d.x;this.y-=d.y;return this},scalarSubtract:function(d){return new a(this.x-d,this.y-d)},scalarSubtractEquals:function(d){this.x-=d;this.y-=d;return this},multiply:function(d){return new a(this.x*d,this.y*d)},multiplyEquals:function(d){this.x*=d;this.y*=d;return this},divide:function(d){return new a(this.x/d,this.y/d)},divideEquals:function(d){this.x/=d;this.y/=d;return this},eq:function(d){return(this.x==d.x&&this.y==d.y)},lt:function(d){return(this.xd.x&&this.y>d.y)},gte:function(d){return(this.x>=d.x&&this.y>=d.y)},lerp:function(e,d){return new a(this.x+(e.x-this.x)*d,this.y+(e.y-this.y)*d)},distanceFrom:function(f){var e=this.x-f.x,d=this.y-f.y;return Math.sqrt(e*e+d*d)},min:function(d){return new a(Math.min(this.x,d.x),Math.min(this.y,d.y))},max:function(d){return new a(Math.max(this.x,d.x),Math.max(this.y,d.y))},toString:function(){return this.x+","+this.y},setXY:function(d,e){this.x=d;this.y=e},setFromPoint:function(d){this.x=d.x;this.y=d.y},swap:function(e){var d=this.x,f=this.y;this.x=e.x;this.y=e.y;e.x=d;e.y=f}}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Intersection){b.warn("fabric.Intersection is already defined");return}function c(d){if(arguments.length>0){this.init(d)}}b.Intersection=c;b.Intersection.prototype={init:function(d){this.status=d;this.points=[]},appendPoint:function(d){this.points.push(d)},appendPoints:function(d){this.points=this.points.concat(d)}};b.Intersection.intersectLineLine=function(h,f,l,k){var m,i=(k.x-l.x)*(h.y-l.y)-(k.y-l.y)*(h.x-l.x),j=(f.x-h.x)*(h.y-l.y)-(f.y-h.y)*(h.x-l.x),g=(k.y-l.y)*(f.x-h.x)-(k.x-l.x)*(f.y-h.y);if(g!=0){var e=i/g,d=j/g;if(0<=e&&e<=1&&0<=d&&d<=1){m=new c("Intersection");m.points.push(new b.Point(h.x+e*(f.x-h.x),h.y+e*(f.y-h.y)))}else{m=new c("No Intersection")}}else{if(i==0||j==0){m=new c("Coincident")}else{m=new c("Parallel")}}return m};b.Intersection.intersectLinePolygon=function(e,d,l){var m=new c("No Intersection"),f=l.length;for(var h=0;h0){m.status="Intersection"}return m};b.Intersection.intersectPolygonPolygon=function(j,h){var f=new c("No Intersection"),l=j.length;for(var k=0;k0){f.status="Intersection"}return f};b.Intersection.intersectPolygonRectangle=function(n,e,d){var g=e.min(d),m=e.max(d),f=new b.Point(m.x,g.y),l=new b.Point(g.x,m.y),k=c.intersectLinePolygon(g,f,n),j=c.intersectLinePolygon(f,m,n),i=c.intersectLinePolygon(m,l,n),h=c.intersectLinePolygon(l,g,n),o=new c("No Intersection");o.appendPoints(k.points);o.appendPoints(j.points);o.appendPoints(i.points);o.appendPoints(h.points);if(o.points.length>0){o.status="Intersection"}return o}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Color){b.warn("fabric.Color is already defined.");return}function c(d){if(!d){this.setSource([0,0,0,1])}else{this._tryParsingColor(d)}}b.Color=c;b.Color.prototype={_tryParsingColor:function(d){var e=c.sourceFromHex(d);if(!e){e=c.sourceFromRgb(d)}if(e){this.setSource(e)}},getSource:function(){return this._source},setSource:function(d){this._source=d},toRgb:function(){var d=this.getSource();return"rgb("+d[0]+","+d[1]+","+d[2]+")"},toRgba:function(){var d=this.getSource();return"rgba("+d[0]+","+d[1]+","+d[2]+","+d[3]+")"},toHex:function(){var h=this.getSource();var f=h[0].toString(16);f=(f.length==1)?("0"+f):f;var e=h[1].toString(16);e=(e.length==1)?("0"+e):e;var d=h[2].toString(16);d=(d.length==1)?("0"+d):d;return f.toUpperCase()+e.toUpperCase()+d.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var d=this.getSource();d[3]=e;this.setSource(d);return this},toGrayscale:function(){var f=this.getSource(),e=parseInt((f[0]*0.3+f[1]*0.59+f[2]*0.11).toFixed(0),10),d=f[3];this.setSource([e,e,e,d]);return this},toBlackWhite:function(d){var g=this.getSource(),f=(g[0]*0.3+g[1]*0.59+g[2]*0.11).toFixed(0),e=g[3],d=d||127;f=(Number(f)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];for(var j=0,k=this.getObjects(),g=k.length;j");return h.join("")},isEmpty:function(){return this._objects.length===0},remove:function(g){e(this._objects,g);if(this.getActiveObject()===g){this.discardActiveObject()}this.renderAll();return g},sendToBack:function(g){e(this._objects,g);this._objects.unshift(g);return this.renderAll()},bringToFront:function(g){e(this._objects,g);this._objects.push(g);return this.renderAll()},sendBackwards:function(j){var h=this._objects.indexOf(j),g=h;if(h!==0){for(var k=h-1;k>=0;--k){if(j.intersectsWithObject(this._objects[k])||j.isContainedWithinObject(this._objects[k])){g=k;break}}e(this._objects,j);this._objects.splice(g,0,j)}return this.renderAll()},bringForward:function(k){var n=this.getObjects(),h=n.indexOf(k),g=h;if(h!==n.length-1){for(var m=h+1,j=this._objects.length;m"};f(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(l){var k=l.getContext("2d"),g=k.getImageData(0,0,l.width,l.height),p=g.data,m=g.width,r=g.height,q,h,o,n;for(o=0;o0)?0:-v),r.ey-((u>0)?0:-u),t,s);this.contextTop.lineWidth=this.selectionLineWidth;this.contextTop.strokeStyle=this.selectionBorderColor;this.contextTop.strokeRect(r.ex+a-((v>0)?0:t),r.ey+a-((u>0)?0:s),t,s)},_findSelectedObjects:function(x){var y,t,D=[],s=this._groupSelector.ex,C=this._groupSelector.ey,r=s+this._groupSelector.left,A=C+this._groupSelector.top,z,w=new fabric.Point(f(s,r),f(C,A)),B=new fabric.Point(l(s,r),l(C,A));for(var u=0,v=this._objects.length;u1){var D=new fabric.Group(D);this.setActiveGroup(D);D.saveCoords();this.fire("selection:created",{target:D})}}this.renderAll()},findTarget:function(v,s){var u,w=this.getPointer(v);var t=this.getActiveGroup();if(t&&!s&&this.containsPoint(v,t)){u=t;return u}for(var r=this._objects.length;r--;){if(this._objects[r]&&this.containsPoint(v,this._objects[r])){u=this._objects[r];this.relatedTarget=u;break}}if(u&&u.selectable){return u}},getPointer:function(r){var s=q(r);return{x:s.x-this._offset.left,y:s.y-this._offset.top}},_createUpperCanvas:function(){this.upperCanvasEl=this._createCanvasElement();this.upperCanvasEl.className="upper-canvas";this.wrapperEl.appendChild(this.upperCanvasEl);this._applyCanvasStyle(this.upperCanvasEl);this.contextTop=this.upperCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.CONTAINER_CLASS});fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"});fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(s){var t=this.getWidth()||s.width,r=this.getHeight()||s.height;fabric.util.setStyle(s,{position:"absolute",width:t+"px",height:r+"px",left:0,top:0});s.width=t;s.height=r;fabric.util.makeElementUnselectable(s)},getContext:function(){return this.contextTop},setActiveObject:function(r,s){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=r;r.setActive(true);this.renderAll();this.fire("object:selected",{target:r,e:s});return this},getActiveObject:function(){return this._activeObject},discardActiveObject:function(){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=null;return this},setActiveGroup:function(r){this._activeGroup=r;return this},getActiveGroup:function(){return this._activeGroup},discardActiveGroup:function(){var r=this.getActiveGroup();if(r){r.destroy()}return this.setActiveGroup(null)},deactivateAll:function(){var s=this.getObjects(),t=0,r=s.length;for(;t1){var o=new fabric.PathGroup(q,n)}else{var o=q[0]}o.setSourcePath(m);if(!(o instanceof fabric.PathGroup)){fabric.util.object.extend(o,n);if(typeof n.angle!=="undefined"){o.setAngle(n.angle)}}g(o,l)})}}}},this)}catch(c){fabric.log(c.message)}},loadFromJSON:function(a,d){if(!a){return}var b=JSON.parse(a);if(!b||(b&&!b.objects)){return}this.clear();var c=this;this._enlivenObjects(b.objects,function(){c.backgroundColor=b.background;if(d){d()}});return this},_enlivenObjects:function(b,e){var c=0,a=b.filter(function(f){return f.type==="image"}).length;var d=this;b.forEach(function(h,g){if(!h.type){return}switch(h.type){case"image":case"font":fabric[fabric.util.string.capitalize(h.type)].fromObject(h,function(i){d.insertAt(i,g,true);if(++c===a){if(e){e()}}});break;default:var f=fabric[fabric.util.string.camelize(fabric.util.string.capitalize(h.type))];if(f&&f.fromObject){d.insertAt(f.fromObject(h),g,true)}break}});if(a===0&&e){e()}},_toDataURL:function(a,b){this.clone(function(c){b(c.toDataURL(a))})},_toDataURLWithMultiplier:function(a,c,b){this.clone(function(d){b(d.toDataURLWithMultiplier(a,c))})},clone:function(b){var a=JSON.stringify(this);this.cloneWithoutData(function(c){c.loadFromJSON(a,function(){if(b){b(c)}})})},cloneWithoutData:function(c){var a=fabric.document.createElement("canvas");a.width=this.getWidth();a.height=this.getHeight();var b=this.__clone||(this.__clone=new fabric.Canvas(a));b.clipTo=this.clipTo;if(c){c(b)}}});(function(a){var d=a.fabric||(a.fabric={}),l=d.util.object.extend,m=d.util.object.clone,c=d.util.toFixed,k=d.util.string.capitalize,p=d.util.getPointer,b=d.util.degreesToRadians,o=Array.prototype.slice;if(d.Object){return}d.Object=d.util.createClass({type:"object",includeDefaultValues:true,NUM_FRACTION_DIGITS:2,MIN_SCALE_LIMIT:0.1,stateProperties:("top left width height scaleX scaleY flipX flipY theta angle opacity cornersize fill overlayFill stroke strokeWidth fillRule borderScaleFactor transformMatrix selectable").split(" "),top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:false,flipY:false,theta:0,opacity:1,angle:0,cornersize:12,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",fill:"rgb(0,0,0)",fillRule:"source-over",overlayFill:null,stroke:null,strokeWidth:1,borderOpacityWhenMoving:0.4,borderScaleFactor:1,transformMatrix:null,selectable:true,hasControls:true,hasBorders:true,callSuper:function(i){var q=this.constructor.superclass.prototype[i];return(arguments.length>1)?q.apply(this,o.call(arguments,1)):q.call(this)},initialize:function(i){i&&this.setOptions(i)},setOptions:function(q){var r=this.stateProperties.length,s;while(r--){s=this.stateProperties[r];if(s in q){this.set(s,q[s])}}},transform:function(i){i.globalAlpha=this.opacity;i.translate(this.left,this.top);i.rotate(this.theta);i.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(){var i={type:this.type,left:c(this.left,this.NUM_FRACTION_DIGITS),top:c(this.top,this.NUM_FRACTION_DIGITS),width:c(this.width,this.NUM_FRACTION_DIGITS),height:c(this.height,this.NUM_FRACTION_DIGITS),fill:this.fill,overlayFill:this.overlayFill,stroke:this.stroke,strokeWidth:this.strokeWidth,scaleX:c(this.scaleX,this.NUM_FRACTION_DIGITS),scaleY:c(this.scaleY,this.NUM_FRACTION_DIGITS),angle:c(this.getAngle(),this.NUM_FRACTION_DIGITS),flipX:this.flipX,flipY:this.flipY,opacity:c(this.opacity,this.NUM_FRACTION_DIGITS),selectable:this.selectable};if(!this.includeDefaultValues){i=this._removeDefaultValues(i)}return i},toDatalessObject:function(){return this.toObject()},getSvgStyles:function(){return["stroke: ",(this.stroke?this.stroke:"none"),"; ","stroke-width: ",(this.strokeWidth?this.strokeWidth:"0"),"; ","fill: ",(this.fill?this.fill:"none"),"; ","opacity: ",(this.opacity?this.opacity:"1"),";"].join("")},getSvgTransform:function(){var i=this.getAngle();return["translate(",c(this.left,2)," ",c(this.top,2),")",i!==0?(" rotate("+c(i,2)+")"):"",(this.scaleX===1&&this.scaleY===1)?"":(" scale("+c(this.scaleX,2)+" "+c(this.scaleY,2)+")")].join("")},_removeDefaultValues:function(q){var i=d.Object.prototype.options;if(i){this.stateProperties.forEach(function(r){if(q[r]===i[r]){delete q[r]}})}return q},isActive:function(){return !!this.active},setActive:function(i){this.active=!!i;return this},toString:function(){return"#"},set:function(q,i){var s=(q==="scaleX"||q==="scaleY")&&ir.x&&s.xr.y&&u.y=v)&&(s.d.y>=v)){continue}if((s.o.x==s.d.x)&&(s.o.x>=w)){x=s.o.x;u=v}else{z=0;y=(s.d.y-s.o.y)/(s.d.x-s.o.x);r=v-z*w;q=s.o.y-y*s.o.x;x=-(r-q)/(z-y);u=r+z*x}if(x>=w){t+=1}if(t==2){break}}return t},_getImageLines:function(r,q){return{topline:{o:r.tl,d:r.tr},rightline:{o:r.tr,d:r.br},bottomline:{o:r.br,d:r.bl},leftline:{o:r.bl,d:r.tl}}},_setCornerCoords:function(){var t=this.oCoords,q=b(45-this.getAngle()),s=Math.sqrt(2*Math.pow(this.cornersize,2))/2,i=s*Math.cos(q),r=s*Math.sin(q);t.tl.corner={tl:{x:t.tl.x-r,y:t.tl.y-i},tr:{x:t.tl.x+i,y:t.tl.y-r},bl:{x:t.tl.x-i,y:t.tl.y+r},br:{x:t.tl.x+r,y:t.tl.y+i}};t.tr.corner={tl:{x:t.tr.x-r,y:t.tr.y-i},tr:{x:t.tr.x+i,y:t.tr.y-r},br:{x:t.tr.x+r,y:t.tr.y+i},bl:{x:t.tr.x-i,y:t.tr.y+r}};t.bl.corner={tl:{x:t.bl.x-r,y:t.bl.y-i},bl:{x:t.bl.x-i,y:t.bl.y+r},br:{x:t.bl.x+r,y:t.bl.y+i},tr:{x:t.bl.x+i,y:t.bl.y-r}};t.br.corner={tr:{x:t.br.x+i,y:t.br.y-r},bl:{x:t.br.x-i,y:t.br.y+r},br:{x:t.br.x+r,y:t.br.y+i},tl:{x:t.br.x-r,y:t.br.y-i}};t.ml.corner={tl:{x:t.ml.x-r,y:t.ml.y-i},tr:{x:t.ml.x+i,y:t.ml.y-r},bl:{x:t.ml.x-i,y:t.ml.y+r},br:{x:t.ml.x+r,y:t.ml.y+i}};t.mt.corner={tl:{x:t.mt.x-r,y:t.mt.y-i},tr:{x:t.mt.x+i,y:t.mt.y-r},bl:{x:t.mt.x-i,y:t.mt.y+r},br:{x:t.mt.x+r,y:t.mt.y+i}};t.mr.corner={tl:{x:t.mr.x-r,y:t.mr.y-i},tr:{x:t.mr.x+i,y:t.mr.y-r},bl:{x:t.mr.x-i,y:t.mr.y+r},br:{x:t.mr.x+r,y:t.mr.y+i}};t.mb.corner={tl:{x:t.mb.x-r,y:t.mb.y-i},tr:{x:t.mb.x+i,y:t.mb.y-r},bl:{x:t.mb.x-i,y:t.mb.y+r},br:{x:t.mb.x+r,y:t.mb.y+i}}},toGrayscale:function(){var i=this.get("fill");if(i){this.set("overlayFill",new d.Color(i).toGrayscale().toRgb())}return this},complexity:function(){return 0},toJSON:function(){return this.toObject()},setGradientFill:function(i,q){this.set("fill",d.Gradient.forObject(this,i,q))},animate:function(q,s,i){var r=this;if(!("from" in i)){i.from=this.get(q)}if(/[+-]/.test(s.charAt(0))){s=this.get(q)+parseFloat(s)}d.util.animate({startValue:i.from,endValue:s,duration:i.duration,onChange:function(t){r.set(q,t);i.onChange&&i.onChange()},onComplete:function(){r.setCoords();i.onComplete&&i.onComplete()}})}});d.Object.prototype.rotate=d.Object.prototype.setAngle;var j=d.Object.prototype;for(var g=j.stateProperties.length;g--;){var h=j.stateProperties[g],e=h.charAt(0).toUpperCase()+h.slice(1),f="set"+e,n="get"+e;if(!j[n]){j[n]=(function(i){return new Function('return this.get("'+i+'")')})(h)}if(!j[f]){j[f]=(function(i){return new Function("value",'return this.set("'+i+'", value)')})(h)}}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),e=c.util.object.extend,d=c.Object.prototype.set,a={x1:1,x2:1,y1:1,y2:1};if(c.Line){c.warn("fabric.Line is already defined");return}c.Line=c.util.createClass(c.Object,{type:"line",initialize:function(g,f){if(!g){g=[0,0,0,0]}this.callSuper("initialize",f);this.set("x1",g[0]);this.set("y1",g[1]);this.set("x2",g[2]);this.set("y2",g[3]);this._setWidthHeight()},_setWidthHeight:function(){this.set("width",(this.x2-this.x1)||1);this.set("height",(this.y2-this.y1)||1);this.set("left",this.x1+this.width/2);this.set("top",this.y1+this.height/2)},set:function(f,g){d.call(this,f,g);if(f in a){this._setWidthHeight()}return this},_render:function(f){f.beginPath();f.moveTo(this.width===1?0:(-this.width/2),this.height===1?0:(-this.height/2));f.lineTo(this.width===1?0:(this.width/2),this.height===1?0:(this.height/2));f.lineWidth=this.strokeWidth;var g=f.strokeStyle;f.strokeStyle=f.fillStyle;f.stroke();f.strokeStyle=g},complexity:function(){return 1},toObject:function(){return e(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}});c.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");c.Line.fromElement=function(g,f){var i=c.parseAttributes(g,c.Line.ATTRIBUTE_NAMES);var h=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new c.Line(h,e(i,f))};c.Line.fromObject=function(f){var g=[f.x1,f.y1,f.x2,f.y2];return new c.Line(g,f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),d=Math.PI*2,e=b.util.object.extend;if(b.Circle){b.warn("fabric.Circle is already defined.");return}b.Circle=b.util.createClass(b.Object,{type:"circle",initialize:function(f){f=f||{};this.set("radius",f.radius||0);this.callSuper("initialize",f);var g=this.get("radius")*2*this.get("scaleX");this.set("width",g).set("height",g)},toObject:function(){return e(this.callSuper("toObject"),{radius:this.get("radius")})},toSVG:function(){return('')},_render:function(f,g){f.beginPath();f.globalAlpha*=this.opacity;f.arc(g?this.left:0,g?this.top:0,this.radius,0,d,false);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},complexity:function(){return 1}});b.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Circle.fromElement=function(g,f){f||(f={});var h=b.parseAttributes(g,b.Circle.ATTRIBUTE_NAMES);if(!c(h)){throw Error("value of `r` attribute is required and can not be negative")}if("left" in h){h.left-=(f.width/2)||0}if("top" in h){h.top-=(f.height/2)||0}return new b.Circle(e(h,f))};function c(f){return(("radius" in f)&&(f.radius>0))}b.Circle.fromObject=function(f){return new b.Circle(f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Triangle){b.warn("fabric.Triangle is already defined");return}b.Triangle=b.util.createClass(b.Object,{type:"triangle",initialize:function(c){c=c||{};this.callSuper("initialize",c);this.set("width",c.width||100).set("height",c.height||100)},_render:function(c){var d=this.width/2,e=this.height/2;c.beginPath();c.moveTo(-d,e);c.lineTo(0,-e);c.lineTo(d,e);c.closePath();if(this.fill){c.fill()}if(this.stroke){c.stroke()}},complexity:function(){return 1},toSVG:function(){var c=this.width/2,d=this.height/2;var e=[-c+" "+d,"0 "+-d,c+" "+d].join(",");return''}});b.Triangle.fromObject=function(c){return new b.Triangle(c)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),c=Math.PI*2,d=b.util.object.extend;if(b.Ellipse){b.warn("fabric.Ellipse is already defined.");return}b.Ellipse=b.util.createClass(b.Object,{type:"ellipse",initialize:function(e){e=e||{};this.callSuper("initialize",e);this.set("rx",e.rx||0);this.set("ry",e.ry||0);this.set("width",this.get("rx")*2);this.set("height",this.get("ry")*2)},toObject:function(){return d(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,f){if(this.rx===0||this.ry===0){return}return this.callSuper("render",e,f)},_render:function(e,f){e.beginPath();e.save();e.globalAlpha*=this.opacity;e.transform(1,0,0,this.ry/this.rx,0,0);e.arc(f?this.left:0,f?this.top:0,this.rx,0,c,false);if(this.stroke){e.stroke()}if(this.fill){e.fill()}e.restore()},complexity:function(){return 1}});b.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Ellipse.fromElement=function(f,e){e||(e={});var g=b.parseAttributes(f,b.Ellipse.ATTRIBUTE_NAMES);if("left" in g){g.left-=(e.width/2)||0}if("top" in g){g.top-=(e.height/2)||0}return new b.Ellipse(d(g,e))};b.Ellipse.fromObject=function(e){return new b.Ellipse(e)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={});if(c.Rect){console.warn("fabric.Rect is already defined");return}c.Rect=c.util.createClass(c.Object,{type:"rect",options:{rx:0,ry:0},initialize:function(d){this._initStateProperties();this.callSuper("initialize",d);this._initRxRy()},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){if(this.rx&&!this.ry){this.ry=this.rx}else{if(this.ry&&!this.rx){this.rx=this.ry}}},_render:function(f){var j=this.rx||0,i=this.ry||0,d=-this.width/2,k=-this.height/2,e=this.width,g=this.height;f.beginPath();f.globalAlpha*=this.opacity;if(this.group){f.translate(this.x||0,this.y||0)}f.moveTo(d+j,k);f.lineTo(d+e-j,k);f.bezierCurveTo(d+e,k,d+e,k+i,d+e,k+i);f.lineTo(d+e,k+g-i);f.bezierCurveTo(d+e,k+g,d+e-j,k+g,d+e-j,k+g);f.lineTo(d+j,k+g);f.bezierCurveTo(d,k+g,d,k+g-i,d,k+g-i);f.lineTo(d,k+i);f.bezierCurveTo(d,k,d+j,k,d+j,k);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},_normalizeLeftTopProperties:function(d){if(d.left){this.set("left",d.left+this.getWidth()/2)}this.set("x",d.left||0);if(d.top){this.set("top",d.top+this.getHeight()/2)}this.set("y",d.top||0);return this},complexity:function(){return 1},toSVG:function(){return''}});c.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");function a(d){d.left=d.left||0;d.top=d.top||0;return d}c.Rect.fromElement=function(e,d){if(!e){return null}var g=c.parseAttributes(e,c.Rect.ATTRIBUTE_NAMES);g=a(g);var f=new c.Rect(c.util.object.extend((d?c.util.object.clone(d):{}),g));f._normalizeLeftTopProperties(g);return f};c.Rect.fromObject=function(d){return new c.Rect(d)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),a=c.util.toFixed;if(c.Polyline){c.warn("fabric.Polyline is already defined");return}c.Polyline=c.util.createClass(c.Object,{type:"polyline",initialize:function(e,d){d=d||{};this.set("points",e);this.callSuper("initialize",d);this._calcDimensions()},_calcDimensions:function(){return c.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return c.Polygon.prototype.toObject.call(this)},toSVG:function(){var f=[];for(var e=0,d=this.points.length;e"].join("")},_render:function(f){var e;f.beginPath();for(var g=0,d=this.points.length;g"].join("")},_render:function(l){var k;l.beginPath();for(var m=0,j=this.points.length;m1){E=Math.sqrt(E);O*=E;N*=E}var R=aa/O;var Q=W/O;var D=(-W)/N;var C=(aa)/N;var H=R*M+Q*L;var q=D*M+C*L;var F=R*T+Q*S;var ab=D*T+C*S;var Z=(F-H)*(F-H)+(ab-q)*(ab-q);var U=1/Z-0.25;if(U<0){U=0}var w=Math.sqrt(U);if(P==J){w=-w}var V=0.5*(H+F)-w*(ab-q);var K=0.5*(q+ab)+w*(F-H);var v=Math.atan2(q-K,H-V);var u=Math.atan2(ab-K,F-V);var Y=u-v;if(Y<0&&P==1){Y+=2*Math.PI}else{if(Y>0&&P==0){Y-=2*Math.PI}}var B=Math.ceil(Math.abs(Y/(Math.PI*0.5+0.001)));var I=[];for(var X=0;X"},toObject:function(){var q=g(this.callSuper("toObject"),{path:this.path});if(this.sourcePath){q.sourcePath=this.sourcePath}if(this.transformMatrix){q.transformMatrix=this.transformMatrix}return q},toDatalessObject:function(){var q=this.toObject();if(this.sourcePath){q.path=this.sourcePath}delete q.sourcePath;return q},toSVG:function(){var t=[];for(var r=0,q=this.path.length;r',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var C=[],z,v,y;for(var u=0,t,q,w=this.path.length;uB){for(var r=1,x=q.length;r"];for(var l=0,j=m.length;l");return k.join("")},toString:function(){return"#"},isSameColor:function(){var j=this.getObjects()[0].get("fill");return this.getObjects().every(function(k){return k.get("fill")===j})},complexity:function(){return this.paths.reduce(function(j,k){return j+((k&&k.complexity)?k.complexity():0)},0)},toGrayscale:function(){var j=this.paths.length;while(j--){this.paths[j].toGrayscale()}return this},getObjects:function(){return this.paths}});function c(m){for(var l=0,j=m.length;l"},getObjects:function(){return this.objects},add:function(h){this._restoreObjectsState();this.objects.push(h);h.setActive(true);this._calcBounds();this._updateObjectsCoords();return this},remove:function(h){this._restoreObjectsState();f(this.objects,h);h.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},size:function(){return this.getObjects().length},set:function(h,k){if(typeof k=="function"){this.set(h,k(this[h]))}else{if(h==="fill"||h==="opacity"){var j=this.objects.length;this[h]=k;while(j--){this.objects[j].set(h,k)}}else{this[h]=k}}return this},contains:function(h){return this.objects.indexOf(h)>-1},toObject:function(){return g(this.callSuper("toObject"),{objects:b(this.objects,"clone")})},render:function(j){j.save();this.transform(j);var n=Math.max(this.scaleX,this.scaleY);for(var l=0,h=this.objects.length,k;k=this.objects[l];l++){var m=k.borderScaleFactor;k.borderScaleFactor=n;k.render(j);k.borderScaleFactor=m}this.hideBorders||this.drawBorders(j);this.hideCorners||this.drawCorners(j);j.restore();this.setCoords()},item:function(h){return this.getObjects()[h]},complexity:function(){return this.getObjects().reduce(function(i,h){i+=(typeof h.complexity=="function")?h.complexity():0;return i},0)},_restoreObjectsState:function(){this.objects.forEach(this._restoreObjectState,this);return this},_restoreObjectState:function(j){var l=this.get("left"),m=this.get("top"),h=this.getAngle()*(Math.PI/180),k=j.get("originalLeft"),n=j.get("originalTop"),i=Math.cos(h)*j.get("top")+Math.sin(h)*j.get("left"),o=-Math.sin(h)*j.get("top")+Math.cos(h)*j.get("left");j.setAngle(j.getAngle()+this.getAngle());j.set("left",l+o*this.get("scaleX"));j.set("top",m+i*this.get("scaleY"));j.set("scaleX",j.get("scaleX")*this.get("scaleX"));j.set("scaleY",j.get("scaleY")*this.get("scaleY"));j.setCoords();j.hideCorners=false;j.setActive(false);j.setCoords();return this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){this._originalLeft=this.get("left");this._originalTop=this.get("top");return this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){this.forEachObject(function(h){h.setCoords()});return this},activateAllObjects:function(){return this.setActive(true)},setActive:function(h){this.forEachObject(function(i){i.setActive(h)});return this},forEachObject:e.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var j=this.getObjects(),i=j[0]?j[0].get("opacity"):1;var h=j.every(function(k){return k.get("opacity")===i});if(h){this.opacity=i}},_calcBounds:function(){var s=[],q=[],p,n,k,h,m,l,u,r=0,t=this.objects.length;for(;ri.x&&j-hi.y},toGrayscale:function(){var h=this.objects.length;while(h--){this.objects[h].toGrayscale()}}});e.Group.fromObject=function(h){return new e.Group(h.objects,h)}})(typeof exports!="undefined"?exports:this);(function(a){var b=fabric.util.object.extend;if(!a.fabric){a.fabric={}}if(a.fabric.Image){fabric.warn("fabric.Image is already defined.");return}if(!fabric.Object){fabric.warn("fabric.Object is required for fabric.Image initialization");return}fabric.Image=fabric.util.createClass(fabric.Object,{active:false,bordervisibility:false,cornervisibility:false,type:"image",filters:[],initialize:function(d,c){c||(c={});this.callSuper("initialize",c);this._initElement(d);this._originalImage=this.getElement();this._initConfig(c);if(c.filters){this.filters=c.filters;this.applyFilters()}},getElement:function(){return this._element},setElement:function(c){this._element=c;this._initConfig();return this},getOriginalSize:function(){var c=this.getElement();return{width:c.width,height:c.height}},setBorderVisibility:function(c){this._resetWidthHeight();this._adjustWidthHeightToBorders(showBorder);this.setCoords()},setCornersVisibility:function(c){this.cornervisibility=!!c},render:function(c,d){c.save();if(!d){this.transform(c)}this._render(c);if(this.active&&!d){this.drawBorders(c);this.hideCorners||this.drawCorners(c)}c.restore()},toObject:function(){return b(this.callSuper("toObject"),{src:this._originalImage.src||this._originalImage._src,filters:this.filters.concat()})},toSVG:function(){return''},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(c){this.constructor.fromObject(this.toObject(),c)},applyFilters:function(i){if(this.filters.length===0){this.setElement(this._originalImage);i&&i();return}var c=typeof Buffer!=="undefined"&&typeof window==="undefined",g=this._originalImage,e=fabric.document.createElement("canvas"),f=c?new (require("canvas").Image):fabric.document.createElement("img"),h=this;if(!e.getContext&&typeof G_vmlCanvasManager!="undefined"){G_vmlCanvasManager.initElement(e)}e.width=g.width;e.height=g.height;e.getContext("2d").drawImage(g,0,0);this.filters.forEach(function(j){j&&j.applyTo(e)});f.onload=function(){h.setElement(f);i&&i();f.onload=e=g=null};f.width=g.width;f.height=g.height;if(c){var d=e.toDataURL("image/png").replace(/data:image\/png;base64,/,"");f.src=new Buffer(d,"base64");h.setElement(f);i&&i()}else{f.src=e.toDataURL("image/png")}return this},_render:function(d){var c=this.getOriginalSize();d.drawImage(this.getElement(),-c.width/2,-c.height/2,c.width,c.height)},_adjustWidthHeightToBorders:function(c){if(c){this.currentBorder=this.borderwidth;this.width+=(2*this.currentBorder);this.height+=(2*this.currentBorder)}else{this.currentBorder=0}},_resetWidthHeight:function(){var c=this.getElement();this.set("width",c.width);this.set("height",c.height)},_initElement:function(c){this.setElement(fabric.util.getById(c));fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(c){this.setOptions(c||{});this._setBorder();this._setWidthHeight()},_initFilters:function(c){if(c.filters&&c.filters.length){this.filters=c.filters.map(function(d){return fabric.Image.filters[d.type].fromObject(d)})}},_setBorder:function(){if(this.bordervisibility){this.currentBorder=this.borderwidth}else{this.currentBorder=0}},_setWidthHeight:function(){var c=2*this.currentBorder;this.width=(this.getElement().width||0)+c;this.height=(this.getElement().height||0)+c},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc;fabric.Image.fromObject=function(d,f){var c=fabric.document.createElement("img"),e=d.src;if(d.width){c.width=d.width}if(d.height){c.height=d.height}c.onload=function(){fabric.Image.prototype._initFilters.call(d,d);var g=new fabric.Image(c,d);f&&f(g);c=c.onload=null};c.src=e};fabric.Image.fromURL=function(d,f,e){var c=fabric.document.createElement("img");c.onload=function(){if(f){f(new fabric.Image(c,e))}c=c.onload=null};c.src=d};fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" ");fabric.Image.fromElement=function(d,f,c){c||(c={});var e=fabric.parseAttributes(d,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(e["xlink:href"],f,b(e,c))};fabric.Image.async=true})(typeof exports!="undefined"?exports:this);fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var a=this.get("angle");if(a>-225&&a<=-135){return -180}else{if(a>-135&&a<=-45){return -90}else{if(a>-45&&a<=45){return 0}else{if(a>45&&a<=135){return 90}else{if(a>135&&a<=225){return 180}else{if(a>225&&a<=315){return 270}else{if(a>315){return 360}}}}}}}return 0},straighten:function(){var a=this._getAngleValueForStraighten();this.setAngle(a);return this},fxStraighten:function(b){b=b||{};var c=function(){},d=b.onComplete||c,a=b.onChange||c,e=this;fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(f){e.setAngle(f);a()},onComplete:function(){e.setCoords();d()},onStart:function(){e.setActive(false)}});return this}});fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(a){a.straighten();this.renderAll();return this},fxStraightenObject:function(a){a.fxStraighten({onChange:this.renderAll.bind(this)});return this}});fabric.Image.filters={};fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(d){var c=d.getContext("2d"),a=c.getImageData(0,0,d.width,d.height),h=a.data,e=a.width,l=a.height,k,b,g,f;for(g=0;gh&&m>h&&o>h&&p(a-m)'},_render:function(f){var h=Cufon.textOptions||(Cufon.textOptions={});h.left=this.left;h.top=this.top;h.context=f;h.color=this.fill;var g=this._initDummyElement();this.transform(f);Cufon.replaceElement(g,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor});this.width=h.width;this.height=h.height;this._totalLineHeight=h.totalLineHeight;this._fontAscent=h.fontAscent;this._boundaries=h.boundaries;this._shadowOffsets=h.shadowOffsets;this._shadows=h.shadows||[];this.setCoords()},_initDummyElement:function(){var g=c.document.createElement("pre"),f=c.document.createElement("div");f.appendChild(g);if(typeof G_vmlCanvasManager=="undefined"){g.innerHTML=this.text}else{g.innerText=this.text.replace(/\r?\n/gi,"\r")}g.style.fontSize=this.fontSize+"px";g.style.letterSpacing="normal";return g},render:function(f,g){f.save();this._render(f);if(!g&&this.active){this.drawBorders(f);this.hideCorners||this.drawCorners(f)}f.restore()},toObject:function(){return e(this.callSuper("toObject"),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor})},toSVG:function(){var i=this.text.split(/\r?\n/),j=-this._fontAscent-((this._fontAscent/5)*this.lineHeight),g=-(this.width/2),f=(this.height/2)-(i.length*this.fontSize)-this._totalLineHeight,h=this._getSVGTextAndBg(j,g,i),k=this._getSVGShadows(j,i);f+=((this._fontAscent/5)*this.lineHeight);return['',h.textBgRects.join(""),"',k.join(""),h.textSpans.join(""),"",""].join("")},_getSVGShadows:function(h,n){var o=[],k,l,p,g,f=1;for(k=0,p=this._shadows.length;k",c.util.string.escapeXml(n[l]),"");f=1}else{f++}}}return o},_getSVGTextAndBg:function(j,h,n){var g=[],k=[],l,m,o,f=1;for(l=0,o=n.length;l",c.util.string.escapeXml(n[l]),"");f=1}else{f++}if(!this.backgroundColor){continue}k.push("')}return{textSpans:g,textBgRects:k}},_getFillAttributes:function(f){var g=f?new c.Color(f):"";if(!g||!g.getSource()||g.getAlpha()===1){return'fill="'+f+'"'}return'opacity="'+g.getAlpha()+'" fill="'+g.setAlpha(1).toRgb()+'"'},setColor:function(f){this.set("fill",f);return this},setFontsize:function(f){this.set("fontSize",f);this.setCoords();return this},getText:function(){return this.text},setText:function(f){this.set("text",f);this.setCoords();return this},set:function(f,g){if(typeof f=="object"){for(var h in f){this.set(h,f[h])}}else{this[f]=g;if(f==="fontFamily"&&this.path){this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+g+"$3")}}return this}});c.Text.fromObject=function(f){return new c.Text(f.text,d(f))};c.Text.fromElement=function(f){}})(typeof exports!="undefined"?exports:this);(function(){if(typeof document!="undefined"&&typeof window!="undefined"){return}var XML=require("o3-xml"),URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;function request(url,encoding,callback){var oURL=URL.parse(url),client=HTTP.createClient(80,oURL.hostname),request=client.request("GET",oURL.pathname,{host:oURL.hostname});client.addListener("error",function(err){if(err.errno===process.ECONNREFUSED){fabric.log("ECONNREFUSED: connection refused to "+client.host+":"+client.port)}else{fabric.log(err.message)}});request.end();request.on("response",function(response){var body="";if(encoding){response.setEncoding(encoding)}response.on("end",function(){callback(body)});response.on("data",function(chunk){if(response.statusCode==200){body+=chunk}})})}fabric.util.loadImage=function(url,callback){request(url,"binary",function(body){var img=new Image();img.src=new Buffer(body,"binary");img._src=url;callback(img)})};fabric.loadSVGFromURL=function(url,callback){url=url.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();request(url,"",function(body){var doc=XML.parseFromString(body);fabric.parseSVGDocument(doc.documentElement,function(results,options){callback(results,options)})})};fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body);callback&&callback()})};fabric.Image.fromObject=function(object,callback){fabric.util.loadImage(object.src,function(img){var oImg=new fabric.Image(img);oImg._initConfig(object);oImg._initFilters(object);callback(oImg)})};fabric.createCanvasForNode=function(width,height){var canvasEl=fabric.document.createElement("canvas"),nodeCanvas=new Canvas(width||600,height||600);canvasEl.style={};canvasEl.width=nodeCanvas.width;canvasEl.height=nodeCanvas.height;var canvas=fabric.Canvas||fabric.StaticCanvas;var fabricCanvas=new canvas(canvasEl);fabricCanvas.contextContainer=nodeCanvas.getContext("2d");fabricCanvas.nodeCanvas=nodeCanvas;return fabricCanvas};fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};if(fabric.Canvas){fabric.Canvas.prototype.createPNGStream}var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(width){origSetWidth.call(this);this.nodeCanvas.width=width;return this};if(fabric.Canvas){fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth}var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(height){origSetHeight.call(this);this.nodeCanvas.height=height;return this};if(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 b4d46500940b54c66f8ed62a19fe150735dc5e4c..cc319fcad7180d608ed396159236878b0d988325 100644 GIT binary patch delta 36005 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 delta 36062 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", +{ + "name": "fabric", + "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", + "version": "0.8.2", + "author": "Juriy Zaytsev ", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "repository": "git://github.com/kangax/fabric.js", "licenses": [{ @@ -11,12 +11,12 @@ }], "scripts": { "build": "node build.js modules=ALL" - }, + }, "dependencies": { "canvas": ">=0.8.1", - "jsdom": ">=0.2.3", + "jsdom": ">=0.2.3", "o3-xml": "0.1.0" - }, + }, "engines": { "node": ">= 0.4.0 && <= 0.6.8" }, "main": "./dist/all.js" } \ No newline at end of file diff --git a/src/canvas.animation.js b/src/canvas.animation.js index 5659b699..4dc06775 100644 --- a/src/canvas.animation.js +++ b/src/canvas.animation.js @@ -1,5 +1,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { - + + FX_DURATION: 500, + /** * Centers object horizontally with animation. * @method fxCenterObjectH @@ -68,20 +70,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { return this; }, - /** - * Same as `fabric.Canvas#straightenObject`, but animated - * @method fxStraightenObject - * @param {fabric.Object} object Object to straighten - * @return {fabric.Canvas} thisArg - * @chainable - */ - fxStraightenObject: function (object) { - object.fxStraighten({ - onChange: this.renderAll.bind(this) - }); - return this; - }, - /** * Same as `fabric.Canvas#remove` but animated * @method fxRemove @@ -90,17 +78,32 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { * @return {fabric.Canvas} thisArg * @chainable */ - fxRemove: function (object, callback) { - var _this = this; - object.fxRemove({ - onChange: this.renderAll.bind(this), + fxRemove: function (object, callbacks) { + callbacks = callbacks || { }; + + var empty = function() { }, + onComplete = callbacks.onComplete || empty, + onChange = callbacks.onChange || empty, + _this = this; + + fabric.util.animate({ + startValue: object.get('opacity'), + endValue: 0, + duration: this.FX_DURATION, + onStart: function() { + object.setActive(false); + }, + onChange: function(value) { + object.set('opacity', value); + _this.renderAll(); + onChange(); + }, onComplete: function () { _this.remove(object); - if (typeof callback === 'function') { - callback(); - } + onComplete(); } }); + return this; } }); \ No newline at end of file diff --git a/src/object.class.js b/src/object.class.js index 8488ad99..4ddfe180 100644 --- a/src/object.class.js +++ b/src/object.class.js @@ -40,12 +40,6 @@ */ NUM_FRACTION_DIGITS: 2, - /** - * @constant - * @type Number - */ - FX_DURATION: 500, - /** * @constant * @type Number @@ -1185,106 +1179,6 @@ return 0; }, - /** - * @method straighten - * @return {fabric.Object} thisArg - * @chainable - */ - straighten: function() { - var angle = this._getAngleValueForStraighten(); - this.setAngle(angle); - return this; - }, - - /** - * @method fxStraighten - * @param {Object} callbacks - * - onComplete: invoked on completion - * - onChange: invoked on every step of animation - * - * @return {fabric.Object} thisArg - * @chainable - */ - fxStraighten: function(callbacks) { - callbacks = callbacks || { }; - - var empty = function() { }, - onComplete = callbacks.onComplete || empty, - onChange = callbacks.onChange || empty, - _this = this; - - fabric.util.animate({ - startValue: this.get('angle'), - endValue: this._getAngleValueForStraighten(), - duration: this.FX_DURATION, - onChange: function(value) { - _this.setAngle(value); - onChange(); - }, - onComplete: function() { - _this.setCoords(); - onComplete(); - }, - onStart: function() { - _this.setActive(false); - } - }); - - return this; - }, - - /** - * @method fxRemove - * @param {Object} callbacks - * @return {fabric.Object} thisArg - * @chainable - */ - fxRemove: function(callbacks) { - callbacks || (callbacks = { }); - - var empty = function() { }, - onComplete = callbacks.onComplete || empty, - onChange = callbacks.onChange || empty, - _this = this; - - fabric.util.animate({ - startValue: this.get('opacity'), - endValue: 0, - duration: this.FX_DURATION, - onChange: function(value) { - _this.set('opacity', value); - onChange(); - }, - onComplete: onComplete, - onStart: function() { - _this.setActive(false); - } - }); - - return this; - }, - - /** - * @method _getAngleValueForStraighten - * @return {Number} angle value - * @private - */ - _getAngleValueForStraighten: function() { - var angle = this.get('angle'); - - // TODO (kangax): can this be simplified? - - if (angle > -225 && angle <= -135) { return -180; } - else if (angle > -135 && angle <= -45) { return -90; } - else if (angle > -45 && angle <= 45) { return 0; } - else if (angle > 45 && angle <= 135) { return 90; } - else if (angle > 135 && angle <= 225 ) { return 180; } - else if (angle > 225 && angle <= 315) { return 270; } - else if (angle > 315) { return 360; } - - return 0; - }, - /** * Returns a JSON representation of an instance * @method toJSON diff --git a/src/object_straightening.js b/src/object_straightening.js new file mode 100644 index 00000000..6ca7e1dc --- /dev/null +++ b/src/object_straightening.js @@ -0,0 +1,101 @@ +fabric.util.object.extend(fabric.Object.prototype, { + + /** + * @method _getAngleValueForStraighten + * @return {Number} angle value + * @private + */ + _getAngleValueForStraighten: function() { + var angle = this.get('angle'); + + // TODO (kangax): can this be simplified? + + if (angle > -225 && angle <= -135) { return -180; } + else if (angle > -135 && angle <= -45) { return -90; } + else if (angle > -45 && angle <= 45) { return 0; } + else if (angle > 45 && angle <= 135) { return 90; } + else if (angle > 135 && angle <= 225 ) { return 180; } + else if (angle > 225 && angle <= 315) { return 270; } + else if (angle > 315) { return 360; } + + return 0; + }, + + /** + * @method straighten + * @return {fabric.Object} thisArg + * @chainable + */ + straighten: function() { + var angle = this._getAngleValueForStraighten(); + this.setAngle(angle); + return this; + }, + + /** + * @method fxStraighten + * @param {Object} callbacks + * - onComplete: invoked on completion + * - onChange: invoked on every step of animation + * + * @return {fabric.Object} thisArg + * @chainable + */ + fxStraighten: function(callbacks) { + callbacks = callbacks || { }; + + var empty = function() { }, + onComplete = callbacks.onComplete || empty, + onChange = callbacks.onChange || empty, + _this = this; + + fabric.util.animate({ + startValue: this.get('angle'), + endValue: this._getAngleValueForStraighten(), + duration: this.FX_DURATION, + onChange: function(value) { + _this.setAngle(value); + onChange(); + }, + onComplete: function() { + _this.setCoords(); + onComplete(); + }, + onStart: function() { + _this.setActive(false); + } + }); + + return this; + } +}); + +fabric.util.object.extend(fabric.StaticCanvas.prototype, { + + /** + * Straightens object, then rerenders canvas + * @method straightenObject + * @param {fabric.Object} object Object to straighten + * @return {fabric.Canvas} thisArg + * @chainable + */ + straightenObject: function (object) { + object.straighten(); + this.renderAll(); + return this; + }, + + /** + * Same as `fabric.Canvas#straightenObject`, but animated + * @method fxStraightenObject + * @param {fabric.Object} object Object to straighten + * @return {fabric.Canvas} thisArg + * @chainable + */ + fxStraightenObject: function (object) { + object.fxStraighten({ + onChange: this.renderAll.bind(this) + }); + return this; + } +}); \ No newline at end of file diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index e105160f..78118ed3 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -649,19 +649,6 @@ return this.centerObjectH(object).centerObjectV(object); }, - /** - * Straightens object, then rerenders canvas - * @method straightenObject - * @param {fabric.Object} object Object to straighten - * @return {fabric.Canvas} thisArg - * @chainable - */ - straightenObject: function (object) { - object.straighten(); - this.renderAll(); - return this; - }, - /** * Returs dataless JSON representation of canvas * @method toDatalessJSON