diff --git a/dist/all.js b/dist/all.js index 428f1a74..865c7b51 100644 --- a/dist/all.js +++ b/dist/all.js @@ -5732,6 +5732,7 @@ fabric.util.animate = animate; (function(){ var fabric = this.fabric || (this.fabric = { }), + piBy2 = Math.PI * 2, extend = fabric.util.object.extend; if (fabric.Ellipse) { @@ -5788,11 +5789,11 @@ fabric.util.animate = animate; * @method _render * @param ctx {CanvasRenderingContext2D} context to render on */ - _render: function(ctx) { + _render: function(ctx, noTransform) { ctx.beginPath(); ctx.save(); ctx.transform(1, 0, 0, this.ry/this.rx, 0, 0); - ctx.arc(0, 0, this.rx, 0, Math.PI * 2, false); + ctx.arc(noTransform ? this.left : 0, noTransform ? this.top : 0, this.rx, 0, piBy2, false); ctx.restore(); if (this.stroke) { ctx.stroke(); diff --git a/dist/all.min.js b/dist/all.min.js index e76d8564..a20176e5 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,167 +1,167 @@ var console=console||{log:function(){},warn:function(){}},fabric=fabric||{version:0.1};if(!this.JSON)this.JSON={}; -(function(){function k(g){return g<10?"0"+g:g}function p(g){h.lastIndex=0;return h.test(g)?'"'+g.replace(h,function(o){var q=a[o];return typeof q==="string"?q:"\\u"+("0000"+o.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+g+'"'}function d(g,o){var q,r,u,x,t=e,v,w=o[g];if(w&&typeof w==="object"&&typeof w.toJSON==="function")w=w.toJSON(g);if(typeof c==="function")w=c.call(o,g,w);switch(typeof w){case "string":return p(w);case "number":return isFinite(w)?String(w):"null";case "boolean":case "null":return String(w); -case "object":if(!w)return"null";e+=b;v=[];if(Object.prototype.toString.apply(w)==="[object Array]"){x=w.length;for(q=0;q>>0;e=Number(e)||0;e=Math[e<0?"ceil":"floor"](e);if(e<0)e+=b;for(;e>>0;b>>0;a>>0;b>>0;b>>0;c>>0,b=0,a;if(arguments.length>1)a=arguments[1];else{do{if(b in this){a=this[b++];break}if(++b>=e)throw new TypeError;}while(1)}for(;b=a)a=h[b][e]}else for(;b--;)if(h[b]>=a)a=h[b];return a}};d.util.object={extend:k,clone:function(h){return k({},h)}};if(!String.prototype.trim)String.prototype.trim=function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")};d.util.string={camelize:function(h){return h.replace(/-+(.)?/g, -function(e,b){return b?b.toUpperCase():""})},capitalize:function(h){return h.charAt(0).toUpperCase()+h.slice(1).toLowerCase()}};if(!Function.prototype.bind)Function.prototype.bind=function(h){var e=this,b=m.call(arguments,1);return b.length?function(){return e.apply(h,b.concat(m.call(arguments)))}:function(){return e.apply(h,arguments)}};(function(){function h(){}var e;e=function(){for(var b in{toString:1})if(b==="toString")return false;return true}()?function(b,a){if(a.toString!==Object.prototype.toString)b.prototype.toString= -a.toString;if(a.valueOf!==Object.prototype.valueOf)b.prototype.valueOf=a.valueOf;for(var c in a)b.prototype[c]=a[c]}:function(b,a){for(var c in a)b.prototype[c]=a[c]};d.util.createClass=function(){function b(){this.initialize.apply(this,arguments)}var a=null,c=m.call(arguments,0);if(typeof c[0]==="function")a=c.shift();b.superclass=a;b.subclasses=[];if(a){h.prototype=a.prototype;b.prototype=new h;a.subclasses.push(b)}a=0;for(var g=c.length;a=0.9999?"":"alpha(opacity="+g*100+")";o.filter=o.filter.replace(b,g)}else o.filter+=" alpha(opacity="+g*100+")";return c};d.util.setStyle=function(c,g){var o=c.style;if(typeof g==="string"){c.style.cssText+=";"+g;return g.indexOf("opacity")>-1?a(c,g.match(/opacity:\s*(\d?\.?\d*)/)[1]):c}for(var q in g)if(q==="opacity")a(c,g[q]);else o[q==="float"||q==="cssFloat"?typeof o.styleFloat==="undefined"?"cssFloat":"styleFloat": -q]=g[q];return c}})();(function(){var h=document.documentElement.style,e="userSelect"in h?"userSelect":"MozUserSelect"in h?"MozUserSelect":"WebkitUserSelect"in h?"WebkitUserSelect":"KhtmlUserSelect"in h?"KhtmlUserSelect":"";d.util.makeElementUnselectable=function(b){if(typeof b.onselectstart!=="undefined")b.onselectstart=d.util.falseFunction;if(e)b.style[e]="none";else if(typeof b.unselectable=="string")b.unselectable="on";return b}})();(function(){function h(b,a){e.load(b);a()}d.util.getScript=function(b, -a){var c=document.getElementsByTagName("head")[0],g=document.createElement("script"),o=true;g.type="text/javascript";g.setAttribute("runat","server");g.onload=g.onreadystatechange=function(q){if(o)if(!(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")){o=false;a(q||window.event);g=g.onload=g.onreadystatechange=null}};g.src=b;c.appendChild(g)};var e=this.Jaxer;if(e&&e.load)d.util.getScript=h})();d.util.getById=function(h){return typeof h==="string"?document.getElementById(h): -h};d.util.toArray=function(h){for(var e=[],b=h.length;b--;)e[b]=h[b];return e};d.util.makeElement=p;d.util.addClass=function(h,e){if((" "+h.className+" ").indexOf(" "+e+" ")===-1)h.className+=(h.className?" ":"")+e};d.util.wrapElement=function(h,e,b){if(typeof e==="string")e=p(e,b);h.parentNode&&h.parentNode.replaceChild(e,h);e.appendChild(h);return e};d.util.getElementOffset=function(h){var e=0,b=0;do{e+=h.offsetTop||0;b+=h.offsetLeft||0;h=h.offsetParent}while(h);return{left:b,top:e}};d.util.animate= -function(h){h||(h={});var e=+new Date,b=h.duration||500,a=e+b,c,g,o=h.onChange||function(){},q=h.easing||function(v){return-Math.cos(v*Math.PI)/2+0.5},r="startValue"in h?h.startValue:0,u="endValue"in h?h.endValue:100,x=r>u;h.onStart&&h.onStart();var t=setInterval(function(){c=+new Date;g=c>a?1:(c-e)/b;o(x?r-(r-u)*q(g):r+(u-r)*q(g));if(c>a){clearInterval(t);h.onComplete&&h.onComplete()}},10)};(function(){function h(){}var e=function(){for(var b=[function(){return new ActiveXObject("Microsoft.XMLHTTP")}, -function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],a=b.length;a--;)try{if(b[a]())return b[a]}catch(c){}}();d.util.request=function(b,a){a||(a={});var c=a.method?a.method.toUpperCase():"GET",g=a.onComplete||function(){},o=e(),q;o.onreadystatechange=function(){if(o.readyState===4){g(o);o.onreadystatechange=h}};if(c==="GET"){q=null;if(typeof a.parameters=="string")b=b+(/\?/.test(b)?"&":"?")+a.parameters}o.open(c, +(function(){function k(h){return h<10?"0"+h:h}function p(h){g.lastIndex=0;return g.test(h)?'"'+h.replace(g,function(o){var q=a[o];return typeof q==="string"?q:"\\u"+("0000"+o.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+h+'"'}function e(h,o){var q,r,u,x,t=d,v,w=o[h];if(w&&typeof w==="object"&&typeof w.toJSON==="function")w=w.toJSON(h);if(typeof c==="function")w=c.call(o,h,w);switch(typeof w){case "string":return p(w);case "number":return isFinite(w)?String(w):"null";case "boolean":case "null":return String(w); +case "object":if(!w)return"null";d+=b;v=[];if(Object.prototype.toString.apply(w)==="[object Array]"){x=w.length;for(q=0;q>>0;d=Number(d)||0;d=Math[d<0?"ceil":"floor"](d);if(d<0)d+=b;for(;d>>0;b>>0;a>>0;b>>0;b>>0;c>>0,b=0,a;if(arguments.length>1)a=arguments[1];else{do{if(b in this){a=this[b++];break}if(++b>=d)throw new TypeError;}while(1)}for(;b=a)a=g[b][d]}else for(;b--;)if(g[b]>=a)a=g[b];return a}};e.util.object={extend:k,clone:function(g){return k({},g)}};if(!String.prototype.trim)String.prototype.trim=function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")};e.util.string={camelize:function(g){return g.replace(/-+(.)?/g, +function(d,b){return b?b.toUpperCase():""})},capitalize:function(g){return g.charAt(0).toUpperCase()+g.slice(1).toLowerCase()}};if(!Function.prototype.bind)Function.prototype.bind=function(g){var d=this,b=l.call(arguments,1);return b.length?function(){return d.apply(g,b.concat(l.call(arguments)))}:function(){return d.apply(g,arguments)}};(function(){function g(){}var d;d=function(){for(var b in{toString:1})if(b==="toString")return false;return true}()?function(b,a){if(a.toString!==Object.prototype.toString)b.prototype.toString= +a.toString;if(a.valueOf!==Object.prototype.valueOf)b.prototype.valueOf=a.valueOf;for(var c in a)b.prototype[c]=a[c]}:function(b,a){for(var c in a)b.prototype[c]=a[c]};e.util.createClass=function(){function b(){this.initialize.apply(this,arguments)}var a=null,c=l.call(arguments,0);if(typeof c[0]==="function")a=c.shift();b.superclass=a;b.subclasses=[];if(a){g.prototype=a.prototype;b.prototype=new g;a.subclasses.push(b)}a=0;for(var h=c.length;a=0.9999?"":"alpha(opacity="+h*100+")";o.filter=o.filter.replace(b,h)}else o.filter+=" alpha(opacity="+h*100+")";return c};e.util.setStyle=function(c,h){var o=c.style;if(typeof h==="string"){c.style.cssText+=";"+h;return h.indexOf("opacity")>-1?a(c,h.match(/opacity:\s*(\d?\.?\d*)/)[1]):c}for(var q in h)if(q==="opacity")a(c,h[q]);else o[q==="float"||q==="cssFloat"?typeof o.styleFloat==="undefined"?"cssFloat":"styleFloat": +q]=h[q];return c}})();(function(){var g=document.documentElement.style,d="userSelect"in g?"userSelect":"MozUserSelect"in g?"MozUserSelect":"WebkitUserSelect"in g?"WebkitUserSelect":"KhtmlUserSelect"in g?"KhtmlUserSelect":"";e.util.makeElementUnselectable=function(b){if(typeof b.onselectstart!=="undefined")b.onselectstart=e.util.falseFunction;if(d)b.style[d]="none";else if(typeof b.unselectable=="string")b.unselectable="on";return b}})();(function(){function g(b,a){d.load(b);a()}e.util.getScript=function(b, +a){var c=document.getElementsByTagName("head")[0],h=document.createElement("script"),o=true;h.type="text/javascript";h.setAttribute("runat","server");h.onload=h.onreadystatechange=function(q){if(o)if(!(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")){o=false;a(q||window.event);h=h.onload=h.onreadystatechange=null}};h.src=b;c.appendChild(h)};var d=this.Jaxer;if(d&&d.load)e.util.getScript=g})();e.util.getById=function(g){return typeof g==="string"?document.getElementById(g): +g};e.util.toArray=function(g){for(var d=[],b=g.length;b--;)d[b]=g[b];return d};e.util.makeElement=p;e.util.addClass=function(g,d){if((" "+g.className+" ").indexOf(" "+d+" ")===-1)g.className+=(g.className?" ":"")+d};e.util.wrapElement=function(g,d,b){if(typeof d==="string")d=p(d,b);g.parentNode&&g.parentNode.replaceChild(d,g);d.appendChild(g);return d};e.util.getElementOffset=function(g){var d=0,b=0;do{d+=g.offsetTop||0;b+=g.offsetLeft||0;g=g.offsetParent}while(g);return{left:b,top:d}};e.util.animate= +function(g){g||(g={});var d=+new Date,b=g.duration||500,a=d+b,c,h,o=g.onChange||function(){},q=g.easing||function(v){return-Math.cos(v*Math.PI)/2+0.5},r="startValue"in g?g.startValue:0,u="endValue"in g?g.endValue:100,x=r>u;g.onStart&&g.onStart();var t=setInterval(function(){c=+new Date;h=c>a?1:(c-d)/b;o(x?r-(r-u)*q(h):r+(u-r)*q(h));if(c>a){clearInterval(t);g.onComplete&&g.onComplete()}},10)};(function(){function g(){}var d=function(){for(var b=[function(){return new ActiveXObject("Microsoft.XMLHTTP")}, +function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],a=b.length;a--;)try{if(b[a]())return b[a]}catch(c){}}();e.util.request=function(b,a){a||(a={});var c=a.method?a.method.toUpperCase():"GET",h=a.onComplete||function(){},o=d(),q;o.onreadystatechange=function(){if(o.readyState===4){h(o);o.onreadystatechange=g}};if(c==="GET"){q=null;if(typeof a.parameters=="string")b=b+(/\?/.test(b)?"&":"?")+a.parameters}o.open(c, b,true);if(c==="POST"||c==="PUT")o.setRequestHeader("Content-Type","application/x-www-form-urlencoded");o.send(q);return o}})()})(this); -(function(){var k=this.fabric||(this.fabric={}),p=k.util.object.extend,d=k.util.string.capitalize,m=k.util.object.clone,h={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix"};k.parseTransformAttribute=function(){function e(q,r){var u=r[0];q[0]=Math.cos(u);q[1]=Math.sin(u);q[2]=-Math.sin(u);q[3]=Math.cos(u)}function b(q,r){var u=r.length===2?r[1]:r[0];q[0]=r[0];q[3]=u}function a(q,r){q[4]=r[0];if(r.length=== -2)q[5]=r[1]}var c=[1,0,0,1,0,0],g=RegExp("^\\s*(?:(?:(?:(?:(matrix)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))|(?:(translate)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(scale)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(rotate)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(skewX)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))|(?:(skewY)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\)))(?:(?:\\s+,?\\s*|,\\s*)(?:(?:(matrix)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))|(?:(translate)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(scale)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(rotate)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(skewX)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))|(?:(skewY)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))))*)?)\\s*$"), +(function(){var k=this.fabric||(this.fabric={}),p=k.util.object.extend,e=k.util.string.capitalize,l=k.util.object.clone,g={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix"};k.parseTransformAttribute=function(){function d(q,r){var u=r[0];q[0]=Math.cos(u);q[1]=Math.sin(u);q[2]=-Math.sin(u);q[3]=Math.cos(u)}function b(q,r){var u=r.length===2?r[1]:r[0];q[0]=r[0];q[3]=u}function a(q,r){q[4]=r[0];if(r.length=== +2)q[5]=r[1]}var c=[1,0,0,1,0,0],h=RegExp("^\\s*(?:(?:(?:(?:(matrix)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))|(?:(translate)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(scale)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(rotate)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(skewX)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))|(?:(skewY)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\)))(?:(?:\\s+,?\\s*|,\\s*)(?:(?:(matrix)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))|(?:(translate)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(scale)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(rotate)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(skewX)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))|(?:(skewY)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))))*)?)\\s*$"), o=RegExp("(?:(?:(matrix)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))|(?:(translate)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(scale)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(rotate)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(skewX)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))|(?:(skewY)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\)))"); -return function(q){var r=c.concat();if(!q||q&&!g.test(q))return r;q.replace(o,function(u){var x=RegExp("(?:(?:(matrix)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))|(?:(translate)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(scale)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(rotate)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))(?:\\s+,?\\s*|,\\s*)((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)))?\\s*\\))|(?:(skewX)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\))|(?:(skewY)\\s*\\(\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?))\\s*\\)))").exec(u).filter(function(t){return t!== -""&&t!=null});u=x[1];x=x.slice(2).map(parseFloat);switch(u){case "translate":a(r,x);break;case "rotate":e(r,x);break;case "scale":b(r,x);break;case "skewX":r[2]=x[0];break;case "skewY":r[1]=x[0];break;case "matrix":r=x;break}});return r}}();k.parseSVGDocument=function(){var e=/^(path|circle|polygon|polyline|ellipse|rect|line)$/,b=RegExp("^\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)+)\\s*,?\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)+)\\s*,?\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)+)\\s*,?\\s*((?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)+)\\s*$"); -return function(a,c){if(a){var g=k.util.toArray(a.getElementsByTagName("*")).filter(function(t){var v;if(v=e.test(t.tagName)){a:{for(t=t;t&&(t=t.parentNode);)if(t.nodeName==="pattern"){t=true;break a}t=false}v=!t}return v});if(!(!g||g&&!g.length)){var o=a.getAttribute("viewBox"),q=a.getAttribute("width"),r=a.getAttribute("height"),u=null,x=null;if(o&&(o=o.match(b))){parseInt(o[1],10);parseInt(o[2],10);u=parseInt(o[3],10);x=parseInt(o[4],10)}u=q?parseFloat(q):u;x=r?parseFloat(r):x;o={width:u,height:x}; -g=k.parseElements(g,m(o));!g||g&&!g.length||c&&c(g,o)}}}}();p(k,{parseAttributes:function(e,b){if(e){var a,c,g={};if(e.parentNode&&/^g$/i.test(e.parentNode.nodeName))g=k.parseAttributes(e.parentNode,b);var o=b.reduce(function(q,r){a=e.getAttribute(r);c=parseFloat(a);if(a){if((r==="fill"||r==="stroke")&&a==="none")a="";if(r==="fill-rule")a=a==="evenodd"?"destination-over":a;if(r==="transform")a=k.parseTransformAttribute(a);if(r in h)r=h[r];q[r]=isNaN(c)?a:c}return q},{});o=p(k.parseStyleAttribute(e), -o);return p(g,o)}},parseElements:function(e,b){var a=e.map(function(c){var g=k[d(c.tagName)];if(g&&g.fromElement)try{return g.fromElement(c,b)}catch(o){console.log(o.message||o)}});return a=a.filter(function(c){return c!=null})},parseStyleAttribute:function(e){var b={};if(e=e.getAttribute("style"))if(typeof e=="string"){e=e.split(";");e.pop();b=e.reduce(function(c,g){var o=g.split(":"),q=o[0].trim();o=o[1].trim();c[q]=o;return c},{})}else for(var a in e)if(typeof e[a]!=="undefined")b[a]=e[a];return b}, -parsePointsAttribute:function(e){if(!e)return null;e=e.trim();var b=e.indexOf(",")>-1;e=e.split(/\s+/);var a=[];if(b){b=0;for(var c=e.length;b0&&this.init(d,m)}var p=this.fabric||(this.fabric={});if(p.Point)console.warn("fabric.Point is already defined");else{k.prototype={constructor:k,init:function(d,m){this.x=d;this.y=m},add:function(d){return new k(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 k(this.x+d,this.y+d)},scalarAddEquals:function(d){this.x+=d;this.y+=d;return this},subtract:function(d){return new k(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 k(this.x-d,this.y-d)},scalarSubtractEquals:function(d){this.x-=d;this.y-=d;return this},multiply:function(d){return new k(this.x*d,this.y*d)},multiplyEquals:function(d){this.x*=d;this.y*=d;return this},divide:function(d){return new k(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.x< -d.x&&this.yd.x&&this.y>d.y},gte:function(d){return this.x>=d.x&&this.y>=d.y},lerp:function(d,m){return new k(this.x+(d.x-this.x)*m,this.y+(d.y-this.y)*m)},distanceFrom:function(d){var m=this.x-d.x;d=this.y-d.y;return Math.sqrt(m*m+d*d)},min:function(d){return new k(Math.min(this.x,d.x),Math.min(this.y,d.y))},max:function(d){return new k(Math.max(this.x,d.x),Math.max(this.y,d.y))},toString:function(){return this.x+ -","+this.y},setXY:function(d,m){this.x=d;this.y=m},setFromPoint:function(d){this.x=d.x;this.y=d.y},swap:function(d){var m=this.x,h=this.y;this.x=d.x;this.y=d.y;d.x=m;d.y=h}};p.Point=k}})(); -(function(){function k(d){arguments.length>0&&this.init(d)}var p=this.fabric||(this.fabric={});if(p.Intersection)console.warn("fabric.Intersection is already defined");else{k.prototype.init=function(d){this.status=d;this.points=[]};k.prototype.appendPoint=function(d){this.points.push(d)};k.prototype.appendPoints=function(d){this.points=this.points.concat(d)};k.intersectLineLine=function(d,m,h,e){var b,a=(e.x-h.x)*(d.y-h.y)-(e.y-h.y)*(d.x-h.x);b=(m.x-d.x)*(d.y-h.y)-(m.y-d.y)*(d.x-h.x);h=(e.y-h.y)* -(m.x-d.x)-(e.x-h.x)*(m.y-d.y);if(h!=0){a=a/h;b=b/h;if(0<=a&&a<=1&&0<=b&&b<=1){b=new k("Intersection");b.points.push(new p.Point(d.x+a*(m.x-d.x),d.y+a*(m.y-d.y)))}else b=new k("No Intersection")}else b=a==0||b==0?new k("Coincident"):new k("Parallel");return b};k.intersectLinePolygon=function(d,m,h){for(var e=new k("No Intersection"),b=h.length,a=0;a0)e.status="Intersection";return e};k.intersectPolygonPolygon= -function(d,m){for(var h=new k("No Intersection"),e=d.length,b=0;b0)h.status="Intersection";return h};k.intersectPolygonRectangle=function(d,m,h){var e=m.min(h),b=m.max(h);h=new p.Point(b.x,e.y);var a=new p.Point(e.x,b.y);m=k.intersectLinePolygon(e,h,d);h=k.intersectLinePolygon(h,b,d);b=k.intersectLinePolygon(b,a,d);d=k.intersectLinePolygon(a,e,d);e=new k("No Intersection");e.appendPoints(m.points); -e.appendPoints(h.points);e.appendPoints(b.points);e.appendPoints(d.points);if(e.points.length>0)e.status="Intersection";return e};p.Intersection=k}})(); -(function(){function k(d){d?this._tryParsingColor(d):this.setSource([0,0,0,1])}var p=this.fabric||(this.fabric={});if(p.Color)console.warn("fabric.Color is already defined.");else{p.Color=k;k.prototype._tryParsingColor=function(d){var m=k.sourceFromHex(d);m||(m=k.sourceFromRgb(d));m&&this.setSource(m)};k.prototype.getSource=function(){return this._source};k.prototype.setSource=function(d){this._source=d};k.prototype.toRgb=function(){var d=this.getSource();return"rgb("+d[0]+","+d[1]+","+d[2]+")"}; -k.prototype.toRgba=function(){var d=this.getSource();return"rgba("+d[0]+","+d[1]+","+d[2]+","+d[3]+")"};k.prototype.toHex=function(){var d=this.getSource(),m=d[0].toString(16);m=m.length==1?"0"+m:m;var h=d[1].toString(16);h=h.length==1?"0"+h:h;d=d[2].toString(16);d=d.length==1?"0"+d:d;return m.toUpperCase()+h.toUpperCase()+d.toUpperCase()};k.prototype.getAlpha=function(){return this.getSource()[3]};k.prototype.setAlpha=function(d){var m=this.getSource();m[3]=d;this.setSource(m);return this};k.prototype.toGrayscale= -function(){var d=this.getSource(),m=parseInt((d[0]*0.3+d[1]*0.59+d[2]*0.11).toFixed(0),10);this.setSource([m,m,m,d[3]]);return this};k.prototype.toBlackWhite=function(d){var m=this.getSource(),h=(m[0]*0.3+m[1]*0.59+m[2]*0.11).toFixed(0);m=m[3];d=d||127;h=Number(h)0?0:-l),f.ey-(n>0?0:-n),s,y);this.contextTop.lineWidth=this.selectionLineWidth;this.contextTop.strokeStyle=this.selectionBorderColor;this.contextTop.strokeRect(f.ex+0.5-(l>0?0:s),f.ey+0.5-(n>0?0:y),s,y)},_findSelectedObjects:function(){var f=[],l=this._groupSelector.ex,n=this._groupSelector.ey,s=l+this._groupSelector.left,y=n+this._groupSelector.top,z=new fabric.Point(w(l,s),w(n,y));n=new fabric.Point(A(l,s),A(n,y));s=0;for(y=this._objects.length;s1){f=new fabric.Group(f);this.setActiveGroup(f);f.saveCoords();e("group:selected",{target:f})}this.renderAll()},add:function(){this._objects.push.apply(this._objects,arguments);this.renderAll();return this},insertAt:function(f,l){this._objects.splice(l,0,f);this.renderAll();return this},getObjects:function(){return this._objects},getContext:function(){return this.contextTop}, -clearContext:function(f){f.clearRect(0,0,this._config.width,this._config.height);return this},clear:function(){this._objects.length=0;this.clearContext(this.contextTop);this.clearContext(this.contextContainer);this.renderAll();return this},renderAll:function(f){var l=this._config.width,n=this._config.height,s=f?this.contextTop:this.contextContainer;this.clearContext(this.contextTop);f||this.clearContext(s);s.fillStyle=this.backgroundColor;s.fillRect(0,0,l,n);f=this._objects.length;l=this.getActiveGroup(); -n=new Date;if(f)for(var y=0;y-1;d=d.split(/\s+/);var a=[];if(b){b=0;for(var c=d.length;b0&&this.init(e,l)}var p=this.fabric||(this.fabric={});if(p.Point)console.warn("fabric.Point is already defined");else{k.prototype={constructor:k,init:function(e,l){this.x=e;this.y=l},add:function(e){return new k(this.x+e.x,this.y+e.y)},addEquals:function(e){this.x+=e.x;this.y+=e.y;return this},scalarAdd:function(e){return new k(this.x+e,this.y+e)},scalarAddEquals:function(e){this.x+=e;this.y+=e;return this},subtract:function(e){return new k(this.x-e.x, +this.y-e.y)},subtractEquals:function(e){this.x-=e.x;this.y-=e.y;return this},scalarSubtract:function(e){return new k(this.x-e,this.y-e)},scalarSubtractEquals:function(e){this.x-=e;this.y-=e;return this},multiply:function(e){return new k(this.x*e,this.y*e)},multiplyEquals:function(e){this.x*=e;this.y*=e;return this},divide:function(e){return new k(this.x/e,this.y/e)},divideEquals:function(e){this.x/=e;this.y/=e;return this},eq:function(e){return this.x==e.x&&this.y==e.y},lt:function(e){return this.x< +e.x&&this.ye.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,l){return new k(this.x+(e.x-this.x)*l,this.y+(e.y-this.y)*l)},distanceFrom:function(e){var l=this.x-e.x;e=this.y-e.y;return Math.sqrt(l*l+e*e)},min:function(e){return new k(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new k(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+ +","+this.y},setXY:function(e,l){this.x=e;this.y=l},setFromPoint:function(e){this.x=e.x;this.y=e.y},swap:function(e){var l=this.x,g=this.y;this.x=e.x;this.y=e.y;e.x=l;e.y=g}};p.Point=k}})(); +(function(){function k(e){arguments.length>0&&this.init(e)}var p=this.fabric||(this.fabric={});if(p.Intersection)console.warn("fabric.Intersection is already defined");else{k.prototype.init=function(e){this.status=e;this.points=[]};k.prototype.appendPoint=function(e){this.points.push(e)};k.prototype.appendPoints=function(e){this.points=this.points.concat(e)};k.intersectLineLine=function(e,l,g,d){var b,a=(d.x-g.x)*(e.y-g.y)-(d.y-g.y)*(e.x-g.x);b=(l.x-e.x)*(e.y-g.y)-(l.y-e.y)*(e.x-g.x);g=(d.y-g.y)* +(l.x-e.x)-(d.x-g.x)*(l.y-e.y);if(g!=0){a=a/g;b=b/g;if(0<=a&&a<=1&&0<=b&&b<=1){b=new k("Intersection");b.points.push(new p.Point(e.x+a*(l.x-e.x),e.y+a*(l.y-e.y)))}else b=new k("No Intersection")}else b=a==0||b==0?new k("Coincident"):new k("Parallel");return b};k.intersectLinePolygon=function(e,l,g){for(var d=new k("No Intersection"),b=g.length,a=0;a0)d.status="Intersection";return d};k.intersectPolygonPolygon= +function(e,l){for(var g=new k("No Intersection"),d=e.length,b=0;b0)g.status="Intersection";return g};k.intersectPolygonRectangle=function(e,l,g){var d=l.min(g),b=l.max(g);g=new p.Point(b.x,d.y);var a=new p.Point(d.x,b.y);l=k.intersectLinePolygon(d,g,e);g=k.intersectLinePolygon(g,b,e);b=k.intersectLinePolygon(b,a,e);e=k.intersectLinePolygon(a,d,e);d=new k("No Intersection");d.appendPoints(l.points); +d.appendPoints(g.points);d.appendPoints(b.points);d.appendPoints(e.points);if(d.points.length>0)d.status="Intersection";return d};p.Intersection=k}})(); +(function(){function k(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var p=this.fabric||(this.fabric={});if(p.Color)console.warn("fabric.Color is already defined.");else{p.Color=k;k.prototype._tryParsingColor=function(e){var l=k.sourceFromHex(e);l||(l=k.sourceFromRgb(e));l&&this.setSource(l)};k.prototype.getSource=function(){return this._source};k.prototype.setSource=function(e){this._source=e};k.prototype.toRgb=function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"}; +k.prototype.toRgba=function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"};k.prototype.toHex=function(){var e=this.getSource(),l=e[0].toString(16);l=l.length==1?"0"+l:l;var g=e[1].toString(16);g=g.length==1?"0"+g:g;e=e[2].toString(16);e=e.length==1?"0"+e:e;return l.toUpperCase()+g.toUpperCase()+e.toUpperCase()};k.prototype.getAlpha=function(){return this.getSource()[3]};k.prototype.setAlpha=function(e){var l=this.getSource();l[3]=e;this.setSource(l);return this};k.prototype.toGrayscale= +function(){var e=this.getSource(),l=parseInt((e[0]*0.3+e[1]*0.59+e[2]*0.11).toFixed(0),10);this.setSource([l,l,l,e[3]]);return this};k.prototype.toBlackWhite=function(e){var l=this.getSource(),g=(l[0]*0.3+l[1]*0.59+l[2]*0.11).toFixed(0);l=l[3];e=e||127;g=Number(g)0?0:-m),f.ey-(n>0?0:-n),s,y);this.contextTop.lineWidth=this.selectionLineWidth;this.contextTop.strokeStyle=this.selectionBorderColor;this.contextTop.strokeRect(f.ex+0.5-(m>0?0:s),f.ey+0.5-(n>0?0:y),s,y)},_findSelectedObjects:function(){var f=[],m=this._groupSelector.ex,n=this._groupSelector.ey,s=m+this._groupSelector.left,y=n+this._groupSelector.top,z=new fabric.Point(w(m,s),w(n,y));n=new fabric.Point(A(m,s),A(n,y));s=0;for(y=this._objects.length;s1){f=new fabric.Group(f);this.setActiveGroup(f);f.saveCoords();d("group:selected",{target:f})}this.renderAll()},add:function(){this._objects.push.apply(this._objects,arguments);this.renderAll();return this},insertAt:function(f,m){this._objects.splice(m,0,f);this.renderAll();return this},getObjects:function(){return this._objects},getContext:function(){return this.contextTop}, +clearContext:function(f){f.clearRect(0,0,this._config.width,this._config.height);return this},clear:function(){this._objects.length=0;this.clearContext(this.contextTop);this.clearContext(this.contextContainer);this.renderAll();return this},renderAll:function(f){var m=this._config.width,n=this._config.height,s=f?this.contextTop:this.contextContainer;this.clearContext(this.contextTop);f||this.clearContext(s);s.fillStyle=this.backgroundColor;s.fillRect(0,0,m,n);f=this._objects.length;m=this.getActiveGroup(); +n=new Date;if(f)for(var y=0;y1?new fabric.PathGroup(E,C):E[0];E.setSourcePath(H);if(!(E instanceof fabric.PathGroup)){d(E,C);typeof C.angle!=="undefined"&&E.setAngle(C.angle)}n(E,F)})}, -this)}catch(B){console.log(B.message)}},loadImageFromURL:function(){var f={};return function(l,n){function s(){var B=p.getElementById(f[l]);B.width&&B.height?n(new fabric.Image(B)):setTimeout(s,50)}var y=this;if(f[l])s();else{var z=new Image;z.onload=function(){z.onload=null;y._resizeImageToFit(z);var B=new fabric.Image(z);n(B)};z.className="canvas-img-clone";z.src=l;if(this.shouldCacheImages)f[l]=Element.identify(z);p.body.appendChild(z)}}}(),loadSVGFromURL:function(f,l){function n(z){if(z=z.responseXML)(z= -z.documentElement)&&fabric.parseSVGDocument(z,function(B,C){y.cache.set(f,{objects:B.invoke("toObject"),options:C});l(B,C)})}function s(){console.log("ERROR!")}var y=this;f=f.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();this.cache.has(f,function(z){if(z)y.cache.get(f,function(B){B=y._enlivenCachedObject(B);l(B.objects,B.options)});else new Ajax.Request(f,{method:"get",onComplete:n,onFailure:s})})},_enlivenCachedObject:function(f){var l=f.objects;f=f.options;l=l.map(function(n){return fabric[m(n.type)].fromObject(n)}); -return{objects:l,options:f}},remove:function(f){c(this._objects,f);this.renderAll();return f},fxRemove:function(f,l){var n=this;f.fxRemove({onChange:this.renderAll.bind(this),onComplete:function(){n.remove(f);typeof l==="function"&&l()}});return this},sendToBack:function(f){c(this._objects,f);this._objects.unshift(f);return this.renderAll()},bringToFront:function(f){c(this._objects,f);this._objects.push(f);return this.renderAll()},sendBackwards:function(f){var l=this._objects.indexOf(f),n=l;if(l!== -0){for(l=l-1;l>=0;--l)if(f.intersectsWithObject(this._objects[l])){n=l;break}c(this._objects,f);this._objects.splice(n,0,f)}return this.renderAll()},bringForward:function(f){var l=this.getObjects(),n=l.indexOf(f),s=n;if(n!==l.length-1){n=n+1;for(var y=this._objects.length;n"};d(fabric.Element,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(f){var l=f.getContext("2d");f=l.getImageData(0,0,f.width,f.height);var n=f.data,s=f.width,y=f.height,z,B;for(i=0;i1?new fabric.PathGroup(E,C):E[0];E.setSourcePath(H);if(!(E instanceof fabric.PathGroup)){e(E,C);typeof C.angle!=="undefined"&&E.setAngle(C.angle)}n(E,F)})}, +this)}catch(B){console.log(B.message)}},loadImageFromURL:function(){var f={};return function(m,n){function s(){var B=p.getElementById(f[m]);B.width&&B.height?n(new fabric.Image(B)):setTimeout(s,50)}var y=this;if(f[m])s();else{var z=new Image;z.onload=function(){z.onload=null;y._resizeImageToFit(z);var B=new fabric.Image(z);n(B)};z.className="canvas-img-clone";z.src=m;if(this.shouldCacheImages)f[m]=Element.identify(z);p.body.appendChild(z)}}}(),loadSVGFromURL:function(f,m){function n(z){if(z=z.responseXML)(z= +z.documentElement)&&fabric.parseSVGDocument(z,function(B,C){y.cache.set(f,{objects:B.invoke("toObject"),options:C});m(B,C)})}function s(){console.log("ERROR!")}var y=this;f=f.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();this.cache.has(f,function(z){if(z)y.cache.get(f,function(B){B=y._enlivenCachedObject(B);m(B.objects,B.options)});else new Ajax.Request(f,{method:"get",onComplete:n,onFailure:s})})},_enlivenCachedObject:function(f){var m=f.objects;f=f.options;m=m.map(function(n){return fabric[l(n.type)].fromObject(n)}); +return{objects:m,options:f}},remove:function(f){c(this._objects,f);this.renderAll();return f},fxRemove:function(f,m){var n=this;f.fxRemove({onChange:this.renderAll.bind(this),onComplete:function(){n.remove(f);typeof m==="function"&&m()}});return this},sendToBack:function(f){c(this._objects,f);this._objects.unshift(f);return this.renderAll()},bringToFront:function(f){c(this._objects,f);this._objects.push(f);return this.renderAll()},sendBackwards:function(f){var m=this._objects.indexOf(f),n=m;if(m!== +0){for(m=m-1;m>=0;--m)if(f.intersectsWithObject(this._objects[m])){n=m;break}c(this._objects,f);this._objects.splice(n,0,f)}return this.renderAll()},bringForward:function(f){var m=this.getObjects(),n=m.indexOf(f),s=n;if(n!==m.length-1){n=n+1;for(var y=this._objects.length;n"};e(fabric.Element,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(f){var m=f.getContext("2d");f=m.getImageData(0,0,f.width,f.height);var n=f.data,s=f.width,y=f.height,z,B;for(i=0;i1?c.apply(this,b.call(arguments,1)):c.call(this)}, -initialize:function(a){this.setOptions(a);this._importProperties();this.originalState={};this.setCoords();this.saveState()},setOptions:function(a){this.options=p(this._getOptions(),a)},_getOptions:function(){return p(d(this._getSuperOptions()),this.options)},_getSuperOptions:function(){var a=this.constructor;if(a)if(a=a.superclass)if((a=a.prototype)&&typeof a._getOptions=="function")return a._getOptions();return{}},_importProperties:function(){this.stateProperties.forEach(function(a){a==="angle"? -this.setAngle(this.options[a]):this[a]=this.options[a]},this)},transform:function(a){a.globalAlpha=this.opacity;a.translate(this.left,this.top);a.rotate(this.theta);a.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(){var a={type:this.type,left:m(this.left,this.NUM_FRACTION_DIGITS),top:m(this.top,this.NUM_FRACTION_DIGITS),width:m(this.width,this.NUM_FRACTION_DIGITS),height:m(this.height,this.NUM_FRACTION_DIGITS),fill:this.fill,overlayFill:this.overlayFill,stroke:this.stroke, -strokeWidth:this.strokeWidth,scaleX:m(this.scaleX,this.NUM_FRACTION_DIGITS),scaleY:m(this.scaleY,this.NUM_FRACTION_DIGITS),angle:m(this.getAngle(),this.NUM_FRACTION_DIGITS),flipX:this.flipX,flipY:this.flipY,opacity:m(this.opacity,this.NUM_FRACTION_DIGITS)};this.includeDefaultValues||(a=this._removeDefaultValues(a));return a},toDatalessObject:function(){return this.toObject()},_removeDefaultValues:function(a){var c=k.Object.prototype.options;this.stateProperties.forEach(function(g){a[g]===c[g]&&delete a[g]}); -return a},isActive:function(){return!!this.active},setActive:function(a){this.active=!!a;return this},toString:function(){return"#"},set:function(a,c){if((a==="scaleX"||a==="scaleY")&&c"},set:function(a,c){if((a==="scaleX"||a==="scaleY")&&ca.x&&q.xa.y&&r.y=c&&r.d.y>=c)){if(r.o.x==r.d.x&&r.o.x>=a)o=r.o.x;else{o=(r.d.y-r.o.y)/(r.d.x-r.o.x);q=c-0*a;r=r.o.y-o*r.o.x;o=-(q-r)/(0-o)}if(o>=a)u+=1;if(u==2)break}}return u},_getImageLines:function(a){return{topline:{o:a.tl,d:a.tr},rightline:{o:a.tr,d:a.br},bottomline:{o:a.br,d:a.bl},leftline:{o:a.bl,d:a.tl}}},_setCornerCoords:function(){var a=this.oCoords,c=this.theta,g=this.cornersize*Math.cos(c),o=this.cornersize*Math.sin(c);c=this.cornersize/2;var q=c-o;a.tl.x-=q;a.tl.y-= -c;a.tl.corner={tl:{x:a.tl.x,y:a.tl.y},tr:{x:a.tl.x+g,y:a.tl.y+o},bl:{x:a.tl.x-o,y:a.tl.y+g}};a.tl.corner.br={x:a.tl.corner.tr.x-o,y:a.tl.corner.tr.y+g};a.tl.x+=q;a.tl.y+=c;a.tr.x+=c;a.tr.y-=c;a.tr.corner={tl:{x:a.tr.x-g,y:a.tr.y-o},tr:{x:a.tr.x,y:a.tr.y},br:{x:a.tr.x-o,y:a.tr.y+g}};a.tr.corner.bl={x:a.tr.corner.tl.x-o,y:a.tr.corner.tl.y+g};a.tr.x-=c;a.tr.y+=c;a.bl.x-=c;a.bl.y+=c;a.bl.corner={tl:{x:a.bl.x+o,y:a.bl.y-g},bl:{x:a.bl.x,y:a.bl.y},br:{x:a.bl.x+g,y:a.bl.y+o}};a.bl.corner.tr={x:a.bl.corner.br.x+ -o,y:a.bl.corner.br.y-g};a.bl.x+=c;a.bl.y-=c;a.br.x+=c;a.br.y+=c;a.br.corner={tr:{x:a.br.x+o,y:a.br.y-g},bl:{x:a.br.x-g,y:a.br.y-o},br:{x:a.br.x,y:a.br.y}};a.br.corner.tl={x:a.br.corner.bl.x+o,y:a.br.corner.bl.y-g};a.br.x-=c;a.br.y-=c;a.ml.x-=c;a.ml.y-=c;a.ml.corner={tl:{x:a.ml.x,y:a.ml.y},tr:{x:a.ml.x+g,y:a.ml.y+o},bl:{x:a.ml.x-o,y:a.ml.y+g}};a.ml.corner.br={x:a.ml.corner.tr.x-o,y:a.ml.corner.tr.y+g};a.ml.x+=c;a.ml.y+=c;a.mt.x-=c;a.mt.y-=c;a.mt.corner={tl:{x:a.mt.x,y:a.mt.y},tr:{x:a.mt.x+g,y:a.mt.y+ -o},bl:{x:a.mt.x-o,y:a.mt.y+g}};a.mt.corner.br={x:a.mt.corner.tr.x-o,y:a.mt.corner.tr.y+g};a.mt.x+=c;a.mt.y+=c;a.mr.x-=c;a.mr.y-=c;a.mr.corner={tl:{x:a.mr.x,y:a.mr.y},tr:{x:a.mr.x+g,y:a.mr.y+o},bl:{x:a.mr.x-o,y:a.mr.y+g}};a.mr.corner.br={x:a.mr.corner.tr.x-o,y:a.mr.corner.tr.y+g};a.mr.x+=c;a.mr.y+=c;a.mb.x-=c;a.mb.y-=c;a.mb.corner={tl:{x:a.mb.x,y:a.mb.y},tr:{x:a.mb.x+g,y:a.mb.y+o},bl:{x:a.mb.x-o,y:a.mb.y+g}};a.mb.corner.br={x:a.mb.corner.tr.x-o,y:a.mb.corner.tr.y+g};a.mb.x+=c;a.mb.y+=c;a=a.mb.corner; -a.tl.x-=c;a.tl.y-=c;a.tr.x-=c;a.tr.y-=c;a.br.x-=c;a.br.y-=c;a.bl.x-=c;a.bl.y-=c},toGrayscale:function(){var a=this.get("fill");a&&this.set("overlayFill",(new k.Color(a)).toGrayscale().toRgb());return this},complexity:function(){return 0},getCenter:function(){return{x:this.get("left")+this.width/2,y:this.get("top")+this.height/2}},straighten:function(){this.setAngle(this._getAngleValueForStraighten());return this},fxStraighten:function(a){a=a||{};var c=function(){},g=a.onComplete||c,o=a.onChange|| -c,q=this;k.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(r){q.setAngle(r);o()},onComplete:function(){q.setCoords();g()},onStart:function(){q.setActive(false)}});return this},fxRemove:function(a){a||(a={});var c=function(){},g=a.onComplete||c,o=a.onChange||c,q=this;k.util.animate({startValue:this.get("opacity"),endValue:0,duration:this.FX_DURATION,onChange:function(r){q.set("opacity",r);o()},onComplete:g,onStart:function(){q.setActive(false)}}); +2,2)+Math.pow(this.currentHeight/2,2));this._angle=Math.atan(this.currentHeight/this.currentWidth);var a=Math.cos(this._angle+this.theta)*this._hypotenuse,c=Math.sin(this._angle+this.theta)*this._hypotenuse,h=this.theta,o=Math.sin(h);h=Math.cos(h);a={x:this.left-a,y:this.top-c};c={x:a.x+this.currentWidth*h,y:a.y+this.currentWidth*o};var q={x:a.x-this.currentHeight*o,y:a.y+this.currentHeight*h};this.oCoords={tl:a,tr:c,br:{x:c.x-this.currentHeight*o,y:c.y+this.currentHeight*h},bl:q,ml:{x:a.x-this.currentHeight/ +2*o,y:a.y+this.currentHeight/2*h},mt:{x:a.x+this.currentWidth/2*h,y:a.y+this.currentWidth/2*o},mr:{x:c.x-this.currentHeight/2*o,y:c.y+this.currentHeight/2*h},mb:{x:q.x+this.currentWidth/2*h,y:q.y+this.currentWidth/2*o}};this._setCornerCoords();return this},drawBorders:function(a){var c=this.options,h=c.padding,o=h*2;a.save();a.globalAlpha=this.isMoving?c.borderOpacityWhenMoving:1;a.strokeStyle=c.borderColor;c=1/(this.scaleXa.x&&q.xa.y&&r.y=c&&r.d.y>=c)){if(r.o.x==r.d.x&&r.o.x>=a)o=r.o.x;else{o=(r.d.y-r.o.y)/(r.d.x-r.o.x);q=c-0*a;r=r.o.y-o*r.o.x;o=-(q-r)/(0-o)}if(o>=a)u+=1;if(u==2)break}}return u},_getImageLines:function(a){return{topline:{o:a.tl,d:a.tr},rightline:{o:a.tr,d:a.br},bottomline:{o:a.br,d:a.bl},leftline:{o:a.bl,d:a.tl}}},_setCornerCoords:function(){var a=this.oCoords,c=this.theta,h=this.cornersize*Math.cos(c),o=this.cornersize*Math.sin(c);c=this.cornersize/2;var q=c-o;a.tl.x-=q;a.tl.y-= +c;a.tl.corner={tl:{x:a.tl.x,y:a.tl.y},tr:{x:a.tl.x+h,y:a.tl.y+o},bl:{x:a.tl.x-o,y:a.tl.y+h}};a.tl.corner.br={x:a.tl.corner.tr.x-o,y:a.tl.corner.tr.y+h};a.tl.x+=q;a.tl.y+=c;a.tr.x+=c;a.tr.y-=c;a.tr.corner={tl:{x:a.tr.x-h,y:a.tr.y-o},tr:{x:a.tr.x,y:a.tr.y},br:{x:a.tr.x-o,y:a.tr.y+h}};a.tr.corner.bl={x:a.tr.corner.tl.x-o,y:a.tr.corner.tl.y+h};a.tr.x-=c;a.tr.y+=c;a.bl.x-=c;a.bl.y+=c;a.bl.corner={tl:{x:a.bl.x+o,y:a.bl.y-h},bl:{x:a.bl.x,y:a.bl.y},br:{x:a.bl.x+h,y:a.bl.y+o}};a.bl.corner.tr={x:a.bl.corner.br.x+ +o,y:a.bl.corner.br.y-h};a.bl.x+=c;a.bl.y-=c;a.br.x+=c;a.br.y+=c;a.br.corner={tr:{x:a.br.x+o,y:a.br.y-h},bl:{x:a.br.x-h,y:a.br.y-o},br:{x:a.br.x,y:a.br.y}};a.br.corner.tl={x:a.br.corner.bl.x+o,y:a.br.corner.bl.y-h};a.br.x-=c;a.br.y-=c;a.ml.x-=c;a.ml.y-=c;a.ml.corner={tl:{x:a.ml.x,y:a.ml.y},tr:{x:a.ml.x+h,y:a.ml.y+o},bl:{x:a.ml.x-o,y:a.ml.y+h}};a.ml.corner.br={x:a.ml.corner.tr.x-o,y:a.ml.corner.tr.y+h};a.ml.x+=c;a.ml.y+=c;a.mt.x-=c;a.mt.y-=c;a.mt.corner={tl:{x:a.mt.x,y:a.mt.y},tr:{x:a.mt.x+h,y:a.mt.y+ +o},bl:{x:a.mt.x-o,y:a.mt.y+h}};a.mt.corner.br={x:a.mt.corner.tr.x-o,y:a.mt.corner.tr.y+h};a.mt.x+=c;a.mt.y+=c;a.mr.x-=c;a.mr.y-=c;a.mr.corner={tl:{x:a.mr.x,y:a.mr.y},tr:{x:a.mr.x+h,y:a.mr.y+o},bl:{x:a.mr.x-o,y:a.mr.y+h}};a.mr.corner.br={x:a.mr.corner.tr.x-o,y:a.mr.corner.tr.y+h};a.mr.x+=c;a.mr.y+=c;a.mb.x-=c;a.mb.y-=c;a.mb.corner={tl:{x:a.mb.x,y:a.mb.y},tr:{x:a.mb.x+h,y:a.mb.y+o},bl:{x:a.mb.x-o,y:a.mb.y+h}};a.mb.corner.br={x:a.mb.corner.tr.x-o,y:a.mb.corner.tr.y+h};a.mb.x+=c;a.mb.y+=c;a=a.mb.corner; +a.tl.x-=c;a.tl.y-=c;a.tr.x-=c;a.tr.y-=c;a.br.x-=c;a.br.y-=c;a.bl.x-=c;a.bl.y-=c},toGrayscale:function(){var a=this.get("fill");a&&this.set("overlayFill",(new k.Color(a)).toGrayscale().toRgb());return this},complexity:function(){return 0},getCenter:function(){return{x:this.get("left")+this.width/2,y:this.get("top")+this.height/2}},straighten:function(){this.setAngle(this._getAngleValueForStraighten());return this},fxStraighten:function(a){a=a||{};var c=function(){},h=a.onComplete||c,o=a.onChange|| +c,q=this;k.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(r){q.setAngle(r);o()},onComplete:function(){q.setCoords();h()},onStart:function(){q.setActive(false)}});return this},fxRemove:function(a){a||(a={});var c=function(){},h=a.onComplete||c,o=a.onChange||c,q=this;k.util.animate({startValue:this.get("opacity"),endValue:0,duration:this.FX_DURATION,onChange:function(r){q.set("opacity",r);o()},onComplete:h,onStart:function(){q.setActive(false)}}); return this},_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},toJSON:function(){return this.toObject()}});k.Object.prototype.rotate=k.Object.prototype.setAngle}})(); -(function(){var k=this.fabric||(this.fabric={}),p=k.util.object.extend;if(!k.Line){k.Line=k.util.createClass(k.Object,{type:"line",initialize:function(d,m){d||(d=[0,0,0,0]);this.callSuper("initialize",m);this.set("x1",d[0]);this.set("y1",d[1]);this.set("x2",d[2]);this.set("y2",d[3]);this.set("width",this.x2-this.x1);this.set("height",this.y2-this.y1);this.set("left",this.x1+this.width/2);this.set("top",this.y1+this.height/2)},_render:function(d){d.beginPath();d.moveTo(-this.width/2,-this.height/2); -d.lineTo(this.width/2,this.height/2);var m=d.strokeStyle;d.strokeStyle=d.fillStyle;d.stroke();d.strokeStyle=m},complexity:function(){return 1},toObject:function(){return p(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})}});k.Element.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");k.Line.fromElement=function(d,m){var h=k.parseAttributes(d,k.Element.ATTRIBUTE_NAMES);return new k.Line([h.x1||0,h.y1||0,h.x2||0,h.y2||0],p(h,m))}; -k.Line.fromObject=function(d){return new k.Line([d.x1,d.y1,d.x2,d.y2],d)}}})(); -(function(){var k=this.fabric||(this.fabric={}),p=Math.PI*2,d=k.util.object.extend;if(k.Circle)console.warn("fabric.Circle is already defined.");else{k.Circle=k.util.createClass(k.Object,{type:"circle",initialize:function(m){m=m||{};this.set("radius",m.radius||0);this.callSuper("initialize",m);m=this.get("radius")*2*this.get("scaleX");this.set("width",m).set("height",m)},toObject:function(){return d(this.callSuper("toObject"),{radius:this.get("radius")})},_render:function(m,h){m.beginPath();m.arc(h? -this.left:0,h?this.top:0,this.radius,0,p,false);m.closePath();this.fill&&m.fill();this.stroke&&m.stroke()},complexity:function(){return 1}});k.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity stroke stroke-width transform".split(" ");k.Circle.fromElement=function(m,h){h||(h={});var e=k.parseAttributes(m,k.Circle.ATTRIBUTE_NAMES);if(!("radius"in e&&e.radius>0))throw Error("value of `r` attribute is required and can not be negative");if("left"in e)e.left-=h.width/2||0;if("top"in e)e.top-=h.height/ -2||0;return new k.Circle(d(e,h))};k.Circle.fromObject=function(m){return new k.Circle(m)}}})(); -(function(){var k=this.fabric||(this.fabric={});if(!k.Triangle){k.Triangle=k.util.createClass(k.Object,{type:"triangle",initialize:function(p){p=p||{};this.callSuper("initialize",p);this.set("width",p.width||100).set("height",p.height||100)},_render:function(p){var d=this.width/2,m=this.height/2;p.beginPath();p.moveTo(-d,m);p.lineTo(0,-m);p.lineTo(d,m);p.closePath();this.fill&&p.fill();this.stroke&&p.stroke()},complexity:function(){return 1}});k.Triangle.fromObject=function(p){return new k.Triangle(p)}}})(); -(function(){var k=this.fabric||(this.fabric={}),p=k.util.object.extend;if(k.Ellipse)console.warn("fabric.Ellipse is already defined.");else{k.Ellipse=k.util.createClass(k.Object,{type:"ellipse",initialize:function(d){d=d||{};this.callSuper("initialize",d);this.set("rx",d.rx||0);this.set("ry",d.ry||0);this.set("width",this.get("rx")*2);this.set("height",this.get("ry")*2)},toObject:function(){return p(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},render:function(d,m){if(!(this.rx=== -0||this.ry===0))return this.callSuper("render",d,m)},_render:function(d){d.beginPath();d.save();d.transform(1,0,0,this.ry/this.rx,0,0);d.arc(0,0,this.rx,0,Math.PI*2,false);d.restore();this.stroke&&d.stroke();this.fill&&d.fill()},complexity:function(){return 1}});k.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity stroke stroke-width transform".split(" ");k.Ellipse.fromElement=function(d,m){m||(m={});var h=k.parseAttributes(d,k.Ellipse.ATTRIBUTE_NAMES);if("left"in h)h.left-=m.width/2||0;if("top"in -h)h.top-=m.height/2||0;return new k.Ellipse(p(h,m))};k.Ellipse.fromObject=function(d){return new k.Ellipse(d)}}})(); -(function(){var k=this.fabric||(this.fabric={});if(!k.Rect){k.Rect=k.util.createClass(k.Object,{type:"rect",options:{rx:0,ry:0},initialize:function(p){this.callSuper("initialize",p);this._initRxRy()},_initRxRy:function(){if(this.options.rx&&!this.options.ry)this.options.ry=this.options.rx;else if(this.options.ry&&!this.options.rx)this.options.rx=this.options.ry},_render:function(p){var d=this.options.rx||0,m=this.options.ry||0,h=-this.width/2,e=-this.height/2,b=this.width,a=this.height;p.beginPath(); -p.moveTo(h+d,e);p.lineTo(h+b-d,e);p.bezierCurveTo(h+b,e,h+b,e+m,h+b,e+m);p.lineTo(h+b,e+a-m);p.bezierCurveTo(h+b,e+a,h+b-d,e+a,h+b-d,e+a);p.lineTo(h+d,e+a);p.bezierCurveTo(h,e+a,h,e+a-m,h,e+a-m);p.lineTo(h,e+m);p.bezierCurveTo(h,e,h+d,e,h+d,e);p.closePath();this.fill&&p.fill();this.stroke&&p.stroke()},_normalizeLeftTopProperties:function(p){p.left&&this.set("left",p.left+this.getWidth()/2);p.top&&this.set("top",p.top+this.getHeight()/2);return this},complexity:function(){return 1}});k.Rect.ATTRIBUTE_NAMES= -"x y width height rx ry fill fill-opacity stroke stroke-width transform".split(" ");k.Rect.fromElement=function(p,d){if(!p)return null;var m=k.parseAttributes(p,k.Rect.ATTRIBUTE_NAMES);m=m;m.left=m.left||0;m.top=m.top||0;m=m;var h=new k.Rect(k.util.object.extend(d||{},m));h._normalizeLeftTopProperties(m);return h};k.Rect.fromObject=function(p){return new k.Rect(p)}}})(); -(function(){var k=this.fabric||(this.fabric={});if(k.Polyline)console.warn("fabric.Polyline is already defined");else{k.Polyline=k.util.createClass(k.Object,{type:"polyline",initialize:function(d,m){m=m||{};this.set("points",d);this.callSuper("initialize",m);this._calcDimensions()},_calcDimensions:function(){return k.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return k.Polygon.prototype.toObject.call(this)},_render:function(d){var m;d.beginPath();for(var h=0,e=this.points.length;h< -e;h++){m=this.points[h];d.lineTo(m.x,m.y)}this.fill&&d.fill();this.stroke&&d.stroke()},complexity:function(){return this.get("points").length}});var p="fill fill-opacity stroke stroke-width transform".split(" ");k.Polyline.fromElement=function(d,m){if(!d)return null;m||(m={});for(var h=k.parsePointsAttribute(d.getAttribute("points")),e=k.parseAttributes(d,p),b=0,a=h.length;b"},toObject:function(){var e=m(this.callSuper("toObject"),{path:this.path});if(this.sourcePath)e.sourcePath=this.sourcePath;if(this.transformMatrix)e.transformMatrix=this.transformMatrix;return e},toDatalessObject:function(){var e=this.toObject();if(this.sourcePath)e.path=this.sourcePath;delete e.sourcePath;return e},complexity:function(){return this.path.length},set:function(e,b){return this.callSuper("set",e,b)},_parsePath:function(){for(var e= -[],b,a,c=0,g=this.path.length;c0))throw Error("value of `r` attribute is required and can not be negative");if("left"in d)d.left-=g.width/2||0;if("top"in d)d.top-=g.height/ +2||0;return new k.Circle(e(d,g))};k.Circle.fromObject=function(l){return new k.Circle(l)}}})(); +(function(){var k=this.fabric||(this.fabric={});if(!k.Triangle){k.Triangle=k.util.createClass(k.Object,{type:"triangle",initialize:function(p){p=p||{};this.callSuper("initialize",p);this.set("width",p.width||100).set("height",p.height||100)},_render:function(p){var e=this.width/2,l=this.height/2;p.beginPath();p.moveTo(-e,l);p.lineTo(0,-l);p.lineTo(e,l);p.closePath();this.fill&&p.fill();this.stroke&&p.stroke()},complexity:function(){return 1}});k.Triangle.fromObject=function(p){return new k.Triangle(p)}}})(); +(function(){var k=this.fabric||(this.fabric={}),p=Math.PI*2,e=k.util.object.extend;if(k.Ellipse)console.warn("fabric.Ellipse is already defined.");else{k.Ellipse=k.util.createClass(k.Object,{type:"ellipse",initialize:function(l){l=l||{};this.callSuper("initialize",l);this.set("rx",l.rx||0);this.set("ry",l.ry||0);this.set("width",this.get("rx")*2);this.set("height",this.get("ry")*2)},toObject:function(){return e(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},render:function(l,g){if(!(this.rx=== +0||this.ry===0))return this.callSuper("render",l,g)},_render:function(l,g){l.beginPath();l.save();l.transform(1,0,0,this.ry/this.rx,0,0);l.arc(g?this.left:0,g?this.top:0,this.rx,0,p,false);l.restore();this.stroke&&l.stroke();this.fill&&l.fill()},complexity:function(){return 1}});k.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity stroke stroke-width transform".split(" ");k.Ellipse.fromElement=function(l,g){g||(g={});var d=k.parseAttributes(l,k.Ellipse.ATTRIBUTE_NAMES);if("left"in d)d.left-=g.width/ +2||0;if("top"in d)d.top-=g.height/2||0;return new k.Ellipse(e(d,g))};k.Ellipse.fromObject=function(l){return new k.Ellipse(l)}}})(); +(function(){var k=this.fabric||(this.fabric={});if(!k.Rect){k.Rect=k.util.createClass(k.Object,{type:"rect",options:{rx:0,ry:0},initialize:function(p){this.callSuper("initialize",p);this._initRxRy()},_initRxRy:function(){if(this.options.rx&&!this.options.ry)this.options.ry=this.options.rx;else if(this.options.ry&&!this.options.rx)this.options.rx=this.options.ry},_render:function(p){var e=this.options.rx||0,l=this.options.ry||0,g=-this.width/2,d=-this.height/2,b=this.width,a=this.height;p.beginPath(); +p.moveTo(g+e,d);p.lineTo(g+b-e,d);p.bezierCurveTo(g+b,d,g+b,d+l,g+b,d+l);p.lineTo(g+b,d+a-l);p.bezierCurveTo(g+b,d+a,g+b-e,d+a,g+b-e,d+a);p.lineTo(g+e,d+a);p.bezierCurveTo(g,d+a,g,d+a-l,g,d+a-l);p.lineTo(g,d+l);p.bezierCurveTo(g,d,g+e,d,g+e,d);p.closePath();this.fill&&p.fill();this.stroke&&p.stroke()},_normalizeLeftTopProperties:function(p){p.left&&this.set("left",p.left+this.getWidth()/2);p.top&&this.set("top",p.top+this.getHeight()/2);return this},complexity:function(){return 1}});k.Rect.ATTRIBUTE_NAMES= +"x y width height rx ry fill fill-opacity stroke stroke-width transform".split(" ");k.Rect.fromElement=function(p,e){if(!p)return null;var l=k.parseAttributes(p,k.Rect.ATTRIBUTE_NAMES);l=l;l.left=l.left||0;l.top=l.top||0;l=l;var g=new k.Rect(k.util.object.extend(e||{},l));g._normalizeLeftTopProperties(l);return g};k.Rect.fromObject=function(p){return new k.Rect(p)}}})(); +(function(){var k=this.fabric||(this.fabric={});if(k.Polyline)console.warn("fabric.Polyline is already defined");else{k.Polyline=k.util.createClass(k.Object,{type:"polyline",initialize:function(e,l){l=l||{};this.set("points",e);this.callSuper("initialize",l);this._calcDimensions()},_calcDimensions:function(){return k.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return k.Polygon.prototype.toObject.call(this)},_render:function(e){var l;e.beginPath();for(var g=0,d=this.points.length;g< +d;g++){l=this.points[g];e.lineTo(l.x,l.y)}this.fill&&e.fill();this.stroke&&e.stroke()},complexity:function(){return this.get("points").length}});var p="fill fill-opacity stroke stroke-width transform".split(" ");k.Polyline.fromElement=function(e,l){if(!e)return null;l||(l={});for(var g=k.parsePointsAttribute(e.getAttribute("points")),d=k.parseAttributes(e,p),b=0,a=g.length;b"},toObject:function(){var d=l(this.callSuper("toObject"),{path:this.path});if(this.sourcePath)d.sourcePath=this.sourcePath;if(this.transformMatrix)d.transformMatrix=this.transformMatrix;return d},toDatalessObject:function(){var d=this.toObject();if(this.sourcePath)d.path=this.sourcePath;delete d.sourcePath;return d},complexity:function(){return this.path.length},set:function(d,b){return this.callSuper("set",d,b)},_parsePath:function(){for(var d= +[],b,a,c=0,h=this.path.length;c"},isSameColor:function(){var a=this.getObjects()[0].get("fill");return this.getObjects().every(function(c){return c.get("fill")===a})},complexity:function(){return this.paths.reduce(function(a,c){return a+(c&&c.complexity?c.complexity():0)},0)},toGrayscale:function(){for(var a=this.paths.length;a--;)this.paths[a].toGrayscale();return this},getObjects:function(){return this.paths}});k.PathGroup.fromObject=function(a){for(var c=a.paths, -g=0,o=c.length;g"},getObjects:function(){return this.objects},add:function(b){this._restoreObjectsState();this.objects.push(b);b.setActive(true);this._calcBounds();this._updateObjectsCoords();return this},remove:function(b){this._restoreObjectsState(); -e(this.objects,b);b.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},size:function(){return this.getObjects().length},set:function(b,a){if(typeof a=="function")this.set(b,a(this[b]));else if(b==="fill"||b==="opacity"){var c=this.objects.length;for(this[b]=a;c--;)this.objects[c].set(b,a)}else this[b]=a;return this},contains:function(b){return this.objects.indexOf(b)>-1},toObject:function(){return p(this.callSuper("toObject"),{objects:h(this.objects,"clone")})},render:function(b){b.save(); -this.transform(b);for(var a=Math.max(this.scaleX,this.scaleY),c=0,g;g=this.objects[c];c++){var o=g.borderScaleFactor;g.borderScaleFactor=a;g.render(b);g.borderScaleFactor=o}this.hideBorders||this.drawBorders(b);this.hideCorners||this.drawCorners(b);b.restore();this.setCoords()},item:function(b){return this.getObjects()[b]},complexity:function(){return this.getObjects().reduce(function(b,a){b+=typeof a.complexity=="function"?a.complexity():0;return b},0)},_restoreObjectsState:function(){this.objects.forEach(this._restoreObjectState, -this);return this},_restoreObjectState:function(b){var a=this.get("left"),c=this.get("top"),g=this.getAngle()*(Math.PI/180);b.get("originalLeft");b.get("originalTop");var o=Math.cos(g)*b.get("top")+Math.sin(g)*b.get("left");g=-Math.sin(g)*b.get("top")+Math.cos(g)*b.get("left");b.setAngle(b.getAngle()+this.getAngle());b.set("left",a+g*this.get("scaleX"));b.set("top",c+o*this.get("scaleY"));b.set("scaleX",b.get("scaleX")*this.get("scaleX"));b.set("scaleY",b.get("scaleY")*this.get("scaleY"));b.setCoords(); +h=0,o=c.length;h"},getObjects:function(){return this.objects},add:function(b){this._restoreObjectsState();this.objects.push(b);b.setActive(true);this._calcBounds();this._updateObjectsCoords();return this},remove:function(b){this._restoreObjectsState(); +d(this.objects,b);b.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},size:function(){return this.getObjects().length},set:function(b,a){if(typeof a=="function")this.set(b,a(this[b]));else if(b==="fill"||b==="opacity"){var c=this.objects.length;for(this[b]=a;c--;)this.objects[c].set(b,a)}else this[b]=a;return this},contains:function(b){return this.objects.indexOf(b)>-1},toObject:function(){return p(this.callSuper("toObject"),{objects:g(this.objects,"clone")})},render:function(b){b.save(); +this.transform(b);for(var a=Math.max(this.scaleX,this.scaleY),c=0,h;h=this.objects[c];c++){var o=h.borderScaleFactor;h.borderScaleFactor=a;h.render(b);h.borderScaleFactor=o}this.hideBorders||this.drawBorders(b);this.hideCorners||this.drawCorners(b);b.restore();this.setCoords()},item:function(b){return this.getObjects()[b]},complexity:function(){return this.getObjects().reduce(function(b,a){b+=typeof a.complexity=="function"?a.complexity():0;return b},0)},_restoreObjectsState:function(){this.objects.forEach(this._restoreObjectState, +this);return this},_restoreObjectState:function(b){var a=this.get("left"),c=this.get("top"),h=this.getAngle()*(Math.PI/180);b.get("originalLeft");b.get("originalTop");var o=Math.cos(h)*b.get("top")+Math.sin(h)*b.get("left");h=-Math.sin(h)*b.get("top")+Math.cos(h)*b.get("left");b.setAngle(b.getAngle()+this.getAngle());b.set("left",a+h*this.get("scaleX"));b.set("top",c+o*this.get("scaleY"));b.set("scaleX",b.get("scaleX")*this.get("scaleX"));b.set("scaleY",b.get("scaleY")*this.get("scaleY"));b.setCoords(); b.hideCorners=false;b.setActive(false);b.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(b){b.setCoords()});return this},activateAllObjects:function(){return this.setActive(true)},setActive:function(b){this.forEachObject(function(a){a.setActive(b)}); -return this},forEachObject:function(b,a){for(var c=this.getObjects(),g=c.length;g--;)b.call(a,c[g],g,c);return this},_setOpacityIfSame:function(){var b=this.getObjects(),a=b[0]?b[0].get("opacity"):1;if(b.every(function(c){return c.get("opacity")===a}))this.opacity=a},_calcBounds:function(){var b=[],a=[],c,g;g=0;for(var o=this.objects.length;gb.x&&o-cb.y},toGrayscale:function(){for(var b=this.objects.length;b--;)this.objects[b].toGrayscale()}});k.Group.fromObject=function(b){return new k.Group(b.objects,b)}}})(); -(function(){var k=this.fabric||(this.fabric={}),p=k.util.object.extend,d=k.util.object.clone;if(k.Text)console.warn("fabric.Text is already defined");else if(k.Object){k.Text=k.util.createClass(k.Object,{options:{top:10,left:10,fontsize:20,fontweight:100,fontfamily:"Modernist_One_400",path:null},type:"text",initialize:function(m,h){this.originalState={};this.initStateProperties();this.text=m;this.setOptions(h);p(this,this.options);this.theta=this.angle*(Math.PI/180);this.width=this.getWidth();this.setCoords()}, -initStateProperties:function(){var m;if((m=this.constructor)&&(m=m.superclass)&&(m=m.prototype)&&(m=m.stateProperties)&&m.clone){this.stateProperties=m.clone();this.stateProperties.push("fontfamily","fontweight","path")}},toString:function(){return"#"},_render:function(m){var h=Cufon.textOptions||(Cufon.textOptions={});h.left=this.left;h.top=this.top;h.context=m;h.color=this.fill;var e=this._initDummyElement(); -this.transform(m);Cufon.replaceElement(e,{separate:"none",fontFamily:this.fontfamily});this.width=h.width;this.height=h.height},_initDummyElement:function(){var m=document.createElement("div");m.innerHTML=this.text;m.style.fontSize="40px";m.style.fontWeight="400";m.style.fontStyle="normal";m.style.letterSpacing="normal";m.style.color="#000000";m.style.fontWeight="600";m.style.fontFamily="Verdana";return m},render:function(m){m.save();this._render(m);if(this.active){this.drawBorders(m);this.drawCorners(m)}m.restore()}, -toObject:function(){return p(this.callSuper("toObject"),{text:this.text,fontsize:this.fontsize,fontweight:this.fontweight,fontfamily:this.fontfamily,path:this.path})},setColor:function(m){this.set("fill",m);return this},setFontsize:function(m){this.set("fontsize",m);this.setCoords();return this},getText:function(){return this.text},setText:function(m){this.set("text",m);this.setCoords();return this},set:function(m,h){this[m]=h;if(m==="fontfamily")this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/, -"$1"+h+"$3");return this}});k.Text.fromObject=function(m){return new k.Text(m.text,d(m))};k.Text.fromElement=function(){}}else console.warn("fabric.Text requires fabric.Object")})(); -(function(){var k=fabric.util.object.extend;if(!this.fabric)this.fabric={};if(this.fabric.Image)console.warn("fabric.Image is already defined.");else if(fabric.Object){fabric.Image=fabric.util.createClass(fabric.Object,{maxwidth:null,maxheight:null,active:false,bordervisibility:false,cornervisibility:false,type:"image",__isGrayscaled:false,initialize:function(p,d){this.callSuper("initialize",d);this._initElement(p);this._initConfig(d||{})},getElement:function(){return this._element},setElement:function(p){this._element= -p;return this},getNormalizedSize:function(p,d,m){if(m&&d&&p.width>p.height&&p.width/p.heightp.width||p.height>m)){normalizedWidth=~~(p.width*m/p.height);normalizedHeight=m}else if(d&&d'},clone:function(p){this.constructor.fromObject(this.toObject(),p)},toGrayscale:function(p){if(!this.__isGrayscaled){var d=this.getElement(),m=document.createElement("canvas"),h=document.createElement("img"),e=this;m.width=d.width;m.height=d.height;m.getContext("2d").drawImage(d,0,0);fabric.Element.toGrayscale(m);h.onload=function(){e.setElement(h);p&&p();h.onload=m=d=imageData=null};h.width=d.width;h.height=d.height;h.src=m.toDataURL("image/png");this.__isGrayscaled=true;return this}}, -_render:function(p){var d=this.getOriginalSize();p.drawImage(this.getElement(),-d.width/2,-d.height/2,d.width,d.height)},_adjustWidthHeightToBorders:function(p){if(p){this.currentBorder=this.borderwidth;this.width+=2*this.currentBorder;this.height+=2*this.currentBorder}else this.currentBorder=0},_resetWidthHeight:function(){var p=this.getElement();this.set("width",p.width);this.set("height",p.height)},_initElement:function(p){this.setElement(fabric.util.getById(p));fabric.util.addClass(this.getElement(), -fabric.Image.CSS_CANVAS)},_initConfig:function(p){this.setOptions(p);this._setBorder();this._setWidthHeight(p)},_setBorder:function(){this.currentBorder=this.bordervisibility?this.borderwidth:0},_setWidthHeight:function(){var p=2*this.currentBorder;this.width=(this.getElement().width||0)+p;this.height=(this.getElement().height||0)+p},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.fromObject=function(p,d){var m=document.createElement("img"),h=p.src;if(p.width)m.width= -p.width;if(p.height)m.height=p.height;m.onload=function(){d&&d(new fabric.Image(m,p));m=m.onload=null};m.src=h};fabric.Image.fromURL=function(p,d,m){var h=document.createElement("img");h.onload=function(){d&&d(new fabric.Image(h,m));h=h.onload=null};h.src=p}}else console.warn("fabric.Object is required for fabric.Image initialization")})(); +return this},forEachObject:function(b,a){for(var c=this.getObjects(),h=c.length;h--;)b.call(a,c[h],h,c);return this},_setOpacityIfSame:function(){var b=this.getObjects(),a=b[0]?b[0].get("opacity"):1;if(b.every(function(c){return c.get("opacity")===a}))this.opacity=a},_calcBounds:function(){var b=[],a=[],c,h;h=0;for(var o=this.objects.length;hb.x&&o-cb.y},toGrayscale:function(){for(var b=this.objects.length;b--;)this.objects[b].toGrayscale()}});k.Group.fromObject=function(b){return new k.Group(b.objects,b)}}})(); +(function(){var k=this.fabric||(this.fabric={}),p=k.util.object.extend,e=k.util.object.clone;if(k.Text)console.warn("fabric.Text is already defined");else if(k.Object){k.Text=k.util.createClass(k.Object,{options:{top:10,left:10,fontsize:20,fontweight:100,fontfamily:"Modernist_One_400",path:null},type:"text",initialize:function(l,g){this.originalState={};this.initStateProperties();this.text=l;this.setOptions(g);p(this,this.options);this.theta=this.angle*(Math.PI/180);this.width=this.getWidth();this.setCoords()}, +initStateProperties:function(){var l;if((l=this.constructor)&&(l=l.superclass)&&(l=l.prototype)&&(l=l.stateProperties)&&l.clone){this.stateProperties=l.clone();this.stateProperties.push("fontfamily","fontweight","path")}},toString:function(){return"#"},_render:function(l){var g=Cufon.textOptions||(Cufon.textOptions={});g.left=this.left;g.top=this.top;g.context=l;g.color=this.fill;var d=this._initDummyElement(); +this.transform(l);Cufon.replaceElement(d,{separate:"none",fontFamily:this.fontfamily});this.width=g.width;this.height=g.height},_initDummyElement:function(){var l=document.createElement("div");l.innerHTML=this.text;l.style.fontSize="40px";l.style.fontWeight="400";l.style.fontStyle="normal";l.style.letterSpacing="normal";l.style.color="#000000";l.style.fontWeight="600";l.style.fontFamily="Verdana";return l},render:function(l){l.save();this._render(l);if(this.active){this.drawBorders(l);this.drawCorners(l)}l.restore()}, +toObject:function(){return p(this.callSuper("toObject"),{text:this.text,fontsize:this.fontsize,fontweight:this.fontweight,fontfamily:this.fontfamily,path:this.path})},setColor:function(l){this.set("fill",l);return this},setFontsize:function(l){this.set("fontsize",l);this.setCoords();return this},getText:function(){return this.text},setText:function(l){this.set("text",l);this.setCoords();return this},set:function(l,g){this[l]=g;if(l==="fontfamily")this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/, +"$1"+g+"$3");return this}});k.Text.fromObject=function(l){return new k.Text(l.text,e(l))};k.Text.fromElement=function(){}}else console.warn("fabric.Text requires fabric.Object")})(); +(function(){var k=fabric.util.object.extend;if(!this.fabric)this.fabric={};if(this.fabric.Image)console.warn("fabric.Image is already defined.");else if(fabric.Object){fabric.Image=fabric.util.createClass(fabric.Object,{maxwidth:null,maxheight:null,active:false,bordervisibility:false,cornervisibility:false,type:"image",__isGrayscaled:false,initialize:function(p,e){this.callSuper("initialize",e);this._initElement(p);this._initConfig(e||{})},getElement:function(){return this._element},setElement:function(p){this._element= +p;return this},getNormalizedSize:function(p,e,l){if(l&&e&&p.width>p.height&&p.width/p.heightp.width||p.height>l)){normalizedWidth=~~(p.width*l/p.height);normalizedHeight=l}else if(e&&e'},clone:function(p){this.constructor.fromObject(this.toObject(),p)},toGrayscale:function(p){if(!this.__isGrayscaled){var e=this.getElement(),l=document.createElement("canvas"),g=document.createElement("img"),d=this;l.width=e.width;l.height=e.height;l.getContext("2d").drawImage(e,0,0);fabric.Element.toGrayscale(l);g.onload=function(){d.setElement(g);p&&p();g.onload=l=e=imageData=null};g.width=e.width;g.height=e.height;g.src=l.toDataURL("image/png");this.__isGrayscaled=true;return this}}, +_render:function(p){var e=this.getOriginalSize();p.drawImage(this.getElement(),-e.width/2,-e.height/2,e.width,e.height)},_adjustWidthHeightToBorders:function(p){if(p){this.currentBorder=this.borderwidth;this.width+=2*this.currentBorder;this.height+=2*this.currentBorder}else this.currentBorder=0},_resetWidthHeight:function(){var p=this.getElement();this.set("width",p.width);this.set("height",p.height)},_initElement:function(p){this.setElement(fabric.util.getById(p));fabric.util.addClass(this.getElement(), +fabric.Image.CSS_CANVAS)},_initConfig:function(p){this.setOptions(p);this._setBorder();this._setWidthHeight(p)},_setBorder:function(){this.currentBorder=this.bordervisibility?this.borderwidth:0},_setWidthHeight:function(){var p=2*this.currentBorder;this.width=(this.getElement().width||0)+p;this.height=(this.getElement().height||0)+p},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.fromObject=function(p,e){var l=document.createElement("img"),g=p.src;if(p.width)l.width= +p.width;if(p.height)l.height=p.height;l.onload=function(){e&&e(new fabric.Image(l,p));l=l.onload=null};l.src=g};fabric.Image.fromURL=function(p,e,l){var g=document.createElement("img");g.onload=function(){e&&e(new fabric.Image(g,l));g=g.onload=null};g.src=p}}else console.warn("fabric.Object is required for fabric.Image initialization")})();