From 45795824ac3a6e8fd748d995f119f153e80a48b7 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 30 Oct 2010 21:47:15 -0400 Subject: [PATCH] First stab at centering guidelines and snapping to a center (vertical/horizontal). --- dist/all.js | 21 ++ dist/all.min-via-goog-cc.js | 165 ------------- dist/all.min-via-goog-cc.js.gz | Bin 21953 -> 0 bytes dist/all.min.js | 386 +++++++++++++++--------------- dist/all.min.js.gz | Bin 23172 -> 0 bytes src/element.class.js | 23 +- test/demo/centering_guidelines.js | 74 ++++++ test/demo/demo.js | 2 + test/demo/index.html | 5 +- 9 files changed, 315 insertions(+), 361 deletions(-) delete mode 100644 dist/all.min-via-goog-cc.js delete mode 100644 dist/all.min-via-goog-cc.js.gz delete mode 100644 dist/all.min.js.gz create mode 100644 test/demo/centering_guidelines.js diff --git a/dist/all.js b/dist/all.js index 8a0ab229..539374cd 100644 --- a/dist/all.js +++ b/dist/all.js @@ -3671,6 +3671,19 @@ fabric.util.animate = animate; /* NOOP */ }, + /** + * Callback; invoked every time active object is moved + * @method onObjectMove + * @param {fabric.Object} object that's being moved + */ + onObjectMove: null, + + /** + * Callback; invoked when a mouseup event occurs, and at the end of all other transformations + * @method onMouseUp + */ + onMouseUp: null, + /** * Calculates canvas element offset relative to the document * This method is also attached as "resize" event handler of window @@ -3998,12 +4011,17 @@ fabric.util.animate = animate; this.renderAll(); this._setCursorFromEvent(e, target); + this._setCursor(''); var _this = this; setTimeout(function () { _this._setCursorFromEvent(e, target); }, 50); + + if (this.onMouseUp) { + this.onMouseUp(); + } }, _shouldClearSelection: function (e) { @@ -4331,6 +4349,9 @@ fabric.util.animate = animate; } else { this._translateObject(x, y); + if (this.onObjectMove) { + this.onObjectMove(this._currentTransform.target); + } } this.renderAll(); } diff --git a/dist/all.min-via-goog-cc.js b/dist/all.min-via-goog-cc.js deleted file mode 100644 index 32b5b9b9..00000000 --- a/dist/all.min-via-goog-cc.js +++ /dev/null @@ -1,165 +0,0 @@ -if(typeof console=="undefined")var console={log:function(){},warn:function(){}};if(!this.JSON)this.JSON={}; -(function(){function e(k){return k<10?"0"+k:k}function f(k){g.lastIndex=0;return g.test(k)?'"'+k.replace(g,function(m){var n=b[m];return typeof n==="string"?n:"\\u"+("0000"+m.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+k+'"'}function a(k,m){var n,o,s,r,u=h,q,p=m[k];if(p&&typeof p==="object"&&typeof p.toJSON==="function")p=p.toJSON(k);if(typeof d==="function")p=d.call(m,k,p);switch(typeof p){case "string":return f(p);case "number":return isFinite(p)?String(p):"null";case "boolean":case "null":return String(p); -case "object":if(!p)return"null";h+=l;q=[];if(Object.prototype.toString.apply(p)==="[object Array]"){r=p.length;for(n=0;n>>0;l=Number(l)||0;l=Math[l<0?"ceil":"floor"](l);if(l<0)l+=b;for(;l>>0;b>>0;d>>0;b>>0;b>>0;k>>0,b=0,d;if(arguments.length>1)d=arguments[1];else{do{if(b in this){d=this[b++];break}if(++b>=l)throw new TypeError;}while(1)}for(;b< -l;b++)if(b in this)d=h.call(null,d,this[b],b,this);return d};c.util.array={invoke:function(h,l){for(var b=g.call(arguments,2),d=[],k=0,m=h.length;k=d)d=h[b][l]}else for(;b--;)if(h[b]>=d)d=h[b];return d}};c.util.object= -{extend:e,clone:function(h){return e({},h)}};if(!String.prototype.trim)String.prototype.trim=function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")};c.util.string={camelize:function(h){return h.replace(/-+(.)?/g,function(l,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 l=this,b=Array.prototype.slice.call(arguments,1);return function(){return l.apply(h,b.concat(Array.prototype.slice.call(arguments)))}}; -(function(){function h(){}var l;l=function(){for(var b in{toString:1})if(b==="toString")return false;return true}()?function(b,d){if(d.toString!==Object.prototype.toString)b.prototype.toString=d.toString;if(d.valueOf!==Object.prototype.valueOf)b.prototype.valueOf=d.valueOf;for(var k in d)b.prototype[k]=d[k]}:function(b,d){for(var k in d)b.prototype[k]=d[k]};c.util.createClass=function(){function b(){this.initialize.apply(this,arguments)}var d=null,k=g.call(arguments,0);if(typeof k[0]==="function")d= -k.shift();b.superclass=d;b.subclasses=[];if(d){h.prototype=d.prototype;b.prototype=new h;d.subclasses.push(b)}d=0;for(var m=k.length;d=0.9999?"":"alpha(opacity="+m*100+")";n.filter=n.filter.replace(b,m)}else n.filter+=" alpha(opacity="+m*100+")";return k};c.util.setStyle=function(k,m){var n=k.style;if(typeof m==="string"){k.style.cssText+= -";"+m;return m.indexOf("opacity")>-1?d(k,m.match(/opacity:\s*(\d?\.?\d*)/)[1]):k}for(var o in m)if(o==="opacity")d(k,m[o]);else n[o==="float"||o==="cssFloat"?typeof n.styleFloat==="undefined"?"cssFloat":"styleFloat":o]=m[o];return k}})();(function(){var h=document.documentElement.style,l="userSelect"in h?"userSelect":"MozUserSelect"in h?"MozUserSelect":"WebkitUserSelect"in h?"WebkitUserSelect":"KhtmlUserSelect"in h?"KhtmlUserSelect":"";c.util.makeElementUnselectable=function(b){if(typeof b.onselectstart!== -"undefined")b.onselectstart=a;if(l)b.style[l]="none";else if(typeof b.unselectable=="string")b.unselectable="on";return b}})();(function(){function h(b,d){l.load(b);d()}c.util.getScript=function(b,d){var k=document.getElementsByTagName("head")[0],m=document.createElement("script"),n=true;m.type="text/javascript";m.setAttribute("runat","server");m.onload=m.onreadystatechange=function(o){if(n)if(!(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")){n=false;d(o|| -window.event);m=m.onload=m.onreadystatechange=null}};m.src=b;k.appendChild(m)};var l=this.Jaxer;if(l&&l.load)c.util.getScript=h})();c.util.getById=function(h){return typeof h==="string"?document.getElementById(h):h};c.util.toArray=function(h){for(var l=[],b=h.length;b--;)l[b]=h[b];return l};c.util.makeElement=f;c.util.addClass=function(h,l){if((" "+h.className+" ").indexOf(" "+l+" ")===-1)h.className+=(h.className?" ":"")+l};c.util.wrapElement=function(h,l,b){if(typeof l==="string")l=f(l,b);h.parentNode&& -h.parentNode.replaceChild(l,h);l.appendChild(h);return l};c.util.getElementOffset=function(h){var l=0,b=0;do{l+=h.offsetTop||0;b+=h.offsetLeft||0;h=h.offsetParent}while(h);return{left:b,top:l}};c.util.animate=function(h){h||(h={});var l=+new Date,b=h.duration||500,d=l+b,k,m,n=h.onChange||function(){},o=h.easing||function(p){return-Math.cos(p*Math.PI)/2+0.5},s="startValue"in h?h.startValue:0,r="endValue"in h?h.endValue:100,u=s>r;h.onStart&&h.onStart();var q=setInterval(function(){k=+new Date;m=k>d? -1:(k-l)/b;n(u?s-(s-r)*o(m):s+(r-s)*o(m));if(k>d){clearInterval(q);h.onComplete&&h.onComplete()}},10)};(function(){function h(){}var l=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}],d=b.length;d--;)try{if(b[d]())return b[d]}catch(k){}}();c.util.request=function(b,d){d||(d={});var k=d.method?d.method.toUpperCase():"GET", -m=d.onComplete||function(){},n=l(),o;n.onreadystatechange=function(){if(n.readyState===4){m(n);n.onreadystatechange=h}};if(k==="GET"){o=null;if(typeof d.parameters=="string")b=b+(/\?/.test(b)?"&":"?")+d.parameters}n.open(k,b,true);if(k==="POST"||k==="PUT")n.setRequestHeader("Content-Type","application/x-www-form-urlencoded");n.send(o);return n}})();(function(){var h=Math.PI/180;c.util.removeFromArray=function(l,b){var d=l.indexOf(b);d!==-1&&l.splice(d,1);return l};c.util.degreesToRadians=function(l){return l* -h};c.util.toFixed=function(l,b){return parseFloat(Number(l).toFixed(b))};c.util.getRandomInt=function(l,b){return Math.floor(Math.random()*(b-l+1))+l}})()})(this); -(function(){var e=this.fabric||(this.fabric={}),f={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix"};e.parseTransformAttribute=function(){function a(d,k){var m=k[0];d[0]=Math.cos(m);d[1]=Math.sin(m);d[2]=-Math.sin(m);d[3]=Math.cos(m)}function c(d,k){var m=k.length===2?k[1]:k[0];d[0]=k[0];d[3]=m}function g(d,k){d[4]=k[0];if(k.length===2)d[5]=k[1]}var h=[1,0,0,1,0,0],l=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*$"), -b=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(d){var k=h.concat();if(!d||d&&!l.test(d))return k;d.replace(b,function(m){var n=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(m).filter(function(o){return o!== -""&&o!=null});m=n[1];n=n.slice(2).map(parseFloat);switch(m){case "translate":g(k,n);break;case "rotate":a(k,n);break;case "scale":c(k,n);break;case "skewX":k[2]=n[0];break;case "skewY":k[1]=n[0];break;case "matrix":k=n;break}});return k}}();e.parseSVGDocument=function(){var a=/^(path|circle|polygon|polyline|ellipse|rect|line)$/,c=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(g,h){if(g){var l=e.util.toArray(g.getElementsByTagName("*")).filter(function(o){var s;if(s=a.test(o.tagName)){a:{for(o=o;o&&(o=o.parentNode);)if(o.nodeName==="pattern"){o=true;break a}o=false}s=!o}return s});if(!(!l||l&&!l.length)){var b=g.getAttribute("viewBox"),d=g.getAttribute("width"),k=g.getAttribute("height"),m=null,n=null;if(b&&(b=b.match(c))){parseInt(b[1],10);parseInt(b[2],10);m=parseInt(b[3],10);n=parseInt(b[4],10)}m=d?parseFloat(d):m;n=k?parseFloat(k):n;b={width:m,height:n}; -l=e.parseElements(l,e.util.object.clone(b));!l||l&&!l.length||h&&h(l,b)}}}}();e.util.object.extend(e,{parseAttributes:function(a,c){if(a){var g,h,l={};if(a.parentNode&&/^g$/i.test(a.parentNode.nodeName))l=e.parseAttributes(a.parentNode,c);var b=c.reduce(function(d,k){g=a.getAttribute(k);h=parseFloat(g);if(g){if((k==="fill"||k==="stroke")&&g==="none")g="";if(k==="fill-rule")g=g==="evenodd"?"destination-over":g;if(k==="transform")g=e.parseTransformAttribute(g);if(k in f)k=f[k];d[k]=isNaN(h)?g:h}return d}, -{});b=e.util.object.extend(e.parseStyleAttribute(a),b);return e.util.object.extend(l,b)}},parseElements:function(a,c){var g=a.map(function(h){var l=e[e.util.string.capitalize(h.tagName)];if(l&&l.fromElement)try{return l.fromElement(h,c)}catch(b){console.log(b.message||b)}});return g=g.filter(function(h){return h!=null})},parseStyleAttribute:function(a){var c={};if(a=a.getAttribute("style"))if(typeof a=="string"){a=a.split(";");a.pop();c=a.reduce(function(h,l){var b=l.split(":"),d=b[0].trim();b=b[1].trim(); -h[d]=b;return h},{})}else for(var g in a)if(typeof a[g]!=="undefined")c[g]=a[g];return c},parsePointsAttribute:function(a){if(!a)return null;a=a.trim().split(/\s+/);a=a.reduce(function(c,g){g=g.split(",");c.push({x:parseFloat(g[0]),y:parseFloat(g[1])});return c},[]);if(a.length%2!==0)return null;return a}})})(); -(function(){function e(a,c){arguments.length>0&&this.init(a,c)}var f=this.fabric||(this.fabric={});if(f.Point)console.warn("fabric.Point is already defined");else{e.prototype={constructor:e,init:function(a,c){this.x=a;this.y=c},add:function(a){return new e(this.x+a.x,this.y+a.y)},addEquals:function(a){this.x+=a.x;this.y+=a.y;return this},scalarAdd:function(a){return new e(this.x+a,this.y+a)},scalarAddEquals:function(a){this.x+=a;this.y+=a;return this},subtract:function(a){return new e(this.x-a.x, -this.y-a.y)},subtractEquals:function(a){this.x-=a.x;this.y-=a.y;return this},scalarSubtract:function(a){return new e(this.x-a,this.y-a)},scalarSubtractEquals:function(a){this.x-=a;this.y-=a;return this},multiply:function(a){return new e(this.x*a,this.y*a)},multiplyEquals:function(a){this.x*=a;this.y*=a;return this},divide:function(a){return new e(this.x/a,this.y/a)},divideEquals:function(a){this.x/=a;this.y/=a;return this},eq:function(a){return this.x==a.x&&this.y==a.y},lt:function(a){return this.x< -a.x&&this.ya.x&&this.y>a.y},gte:function(a){return this.x>=a.x&&this.y>=a.y},lerp:function(a,c){return new e(this.x+(a.x-this.x)*c,this.y+(a.y-this.y)*c)},distanceFrom:function(a){var c=this.x-a.x;a=this.y-a.y;return Math.sqrt(c*c+a*a)},min:function(a){return new e(Math.min(this.x,a.x),Math.min(this.y,a.y))},max:function(a){return new e(Math.max(this.x,a.x),Math.max(this.y,a.y))},toString:function(){return this.x+ -","+this.y},setXY:function(a,c){this.x=a;this.y=c},setFromPoint:function(a){this.x=a.x;this.y=a.y},swap:function(a){var c=this.x,g=this.y;this.x=a.x;this.y=a.y;a.x=c;a.y=g}};f.Point=e}})(); -(function(){function e(a){arguments.length>0&&this.init(a)}var f=this.fabric||(this.fabric={});if(f.Intersection)console.warn("fabric.Intersection is already defined");else{e.prototype.init=function(a){this.status=a;this.points=[]};e.prototype.appendPoint=function(a){this.points.push(a)};e.prototype.appendPoints=function(a){this.points=this.points.concat(a)};e.intersectLineLine=function(a,c,g,h){var l,b=(h.x-g.x)*(a.y-g.y)-(h.y-g.y)*(a.x-g.x);l=(c.x-a.x)*(a.y-g.y)-(c.y-a.y)*(a.x-g.x);g=(h.y-g.y)* -(c.x-a.x)-(h.x-g.x)*(c.y-a.y);if(g!=0){b=b/g;l=l/g;if(0<=b&&b<=1&&0<=l&&l<=1){l=new e("Intersection");l.points.push(new f.Point(a.x+b*(c.x-a.x),a.y+b*(c.y-a.y)))}else l=new e("No Intersection")}else l=b==0||l==0?new e("Coincident"):new e("Parallel");return l};e.intersectLinePolygon=function(a,c,g){for(var h=new e("No Intersection"),l=g.length,b=0;b0)h.status="Intersection";return h};e.intersectPolygonPolygon= -function(a,c){for(var g=new e("No Intersection"),h=a.length,l=0;l0)g.status="Intersection";return g};e.intersectPolygonRectangle=function(a,c,g){var h=c.min(g),l=c.max(g);g=new f.Point(l.x,h.y);var b=new f.Point(h.x,l.y);c=e.intersectLinePolygon(h,g,a);g=e.intersectLinePolygon(g,l,a);l=e.intersectLinePolygon(l,b,a);a=e.intersectLinePolygon(b,h,a);h=new e("No Intersection");h.appendPoints(c.points); -h.appendPoints(g.points);h.appendPoints(l.points);h.appendPoints(a.points);if(h.points.length>0)h.status="Intersection";return h};f.Intersection=e}})(); -(function(){function e(a){a?this._tryParsingColor(a):this.setSource([0,0,0,1])}var f=this.fabric||(this.fabric={});if(f.Color)console.warn("fabric.Color is already defined.");else{f.Color=e;e.prototype._tryParsingColor=function(a){var c=e.sourceFromHex(a);c||(c=e.sourceFromRgb(a));c&&this.setSource(c)};e.prototype.getSource=function(){return this._source};e.prototype.setSource=function(a){this._source=a};e.prototype.toRgb=function(){var a=this.getSource();return"rgb("+a[0]+","+a[1]+","+a[2]+")"}; -e.prototype.toRgba=function(){var a=this.getSource();return"rgba("+a[0]+","+a[1]+","+a[2]+","+a[3]+")"};e.prototype.toHex=function(){var a=this.getSource(),c=a[0].toString(16);c=c.length==1?"0"+c:c;var g=a[1].toString(16);g=g.length==1?"0"+g:g;a=a[2].toString(16);a=a.length==1?"0"+a:a;return c.toUpperCase()+g.toUpperCase()+a.toUpperCase()};e.prototype.getAlpha=function(){return this.getSource()[3]};e.prototype.setAlpha=function(a){var c=this.getSource();c[3]=a;this.setSource(c);return this};e.prototype.toGrayscale= -function(){var a=this.getSource(),c=parseInt((a[0]*0.3+a[1]*0.59+a[2]*0.11).toFixed(0),10);this.setSource([c,c,c,a[3]]);return this};e.prototype.toBlackWhite=function(a){var c=this.getSource(),g=(c[0]*0.3+c[1]*0.59+c[2]*0.11).toFixed(0);c=c[3];a=a||127;g=Number(g)0?0:-b),this._groupSelector.ey-(d>0?0:-d),k,m);this._oContextTop.lineWidth=this.selectionLineWidth;this._oContextTop.strokeStyle=this.selectionBorderColor;this._oContextTop.strokeRect(this._groupSelector.ex+0.5-(b>0?0:k),this._groupSelector.ey+0.5-(d>0? -0:m),k,m)},_findSelectedObjects:function(){var b=[],d=this._groupSelector.ex,k=this._groupSelector.ey,m=d+this._groupSelector.left,n=k+this._groupSelector.top,o=new fabric.Point(Math.min(d,m),Math.min(k,n));k=new fabric.Point(Math.max(d,m),Math.max(k,n));m=0;for(n=this._aObjects.length;m -1){b=new fabric.Group(b);this.setActiveGroup(b);b.saveCoords();fabric.util.fireEvent("group:selected",{target:b})}this.renderAll()},add:function(){this._aObjects.push.apply(this._aObjects,arguments);this.renderAll();return this},insertAt:function(b,d){this._aObjects.splice(d,0,b);this.renderAll();return this},getObjects:function(){return this._aObjects},getContext:function(){return this._oContextTop},clearContext:function(b){b.clearRect(0,0,this._oConfig.width,this._oConfig.height);return this},clear:function(){this._aObjects.length= -0;this.clearContext(this._oContextTop);this.clearContext(this._oContextContainer);this.renderAll();return this},renderAll:function(b){var d=this._oConfig.width,k=this._oConfig.height,m=b?this._oContextTop:this._oContextContainer;this.clearContext(this._oContextTop);m!==this._oContextTop&&this.clearContext(m);if(b){if(!l&&this.backgroundColor==="transparent")var n=true;if(!n)m.fillStyle=this.backgroundColor;m.fillRect(0,0,d,k)}b=this._aObjects.length;d=this.getActiveGroup();if(b)for(k=0;k1?new fabric.PathGroup(t,r):t[0];t.setSourcePath(p);if(!(t instanceof fabric.PathGroup)){fabric.util.object.extend(t,r);typeof r.angle!=="undefined"&&t.setAngle(r.angle)}k(t,u)})},this)}catch(s){console.log(s.message)}},loadImageFromURL:function(){var b= -{};return function(d,k){function m(){var s=f.getElementById(b[d]);s.width&&s.height?k(new fabric.Image(s)):setTimeout(m,50)}var n=this;if(b[d])m();else{var o=new Image;o.onload=function(){o.onload=null;n._resizeImageToFit(o);var s=new fabric.Image(o);k(s)};o.className="canvas-img-clone";o.src=d;if(this.shouldCacheImages)b[d]=Element.identify(o);f.body.appendChild(o)}}}(),loadSVGFromURL:function(b,d){function k(o){if(o=o.responseXML)(o=o.documentElement)&&fabric.parseSVGDocument(o,function(s,r){n.cache.set(b, -{objects:s.invoke("toObject"),options:r});d(s,r)})}function m(){console.log("ERROR!")}var n=this;b=b.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();this.cache.has(b,function(o){if(o)n.cache.get(b,function(s){s=n._enlivenCachedObject(s);d(s.objects,s.options)});else new Ajax.Request(b,{method:"get",onComplete:k,onFailure:m})})},_enlivenCachedObject:function(b){var d=b.objects;b=b.options;d=d.map(function(k){return a[k.type.capitalize()].fromObject(k)});return{objects:d,options:b}},remove:function(b){fabric.util.removeFromArray(this._aObjects, -b);this.renderAll();return b},fxRemove:function(b,d){var k=this;b.fxRemove({onChange:this.renderAll.bind(this),onComplete:function(){k.remove(b);typeof d==="function"&&d()}});return this},sendToBack:function(b){fabric.util.removeFromArray(this._aObjects,b);this._aObjects.unshift(b);return this.renderAll()},bringToFront:function(b){fabric.util.removeFromArray(this._aObjects,b);this._aObjects.push(b);return this.renderAll()},sendBackwards:function(b){var d=this._aObjects.indexOf(b),k=d;if(d!==0){for(d= -d-1;d>=0;--d)if(b.intersectsWithObject(this._aObjects[d])){k=d;break}fabric.util.removeFromArray(this._aObjects,b);this._aObjects.splice(k,0,b)}return this.renderAll()},bringForward:function(b){var d=this.getObjects(),k=d.indexOf(b),m=k;if(k!==d.length-1){k=k+1;for(var n=this._aObjects.length;k"};fabric.util.object.extend(fabric.Element,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(b){var d=b.getContext("2d");b=d.getImageData(0,0,b.width,b.height);var k= -b.data,m=b.width,n=b.height,o,s;for(i=0;i1?c.apply(this,f.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=e.util.object.extend(this._getOptions(),a)},_getOptions:function(){return e.util.object.extend(e.util.object.clone(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))},toJSON:function(){return JSON.stringify(this.toObject())},toObject:function(){var a=e.util.toFixed;a={type:this.type,left:a(this.left,this.NUM_FRACTION_DIGITS),top:a(this.top,this.NUM_FRACTION_DIGITS),width:a(this.width,this.NUM_FRACTION_DIGITS),height:a(this.height,this.NUM_FRACTION_DIGITS),fill:this.fill, -overlayFill:this.overlayFill,stroke:this.stroke,strokeWidth:this.strokeWidth,scaleX:a(this.scaleX,this.NUM_FRACTION_DIGITS),scaleY:a(this.scaleY,this.NUM_FRACTION_DIGITS),angle:a(this.getAngle(),this.NUM_FRACTION_DIGITS),flipX:this.flipX,flipY:this.flipY,opacity:a(this.opacity,this.NUM_FRACTION_DIGITS)};this.includeDefaultValues||(a=this._removeDefaultValues(a));return a},toDatalessObject:function(){return this.toObject()},_removeDefaultValues:function(a){var c=e.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")&&ca.x&&l.xa.y&&b.y=c&&b.d.y>=c)){if(b.o.x==b.d.x&&b.o.x>=a)h=b.o.x;else{h=(b.d.y-b.o.y)/(b.d.x-b.o.x);l=c-0*a;b=b.o.y-h*b.o.x;h=-(l-b)/(0-h)}if(h>=a)d+=1;if(d==2)break}}return d},_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),h=this.cornersize*Math.sin(c);c=this.cornersize/2;var l=c-h;a.tl.x-=l;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+h},bl:{x:a.tl.x-h,y:a.tl.y+g}};a.tl.corner.br={x:a.tl.corner.tr.x-h,y:a.tl.corner.tr.y+g};a.tl.x+=l;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-h},tr:{x:a.tr.x,y:a.tr.y},br:{x:a.tr.x-h,y:a.tr.y+g}};a.tr.corner.bl={x:a.tr.corner.tl.x-h,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+h,y:a.bl.y-g},bl:{x:a.bl.x,y:a.bl.y},br:{x:a.bl.x+g,y:a.bl.y+h}};a.bl.corner.tr={x:a.bl.corner.br.x+h,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+h,y:a.br.y-g},bl:{x:a.br.x-g,y:a.br.y-h},br:{x:a.br.x,y:a.br.y}};a.br.corner.tl={x:a.br.corner.bl.x+h,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+h},bl:{x:a.ml.x-h,y:a.ml.y+g}};a.ml.corner.br={x:a.ml.corner.tr.x- -h,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+h},bl:{x:a.mt.x-h,y:a.mt.y+g}};a.mt.corner.br={x:a.mt.corner.tr.x-h,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+h},bl:{x:a.mr.x-h,y:a.mr.y+g}};a.mr.corner.br={x:a.mr.corner.tr.x-h,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+ -h},bl:{x:a.mb.x-h,y:a.mb.y+g}};a.mb.corner.br={x:a.mb.corner.tr.x-h,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 e.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,h=a.onChange||c,l=this;e.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(b){l.setAngle(b);h()},onComplete:function(){l.setCoords();g()},onStart:function(){l.setActive(false)}});return this},fxRemove:function(a){a||(a={});var c=function(){},g=a.onComplete||c,h=a.onChange||c,l=this;e.util.animate({startValue:this.get("opacity"),endValue:0, -duration:this.FX_DURATION,onChange:function(b){l.set("opacity",b);h()},onComplete:g,onStart:function(){l.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}});e.Object.prototype.rotate=e.Object.prototype.setAngle}})(); -(function(){var e=this.fabric||(this.fabric={});if(!e.Line){e.Line=e.util.createClass(e.Object,{type:"line",initialize:function(f,a){f||(f=[0,0,0,0]);this.callSuper("initialize",a);this.set("x1",f[0]);this.set("y1",f[1]);this.set("x2",f[2]);this.set("y2",f[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(f){f.beginPath();f.moveTo(-this.width/2,-this.height/2);f.lineTo(this.width/2, -this.height/2);var a=f.strokeStyle;f.strokeStyle=f.fillStyle;f.stroke();f.strokeStyle=a},complexity:function(){return 1},toObject:function(){return e.util.object.extend(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})}});e.Element.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");e.Line.fromElement=function(f,a){var c=e.parseAttributes(f,e.Element.ATTRIBUTE_NAMES);return new e.Line([c.x1||0,c.y1||0,c.x2||0,c.y2||0],e.util.object.extend(c, -a))};e.Line.fromObject=function(f){return new e.Line([f.x1,f.y1,f.x2,f.y2],f)}}})(); -(function(){var e=this.fabric||(this.fabric={}),f=Math.PI*2;if(e.Circle)console.warn("fabric.Circle is already defined.");else{e.Circle=e.util.createClass(e.Object,{type:"circle",initialize:function(a){a=a||{};this.set("radius",a.radius||0);this.callSuper("initialize",a);a=this.get("radius")*2*this.get("scaleX");this.set("width",a).set("height",a)},toObject:function(){return e.util.object.extend(this.callSuper("toObject"),{radius:this.get("radius")})},_render:function(a){a.beginPath();a.arc(0,0,this.radius, -0,f,false);this.fill&&a.fill();this.stroke&&a.stroke()},complexity:function(){return 1}});e.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity stroke stroke-width transform".split(" ");e.Circle.fromElement=function(a,c){var g=e.parseAttributes(a,e.Circle.ATTRIBUTE_NAMES);if(!("radius"in g&&g.radius>0))throw Error("value of `r` attribute is required and can not be negative");return new e.Circle(e.util.object.extend(g,c))};e.Circle.fromObject=function(a){return new e.Circle(a)}}})(); -(function(){var e=this.fabric||(this.fabric={});if(!e.Triangle){e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(f){f=f||{};this.callSuper("initialize",f);this.set("width",f.width||100).set("height",f.height||100)},_render:function(f){f.beginPath();f.moveTo(-this.width/2,this.height/2);f.lineTo(0,-this.height/2);f.lineTo(this.width/2,this.height/2);this.fill&&f.fill();this.stroke&&f.stroke()},complexity:function(){return 1}});e.Triangle.fromObject=function(f){return new e.Triangle(f)}}})(); -(function(){var e=this.fabric||(this.fabric={});if(e.Ellipse)console.warn("fabric.Ellipse is already defined.");else{e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",initialize:function(f){f=f||{};this.callSuper("initialize",f);this.set("rx",f.rx||0);this.set("ry",f.ry||0);this.set("width",this.get("rx")*2);this.set("height",this.get("ry")*2)},toObject:function(){return e.util.object.extend(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},render:function(f,a){if(!(this.rx=== -0||this.ry===0))return this.callSuper("render",f,a)},_render:function(f){f.beginPath();f.save();f.transform(1,0,0,this.ry/this.rx,0,0);f.arc(0,0,this.rx,0,Math.PI*2,false);f.restore();this.stroke&&f.stroke();this.fill&&f.fill()},complexity:function(){return 1}});e.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity stroke stroke-width transform".split(" ");e.Ellipse.fromElement=function(f,a){var c=e.parseAttributes(f,e.Ellipse.ATTRIBUTE_NAMES);return new e.Ellipse(e.util.object.extend(c,a))};e.Ellipse.fromObject= -function(f){return new e.Ellipse(f)}}})(); -(function(){var e=this.fabric||(this.fabric={});if(!e.Rect){e.Rect=e.util.createClass(e.Object,{type:"rect",options:{rx:0,ry:0},initialize:function(f){this.callSuper("initialize",f);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(f){var a=this.options.rx||0,c=this.options.ry||0,g=-this.width/2,h=-this.height/2,l=this.width,b=this.height;f.beginPath(); -f.moveTo(g+a,h);f.lineTo(g+l-a,h);f.bezierCurveTo(g+l,h,g+l,h+c,g+l,h+c);f.lineTo(g+l,h+b-c);f.bezierCurveTo(g+l,h+b,g+l-a,h+b,g+l-a,h+b);f.lineTo(g+a,h+b);f.bezierCurveTo(g,h+b,g,h+b-c,g,h+b-c);f.lineTo(g,h+c);f.bezierCurveTo(g,h,g+a,h,g+a,h);f.closePath();this.fill&&f.fill();this.stroke&&f.stroke()},_normalizeLeftTopProperties:function(f){f.left&&this.set("left",f.left+this.getWidth()/2);f.top&&this.set("top",f.top+this.getHeight()/2);return this},complexity:function(){return 1}});e.Rect.ATTRIBUTE_NAMES= -"x y width height rx ry fill fill-opacity stroke stroke-width transform".split(" ");e.Rect.fromElement=function(f,a){if(!f)return null;var c=e.parseAttributes(f,e.Rect.ATTRIBUTE_NAMES);c=c;c.left=c.left||0;c.top=c.top||0;c=c;var g=new e.Rect(e.util.object.extend(a||{},c));g._normalizeLeftTopProperties(c);return g};e.Rect.fromObject=function(f){return new e.Rect(f)}}})(); -(function(){var e=this.fabric||(this.fabric={});if(e.Polyline)console.warn("fabric.Polyline is already defined");else{e.Polyline=e.util.createClass(e.Object,{type:"polyline",initialize:function(a,c){c=c||{};this.set("points",a);this.callSuper("initialize",c);this._calcDimensions()},_calcDimensions:function(){return e.Polygon.prototype._calcDimensions.call(this)},_toOrigin:function(){return e.Polygon.prototype._toOrigin.call(this)},toObject:function(){return e.Polygon.prototype.toObject.call(this)}, -_render:function(a){var c;a.beginPath();for(var g=0,h=this.points.length;g"},toObject:function(){var a=e.util.object.extend(this.callSuper("toObject"),{path:this.path});if(this.sourcePath)a.sourcePath=this.sourcePath;if(this.transformMatrix)a.transformMatrix=this.transformMatrix;return a},toDatalessObject:function(){var a=this.toObject();if(this.sourcePath)a.path=this.sourcePath;delete a.sourcePath;return a},complexity:function(){return this.path.length},set:function(a,c){this.stub&&this.stub.set(a, -c);return this.callSuper("set",a,c)},_parsePath:function(){for(var a=[],c,g,h=0,l=this.path.length;h"}, -isSameColor:function(){var f=this.getObjects()[0].get("fill");return this.getObjects().every(function(a){return a.get("fill")===f})},complexity:function(){return this.paths.reduce(function(f,a){return f+(a&&a.complexity?a.complexity():0)},0)},toGrayscale:function(){for(var f=this.paths.length;f--;)this.paths[f].toGrayscale();return this},getObjects:function(){return this.paths}});e.PathGroup.fromObject=function(f){for(var a=f.paths,c=0,g=a.length;c"},getObjects:function(){return this.objects},add:function(f){this._restoreObjectsState();this.objects.push(f);f.setActive(true);this._calcBounds();this._updateObjectsCoords();return this},remove:function(f){this._restoreObjectsState();e.util.removeFromArray(this.objects,f);f.setActive(false);this._calcBounds(); -this._updateObjectsCoords();return this},size:function(){return this.getObjects().length},set:function(f,a){if(typeof a=="function")this.set(f,a(this[f]));else if(f==="fill"||f==="opacity"){var c=this.objects.length;for(this[f]=a;c--;)this.objects[c].set(f,a)}else this[f]=a;return this},contains:function(f){return this.objects.indexOf(f)>-1},toObject:function(){return e.util.object.extend(this.callSuper("toObject"),{objects:e.util.array.invoke(this.objects,"clone")})},render:function(f){f.save(); -this.transform(f);for(var a=Math.max(this.scaleX,this.scaleY),c=0,g=this.objects.length;cf.x&&h-cf.y},toGrayscale:function(){for(var f=this.objects.length;f--;)this.objects[f].toGrayscale()}});e.Group.fromObject= -function(f){return new e.Group(f.objects,f)}}})(); -(function(){var e=this.fabric||(this.fabric={});if(e.Text)console.warn("fabric.Text is already defined");else if(e.Object){e.Text=e.util.createClass(e.Object,{options:{top:10,left:10,fontsize:20,fontweight:100,fontfamily:"Modernist_One_400",path:null},type:"text",initialize:function(f,a){this.originalState={};this.initStateProperties();this.text=f;this.setOptions(a);e.util.object.extend(this,this.options);this.theta=this.angle*(Math.PI/180);this.width=this.getWidth();this.setCoords()},initStateProperties:function(){var f; -if((f=this.constructor)&&(f=f.superclass)&&(f=f.prototype)&&(f=f.stateProperties)&&f.clone){this.stateProperties=f.clone();this.stateProperties.push("fontfamily","fontweight","path")}},toString:function(){return"#"},_render:function(f){var a=Cufon.textOptions||(Cufon.textOptions={});a.left=this.left;a.top=this.top;a.context=f;a.color=this.fill;var c=this._initDummyElement();this.transform(f);Cufon.replaceElement(c, -{separate:"none",fontFamily:this.fontfamily});this.width=a.width;this.height=a.height},_initDummyElement:function(){var f=document.createElement("div");f.innerHTML=this.text;f.style.fontSize="40px";f.style.fontWeight="400";f.style.fontStyle="normal";f.style.letterSpacing="normal";f.style.color="#000000";f.style.fontWeight="600";f.style.fontFamily="Verdana";return f},render:function(f){f.save();this._render(f);if(this.active){this.drawBorders(f);this.drawCorners(f)}f.restore()},toObject:function(){return e.util.object.extend(this.callSuper("toObject"), -{text:this.text,fontsize:this.fontsize,fontweight:this.fontweight,fontfamily:this.fontfamily,path:this.path})},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,a){this[f]=a;if(f==="fontfamily")this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+a+"$3");return this}});e.Text.fromObject=function(f){return new e.Text(f.text, -e.util.object.clone(f))};e.Text.fromElement=function(){}}else console.warn("fabric.Text requires fabric.Object")})(); -(function(){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(e,f){this.callSuper("initialize",f);this._initElement(e);this._initConfig(f||{})},getElement:function(){return this._element},setElement:function(e){this._element=e;return this}, -getNormalizedSize:function(e,f,a){if(a&&f&&e.width>e.height&&e.width/e.heighte.width||e.height>a)){normalizedWidth=Math.floor(e.width*a/e.height);normalizedHeight=a}else if(f&&f'},clone:function(e){this.constructor.fromObject(this.toObject(),e)},toGrayscale:function(e){if(!this.__isGrayscaled){var f=this.getElement(),a=document.createElement("canvas"),c=document.createElement("img"),g=this;a.width=f.width;a.height=f.height;a.getContext("2d").drawImage(f,0,0);fabric.Element.toGrayscale(a);c.onload=function(){g.setElement(c);e&&e();c.onload=a=f=imageData=null};c.width=f.width;c.height=f.height;c.src=a.toDataURL("image/png"); -this.__isGrayscaled=true;return this}},_render:function(e){var f=this.getOriginalSize();e.drawImage(this.getElement(),-f.width/2,-f.height/2,f.width,f.height)},_adjustWidthHeightToBorders:function(e){if(e){this.currentBorder=this.borderwidth;this.width+=2*this.currentBorder;this.height+=2*this.currentBorder}else this.currentBorder=0},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width);this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)); -fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){this.setOptions(e);this._setBorder();this._setWidthHeight(e)},_setBorder:function(){this.currentBorder=this.bordervisibility?this.borderwidth:0},_setWidthHeight:function(){var e=2*this.currentBorder;this.width=(this.getElement().width||0)+e;this.height=(this.getElement().height||0)+e}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.fromObject=function(e,f){var a=document.createElement("img"),c=e.src;if(e.width)a.width= -e.width;if(e.height)a.height=e.height;a.onload=function(){f&&f(new fabric.Image(a,e));a=a.onload=null};a.src=c};fabric.Image.fromURL=function(e,f,a){var c=document.createElement("img");c.onload=function(){f&&f(new fabric.Image(c,a));c=c.onload=null};c.src=e}}else console.warn("fabric.Object is required for fabric.Image initialization")})(); diff --git a/dist/all.min-via-goog-cc.js.gz b/dist/all.min-via-goog-cc.js.gz deleted file mode 100644 index 85b87ec4cddaca875ccb87ffa67c480fc745a19e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21953 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 G in r){G=parseInt(G, -10);if(!B||GC)C=G;z.push(G)}if(kC)k=C;z.sort(function(F,H){return(x?F>k&&H>k?FH:FH:F=d.length+r)for(t=true;r=b.shift();r());else setTimeout(arguments.callee,10)});return function(r){t?r():b.push(r)}}(),supports:function(t,b){var d=document.createElement("span").style;if(d[t]===undefined)return false;d[t]=b;return d[t]===b},textAlign:function(t,b,d,k){if(b.get("textAlign")=="right"){if(d>0)t=" "+t}else if(du)u=r;if(k>v)v=k;if(r.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}}'); -return function(f,h,p,l,e,a,c){var g=h===null;if(g)h=e.alt;var n=f.viewBox,q;if(!(q=p.computedFontSize)){q=Cufon.CSS.Size;var s;s=p.get("fontSize");s=m(a,/(?:em|ex|%)$/i.test(s)?"1em":s);q=p.computedFontSize=new q(s+"px",f.baseSize)}q=q;s=p.computedLSpacing;if(s==undefined){s=p.get("letterSpacing");p.computedLSpacing=s=s=="normal"?0:~~q.convertFrom(m(a,s))}var w;if(g){w=e;e=e.firstChild}else{w=document.createElement("span");w.className="cufon cufon-vml";w.alt=h;e=document.createElement("span");e.className= -"cufon-vml-canvas";w.appendChild(e);if(l.printable){var y=document.createElement("span");y.className="cufon-alt";y.appendChild(document.createTextNode(h));w.appendChild(y)}c||w.appendChild(document.createElement("cvml:shape"))}c=w.style;var A=e.style,u=q.convert(n.height);y=Math.ceil(u);u=y/u;var v=n.minX,E=n.minY;A.height=y;A.top=Math.round(q.convert(E-f.ascent));A.left=Math.round(q.convert(v));c.height=q.convert(f.height)+"px";l.enableTextDecoration&&Cufon.CSS.textDecoration(a,p);a=p.get("color"); -h=Cufon.CSS.textTransform(h,p).split("");A=p=0;var D=null,t;l=l.textShadow;for(var b=0,d=0,k=h.length;b>>0;e=Number(e)||0;e=Math[e<0?"ceil":"floor"](e);if(e<0)e+=a;for(;e>>0;a>>0;c>>0;a>>0;a>>0;g>>0,a=0,c;if(arguments.length>1)c=arguments[1];else{do{if(a in this){c=this[a++];break}if(++a>=e)throw new TypeError;}while(1)}for(;a=c)c=l[a][e]}else for(;a--;)if(l[a]>=c)c=l[a];return c}};f.util.object={extend:m,clone:function(l){return m({},l)}};if(!String.prototype.trim)String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/, -"").replace(/[\s\xA0]+$/,"")};f.util.string={camelize:function(l){return l.replace(/-+(.)?/g,function(e,a){return a?a.toUpperCase():""})},capitalize:function(l){return l.charAt(0).toUpperCase()+l.slice(1).toLowerCase()}};if(!Function.prototype.bind)Function.prototype.bind=function(l){var e=this,a=h.call(arguments,1);return a.length?function(){return p.call(e,l,a.concat(h.call(arguments)))}:function(){return p.call(e,l,arguments)}};(function(){function l(){}var e;e=function(){for(var a in{toString:1})if(a=== -"toString")return false;return true}()?function(a,c){if(c.toString!==Object.prototype.toString)a.prototype.toString=c.toString;if(c.valueOf!==Object.prototype.valueOf)a.prototype.valueOf=c.valueOf;for(var g in c)a.prototype[g]=c[g]}:function(a,c){for(var g in c)a.prototype[g]=c[g]};f.util.createClass=function(){function a(){this.initialize.apply(this,arguments)}var c=null,g=h.call(arguments,0);if(typeof g[0]==="function")c=g.shift();a.superclass=c;a.subclasses=[];if(c){l.prototype=c.prototype;a.prototype= -new l;c.subclasses.push(a)}c=0;for(var n=g.length;c=0.9999?"":"alpha(opacity="+n*100+")";q.filter=q.filter.replace(a,n)}else q.filter+=" alpha(opacity="+n*100+")";return g};f.util.setStyle=function(g,n){var q=g.style;if(typeof n==="string"){g.style.cssText+=";"+n;return n.indexOf("opacity")>-1?c(g,n.match(/opacity:\s*(\d?\.?\d*)/)[1]):g}for(var s in n)if(s==="opacity")c(g,n[s]); -else q[s==="float"||s==="cssFloat"?typeof q.styleFloat==="undefined"?"cssFloat":"styleFloat":s]=n[s];return g}})();(function(){var l=document.documentElement.style,e="userSelect"in l?"userSelect":"MozUserSelect"in l?"MozUserSelect":"WebkitUserSelect"in l?"WebkitUserSelect":"KhtmlUserSelect"in l?"KhtmlUserSelect":"";f.util.makeElementUnselectable=function(a){if(typeof a.onselectstart!=="undefined")a.onselectstart=f.util.falseFunction;if(e)a.style[e]="none";else if(typeof a.unselectable=="string")a.unselectable= -"on";return a}})();(function(){function l(a,c){e.load(a);c()}f.util.getScript=function(a,c){var g=document.getElementsByTagName("head")[0],n=document.createElement("script"),q=true;n.type="text/javascript";n.setAttribute("runat","server");n.onload=n.onreadystatechange=function(s){if(q)if(!(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")){q=false;c(s||window.event);n=n.onload=n.onreadystatechange=null}};n.src=a;g.appendChild(n)};var e=this.Jaxer;if(e&&e.load)f.util.getScript= -l})();f.util.getById=function(l){return typeof l==="string"?document.getElementById(l):l};f.util.toArray=function(l){for(var e=[],a=l.length;a--;)e[a]=l[a];return e};f.util.makeElement=o;f.util.addClass=function(l,e){if((" "+l.className+" ").indexOf(" "+e+" ")===-1)l.className+=(l.className?" ":"")+e};f.util.wrapElement=function(l,e,a){if(typeof e==="string")e=o(e,a);l.parentNode&&l.parentNode.replaceChild(e,l);e.appendChild(l);return e};f.util.getElementOffset=function(l){var e=0,a=0;do{e+=l.offsetTop|| -0;a+=l.offsetLeft||0;l=l.offsetParent}while(l);return{left:a,top:e}};f.util.animate=function(l){l||(l={});var e=+new Date,a=l.duration||500,c=e+a,g,n,q=l.onChange||function(){},s=l.easing||function(v){return-Math.cos(v*Math.PI)/2+0.5},w="startValue"in l?l.startValue:0,y="endValue"in l?l.endValue:100,A=w>y;l.onStart&&l.onStart();var u=setInterval(function(){g=+new Date;n=g>c?1:(g-e)/a;q(A?w-(w-y)*s(n):w+(y-w)*s(n));if(g>c){clearInterval(u);l.onComplete&&l.onComplete()}},10)};(function(){function l(){} -var e=function(){for(var a=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],c=a.length;c--;)try{if(a[c]())return a[c]}catch(g){}}();f.util.request=function(a,c){c||(c={});var g=c.method?c.method.toUpperCase():"GET",n=c.onComplete||function(){},q=e(),s;q.onreadystatechange=function(){if(q.readyState===4){n(q);q.onreadystatechange=l}};if(g=== -"GET"){s=null;if(typeof c.parameters=="string")a=a+(/\?/.test(a)?"&":"?")+c.parameters}q.open(g,a,true);if(g==="POST"||g==="PUT")q.setRequestHeader("Content-Type","application/x-www-form-urlencoded");q.send(s);return q}})()})(this); -(function(){var m=this.fabric||(this.fabric={}),o=m.util.object.extend,f=m.util.string.capitalize,h=m.util.object.clone,p={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix"};m.parseTransformAttribute=function(){function l(q,s){var w=s[0];q[0]=Math.cos(w);q[1]=Math.sin(w);q[2]=-Math.sin(w);q[3]=Math.cos(w)}function e(q,s){var w=s.length===2?s[1]:s[0];q[0]=s[0];q[3]=w}function a(q,s){q[4]=s[0];if(s.length=== -2)q[5]=s[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*$"), -n=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 s=c.concat();if(!q||q&&!g.test(q))return s;q.replace(n,function(w){var y=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(w).filter(function(A){return A!== -""&&A!=null});w=y[1];y=y.slice(2).map(parseFloat);switch(w){case "translate":a(s,y);break;case "rotate":l(s,y);break;case "scale":e(s,y);break;case "skewX":s[2]=y[0];break;case "skewY":s[1]=y[0];break;case "matrix":s=y;break}});return s}}();m.parseSVGDocument=function(){var l=/^(path|circle|polygon|polyline|ellipse|rect|line)$/,e=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=m.util.toArray(a.getElementsByTagName("*")).filter(function(A){var u;if(u=l.test(A.tagName)){a:{for(A=A;A&&(A=A.parentNode);)if(A.nodeName==="pattern"){A=true;break a}A=false}u=!A}return u});if(!(!g||g&&!g.length)){var n=a.getAttribute("viewBox"),q=a.getAttribute("width"),s=a.getAttribute("height"),w=null,y=null;if(n&&(n=n.match(e))){parseInt(n[1],10);parseInt(n[2],10);w=parseInt(n[3],10);y=parseInt(n[4],10)}w=q?parseFloat(q):w;y=s?parseFloat(s):y;n={width:w,height:y}; -g=m.parseElements(g,h(n));!g||g&&!g.length||c&&c(g,n)}}}}();o(m,{parseAttributes:function(l,e){if(l){var a,c,g={};if(l.parentNode&&/^g$/i.test(l.parentNode.nodeName))g=m.parseAttributes(l.parentNode,e);var n=e.reduce(function(q,s){a=l.getAttribute(s);c=parseFloat(a);if(a){if((s==="fill"||s==="stroke")&&a==="none")a="";if(s==="fill-rule")a=a==="evenodd"?"destination-over":a;if(s==="transform")a=m.parseTransformAttribute(a);if(s in p)s=p[s];q[s]=isNaN(c)?a:c}return q},{});n=o(m.parseStyleAttribute(l), -n);return o(g,n)}},parseElements:function(l,e){var a=l.map(function(c){var g=m[f(c.tagName)];if(g&&g.fromElement)try{return g.fromElement(c,e)}catch(n){m.log(n.message||n)}});return a=a.filter(function(c){return c!=null})},parseStyleAttribute:function(l){var e={};if(l=l.getAttribute("style"))if(typeof l=="string"){l=l.split(";");l.pop();e=l.reduce(function(c,g){var n=g.split(":"),q=n[0].trim();n=n[1].trim();c[q]=n;return c},{})}else for(var a in l)if(typeof l[a]!=="undefined")e[a]=l[a];return e}, -parsePointsAttribute:function(l){if(!l)return null;l=l.trim();var e=l.indexOf(",")>-1;l=l.split(/\s+/);var a=[];if(e){e=0;for(var c=l.length;e0&&this.init(f,h)}var o=this.fabric||(this.fabric={});if(o.Point)o.warn("fabric.Point is already defined");else{o.Point=m;m.prototype={constructor:m,init:function(f,h){this.x=f;this.y=h},add:function(f){return new m(this.x+f.x,this.y+f.y)},addEquals:function(f){this.x+=f.x;this.y+=f.y;return this},scalarAdd:function(f){return new m(this.x+f,this.y+f)},scalarAddEquals:function(f){this.x+=f;this.y+=f;return this},subtract:function(f){return new m(this.x- -f.x,this.y-f.y)},subtractEquals:function(f){this.x-=f.x;this.y-=f.y;return this},scalarSubtract:function(f){return new m(this.x-f,this.y-f)},scalarSubtractEquals:function(f){this.x-=f;this.y-=f;return this},multiply:function(f){return new m(this.x*f,this.y*f)},multiplyEquals:function(f){this.x*=f;this.y*=f;return this},divide:function(f){return new m(this.x/f,this.y/f)},divideEquals:function(f){this.x/=f;this.y/=f;return this},eq:function(f){return this.x==f.x&&this.y==f.y},lt:function(f){return this.x< -f.x&&this.yf.x&&this.y>f.y},gte:function(f){return this.x>=f.x&&this.y>=f.y},lerp:function(f,h){return new m(this.x+(f.x-this.x)*h,this.y+(f.y-this.y)*h)},distanceFrom:function(f){var h=this.x-f.x;f=this.y-f.y;return Math.sqrt(h*h+f*f)},min:function(f){return new m(Math.min(this.x,f.x),Math.min(this.y,f.y))},max:function(f){return new m(Math.max(this.x,f.x),Math.max(this.y,f.y))},toString:function(){return this.x+ -","+this.y},setXY:function(f,h){this.x=f;this.y=h},setFromPoint:function(f){this.x=f.x;this.y=f.y},swap:function(f){var h=this.x,p=this.y;this.x=f.x;this.y=f.y;f.x=h;f.y=p}}}})(); -(function(){function m(f){arguments.length>0&&this.init(f)}var o=this.fabric||(this.fabric={});if(o.Intersection)o.warn("fabric.Intersection is already defined");else{o.Intersection=m;o.Intersection.prototype={init:function(f){this.status=f;this.points=[]},appendPoint:function(f){this.points.push(f)},appendPoints:function(f){this.points=this.points.concat(f)}};o.Intersection.intersectLineLine=function(f,h,p,l){var e,a=(l.x-p.x)*(f.y-p.y)-(l.y-p.y)*(f.x-p.x);e=(h.x-f.x)*(f.y-p.y)-(h.y-f.y)*(f.x-p.x); -p=(l.y-p.y)*(h.x-f.x)-(l.x-p.x)*(h.y-f.y);if(p!=0){a=a/p;e=e/p;if(0<=a&&a<=1&&0<=e&&e<=1){e=new m("Intersection");e.points.push(new o.Point(f.x+a*(h.x-f.x),f.y+a*(h.y-f.y)))}else e=new m("No Intersection")}else e=a==0||e==0?new m("Coincident"):new m("Parallel");return e};o.Intersection.intersectLinePolygon=function(f,h,p){for(var l=new m("No Intersection"),e=p.length,a=0;a0)l.status="Intersection";return l}; -o.Intersection.intersectPolygonPolygon=function(f,h){for(var p=new m("No Intersection"),l=f.length,e=0;e0)p.status="Intersection";return p};o.Intersection.intersectPolygonRectangle=function(f,h,p){var l=h.min(p),e=h.max(p);p=new o.Point(e.x,l.y);var a=new o.Point(l.x,e.y);h=m.intersectLinePolygon(l,p,f);p=m.intersectLinePolygon(p,e,f);e=m.intersectLinePolygon(e,a,f);f=m.intersectLinePolygon(a,l,f); -l=new m("No Intersection");l.appendPoints(h.points);l.appendPoints(p.points);l.appendPoints(e.points);l.appendPoints(f.points);if(l.points.length>0)l.status="Intersection";return l}}})(); -(function(){function m(f){f?this._tryParsingColor(f):this.setSource([0,0,0,1])}var o=this.fabric||(this.fabric={});if(o.Color)o.warn("fabric.Color is already defined.");else{o.Color=m;o.Color.prototype={_tryParsingColor:function(f){var h=m.sourceFromHex(f);h||(h=m.sourceFromRgb(f));h&&this.setSource(h)},getSource:function(){return this._source},setSource:function(f){this._source=f},toRgb:function(){var f=this.getSource();return"rgb("+f[0]+","+f[1]+","+f[2]+")"},toRgba:function(){var f=this.getSource(); -return"rgba("+f[0]+","+f[1]+","+f[2]+","+f[3]+")"},toHex:function(){var f=this.getSource(),h=f[0].toString(16);h=h.length==1?"0"+h:h;var p=f[1].toString(16);p=p.length==1?"0"+p:p;f=f[2].toString(16);f=f.length==1?"0"+f:f;return h.toUpperCase()+p.toUpperCase()+f.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(f){var h=this.getSource();h[3]=f;this.setSource(h);return this},toGrayscale:function(){var f=this.getSource(),h=parseInt((f[0]*0.3+f[1]*0.59+f[2]*0.11).toFixed(0), -10);this.setSource([h,h,h,f[3]]);return this},toBlackWhite:function(f){var h=this.getSource(),p=(h[0]*0.3+h[1]*0.59+h[2]*0.11).toFixed(0);h=h[3];f=f||127;p=Number(p)0?0:-d),b.ey-(k>0?0:-k),r,x);this.contextTop.lineWidth=this.selectionLineWidth;this.contextTop.strokeStyle=this.selectionBorderColor;this.contextTop.strokeRect(b.ex+0.5-(d>0?0:r),b.ey+0.5-(k>0?0:x),r,x)},_findSelectedObjects:function(){var b=[],d=this._groupSelector.ex,k=this._groupSelector.ey,r=d+this._groupSelector.left,x=k+this._groupSelector.top,z=new fabric.Point(v(d,r),v(k,x));k=new fabric.Point(E(d,r),E(k,x));r=0;for(x=this._objects.length;r1){b=new fabric.Group(b);this.setActiveGroup(b);b.saveCoords();l("group:selected",{target:b})}this.renderAll()},add:function(){this._objects.push.apply(this._objects,arguments);this.renderAll();return this},insertAt:function(b,d){this._objects.splice(d,0,b);this.renderAll();return this},getObjects:function(){return this._objects},getContext:function(){return this.contextTop}, -clearContext:function(b){b.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(b){var d=this._config.width,k=this._config.height,r=b?this.contextTop:this.contextContainer;this.clearContext(this.contextTop);b||this.clearContext(r);r.fillStyle=this.backgroundColor;r.fillRect(0,0,d,k);b=this._objects.length;d=this.getActiveGroup(); -k=new Date;if(b)for(var x=0;x1?new fabric.PathGroup(I,C):I[0];I.setSourcePath(H);if(!(I instanceof fabric.PathGroup)){f(I,C);typeof C.angle!=="undefined"&&I.setAngle(C.angle)}k(I,G)})}, -this)}catch(B){fabric.log(B.message)}},loadImageFromURL:function(){var b={};return function(d,k){function r(){var B=o.getElementById(b[d]);B.width&&B.height?k(new fabric.Image(B)):setTimeout(r,50)}var x=this;if(b[d])r();else{var z=new Image;z.onload=function(){z.onload=null;x._resizeImageToFit(z);var B=new fabric.Image(z);k(B)};z.className="canvas-img-clone";z.src=d;if(this.shouldCacheImages)b[d]=Element.identify(z);o.body.appendChild(z)}}}(),loadSVGFromURL:function(b,d){function k(z){if(z=z.responseXML)(z= -z.documentElement)&&fabric.parseSVGDocument(z,function(B,C){x.cache.set(b,{objects:B.invoke("toObject"),options:C});d(B,C)})}function r(){fabric.log("ERROR!")}var x=this;b=b.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();this.cache.has(b,function(z){if(z)x.cache.get(b,function(B){B=x._enlivenCachedObject(B);d(B.objects,B.options)});else new Ajax.Request(b,{method:"get",onComplete:k,onFailure:r})})},_enlivenCachedObject:function(b){var d=b.objects;b=b.options;d=d.map(function(k){return fabric[h(k.type)].fromObject(k)}); -return{objects:d,options:b}},remove:function(b){c(this._objects,b);this.renderAll();return b},fxRemove:function(b,d){var k=this;b.fxRemove({onChange:this.renderAll.bind(this),onComplete:function(){k.remove(b);typeof d==="function"&&d()}});return this},sendToBack:function(b){c(this._objects,b);this._objects.unshift(b);return this.renderAll()},bringToFront:function(b){c(this._objects,b);this._objects.push(b);return this.renderAll()},sendBackwards:function(b){var d=this._objects.indexOf(b),k=d;if(d!== -0){for(d=d-1;d>=0;--d)if(b.intersectsWithObject(this._objects[d])){k=d;break}c(this._objects,b);this._objects.splice(k,0,b)}return this.renderAll()},bringForward:function(b){var d=this.getObjects(),k=d.indexOf(b),r=k;if(k!==d.length-1){k=k+1;for(var x=this._objects.length;k"};f(fabric.Element,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(b){var d=b.getContext("2d");b=d.getImageData(0,0,b.width,b.height);var k=b.data,r=b.width,x=b.height,z,B;for(i=0;i1?c.apply(this,e.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=o(this._getOptions(),a)},_getOptions:function(){return o(f(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:h(this.left,this.NUM_FRACTION_DIGITS),top:h(this.top,this.NUM_FRACTION_DIGITS),width:h(this.width,this.NUM_FRACTION_DIGITS),height:h(this.height,this.NUM_FRACTION_DIGITS),fill:this.fill,overlayFill:this.overlayFill,stroke:this.stroke, -strokeWidth:this.strokeWidth,scaleX:h(this.scaleX,this.NUM_FRACTION_DIGITS),scaleY:h(this.scaleY,this.NUM_FRACTION_DIGITS),angle:h(this.getAngle(),this.NUM_FRACTION_DIGITS),flipX:this.flipX,flipY:this.flipY,opacity:h(this.opacity,this.NUM_FRACTION_DIGITS)};this.includeDefaultValues||(a=this._removeDefaultValues(a));return a},toDatalessObject:function(){return this.toObject()},_removeDefaultValues:function(a){var c=m.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")&&c400;if(d==500)d=400;for(var E in n){E=parseInt(E, +10);if(!y||ED)D=E;x.push(E)}if(dD)d=D;x.sort(function(G,H){return(u?G>d&&H>d?GH:GH:G=c.length+n)for(r=true;n=s.shift();n());else setTimeout(arguments.callee,10)});return function(n){r?n():s.push(n)}}(),supports:function(r,s){var c=document.createElement("span").style;if(c[r]===undefined)return false;c[r]=s;return c[r]===s},textAlign:function(r,s,c,d){if(s.get("textAlign")=="right"){if(c>0)r=" "+r}else if(cB)B=n;if(d>v)v=d;if(n.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}}'); +return function(f,k,m,p,h,e,a){var b=k===null;if(b)k=h.alt;var g=f.viewBox,o;if(!(o=m.computedFontSize)){o=Cufon.CSS.Size;var q;q=m.get("fontSize");q=z(e,/(?:em|ex|%)$/i.test(q)?"1em":q);o=m.computedFontSize=new o(q+"px",f.baseSize)}o=o;q=m.computedLSpacing;if(q==undefined){q=m.get("letterSpacing");m.computedLSpacing=q=q=="normal"?0:~~o.convertFrom(z(e,q))}var t;if(b){t=h;h=h.firstChild}else{t=document.createElement("span");t.className="cufon cufon-vml";t.alt=k;h=document.createElement("span");h.className= +"cufon-vml-canvas";t.appendChild(h);if(p.printable){var A=document.createElement("span");A.className="cufon-alt";A.appendChild(document.createTextNode(k));t.appendChild(A)}a||t.appendChild(document.createElement("cvml:shape"))}a=t.style;var w=h.style,B=o.convert(g.height);A=Math.ceil(B);B=A/B;var v=g.minX,C=g.minY;w.height=A;w.top=Math.round(o.convert(C-f.ascent));w.left=Math.round(o.convert(v));a.height=o.convert(f.height)+"px";p.enableTextDecoration&&Cufon.CSS.textDecoration(e,m);e=m.get("color"); +k=Cufon.CSS.textTransform(k,m).split("");w=m=0;var F=null,r;p=p.textShadow;for(var s=0,c=0,d=k.length;s>>0;e=Number(e)||0;e=Math[e<0?"ceil":"floor"](e);if(e<0)e+=a;for(;e>>0;a>>0;b>>0;a>>0;a>>0;g>>0,a=0,b;if(arguments.length>1)b=arguments[1];else{do{if(a in this){b=this[a++];break}if(++a>=e)throw new TypeError;}while(1)}for(;a=b)b=h[a][e]}else for(;a--;)if(h[a]>=b)b=h[a];return b}};k.util.object={extend:l,clone:function(h){return l({},h)}};if(!String.prototype.trim)String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}; +k.util.string={camelize:function(h){return h.replace(/-+(.)?/g,function(e,a){return a?a.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,a=m.call(arguments,1);return a.length?function(){return p.call(e,h,a.concat(m.call(arguments)))}:function(){return p.call(e,h,arguments)}};(function(){function h(){}var e;e=function(){for(var a in{toString:1})if(a==="toString")return false; +return true}()?function(a,b){if(b.toString!==Object.prototype.toString)a.prototype.toString=b.toString;if(b.valueOf!==Object.prototype.valueOf)a.prototype.valueOf=b.valueOf;for(var g in b)a.prototype[g]=b[g]}:function(a,b){for(var g in b)a.prototype[g]=b[g]};k.util.createClass=function(){function a(){this.initialize.apply(this,arguments)}var b=null,g=m.call(arguments,0);if(typeof g[0]==="function")b=g.shift();a.superclass=b;a.subclasses=[];if(b){h.prototype=b.prototype;a.prototype=new h;b.subclasses.push(a)}b= +0;for(var o=g.length;b=0.9999?"":"alpha(opacity="+o*100+")";q.filter=q.filter.replace(a,o)}else q.filter+=" alpha(opacity="+o*100+")";return g};k.util.setStyle=function(g,o){var q=g.style;if(typeof o==="string"){g.style.cssText+=";"+o;return o.indexOf("opacity")>-1?b(g,o.match(/opacity:\s*(\d?\.?\d*)/)[1]):g}for(var t in o)if(t==="opacity")b(g,o[t]);else q[t==="float"||t==="cssFloat"?typeof q.styleFloat=== +"undefined"?"cssFloat":"styleFloat":t]=o[t];return g}})();(function(){var h=document.documentElement.style,e="userSelect"in h?"userSelect":"MozUserSelect"in h?"MozUserSelect":"WebkitUserSelect"in h?"WebkitUserSelect":"KhtmlUserSelect"in h?"KhtmlUserSelect":"";k.util.makeElementUnselectable=function(a){if(typeof a.onselectstart!=="undefined")a.onselectstart=k.util.falseFunction;if(e)a.style[e]="none";else if(typeof a.unselectable=="string")a.unselectable="on";return a}})();(function(){function h(a, +b){e.load(a);b()}k.util.getScript=function(a,b){var g=document.getElementsByTagName("head")[0],o=document.createElement("script"),q=true;o.type="text/javascript";o.setAttribute("runat","server");o.onload=o.onreadystatechange=function(t){if(q)if(!(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")){q=false;b(t||window.event);o=o.onload=o.onreadystatechange=null}};o.src=a;g.appendChild(o)};var e=z.Jaxer;if(e&&e.load)k.util.getScript=h})();k.util.getById=function(h){return typeof h=== +"string"?document.getElementById(h):h};k.util.toArray=function(h){for(var e=[],a=h.length;a--;)e[a]=h[a];return e};k.util.makeElement=f;k.util.addClass=function(h,e){if((" "+h.className+" ").indexOf(" "+e+" ")===-1)h.className+=(h.className?" ":"")+e};k.util.wrapElement=function(h,e,a){if(typeof e==="string")e=f(e,a);h.parentNode&&h.parentNode.replaceChild(e,h);e.appendChild(h);return e};k.util.getElementOffset=function(h){var e=0,a=0;do{e+=h.offsetTop||0;a+=h.offsetLeft||0;h=h.offsetParent}while(h); +return{left:a,top:e}};k.util.animate=function(h){h||(h={});var e=+new Date,a=h.duration||500,b=e+a,g,o,q=h.onChange||function(){},t=h.easing||function(C){return-Math.cos(C*Math.PI)/2+0.5},A="startValue"in h?h.startValue:0,w="endValue"in h?h.endValue:100,B=A>w;h.onStart&&h.onStart();var v=setInterval(function(){g=+new Date;o=g>b?1:(g-e)/a;q(B?A-(A-w)*t(o):A+(w-A)*t(o));if(g>b){clearInterval(v);h.onComplete&&h.onComplete()}},10)};(function(){function h(){}var e=function(){for(var a=[function(){return new ActiveXObject("Microsoft.XMLHTTP")}, +function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],b=a.length;b--;)try{if(a[b]())return a[b]}catch(g){}}();k.util.request=function(a,b){b||(b={});var g=b.method?b.method.toUpperCase():"GET",o=b.onComplete||function(){},q=e(),t;q.onreadystatechange=function(){if(q.readyState===4){o(q);q.onreadystatechange=h}};if(g==="GET"){t=null;if(typeof b.parameters=="string")a=a+(/\?/.test(a)?"&":"?")+b.parameters}q.open(g, +a,true);if(g==="POST"||g==="PUT")q.setRequestHeader("Content-Type","application/x-www-form-urlencoded");q.send(t);return q}})()})(this); +(function(z){var l=z.fabric||(z.fabric={}),f=l.util.object.extend,k=l.util.string.capitalize,m=l.util.object.clone,p={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix"};l.parseTransformAttribute=function(){function h(q,t){var A=t[0];q[0]=Math.cos(A);q[1]=Math.sin(A);q[2]=-Math.sin(A);q[3]=Math.cos(A)}function e(q,t){var A=t.length===2?t[1]:t[0];q[0]=t[0];q[3]=A}function a(q,t){q[4]=t[0];if(t.length=== +2)q[5]=t[1]}var b=[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*$"), +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 t=b.concat();if(!q||q&&!g.test(q))return t;q.replace(o,function(A){var w=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(A).filter(function(B){return B!== +""&&B!=null});A=w[1];w=w.slice(2).map(parseFloat);switch(A){case "translate":a(t,w);break;case "rotate":h(t,w);break;case "scale":e(t,w);break;case "skewX":t[2]=w[0];break;case "skewY":t[1]=w[0];break;case "matrix":t=w;break}});return t}}();l.parseSVGDocument=function(){var h=/^(path|circle|polygon|polyline|ellipse|rect|line)$/,e=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,b){if(a){var g=l.util.toArray(a.getElementsByTagName("*")).filter(function(B){var v;if(v=h.test(B.tagName)){a:{for(B=B;B&&(B=B.parentNode);)if(B.nodeName==="pattern"){B=true;break a}B=false}v=!B}return v});if(!(!g||g&&!g.length)){var o=a.getAttribute("viewBox"),q=a.getAttribute("width"),t=a.getAttribute("height"),A=null,w=null;if(o&&(o=o.match(e))){parseInt(o[1],10);parseInt(o[2],10);A=parseInt(o[3],10);w=parseInt(o[4],10)}A=q?parseFloat(q):A;w=t?parseFloat(t):w;o={width:A,height:w}; +g=l.parseElements(g,m(o));!g||g&&!g.length||b&&b(g,o)}}}}();f(l,{parseAttributes:function(h,e){if(h){var a,b,g={};if(h.parentNode&&/^g$/i.test(h.parentNode.nodeName))g=l.parseAttributes(h.parentNode,e);var o=e.reduce(function(q,t){a=h.getAttribute(t);b=parseFloat(a);if(a){if((t==="fill"||t==="stroke")&&a==="none")a="";if(t==="fill-rule")a=a==="evenodd"?"destination-over":a;if(t==="transform")a=l.parseTransformAttribute(a);if(t in p)t=p[t];q[t]=isNaN(b)?a:b}return q},{});o=f(l.parseStyleAttribute(h), +o);return f(g,o)}},parseElements:function(h,e){var a=h.map(function(b){var g=l[k(b.tagName)];if(g&&g.fromElement)try{return g.fromElement(b,e)}catch(o){l.log(o.message||o)}});return a=a.filter(function(b){return b!=null})},parseStyleAttribute:function(h){var e={};if(h=h.getAttribute("style"))if(typeof h=="string"){h=h.split(";");h.pop();e=h.reduce(function(b,g){var o=g.split(":"),q=o[0].trim();o=o[1].trim();b[q]=o;return b},{})}else for(var a in h)if(typeof h[a]!=="undefined")e[a]=h[a];return e}, +parsePointsAttribute:function(h){if(!h)return null;h=h.trim();var e=h.indexOf(",")>-1;h=h.split(/\s+/);var a=[];if(e){e=0;for(var b=h.length;e0&&this.init(f,k)}z=z.fabric||(z.fabric={});if(z.Point)z.warn("fabric.Point is already defined");else{z.Point=l;l.prototype={constructor:l,init:function(f,k){this.x=f;this.y=k},add:function(f){return new l(this.x+f.x,this.y+f.y)},addEquals:function(f){this.x+=f.x;this.y+=f.y;return this},scalarAdd:function(f){return new l(this.x+f,this.y+f)},scalarAddEquals:function(f){this.x+=f;this.y+=f;return this},subtract:function(f){return new l(this.x-f.x,this.y- +f.y)},subtractEquals:function(f){this.x-=f.x;this.y-=f.y;return this},scalarSubtract:function(f){return new l(this.x-f,this.y-f)},scalarSubtractEquals:function(f){this.x-=f;this.y-=f;return this},multiply:function(f){return new l(this.x*f,this.y*f)},multiplyEquals:function(f){this.x*=f;this.y*=f;return this},divide:function(f){return new l(this.x/f,this.y/f)},divideEquals:function(f){this.x/=f;this.y/=f;return this},eq:function(f){return this.x==f.x&&this.y==f.y},lt:function(f){return this.xf.x&&this.y>f.y},gte:function(f){return this.x>=f.x&&this.y>=f.y},lerp:function(f,k){return new l(this.x+(f.x-this.x)*k,this.y+(f.y-this.y)*k)},distanceFrom:function(f){var k=this.x-f.x;f=this.y-f.y;return Math.sqrt(k*k+f*f)},min:function(f){return new l(Math.min(this.x,f.x),Math.min(this.y,f.y))},max:function(f){return new l(Math.max(this.x,f.x),Math.max(this.y,f.y))},toString:function(){return this.x+","+this.y}, +setXY:function(f,k){this.x=f;this.y=k},setFromPoint:function(f){this.x=f.x;this.y=f.y},swap:function(f){var k=this.x,m=this.y;this.x=f.x;this.y=f.y;f.x=k;f.y=m}}}})(this); +(function(z){function l(k){arguments.length>0&&this.init(k)}var f=z.fabric||(z.fabric={});if(f.Intersection)f.warn("fabric.Intersection is already defined");else{f.Intersection=l;f.Intersection.prototype={init:function(k){this.status=k;this.points=[]},appendPoint:function(k){this.points.push(k)},appendPoints:function(k){this.points=this.points.concat(k)}};f.Intersection.intersectLineLine=function(k,m,p,h){var e,a=(h.x-p.x)*(k.y-p.y)-(h.y-p.y)*(k.x-p.x);e=(m.x-k.x)*(k.y-p.y)-(m.y-k.y)*(k.x-p.x);p= +(h.y-p.y)*(m.x-k.x)-(h.x-p.x)*(m.y-k.y);if(p!=0){a=a/p;e=e/p;if(0<=a&&a<=1&&0<=e&&e<=1){e=new l("Intersection");e.points.push(new f.Point(k.x+a*(m.x-k.x),k.y+a*(m.y-k.y)))}else e=new l("No Intersection")}else e=a==0||e==0?new l("Coincident"):new l("Parallel");return e};f.Intersection.intersectLinePolygon=function(k,m,p){for(var h=new l("No Intersection"),e=p.length,a=0;a0)h.status="Intersection";return h}; +f.Intersection.intersectPolygonPolygon=function(k,m){for(var p=new l("No Intersection"),h=k.length,e=0;e0)p.status="Intersection";return p};f.Intersection.intersectPolygonRectangle=function(k,m,p){var h=m.min(p),e=m.max(p);p=new f.Point(e.x,h.y);var a=new f.Point(h.x,e.y);m=l.intersectLinePolygon(h,p,k);p=l.intersectLinePolygon(p,e,k);e=l.intersectLinePolygon(e,a,k);k=l.intersectLinePolygon(a,h,k); +h=new l("No Intersection");h.appendPoints(m.points);h.appendPoints(p.points);h.appendPoints(e.points);h.appendPoints(k.points);if(h.points.length>0)h.status="Intersection";return h}}})(this); +(function(z){function l(f){f?this._tryParsingColor(f):this.setSource([0,0,0,1])}z=z.fabric||(z.fabric={});if(z.Color)z.warn("fabric.Color is already defined.");else{z.Color=l;z.Color.prototype={_tryParsingColor:function(f){var k=l.sourceFromHex(f);k||(k=l.sourceFromRgb(f));k&&this.setSource(k)},getSource:function(){return this._source},setSource:function(f){this._source=f},toRgb:function(){var f=this.getSource();return"rgb("+f[0]+","+f[1]+","+f[2]+")"},toRgba:function(){var f=this.getSource();return"rgba("+ +f[0]+","+f[1]+","+f[2]+","+f[3]+")"},toHex:function(){var f=this.getSource(),k=f[0].toString(16);k=k.length==1?"0"+k:k;var m=f[1].toString(16);m=m.length==1?"0"+m:m;f=f[2].toString(16);f=f.length==1?"0"+f:f;return k.toUpperCase()+m.toUpperCase()+f.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(f){var k=this.getSource();k[3]=f;this.setSource(k);return this},toGrayscale:function(){var f=this.getSource(),k=parseInt((f[0]*0.3+f[1]*0.59+f[2]*0.11).toFixed(0),10);this.setSource([k, +k,k,f[3]]);return this},toBlackWhite:function(f){var k=this.getSource(),m=(k[0]*0.3+k[1]*0.59+k[2]*0.11).toFixed(0);k=k[3];f=f||127;m=Number(m)0?0:-d),c.ey-(n>0?0:-n),u,x);this.contextTop.lineWidth=this.selectionLineWidth;this.contextTop.strokeStyle=this.selectionBorderColor;this.contextTop.strokeRect(c.ex+0.5-(d>0?0:u),c.ey+0.5-(n>0?0:x),u,x)},_findSelectedObjects:function(){var c=[],d=this._groupSelector.ex,n=this._groupSelector.ey,u=d+this._groupSelector.left, +x=n+this._groupSelector.top,y=new fabric.Point(C(d,u),C(n,x));n=new fabric.Point(F(d,u),F(n,x));u=0;for(x=this._objects.length;u1){c=new fabric.Group(c);this.setActiveGroup(c);c.saveCoords();h("group:selected",{target:c})}this.renderAll()},add:function(){this._objects.push.apply(this._objects, +arguments);this.renderAll();return this},insertAt:function(c,d){this._objects.splice(d,0,c);this.renderAll();return this},getObjects:function(){return this._objects},getContext:function(){return this.contextTop},clearContext:function(c){c.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(c){var d=this._config.width,n= +this._config.height,u=c?this.contextTop:this.contextContainer;this.clearContext(this.contextTop);c||this.clearContext(u);u.fillStyle=this.backgroundColor;u.fillRect(0,0,d,n);c=this._objects.length;d=this.getActiveGroup();n=new Date;if(c)for(var x=0;x1?new fabric.PathGroup(I,E):I[0];I.setSourcePath(J); +if(!(I instanceof fabric.PathGroup)){k(I,E);typeof E.angle!=="undefined"&&I.setAngle(E.angle)}n(I,G)})},this)}catch(D){fabric.log(D.message)}},loadImageFromURL:function(){var c={};return function(d,n){function u(){var D=f.getElementById(c[d]);D.width&&D.height?n(new fabric.Image(D)):setTimeout(u,50)}var x=this;if(c[d])u();else{var y=new Image;y.onload=function(){y.onload=null;x._resizeImageToFit(y);var D=new fabric.Image(y);n(D)};y.className="canvas-img-clone";y.src=d;if(this.shouldCacheImages)c[d]= +Element.identify(y);f.body.appendChild(y)}}}(),loadSVGFromURL:function(c,d){function n(y){if(y=y.responseXML)(y=y.documentElement)&&fabric.parseSVGDocument(y,function(D,E){x.cache.set(c,{objects:D.invoke("toObject"),options:E});d(D,E)})}function u(){fabric.log("ERROR!")}var x=this;c=c.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();this.cache.has(c,function(y){if(y)x.cache.get(c,function(D){D=x._enlivenCachedObject(D);d(D.objects,D.options)});else new Ajax.Request(c,{method:"get",onComplete:n,onFailure:u})})}, +_enlivenCachedObject:function(c){var d=c.objects;c=c.options;d=d.map(function(n){return fabric[m(n.type)].fromObject(n)});return{objects:d,options:c}},remove:function(c){b(this._objects,c);this.renderAll();return c},fxRemove:function(c,d){var n=this;c.fxRemove({onChange:this.renderAll.bind(this),onComplete:function(){n.remove(c);typeof d==="function"&&d()}});return this},sendToBack:function(c){b(this._objects,c);this._objects.unshift(c);return this.renderAll()},bringToFront:function(c){b(this._objects, +c);this._objects.push(c);return this.renderAll()},sendBackwards:function(c){var d=this._objects.indexOf(c),n=d;if(d!==0){for(d=d-1;d>=0;--d)if(c.intersectsWithObject(this._objects[d])){n=d;break}b(this._objects,c);this._objects.splice(n,0,c)}return this.renderAll()},bringForward:function(c){var d=this.getObjects(),n=d.indexOf(c),u=n;if(n!==d.length-1){n=n+1;for(var x=this._objects.length;n"};k(fabric.Element,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(c){var d=c.getContext("2d");c=d.getImageData(0,0,c.width,c.height);var n=c.data,u=c.width,x=c.height,y,D;for(i=0;i1?b.apply(this,e.call(arguments,1)):b.call(this)}, +initialize:function(a){this.setOptions(a);this._importProperties();this.originalState={};this.setCoords();this.saveState()},setOptions:function(a){this.options=f(this._getOptions(),a)},_getOptions:function(){return f(k(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 b=l.Object.prototype.options;this.stateProperties.forEach(function(g){a[g]===b[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,b){if((a==="scaleX"||a==="scaleY")&&ba.x&&q.xa.y&&s.y=c&&s.d.y>=c)){if(s.o.x==s.d.x&&s.o.x>=a)n=s.o.x;else{n=(s.d.y-s.o.y)/(s.d.x-s.o.x);q=c-0*a;s=s.o.y-n*s.o.x;n=-(q-s)/(0-n)}if(n>=a)w+=1;if(w==2)break}}return w},_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),n=this.cornersize*Math.sin(c);c=this.cornersize/2;var q=c-n;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+n},bl:{x:a.tl.x-n,y:a.tl.y+g}};a.tl.corner.br={x:a.tl.corner.tr.x-n,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-n},tr:{x:a.tr.x,y:a.tr.y},br:{x:a.tr.x-n,y:a.tr.y+g}};a.tr.corner.bl={x:a.tr.corner.tl.x-n,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+n,y:a.bl.y-g},bl:{x:a.bl.x,y:a.bl.y},br:{x:a.bl.x+g,y:a.bl.y+n}};a.bl.corner.tr={x:a.bl.corner.br.x+ -n,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+n,y:a.br.y-g},bl:{x:a.br.x-g,y:a.br.y-n},br:{x:a.br.x,y:a.br.y}};a.br.corner.tl={x:a.br.corner.bl.x+n,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+n},bl:{x:a.ml.x-n,y:a.ml.y+g}};a.ml.corner.br={x:a.ml.corner.tr.x-n,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+ -n},bl:{x:a.mt.x-n,y:a.mt.y+g}};a.mt.corner.br={x:a.mt.corner.tr.x-n,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+n},bl:{x:a.mr.x-n,y:a.mr.y+g}};a.mr.corner.br={x:a.mr.corner.tr.x-n,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+n},bl:{x:a.mb.x-n,y:a.mb.y+g}};a.mb.corner.br={x:a.mb.corner.tr.x-n,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 m.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,n=a.onChange|| -c,q=this;m.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(s){q.setAngle(s);n()},onComplete:function(){q.setCoords();g()},onStart:function(){q.setActive(false)}});return this},fxRemove:function(a){a||(a={});var c=function(){},g=a.onComplete||c,n=a.onChange||c,q=this;m.util.animate({startValue:this.get("opacity"),endValue:0,duration:this.FX_DURATION,onChange:function(s){q.set("opacity",s);n()},onComplete:g,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()}});m.Object.prototype.rotate=m.Object.prototype.setAngle}})(); -(function(){var m=this.fabric||(this.fabric={}),o=m.util.object.extend;if(m.Line)m.warn("fabric.Line is already defined");else{m.Line=m.util.createClass(m.Object,{type:"line",initialize:function(f,h){f||(f=[0,0,0,0]);this.callSuper("initialize",h);this.set("x1",f[0]);this.set("y1",f[1]);this.set("x2",f[2]);this.set("y2",f[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(f){f.beginPath(); -f.moveTo(-this.width/2,-this.height/2);f.lineTo(this.width/2,this.height/2);var h=f.strokeStyle;f.strokeStyle=f.fillStyle;f.stroke();f.strokeStyle=h},complexity:function(){return 1},toObject:function(){return o(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})}});m.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");m.Line.fromElement=function(f,h){var p=m.parseAttributes(f,m.Line.ATTRIBUTE_NAMES);return new m.Line([p.x1|| -0,p.y1||0,p.x2||0,p.y2||0],o(p,h))};m.Line.fromObject=function(f){return new m.Line([f.x1,f.y1,f.x2,f.y2],f)}}})(); -(function(){var m=this.fabric||(this.fabric={}),o=Math.PI*2,f=m.util.object.extend;if(m.Circle)m.warn("fabric.Circle is already defined.");else{m.Circle=m.util.createClass(m.Object,{type:"circle",initialize:function(h){h=h||{};this.set("radius",h.radius||0);this.callSuper("initialize",h);h=this.get("radius")*2*this.get("scaleX");this.set("width",h).set("height",h)},toObject:function(){return f(this.callSuper("toObject"),{radius:this.get("radius")})},_render:function(h,p){h.beginPath();h.arc(p?this.left: -0,p?this.top:0,this.radius,0,o,false);h.closePath();this.fill&&h.fill();this.stroke&&h.stroke()},complexity:function(){return 1}});m.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity stroke stroke-width transform".split(" ");m.Circle.fromElement=function(h,p){p||(p={});var l=m.parseAttributes(h,m.Circle.ATTRIBUTE_NAMES);if(!("radius"in l&&l.radius>0))throw Error("value of `r` attribute is required and can not be negative");if("left"in l)l.left-=p.width/2||0;if("top"in l)l.top-=p.height/2||0;return new m.Circle(f(l, -p))};m.Circle.fromObject=function(h){return new m.Circle(h)}}})(); -(function(){var m=this.fabric||(this.fabric={});if(m.Triangle)m.warn("fabric.Triangle is already defined");else{m.Triangle=m.util.createClass(m.Object,{type:"triangle",initialize:function(o){o=o||{};this.callSuper("initialize",o);this.set("width",o.width||100).set("height",o.height||100)},_render:function(o){var f=this.width/2,h=this.height/2;o.beginPath();o.moveTo(-f,h);o.lineTo(0,-h);o.lineTo(f,h);o.closePath();this.fill&&o.fill();this.stroke&&o.stroke()},complexity:function(){return 1}});m.Triangle.fromObject= -function(o){return new m.Triangle(o)}}})(); -(function(){var m=this.fabric||(this.fabric={}),o=Math.PI*2,f=m.util.object.extend;if(m.Ellipse)m.warn("fabric.Ellipse is already defined.");else{m.Ellipse=m.util.createClass(m.Object,{type:"ellipse",initialize:function(h){h=h||{};this.callSuper("initialize",h);this.set("rx",h.rx||0);this.set("ry",h.ry||0);this.set("width",this.get("rx")*2);this.set("height",this.get("ry")*2)},toObject:function(){return f(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},render:function(h,p){if(!(this.rx=== -0||this.ry===0))return this.callSuper("render",h,p)},_render:function(h,p){h.beginPath();h.save();h.transform(1,0,0,this.ry/this.rx,0,0);h.arc(p?this.left:0,p?this.top:0,this.rx,0,o,false);h.restore();this.stroke&&h.stroke();this.fill&&h.fill()},complexity:function(){return 1}});m.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity stroke stroke-width transform".split(" ");m.Ellipse.fromElement=function(h,p){p||(p={});var l=m.parseAttributes(h,m.Ellipse.ATTRIBUTE_NAMES);if("left"in l)l.left-=p.width/ -2||0;if("top"in l)l.top-=p.height/2||0;return new m.Ellipse(f(l,p))};m.Ellipse.fromObject=function(h){return new m.Ellipse(h)}}})(); -(function(){var m=this.fabric||(this.fabric={});if(m.Rect)console.warn("fabric.Rect is already defined");else{m.Rect=m.util.createClass(m.Object,{type:"rect",options:{rx:0,ry:0},initialize:function(o){this.callSuper("initialize",o);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(o){var f=this.options.rx||0,h=this.options.ry||0,p=-this.width/2,l=-this.height/ -2,e=this.width,a=this.height;o.beginPath();o.moveTo(p+f,l);o.lineTo(p+e-f,l);o.bezierCurveTo(p+e,l,p+e,l+h,p+e,l+h);o.lineTo(p+e,l+a-h);o.bezierCurveTo(p+e,l+a,p+e-f,l+a,p+e-f,l+a);o.lineTo(p+f,l+a);o.bezierCurveTo(p,l+a,p,l+a-h,p,l+a-h);o.lineTo(p,l+h);o.bezierCurveTo(p,l,p+f,l,p+f,l);o.closePath();this.fill&&o.fill();this.stroke&&o.stroke()},_normalizeLeftTopProperties:function(o){o.left&&this.set("left",o.left+this.getWidth()/2);o.top&&this.set("top",o.top+this.getHeight()/2);return this},complexity:function(){return 1}}); -m.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity stroke stroke-width transform".split(" ");m.Rect.fromElement=function(o,f){if(!o)return null;var h=m.parseAttributes(o,m.Rect.ATTRIBUTE_NAMES);h=h;h.left=h.left||0;h.top=h.top||0;h=h;var p=new m.Rect(m.util.object.extend(f||{},h));p._normalizeLeftTopProperties(h);return p};m.Rect.fromObject=function(o){return new m.Rect(o)}}})(); -(function(){var m=this.fabric||(this.fabric={});if(m.Polyline)m.warn("fabric.Polyline is already defined");else{m.Polyline=m.util.createClass(m.Object,{type:"polyline",initialize:function(o,f){f=f||{};this.set("points",o);this.callSuper("initialize",f);this._calcDimensions()},_calcDimensions:function(){return m.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return m.Polygon.prototype.toObject.call(this)},_render:function(o){var f;o.beginPath();for(var h=0,p=this.points.length;h< -p;h++){f=this.points[h];o.lineTo(f.x,f.y)}this.fill&&o.fill();this.stroke&&o.stroke()},complexity:function(){return this.get("points").length}});m.Polyline.ATTRIBUTE_NAMES="fill fill-opacity stroke stroke-width transform".split(" ");m.Polyline.fromElement=function(o,f){if(!o)return null;f||(f={});for(var h=m.parsePointsAttribute(o.getAttribute("points")),p=m.parseAttributes(o,m.Polyline.ATTRIBUTE_NAMES),l=0,e=h.length;l"},toObject:function(){var e=l(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},_parsePath:function(){for(var e=[],a,c,g=0,n=this.path.length;g"},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}});m.PathGroup.fromObject=function(a){for(var c=a.paths, -g=0,n=c.length;g"},getObjects:function(){return this.objects},add:function(e){this._restoreObjectsState();this.objects.push(e);e.setActive(true);this._calcBounds();this._updateObjectsCoords();return this},remove:function(e){this._restoreObjectsState(); -l(this.objects,e);e.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},size:function(){return this.getObjects().length},set:function(e,a){if(typeof a=="function")this.set(e,a(this[e]));else if(e==="fill"||e==="opacity"){var c=this.objects.length;for(this[e]=a;c--;)this.objects[c].set(e,a)}else this[e]=a;return this},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(){return o(this.callSuper("toObject"),{objects:p(this.objects,"clone")})},render:function(e){e.save(); -this.transform(e);for(var a=Math.max(this.scaleX,this.scaleY),c=0,g;g=this.objects[c];c++){var n=g.borderScaleFactor;g.borderScaleFactor=a;g.render(e);g.borderScaleFactor=n}this.hideBorders||this.drawBorders(e);this.hideCorners||this.drawCorners(e);e.restore();this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,a){e+=typeof a.complexity=="function"?a.complexity():0;return e},0)},_restoreObjectsState:function(){this.objects.forEach(this._restoreObjectState, -this);return this},_restoreObjectState:function(e){var a=this.get("left"),c=this.get("top"),g=this.getAngle()*(Math.PI/180);e.get("originalLeft");e.get("originalTop");var n=Math.cos(g)*e.get("top")+Math.sin(g)*e.get("left");g=-Math.sin(g)*e.get("top")+Math.cos(g)*e.get("left");e.setAngle(e.getAngle()+this.getAngle());e.set("left",a+g*this.get("scaleX"));e.set("top",c+n*this.get("scaleY"));e.set("scaleX",e.get("scaleX")*this.get("scaleX"));e.set("scaleY",e.get("scaleY")*this.get("scaleY"));e.setCoords(); +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,b=Math.sin(this._angle+this.theta)*this._hypotenuse,g=this.theta,o=Math.sin(g);g=Math.cos(g);a={x:this.left-a,y:this.top-b};b={x:a.x+this.currentWidth*g,y:a.y+this.currentWidth*o};var q={x:a.x-this.currentHeight*o,y:a.y+this.currentHeight*g};this.oCoords={tl:a,tr:b,br:{x:b.x-this.currentHeight*o,y:b.y+this.currentHeight*g},bl:q,ml:{x:a.x-this.currentHeight/ +2*o,y:a.y+this.currentHeight/2*g},mt:{x:a.x+this.currentWidth/2*g,y:a.y+this.currentWidth/2*o},mr:{x:b.x-this.currentHeight/2*o,y:b.y+this.currentHeight/2*g},mb:{x:q.x+this.currentWidth/2*g,y:q.y+this.currentWidth/2*o}};this._setCornerCoords();return this},drawBorders:function(a){var b=this.options,g=b.padding,o=g*2;a.save();a.globalAlpha=this.isMoving?b.borderOpacityWhenMoving:1;a.strokeStyle=b.borderColor;b=1/(this.scaleXa.x&&q.xa.y&&t.y=b&&t.d.y>=b)){if(t.o.x==t.d.x&&t.o.x>=a)o=t.o.x;else{o=(t.d.y-t.o.y)/(t.d.x-t.o.x);q=b-0*a;t=t.o.y-o*t.o.x;o=-(q-t)/(0-o)}if(o>=a)A+=1;if(A==2)break}}return A},_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,b=this.theta,g=this.cornersize*Math.cos(b),o=this.cornersize*Math.sin(b);b=this.cornersize/2;var q=b-o;a.tl.x-=q;a.tl.y-= +b;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+=b;a.tr.x+=b;a.tr.y-=b;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-=b;a.tr.y+=b;a.bl.x-=b;a.bl.y+=b;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+=b;a.bl.y-=b;a.br.x+=b;a.br.y+=b;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-=b;a.br.y-=b;a.ml.x-=b;a.ml.y-=b;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+=b;a.ml.y+=b;a.mt.x-=b;a.mt.y-=b;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+=b;a.mt.y+=b;a.mr.x-=b;a.mr.y-=b;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+=b;a.mr.y+=b;a.mb.x-=b;a.mb.y-=b;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+=b;a.mb.y+=b;a=a.mb.corner; +a.tl.x-=b;a.tl.y-=b;a.tr.x-=b;a.tr.y-=b;a.br.x-=b;a.br.y-=b;a.bl.x-=b;a.bl.y-=b},toGrayscale:function(){var a=this.get("fill");a&&this.set("overlayFill",(new l.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 b=function(){},g=a.onComplete||b,o=a.onChange|| +b,q=this;l.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){q.setAngle(t);o()},onComplete:function(){q.setCoords();g()},onStart:function(){q.setActive(false)}});return this},fxRemove:function(a){a||(a={});var b=function(){},g=a.onComplete||b,o=a.onChange||b,q=this;l.util.animate({startValue:this.get("opacity"),endValue:0,duration:this.FX_DURATION,onChange:function(t){q.set("opacity",t);o()},onComplete:g,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()}});l.Object.prototype.rotate=l.Object.prototype.setAngle}})(this); +(function(z){var l=z.fabric||(z.fabric={}),f=l.util.object.extend;if(l.Line)l.warn("fabric.Line is already defined");else{l.Line=l.util.createClass(l.Object,{type:"line",initialize:function(k,m){k||(k=[0,0,0,0]);this.callSuper("initialize",m);this.set("x1",k[0]);this.set("y1",k[1]);this.set("x2",k[2]);this.set("y2",k[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(k){k.beginPath(); +k.moveTo(-this.width/2,-this.height/2);k.lineTo(this.width/2,this.height/2);var m=k.strokeStyle;k.strokeStyle=k.fillStyle;k.stroke();k.strokeStyle=m},complexity:function(){return 1},toObject:function(){return f(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})}});l.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");l.Line.fromElement=function(k,m){var p=l.parseAttributes(k,l.Line.ATTRIBUTE_NAMES);return new l.Line([p.x1|| +0,p.y1||0,p.x2||0,p.y2||0],f(p,m))};l.Line.fromObject=function(k){return new l.Line([k.x1,k.y1,k.x2,k.y2],k)}}})(this); +(function(z){var l=z.fabric||(z.fabric={}),f=Math.PI*2,k=l.util.object.extend;if(l.Circle)l.warn("fabric.Circle is already defined.");else{l.Circle=l.util.createClass(l.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 k(this.callSuper("toObject"),{radius:this.get("radius")})},_render:function(m,p){m.beginPath();m.arc(p?this.left: +0,p?this.top:0,this.radius,0,f,false);m.closePath();this.fill&&m.fill();this.stroke&&m.stroke()},complexity:function(){return 1}});l.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity stroke stroke-width transform".split(" ");l.Circle.fromElement=function(m,p){p||(p={});var h=l.parseAttributes(m,l.Circle.ATTRIBUTE_NAMES);if(!("radius"in h&&h.radius>0))throw Error("value of `r` attribute is required and can not be negative");if("left"in h)h.left-=p.width/2||0;if("top"in h)h.top-=p.height/2||0;return new l.Circle(k(h, +p))};l.Circle.fromObject=function(m){return new l.Circle(m)}}})(this); +(function(z){var l=z.fabric||(z.fabric={});if(l.Triangle)l.warn("fabric.Triangle is already defined");else{l.Triangle=l.util.createClass(l.Object,{type:"triangle",initialize:function(f){f=f||{};this.callSuper("initialize",f);this.set("width",f.width||100).set("height",f.height||100)},_render:function(f){var k=this.width/2,m=this.height/2;f.beginPath();f.moveTo(-k,m);f.lineTo(0,-m);f.lineTo(k,m);f.closePath();this.fill&&f.fill();this.stroke&&f.stroke()},complexity:function(){return 1}});l.Triangle.fromObject= +function(f){return new l.Triangle(f)}}})(this); +(function(z){var l=z.fabric||(z.fabric={}),f=Math.PI*2,k=l.util.object.extend;if(l.Ellipse)l.warn("fabric.Ellipse is already defined.");else{l.Ellipse=l.util.createClass(l.Object,{type:"ellipse",initialize:function(m){m=m||{};this.callSuper("initialize",m);this.set("rx",m.rx||0);this.set("ry",m.ry||0);this.set("width",this.get("rx")*2);this.set("height",this.get("ry")*2)},toObject:function(){return k(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},render:function(m,p){if(!(this.rx=== +0||this.ry===0))return this.callSuper("render",m,p)},_render:function(m,p){m.beginPath();m.save();m.transform(1,0,0,this.ry/this.rx,0,0);m.arc(p?this.left:0,p?this.top:0,this.rx,0,f,false);m.restore();this.stroke&&m.stroke();this.fill&&m.fill()},complexity:function(){return 1}});l.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity stroke stroke-width transform".split(" ");l.Ellipse.fromElement=function(m,p){p||(p={});var h=l.parseAttributes(m,l.Ellipse.ATTRIBUTE_NAMES);if("left"in h)h.left-=p.width/ +2||0;if("top"in h)h.top-=p.height/2||0;return new l.Ellipse(k(h,p))};l.Ellipse.fromObject=function(m){return new l.Ellipse(m)}}})(this); +(function(z){var l=z.fabric||(z.fabric={});if(l.Rect)console.warn("fabric.Rect is already defined");else{l.Rect=l.util.createClass(l.Object,{type:"rect",options:{rx:0,ry:0},initialize:function(f){this.callSuper("initialize",f);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(f){var k=this.options.rx||0,m=this.options.ry||0,p=-this.width/2,h=-this.height/ +2,e=this.width,a=this.height;f.beginPath();f.moveTo(p+k,h);f.lineTo(p+e-k,h);f.bezierCurveTo(p+e,h,p+e,h+m,p+e,h+m);f.lineTo(p+e,h+a-m);f.bezierCurveTo(p+e,h+a,p+e-k,h+a,p+e-k,h+a);f.lineTo(p+k,h+a);f.bezierCurveTo(p,h+a,p,h+a-m,p,h+a-m);f.lineTo(p,h+m);f.bezierCurveTo(p,h,p+k,h,p+k,h);f.closePath();this.fill&&f.fill();this.stroke&&f.stroke()},_normalizeLeftTopProperties:function(f){f.left&&this.set("left",f.left+this.getWidth()/2);f.top&&this.set("top",f.top+this.getHeight()/2);return this},complexity:function(){return 1}}); +l.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity stroke stroke-width transform".split(" ");l.Rect.fromElement=function(f,k){if(!f)return null;var m=l.parseAttributes(f,l.Rect.ATTRIBUTE_NAMES);m=m;m.left=m.left||0;m.top=m.top||0;m=m;var p=new l.Rect(l.util.object.extend(k||{},m));p._normalizeLeftTopProperties(m);return p};l.Rect.fromObject=function(f){return new l.Rect(f)}}})(this); +(function(z){var l=z.fabric||(z.fabric={});if(l.Polyline)l.warn("fabric.Polyline is already defined");else{l.Polyline=l.util.createClass(l.Object,{type:"polyline",initialize:function(f,k){k=k||{};this.set("points",f);this.callSuper("initialize",k);this._calcDimensions()},_calcDimensions:function(){return l.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return l.Polygon.prototype.toObject.call(this)},_render:function(f){var k;f.beginPath();for(var m=0,p=this.points.length;m"},toObject:function(){var e=h(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},_parsePath:function(){for(var e=[],a,b,g=0,o=this.path.length;g"},isSameColor:function(){var a=this.getObjects()[0].get("fill");return this.getObjects().every(function(b){return b.get("fill")===a})},complexity:function(){return this.paths.reduce(function(a,b){return a+(b&&b.complexity?b.complexity():0)},0)},toGrayscale:function(){for(var a=this.paths.length;a--;)this.paths[a].toGrayscale();return this},getObjects:function(){return this.paths}});l.PathGroup.fromObject=function(a){for(var b=a.paths, +g=0,o=b.length;g"},getObjects:function(){return this.objects},add:function(e){this._restoreObjectsState();this.objects.push(e);e.setActive(true);this._calcBounds();this._updateObjectsCoords();return this},remove:function(e){this._restoreObjectsState(); +h(this.objects,e);e.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},size:function(){return this.getObjects().length},set:function(e,a){if(typeof a=="function")this.set(e,a(this[e]));else if(e==="fill"||e==="opacity"){var b=this.objects.length;for(this[e]=a;b--;)this.objects[b].set(e,a)}else this[e]=a;return this},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(){return f(this.callSuper("toObject"),{objects:p(this.objects,"clone")})},render:function(e){e.save(); +this.transform(e);for(var a=Math.max(this.scaleX,this.scaleY),b=0,g;g=this.objects[b];b++){var o=g.borderScaleFactor;g.borderScaleFactor=a;g.render(e);g.borderScaleFactor=o}this.hideBorders||this.drawBorders(e);this.hideCorners||this.drawCorners(e);e.restore();this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,a){e+=typeof a.complexity=="function"?a.complexity():0;return e},0)},_restoreObjectsState:function(){this.objects.forEach(this._restoreObjectState, +this);return this},_restoreObjectState:function(e){var a=this.get("left"),b=this.get("top"),g=this.getAngle()*(Math.PI/180);e.get("originalLeft");e.get("originalTop");var o=Math.cos(g)*e.get("top")+Math.sin(g)*e.get("left");g=-Math.sin(g)*e.get("top")+Math.cos(g)*e.get("left");e.setAngle(e.getAngle()+this.getAngle());e.set("left",a+g*this.get("scaleX"));e.set("top",b+o*this.get("scaleY"));e.set("scaleX",e.get("scaleX")*this.get("scaleX"));e.set("scaleY",e.get("scaleY")*this.get("scaleY"));e.setCoords(); e.hideCorners=false;e.setActive(false);e.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(e){e.setCoords()});return this},activateAllObjects:function(){return this.setActive(true)},setActive:function(e){this.forEachObject(function(a){a.setActive(e)}); -return this},forEachObject:function(e,a){for(var c=this.getObjects(),g=c.length;g--;)e.call(a,c[g],g,c);return this},_setOpacityIfSame:function(){var e=this.getObjects(),a=e[0]?e[0].get("opacity"):1;if(e.every(function(c){return c.get("opacity")===a}))this.opacity=a},_calcBounds:function(){var e=[],a=[],c,g;g=0;for(var n=this.objects.length;ge.x&&n-ce.y},toGrayscale:function(){for(var e=this.objects.length;e--;)this.objects[e].toGrayscale()}});m.Group.fromObject=function(e){return new m.Group(e.objects,e)}}})(); -(function(){var m=this.fabric||(this.fabric={}),o=m.util.object.extend,f=m.util.object.clone;if(m.Text)m.warn("fabric.Text is already defined");else if(m.Object){m.Text=m.util.createClass(m.Object,{options:{top:10,left:10,fontsize:20,fontweight:100,fontfamily:"Modernist_One_400",path:null},type:"text",initialize:function(h,p){this.originalState={};this._initStateProperties();this.text=h;this.setOptions(p);o(this,this.options);this.theta=this.angle*(Math.PI/180);this.width=this.getWidth();this.setCoords()}, -_initStateProperties:function(){var h;if((h=this.constructor)&&(h=h.superclass)&&(h=h.prototype)&&(h=h.stateProperties)&&h.clone){this.stateProperties=h.clone();this.stateProperties.push("fontfamily","fontweight","path")}},toString:function(){return"#"},_render:function(h){var p=Cufon.textOptions||(Cufon.textOptions={});p.left=this.left;p.top=this.top;p.context=h;p.color=this.fill;var l=this._initDummyElement(); -this.transform(h);Cufon.replaceElement(l,{separate:"none",fontFamily:this.fontfamily});this.width=p.width;this.height=p.height},_initDummyElement:function(){var h=document.createElement("div");h.innerHTML=this.text;h.style.fontSize="40px";h.style.fontWeight="400";h.style.fontStyle="normal";h.style.letterSpacing="normal";h.style.color="#000000";h.style.fontWeight="600";h.style.fontFamily="Verdana";return h},render:function(h){h.save();this._render(h);if(this.active){this.drawBorders(h);this.drawCorners(h)}h.restore()}, -toObject:function(){return o(this.callSuper("toObject"),{text:this.text,fontsize:this.fontsize,fontweight:this.fontweight,fontfamily:this.fontfamily,path:this.path})},setColor:function(h){this.set("fill",h);return this},setFontsize:function(h){this.set("fontsize",h);this.setCoords();return this},getText:function(){return this.text},setText:function(h){this.set("text",h);this.setCoords();return this},set:function(h,p){this[h]=p;if(h==="fontfamily")this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/, -"$1"+p+"$3");return this}});m.Text.fromObject=function(h){return new m.Text(h.text,f(h))};m.Text.fromElement=function(){}}else m.warn("fabric.Text requires fabric.Object")})(); -(function(){var m=fabric.util.object.extend;if(!this.fabric)this.fabric={};if(this.fabric.Image)fabric.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(o,f){this.callSuper("initialize",f);this._initElement(o);this._initConfig(f||{})},getElement:function(){return this._element},setElement:function(o){this._element= -o;return this},getNormalizedSize:function(o,f,h){if(h&&f&&o.width>o.height&&o.width/o.heighto.width||o.height>h)){normalizedWidth=~~(o.width*h/o.height);normalizedHeight=h}else if(f&&f'},clone:function(o){this.constructor.fromObject(this.toObject(),o)},toGrayscale:function(o){if(!this.__isGrayscaled){var f=this.getElement(),h=document.createElement("canvas"),p=document.createElement("img"),l=this;h.width=f.width;h.height=f.height;h.getContext("2d").drawImage(f,0,0);fabric.Element.toGrayscale(h);p.onload=function(){l.setElement(p);o&&o();p.onload=h=f=imageData=null};p.width=f.width;p.height=f.height;p.src=h.toDataURL("image/png"); -this.__isGrayscaled=true;return this}},_render:function(o){var f=this.getOriginalSize();o.drawImage(this.getElement(),-f.width/2,-f.height/2,f.width,f.height)},_adjustWidthHeightToBorders:function(o){if(o){this.currentBorder=this.borderwidth;this.width+=2*this.currentBorder;this.height+=2*this.currentBorder}else this.currentBorder=0},_resetWidthHeight:function(){var o=this.getElement();this.set("width",o.width);this.set("height",o.height)},_initElement:function(o){this.setElement(fabric.util.getById(o)); -fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(o){this.setOptions(o);this._setBorder();this._setWidthHeight(o)},_setBorder:function(){this.currentBorder=this.bordervisibility?this.borderwidth:0},_setWidthHeight:function(){var o=2*this.currentBorder;this.width=(this.getElement().width||0)+o;this.height=(this.getElement().height||0)+o},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.fromObject=function(o,f){var h=document.createElement("img"), -p=o.src;if(o.width)h.width=o.width;if(o.height)h.height=o.height;h.onload=function(){f&&f(new fabric.Image(h,o));h=h.onload=null};h.src=p};fabric.Image.fromURL=function(o,f,h){var p=document.createElement("img");p.onload=function(){f&&f(new fabric.Image(p,h));p=p.onload=null};p.src=o}}else fabric.warn("fabric.Object is required for fabric.Image initialization")})(); +return this},forEachObject:function(e,a){for(var b=this.getObjects(),g=b.length;g--;)e.call(a,b[g],g,b);return this},_setOpacityIfSame:function(){var e=this.getObjects(),a=e[0]?e[0].get("opacity"):1;if(e.every(function(b){return b.get("opacity")===a}))this.opacity=a},_calcBounds:function(){var e=[],a=[],b,g;g=0;for(var o=this.objects.length;ge.x&&o-be.y},toGrayscale:function(){for(var e=this.objects.length;e--;)this.objects[e].toGrayscale()}});l.Group.fromObject=function(e){return new l.Group(e.objects,e)}}})(this); +(function(z){var l=z.fabric||(z.fabric={}),f=l.util.object.extend,k=l.util.object.clone;if(l.Text)l.warn("fabric.Text is already defined");else if(l.Object){l.Text=l.util.createClass(l.Object,{options:{top:10,left:10,fontsize:20,fontweight:100,fontfamily:"Modernist_One_400",path:null},type:"text",initialize:function(m,p){this.originalState={};this._initStateProperties();this.text=m;this.setOptions(p);f(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 p=Cufon.textOptions||(Cufon.textOptions={});p.left=this.left;p.top=this.top;p.context=m;p.color=this.fill;var h=this._initDummyElement(); +this.transform(m);Cufon.replaceElement(h,{separate:"none",fontFamily:this.fontfamily});this.width=p.width;this.height=p.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 f(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,p){this[m]=p;if(m==="fontfamily")this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/, +"$1"+p+"$3");return this}});l.Text.fromObject=function(m){return new l.Text(m.text,k(m))};l.Text.fromElement=function(){}}else l.warn("fabric.Text requires fabric.Object")})(this); +(function(z){var l=fabric.util.object.extend;if(!z.fabric)z.fabric={};if(z.fabric.Image)fabric.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(f,k){this.callSuper("initialize",k);this._initElement(f);this._initConfig(k||{})},getElement:function(){return this._element},setElement:function(f){this._element= +f;return this},getNormalizedSize:function(f,k,m){if(m&&k&&f.width>f.height&&f.width/f.heightf.width||f.height>m)){normalizedWidth=~~(f.width*m/f.height);normalizedHeight=m}else if(k&&k'},clone:function(f){this.constructor.fromObject(this.toObject(),f)},toGrayscale:function(f){if(!this.__isGrayscaled){var k=this.getElement(),m=document.createElement("canvas"),p=document.createElement("img"),h=this;m.width=k.width;m.height=k.height;m.getContext("2d").drawImage(k,0,0);fabric.Element.toGrayscale(m);p.onload=function(){h.setElement(p);f&&f();p.onload=m=k=imageData=null};p.width=k.width;p.height=k.height;p.src=m.toDataURL("image/png"); +this.__isGrayscaled=true;return this}},_render:function(f){var k=this.getOriginalSize();f.drawImage(this.getElement(),-k.width/2,-k.height/2,k.width,k.height)},_adjustWidthHeightToBorders:function(f){if(f){this.currentBorder=this.borderwidth;this.width+=2*this.currentBorder;this.height+=2*this.currentBorder}else this.currentBorder=0},_resetWidthHeight:function(){var f=this.getElement();this.set("width",f.width);this.set("height",f.height)},_initElement:function(f){this.setElement(fabric.util.getById(f)); +fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(f){this.setOptions(f);this._setBorder();this._setWidthHeight(f)},_setBorder:function(){this.currentBorder=this.bordervisibility?this.borderwidth:0},_setWidthHeight:function(){var f=2*this.currentBorder;this.width=(this.getElement().width||0)+f;this.height=(this.getElement().height||0)+f},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.fromObject=function(f,k){var m=document.createElement("img"), +p=f.src;if(f.width)m.width=f.width;if(f.height)m.height=f.height;m.onload=function(){k&&k(new fabric.Image(m,f));m=m.onload=null};m.src=p};fabric.Image.fromURL=function(f,k,m){var p=document.createElement("img");p.onload=function(){k&&k(new fabric.Image(p,m));p=p.onload=null};p.src=f}}else fabric.warn("fabric.Object is required for fabric.Image initialization")})(this); diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz deleted file mode 100644 index fc28b80bcd6bd423a63a5920a6310afab225c8e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23172 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 diff --git a/src/element.class.js b/src/element.class.js index d7254d6b..ab2c4564 100644 --- a/src/element.class.js +++ b/src/element.class.js @@ -223,6 +223,19 @@ /* NOOP */ }, + /** + * Callback; invoked every time active object is moved + * @method onObjectMove + * @param {fabric.Object} object that's being moved + */ + onObjectMove: null, + + /** + * Callback; invoked when a mouseup event occurs, and at the end of all other transformations + * @method onMouseUp + */ + onMouseUp: null, + /** * Calculates canvas element offset relative to the document * This method is also attached as "resize" event handler of window @@ -557,6 +570,7 @@ this.renderAll(); this._setCursorFromEvent(e, target); + // fix for FF this._setCursor(''); @@ -564,6 +578,10 @@ setTimeout(function () { _this._setCursorFromEvent(e, target); }, 50); + + if (this.onMouseUp) { + this.onMouseUp(); + } }, _shouldClearSelection: function (e) { @@ -897,7 +915,7 @@ var pointer = getPointer(e), x = pointer.x, y = pointer.y; - + this._currentTransform.target.isMoving = true; if (this._currentTransform.action === 'rotate') { @@ -917,6 +935,9 @@ } else { this._translateObject(x, y); + if (this.onObjectMove) { + this.onObjectMove(this._currentTransform.target); + } } // only commit here. when we are actually moving the pictures this.renderAll(); diff --git a/test/demo/centering_guidelines.js b/test/demo/centering_guidelines.js new file mode 100644 index 00000000..3e550b5f --- /dev/null +++ b/test/demo/centering_guidelines.js @@ -0,0 +1,74 @@ +/** + * Augments canvas by assigning to `onObjectMove` and `onAfterRender`. + * This kind of sucks because other code using those methods will stop functioning. + * Need to fix it by replacing callbacks with pub/sub kind of subscription model. + * (or maybe use existing fabric.util.fireEvent/observeEvent (if it won't be too slow)) + */ +function initCenteringGuidelines(canvas) { + + var canvasWidth = canvas.getWidth(), + canvasHeight = canvas.getHeight(), + canvasWidthCenter = canvasWidth / 2, + canvasHeightCenter = canvasHeight / 2, + canvasWidthCenterMap = { }, + canvasHeightCenterMap = { }, + centerLineMargin = 4, + centerLineColor = 'rgba(255,0,241,0.5)', + centerLineWidth = 1, + ctx = canvas.getContext(); + + for (var i = canvasWidthCenter - centerLineMargin, len = canvasWidthCenter + centerLineMargin; i <= len; i++) { + canvasWidthCenterMap[i] = true; + } + for (var i = canvasHeightCenter - centerLineMargin, len = canvasHeightCenter + centerLineMargin; i <= len; i++) { + canvasHeightCenterMap[i] = true; + } + + function showVerticalCenterLine() { + showCenterLine(canvasWidthCenter + 0.5, 0, canvasWidthCenter + 0.5, canvasHeight); + } + + function showHorizontalCenterLine() { + showCenterLine(0, canvasHeightCenter + 0.5, canvasWidth, canvasHeightCenter + 0.5); + } + + function showCenterLine(x1, y1, x2, y2) { + ctx.save(); + ctx.strokeStyle = centerLineColor; + ctx.lineWidth = centerLineWidth; + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.stroke(); + ctx.restore(); + } + + canvas.onObjectMove = function(object) { + var isInVerticalCenter = object.get('left') in canvasWidthCenterMap, + isInHorizontalCenter = object.get('top') in canvasHeightCenterMap; + + if (isInVerticalCenter || isInHorizontalCenter) { + canvas.afterRender = function() { + if (isInHorizontalCenter) { + showHorizontalCenterLine(); + } + if (isInVerticalCenter) { + showVerticalCenterLine(); + } + }; + if (isInHorizontalCenter) { + object.set('top', canvasHeightCenter); + } + if (isInVerticalCenter) { + object.set('left', canvasWidthCenter); + } + } + else { + canvas.afterRender = null; + } + }; + canvas.onMouseUp = function() { + canvas.afterRender = null; + canvas.renderAll(); + }; +} \ No newline at end of file diff --git a/test/demo/demo.js b/test/demo/demo.js index af53e7a4..a335ed8b 100644 --- a/test/demo/demo.js +++ b/test/demo/demo.js @@ -331,4 +331,6 @@ canvas.calcOffset(); }, 100); + initCenteringGuidelines(canvas); + })(this); \ No newline at end of file diff --git a/test/demo/index.html b/test/demo/index.html index 6f468b7d..249896f1 100644 --- a/test/demo/index.html +++ b/test/demo/index.html @@ -4,7 +4,7 @@ - Canvas demo + Demo of a Fabric.js — HTML5/Javascript canvas library and an SVG parser