From 83e3c8bd9e138d7b4b974294457bfbaa9a97212f Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 8 Apr 2012 15:15:31 +0200 Subject: [PATCH] Initial implementation of generic groups. See https://github.com/kangax/fabric.js/wiki/Working-with-groups for more info. --- dist/all.js | 159 +++++++++++++++++++++--------------- dist/all.min.js | 2 +- dist/all.min.js.gz | Bin 37396 -> 37499 bytes src/canvas.class.js | 13 +-- src/canvas.serialization.js | 38 +-------- src/group.class.js | 63 +++++++++----- src/image.class.js | 2 +- src/text.class.js | 4 +- src/util/misc.js | 41 ++++++++++ 9 files changed, 193 insertions(+), 129 deletions(-) diff --git a/dist/all.js b/dist/all.js index 9e6aedba..6f34475d 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1947,6 +1947,46 @@ fabric.Observable = { callback && callback.call(context, url); } } + + function enlivenObjects(objects, callback) { + + function getKlass(type) { + return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(type))]; + } + + var enlivenedObjects = [ ], + numLoadedAsyncObjects = 0, + // get length of all images + numTotalAsyncObjects = objects.filter(function (o) { + return getKlass(o.type).async; + }).length; + + var _this = this; + + objects.forEach(function (o, index) { + if (!o.type) { + return; + } + var klass = getKlass(o.type); + if (klass.async) { + klass.fromObject(o, function (o) { + enlivenedObjects[index] = o; + if (++numLoadedAsyncObjects === numTotalAsyncObjects) { + if (callback) { + callback(enlivenedObjects); + } + } + }); + } + else { + enlivenedObjects[index] = klass.fromObject(o); + } + }); + + if (numTotalAsyncObjects === 0 && callback) { + callback(enlivenedObjects); + } + } fabric.util.removeFromArray = removeFromArray; fabric.util.degreesToRadians = degreesToRadians; @@ -1956,6 +1996,7 @@ fabric.Observable = { fabric.util.animate = animate; fabric.util.requestAnimFrame = requestAnimFrame; fabric.util.loadImage = loadImage; + fabric.util.enlivenObjects = enlivenObjects; })(); (function() { @@ -5677,7 +5718,7 @@ fabric.util.string = { } this._currentTransform = null; - + if (this._groupSelector) { // group selection was completed, determine its bounds this._findSelectedObjects(e); @@ -5737,7 +5778,7 @@ fabric.util.string = { pointer = this.getPointer(e), activeGroup = this.getActiveGroup(), corner; - + if (this._shouldClearSelection(e)) { this._groupSelector = { @@ -5994,7 +6035,7 @@ fabric.util.string = { }, _handleGroupLogic: function (e, target) { - if (target.isType('group')) { + if (target === this.getActiveGroup()) { // if it's a group, find target again, this time skipping group target = this.findTarget(e, true); // if even object is not found, bail out @@ -6005,7 +6046,7 @@ fabric.util.string = { var activeGroup = this.getActiveGroup(); if (activeGroup) { if (activeGroup.contains(target)) { - activeGroup.remove(target); + activeGroup.removeWithUpdate(target); target.setActive(false); if (activeGroup.size() === 1) { // remove group alltogether if after removal it only contains 1 object @@ -6013,7 +6054,7 @@ fabric.util.string = { } } else { - activeGroup.add(target); + activeGroup.addWithUpdate(target); } this.fire('selection:created', { target: activeGroup, e: e }); activeGroup.setActive(true); @@ -6024,7 +6065,7 @@ fabric.util.string = { // only if there's an active object if (target !== this._activeObject) { // and that object is not the actual target - var group = new fabric.Group([ this._activeObject,target ]); + var group = new fabric.Group([ this._activeObject, target ]); this.setActiveGroup(group); activeGroup = this.getActiveGroup(); } @@ -6463,6 +6504,7 @@ fabric.util.string = { */ setActiveGroup: function (group) { this._activeGroup = group; + group && group.setActive(true); return this; }, @@ -6833,42 +6875,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { * @param {Function} callback */ _enlivenObjects: function (objects, callback) { - var numLoadedImages = 0, - // get length of all images - numTotalImages = objects.filter(function (o) { - return o.type === 'image'; - }).length; - var _this = this; - - objects.forEach(function (o, index) { - if (!o.type) { - return; - } - switch (o.type) { - case 'image': - case 'font': - fabric[fabric.util.string.capitalize(o.type)].fromObject(o, function (o) { - _this.insertAt(o, index, true); - if (++numLoadedImages === numTotalImages) { - if (callback) { - callback(); - } - } - }); - break; - default: - var klass = fabric[fabric.util.string.camelize(fabric.util.string.capitalize(o.type))]; - if (klass && klass.fromObject) { - _this.insertAt(klass.fromObject(o), index, true); - } - break; - } + fabric.util.enlivenObjects(objects, function(enlivenedObjects) { + enlivenedObjects.forEach(function(obj, index) { + _this.insertAt(obj, index, true); + }); }); - - if (numTotalImages === 0 && callback) { - callback(); - } }, /** @@ -10409,7 +10421,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { this.setCoords(true); this.saveCoords(); - this.activateAllObjects(); + //this.activateAllObjects(); }, /** @@ -10458,15 +10470,14 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { /** * Adds an object to a group; Then recalculates group's dimension, position. - * @method add + * @method addWithUpdate * @param {Object} object * @return {fabric.Group} thisArg * @chainable */ - add: function(object) { + addWithUpdate: function(object) { this._restoreObjectsState(); this.objects.push(object); - object.setActive(true); this._calcBounds(); this._updateObjectsCoords(); return this; @@ -10474,11 +10485,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { /** * Removes an object from a group; Then recalculates group's dimension, position. + * @method removeWithUpdate * @param {Object} object * @return {fabric.Group} thisArg * @chainable */ - remove: function(object) { + removeWithUpdate: function(object) { this._restoreObjectsState(); removeFromArray(this.objects, object); object.setActive(false); @@ -10487,6 +10499,29 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { return this; }, + /** + * Adds an object to a group + * @method add + * @param {Object} object + * @return {fabric.Group} thisArg + * @chainable + */ + add: function(object) { + this.objects.push(object); + return this; + }, + + /** + * Removes an object from a group + * @method remove + * @param {Object} object + * @return {fabric.Group} thisArg + * @chainable + */ + remove: function(object) { + removeFromArray(this.objects, object); + }, + /** * Returns a size of a group (i.e: length of an array containing its objects) * @return {Number} Group size @@ -10549,7 +10584,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { * @method render * @param {CanvasRenderingContext2D} ctx context to render instance on */ - render: function(ctx) { + render: function(ctx, noTransform) { ctx.save(); this.transform(ctx); @@ -10561,8 +10596,10 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { object.render(ctx); object.borderScaleFactor = originalScaleFactor; } - this.hideBorders || this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + if (!noTransform && this.active) { + this.drawBorders(ctx); + this.hideCorners || this.drawCorners(ctx); + } ctx.restore(); this.setCoords(); }, @@ -10686,19 +10723,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { * @chainable */ activateAllObjects: function() { - return this.setActive(true); - }, - - /** - * Activates (makes active) all group objects - * @method setActive - * @param {Boolean} value `true` to activate object, `false` otherwise - * @return {fabric.Group} thisArg - * @chainable - */ - setActive: function(value) { this.forEachObject(function(object) { - object.setActive(value); + object.setActive(); }); return this; }, @@ -10811,10 +10837,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { * @param options {Object} options object * @return {fabric.Group} an instance of fabric.Group */ - fabric.Group.fromObject = function(object) { - return new fabric.Group(object.objects, object); + fabric.Group.fromObject = function(object, callback) { + fabric.util.enlivenObjects(object.objects, function(enlivenedObjects) { + delete object.objects; + callback(new fabric.Group(enlivenedObjects, object)); + }); }; + fabric.Group.async = true; + })(typeof exports != 'undefined' ? exports : this); //= require "object.class" @@ -11268,7 +11299,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { fabric.Image.async = true; })(typeof exports != 'undefined' ? exports : this); - /** * @namespace */ @@ -11934,9 +11964,10 @@ fabric.Image.filters.Invert.fromObject = function() { fabric.Text.fromElement = function(element) { // TODO (kangax): implement this }; + + fabric.Text.async = true; })(typeof exports != 'undefined' ? exports : this); - (function() { if (typeof document != 'undefined' && typeof window != 'undefined') { diff --git a/dist/all.min.js b/dist/all.min.js index 53d58a53..91c86135 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -4,4 +4,4 @@ var fabric=fabric||{version:"0.7.24"};if(typeof exports!="undefined"){exports.fa * Copyright (c) 2009 Simo Kinnunen. * Licensed under the MIT license. */ -var Cufon=(function(){var k=function(){return k.replace.apply(null,arguments)};var u=k.DOM={ready:(function(){var z=false,B={loaded:1,complete:1};var y=[],A=function(){if(z){return}z=true;for(var C;C=y.shift();C()){}};if(fabric.document.addEventListener){fabric.document.addEventListener("DOMContentLoaded",A,false);fabric.window.addEventListener("pageshow",A,false)}if(!fabric.window.opera&&fabric.document.readyState){(function(){B[fabric.document.readyState]?A():setTimeout(arguments.callee,10)})()}if(fabric.document.readyState&&fabric.document.createStyleSheet){(function(){try{fabric.document.body.doScroll("left");A()}catch(C){setTimeout(arguments.callee,1)}})()}o(fabric.window,"load",A);return function(C){if(!arguments.length){A()}else{z?C():y.push(C)}}})()};var l=k.CSS={Size:function(z,y){this.value=parseFloat(z);this.unit=String(z).match(/[a-z%]*$/)[0]||"px";this.convert=function(A){return A/y*this.value};this.convertFrom=function(A){return A/this.value*y};this.toString=function(){return this.value+this.unit}},getStyle:function(y){return new a(y.style)},quotedList:i(function(B){var A=[],z=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,y;while(y=z.exec(B)){A.push(y[3]||y[1])}return A}),ready:(function(){var A=false;var z=[],B=function(){A=true;for(var D;D=z.shift();D()){}};var y=Object.prototype.propertyIsEnumerable?f("style"):{length:0};var C=f("link");u.ready(function(){var G=0,F;for(var E=0,D=C.length;F=C[E],E=y.length+G){B()}else{setTimeout(arguments.callee,10)}});return function(D){if(A){D()}else{z.push(D)}}})(),supports:function(A,z){var y=fabric.document.createElement("span").style;if(y[A]===undefined){return false}y[A]=z;return y[A]===z},textAlign:function(B,A,y,z){if(A.get("textAlign")=="right"){if(y>0){B=" "+B}}else{if(y400}if(F==500){F=400}for(var G in D){G=parseInt(G,10);if(!C||GA){A=G}H.push(G)}if(FA){F=A}H.sort(function(J,I){return(B?(J>F&&I>F)?JI:(JI:JV){V=Q}if(P>T){T=P}if(Qz){z=e}L.push(e);e=0;continue}var B=ab.glyphs[ag[aa]]||ab.missingGlyph;if(!B){continue}e+=D=Number(B.w||ab.w)+U}L.push(e);e=Math.max(z,e);var m=[];for(var aa=L.length;aa--;){m[aa]=e-L[aa]}if(D===null){return null}V+=(H.width-D);C+=H.minX;var v,p;if(n){v=J;p=J.firstChild}else{v=fabric.document.createElement("span");v.className="cufon cufon-canvas";v.alt=E;p=fabric.document.createElement("canvas");v.appendChild(p);if(A.printable){var Y=fabric.document.createElement("span");Y.className="cufon-alt";Y.appendChild(fabric.document.createTextNode(E));v.appendChild(Y)}}var ah=v.style;var O=p.style||{};var k=o.convert(H.height-I+T);var af=Math.ceil(k);var S=af/k;p.width=Math.ceil(o.convert(e+V-C)*S);p.height=af;I+=H.minY;O.top=Math.round(o.convert(I-ab.ascent))+"px";O.left=Math.round(o.convert(C))+"px";var j=Math.ceil(o.convert(e*S));var t=j+"px";var s=o.convert(ab.height);var F=(A.lineHeight-1)*o.convert(-ab.ascent/5)*(M-1);Cufon.textOptions.width=j;Cufon.textOptions.height=(s*M)+F;Cufon.textOptions.lines=M;Cufon.textOptions.totalLineHeight=F;if(a){ah.width=t;ah.height=s+"px"}else{ah.paddingLeft=t;ah.paddingBottom=(s-1)+"px"}var ad=Cufon.textOptions.context||p.getContext("2d"),K=af/H.height;Cufon.textOptions.fontAscent=ab.ascent*K;Cufon.textOptions.boundaries=null;for(var w=Cufon.textOptions.shadowOffsets,aa=R.length;aa--;){w[aa]=[R[aa][0]*K,R[aa][1]*K]}ad.save();ad.scale(K,K);ad.translate(-C-((1/K*p.width)/2)+(Cufon.fonts[ab.family].offsetLeft||0),-I-(Cufon.textOptions.height/K)/2);ad.lineWidth=ab.face["underline-thickness"];ad.save();function q(l,i){ad.strokeStyle=i;ad.beginPath();ad.moveTo(0,l);ad.lineTo(e,l);ad.stroke()}var r=Cufon.getTextDecoration(A),u=A.fontStyle==="italic";function ae(){ad.save();ad.fillStyle=A.backgroundColor;var aj=0,an=0,y=[{left:0}];if(A.textAlign==="right"){ad.translate(m[an],0);y[0].left=m[an]*K}else{if(A.textAlign==="center"){ad.translate(m[an]/2,0);y[0].left=m[an]/2*K}}for(var al=0,ak=ag.length;al.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}');function c(e,f){return a(e,/(?:em|ex|%)$/i.test(f)?"1em":f)}function a(h,i){if(/px$/i.test(i)){return parseFloat(i)}var g=h.style.left,f=h.runtimeStyle.left;h.runtimeStyle.left=h.currentStyle.left;h.style.left=i;var e=h.style.pixelLeft;h.style.left=g;h.runtimeStyle.left=f;return e}return function(T,z,O,w,D,U,M){var h=(z===null);if(h){z=D.alt}var B=T.viewBox;var j=O.computedFontSize||(O.computedFontSize=new Cufon.CSS.Size(c(U,O.get("fontSize"))+"px",T.baseSize));var L=O.computedLSpacing;if(L==undefined){L=O.get("letterSpacing");O.computedLSpacing=L=(L=="normal")?0:~~j.convertFrom(a(U,L))}var t,m;if(h){t=D;m=D.firstChild}else{t=fabric.document.createElement("span");t.className="cufon cufon-vml";t.alt=z;m=fabric.document.createElement("span");m.className="cufon-vml-canvas";t.appendChild(m);if(w.printable){var R=fabric.document.createElement("span");R.className="cufon-alt";R.appendChild(fabric.document.createTextNode(z));t.appendChild(R)}if(!M){t.appendChild(fabric.document.createElement("cvml:shape"))}}var Z=t.style;var G=m.style;var f=j.convert(B.height),W=Math.ceil(f);var K=W/f;var J=B.minX,I=B.minY;G.height=W;G.top=Math.round(j.convert(I-T.ascent));G.left=Math.round(j.convert(J));Z.height=j.convert(T.height)+"px";var p=Cufon.getTextDecoration(w);var y=O.get("color");var X=Cufon.CSS.textTransform(z,O).split("");var e=0,H=0,q=null;var x,r,A=w.textShadow;for(var S=0,Q=0,P=X.length;St?1:(l-k)/m;p(j+(r-j)*q(s));if(l>t||n()){u.onComplete&&u.onComplete();return}h(o)})()}var h=(function(){return fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(k,j){fabric.window.setTimeout(k,1000/60)}})();function a(k,m,l){if(k){var j=new Image();j.onload=function(){m&&m.call(l,j);j=j.onload=null};j.src=k}else{m&&m.call(l,k)}}fabric.util.removeFromArray=g;fabric.util.degreesToRadians=b;fabric.util.toFixed=d;fabric.util.getRandomInt=e;fabric.util.falseFunction=i;fabric.util.animate=c;fabric.util.requestAnimFrame=h;fabric.util.loadImage=a})();(function(){var d=Array.prototype.slice;if(!Array.prototype.indexOf){Array.prototype.indexOf=function(g){if(this===void 0||this===null){throw new TypeError()}var h=Object(this),e=h.length>>>0;if(e===0){return -1}var i=0;if(arguments.length>0){i=Number(arguments[1]);if(i!==i){i=0}else{if(i!==0&&i!==(1/0)&&i!==-(1/0)){i=(i>0||-1)*Math.floor(Math.abs(i))}}}if(i>=e){return -1}var f=i>=0?i:Math.max(e-Math.abs(i),0);for(;f>>0;f>>0;g>>0;f>>0;f>>0;g>>0,f=0,h;if(arguments.length>1){h=arguments[1]}else{do{if(f in this){h=this[f++];break}if(++f>=e){throw new TypeError()}}while(true)}for(;f=e){e=h[f][g]}}}else{while(f--){if(h[f]>=e){e=h[f]}}}return e}function c(h,g){if(!h||h.length===0){return undefined}var f=h.length-1,e=g?h[f][g]:h[f];if(g){while(f--){if(h[f][g]",">")}fabric.util.string={camelize:b,capitalize:c,escapeXml:a}}());(function(){var c=Array.prototype.slice,a=Function.prototype.apply,b=function(){};if(!Function.prototype.bind){Function.prototype.bind=function(d){var g=this,e=c.call(arguments,1),f;if(e.length){f=function(){return a.call(g,this instanceof b?this:d,e.concat(c.call(arguments)))}}else{f=function(){return a.call(g,this instanceof b?this:d,arguments)}}b.prototype=this.prototype;f.prototype=new b;return f}}})();(function(){var f=Array.prototype.slice,e=function(){};var c=(function(){for(var g in {toString:1}){if(g==="toString"){return false}}return true})();var b;if(c){b=function(g,i){if(i.toString!==Object.prototype.toString){g.prototype.toString=i.toString}if(i.valueOf!==Object.prototype.valueOf){g.prototype.valueOf=i.valueOf}for(var h in i){g.prototype[h]=i[h]}}}else{b=function(g,i){for(var h in i){g.prototype[h]=i[h]}}}function a(){}function d(){var k=null,j=f.call(arguments,0);if(typeof j[0]==="function"){k=j.shift()}function g(){this.initialize.apply(this,arguments)}g.superclass=k;g.subclasses=[];if(k){a.prototype=k.prototype;g.prototype=new a;k.subclasses.push(g)}for(var h=0,l=j.length;h-1?c(j,l.match(/opacity:\s*(\d?\.?\d*)/)[1]):j}for(var m in l){if(m==="opacity"){c(j,l[m])}else{var k=(m==="float"||m==="cssFloat")?(typeof n.styleFloat==="undefined"?"cssFloat":"styleFloat"):m;n[k]=l[m]}}return j}var h=fabric.document.createElement("div"),g=typeof h.style.opacity==="string",b=typeof h.style.filter==="string",a=fabric.document.defaultView,f=a&&typeof a.getComputedStyle!=="undefined",d=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,c=function(i){return i};if(g){c=function(i,j){i.style.opacity=j;return i}}else{if(b){c=function(i,j){var k=i.style;if(i.currentStyle&&!i.currentStyle.hasLayout){k.zoom=1}if(d.test(k.filter)){j=j>=0.9999?"":("alpha(opacity="+(j*100)+")");k.filter=k.filter.replace(d,j)}else{k.filter+=" alpha(opacity="+(j*100)+")"}return i}}}fabric.util.setStyle=e})();(function(){var h=Array.prototype.slice;function g(j){return typeof j==="string"?fabric.document.getElementById(j):j}function b(j){return h.call(j,0)}try{var i=b(fabric.document.childNodes) instanceof Array}catch(a){}if(!i){b=function(k){var j=new Array(k.length),l=k.length;while(l--){j[l]=k[l]}return j}}function c(k,j){var l=fabric.document.createElement(k);for(var m in j){if(m==="class"){l.className=j[m]}else{if(m==="for"){l.htmlFor=j[m]}else{l.setAttribute(m,j[m])}}}return l}function f(j,k){if((" "+j.className+" ").indexOf(" "+k+" ")===-1){j.className+=(j.className?" ":"")+k}}function e(k,l,j){if(typeof l==="string"){l=c(l,j)}if(k.parentNode){k.parentNode.replaceChild(l,k)}l.appendChild(k);return l}function d(k){var j=0,l=0;do{j+=k.offsetTop||0;l+=k.offsetLeft||0;k=k.offsetParent}while(k);return({left:l,top:j})}(function(){var k=fabric.document.documentElement.style;var l="userSelect" in k?"userSelect":"MozUserSelect" in k?"MozUserSelect":"WebkitUserSelect" in k?"WebkitUserSelect":"KhtmlUserSelect" in k?"KhtmlUserSelect":"";function m(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=fabric.util.falseFunction}if(l){n.style[l]="none"}else{if(typeof n.unselectable=="string"){n.unselectable="on"}}return n}function j(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=null}if(l){n.style[l]=""}else{if(typeof n.unselectable=="string"){n.unselectable=""}}return n}fabric.util.makeElementUnselectable=m;fabric.util.makeElementSelectable=j})();(function(){function j(k,o){var m=fabric.document.getElementsByTagName("head")[0],l=fabric.document.createElement("script"),n=true;l.type="text/javascript";l.setAttribute("runat","server");l.onload=l.onreadystatechange=function(p){if(n){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete"){return}n=false;o(p||fabric.window.event);l=l.onload=l.onreadystatechange=null}};l.src=k;m.appendChild(l)}fabric.util.getScript=j})();fabric.util.getById=g;fabric.util.toArray=b;fabric.util.makeElement=c;fabric.util.addClass=f;fabric.util.wrapElement=e;fabric.util.getElementOffset=d})();(function(){function d(e,f){return e+(/\?/.test(e)?"&":"?")+f}var c=(function(){var h=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest()}];for(var e=h.length;e--;){try{var g=h[e]();if(g){return h[e]}}catch(f){}}})();function a(){}function b(g,f){f||(f={});var j=f.method?f.method.toUpperCase():"GET",i=f.onComplete||function(){},h=c(),e;h.onreadystatechange=function(){if(h.readyState===4){i(h);h.onreadystatechange=a}};if(j==="GET"){e=null;if(typeof f.parameters=="string"){g=d(g,f.parameters)}}h.open(j,g,true);if(j==="POST"||j==="PUT"){h.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}h.send(e);return h}fabric.util.request=b})();(function(i){var g=i.fabric||(i.fabric={}),o=g.util.object.extend,e=g.util.string.capitalize,p=g.util.object.clone;var k={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix"};function d(v,u){if(!v){return}var x,t,s={};if(v.parentNode&&/^g$/i.test(v.parentNode.nodeName)){s=g.parseAttributes(v.parentNode,u)}var w=u.reduce(function(z,y){x=v.getAttribute(y);t=parseFloat(x);if(x){if((y==="fill"||y==="stroke")&&x==="none"){x=""}if(y==="fill-rule"){x=(x==="evenodd")?"destination-over":x}if(y==="transform"){x=g.parseTransformAttribute(x)}if(y in k){y=k[y]}z[y]=isNaN(t)?x:t}return z},{});w=o(w,o(n(v),g.parseStyleAttribute(v)));return o(s,w)}g.parseTransformAttribute=(function(){function s(L,M){var N=M[0];L[0]=Math.cos(N);L[1]=Math.sin(N);L[2]=-Math.sin(N);L[3]=Math.cos(N)}function x(N,O){var M=O[0],L=(O.length===2)?O[1]:O[0];N[0]=M;N[3]=L}function I(L,M){L[2]=M[0]}function u(L,M){L[1]=M[0]}function F(L,M){L[4]=M[0];if(M.length===2){L[5]=M[1]}}var z=[1,0,0,1,0,0],t="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",J="(?:\\s+,?\\s*|,\\s*)",A="(?:(skewX)\\s*\\(\\s*("+t+")\\s*\\))",y="(?:(skewY)\\s*\\(\\s*("+t+")\\s*\\))",H="(?:(rotate)\\s*\\(\\s*("+t+")(?:"+J+"("+t+")"+J+"("+t+"))?\\s*\\))",K="(?:(scale)\\s*\\(\\s*("+t+")(?:"+J+"("+t+"))?\\s*\\))",D="(?:(translate)\\s*\\(\\s*("+t+")(?:"+J+"("+t+"))?\\s*\\))",G="(?:(matrix)\\s*\\(\\s*("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")\\s*\\))",E="(?:"+G+"|"+D+"|"+K+"|"+H+"|"+A+"|"+y+")",B="(?:"+E+"(?:"+J+E+")*)",v="^\\s*(?:"+B+"?)\\s*$",C=new RegExp(v),w=new RegExp(E);return function(M){var L=z.concat();if(!M||(M&&!C.test(M))){return L}M.replace(w,function(Q){var N=new RegExp(E).exec(Q).filter(function(R){return(R!==""&&R!=null)}),O=N[1],P=N.slice(2).map(parseFloat);switch(O){case"translate":F(L,P);break;case"rotate":s(L,P);break;case"scale":x(L,P);break;case"skewX":I(L,P);break;case"skewY":u(L,P);break;case"matrix":L=P;break}});return L}})();function r(v){if(!v){return null}v=v.trim();var x=v.indexOf(",")>-1;v=v.split(/\s+/);var t=[];if(x){for(var u=0,s=v.length;u/i,""))}if(!v.documentElement){return}g.parseSVGDocument(v.documentElement,function(y,x){j.set(s,{objects:g.util.array.invoke(y,"toObject"),options:x});u(y,x)})}}function a(u){var t=u.objects,s=u.options;t=t.map(function(v){return g[e(v.type)].fromObject(v)});return({objects:t,options:s})}function m(s,v){s=s.trim();var t;if(typeof DOMParser!=="undefined"){var u=new DOMParser();if(u&&u.parseFromString){t=u.parseFromString(s,"text/xml")}}else{if(g.window.ActiveXObject){var t=new ActiveXObject("Microsoft.XMLDOM");t.async="false";t.loadXML(s.replace(//i,""))}}g.parseSVGDocument(t.documentElement,function(x,w){v(x,w)})}function l(v){var t="";for(var u=0,s=v.length;u",'",""].join("")}return t}o(g,{parseAttributes:d,parseElements:f,parseStyleAttribute:h,parsePointsAttribute:r,getCSSRules:c,loadSVGFromURL:b,loadSVGFromString:m,createSVGFontFacesMarkup:l})})(typeof exports!="undefined"?exports:this);(function(){function c(h){var g=h.getAttribute("style");if(g){var k=g.split(/\s*;\s*/);for(var f=k.length;f--;){var e=k[f].split(/\s*:\s*/),d=e[0].trim(),j=e[1].trim();if(d==="stop-color"){return j}}}}fabric.Gradient={create:function(l,m){m||(m={});var f=m.x1||0,k=m.y1||0,e=m.x2||l.canvas.width,i=m.y2||0,g=m.colorStops;var j=l.createLinearGradient(f,k,e,i);for(var h in g){var d=g[h];j.addColorStop(parseFloat(h),d)}return j},fromElement:function(d,m,l){var j=d.getElementsByTagName("stop"),d,f,e={},g,k={x1:d.getAttribute("x1")||0,y1:d.getAttribute("y1")||0,x2:d.getAttribute("x2")||"100%",y2:d.getAttribute("y2")||0};for(var h=j.length;h--;){d=j[h];f=d.getAttribute("offset");f=parseFloat(f)/(/%$/.test(f)?100:1);e[f]=c(d)||d.getAttribute("stop-color")}a(l,k);return fabric.Gradient.create(m,{x1:k.x1,y1:k.y1,x2:k.x2,y2:k.y2,colorStops:e})},forObject:function(g,d,e){e||(e={});a(g,e);var f=fabric.Gradient.create(d,{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,colorStops:e.colorStops});return f}};function a(f,e){for(var g in e){if(typeof e[g]==="string"&&/^\d+%$/.test(e[g])){var d=parseFloat(e[g],10);if(g==="x1"||g==="x2"){e[g]=f.width*d/100}else{if(g==="y1"||g==="y2"){e[g]=f.height*d/100}}}if(g==="x1"||g==="x2"){e[g]-=f.width/2}else{if(g==="y1"||g==="y2"){e[g]-=f.height/2}}}}function b(j){var f=j.getElementsByTagName("linearGradient"),d=j.getElementsByTagName("radialGradient"),g,h={};for(var e=f.length;e--;){g=f[e];h[g.id]=g}for(var e=d.length;e--;){g=d[e];h[g.id]=g}return h}fabric.getGradientDefs=b})();(function(b){var c=b.fabric||(b.fabric={});if(c.Point){c.warn("fabric.Point is already defined");return}c.Point=a;function a(d,e){if(arguments.length>0){this.init(d,e)}}a.prototype={constructor:a,init:function(d,e){this.x=d;this.y=e},add:function(d){return new a(this.x+d.x,this.y+d.y)},addEquals:function(d){this.x+=d.x;this.y+=d.y;return this},scalarAdd:function(d){return new a(this.x+d,this.y+d)},scalarAddEquals:function(d){this.x+=d;this.y+=d;return this},subtract:function(d){return new a(this.x-d.x,this.y-d.y)},subtractEquals:function(d){this.x-=d.x;this.y-=d.y;return this},scalarSubtract:function(d){return new a(this.x-d,this.y-d)},scalarSubtractEquals:function(d){this.x-=d;this.y-=d;return this},multiply:function(d){return new a(this.x*d,this.y*d)},multiplyEquals:function(d){this.x*=d;this.y*=d;return this},divide:function(d){return new a(this.x/d,this.y/d)},divideEquals:function(d){this.x/=d;this.y/=d;return this},eq:function(d){return(this.x==d.x&&this.y==d.y)},lt:function(d){return(this.xd.x&&this.y>d.y)},gte:function(d){return(this.x>=d.x&&this.y>=d.y)},lerp:function(e,d){return new a(this.x+(e.x-this.x)*d,this.y+(e.y-this.y)*d)},distanceFrom:function(f){var e=this.x-f.x,d=this.y-f.y;return Math.sqrt(e*e+d*d)},min:function(d){return new a(Math.min(this.x,d.x),Math.min(this.y,d.y))},max:function(d){return new a(Math.max(this.x,d.x),Math.max(this.y,d.y))},toString:function(){return this.x+","+this.y},setXY:function(d,e){this.x=d;this.y=e},setFromPoint:function(d){this.x=d.x;this.y=d.y},swap:function(e){var d=this.x,f=this.y;this.x=e.x;this.y=e.y;e.x=d;e.y=f}}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Intersection){b.warn("fabric.Intersection is already defined");return}function c(d){if(arguments.length>0){this.init(d)}}b.Intersection=c;b.Intersection.prototype={init:function(d){this.status=d;this.points=[]},appendPoint:function(d){this.points.push(d)},appendPoints:function(d){this.points=this.points.concat(d)}};b.Intersection.intersectLineLine=function(h,f,l,k){var m,i=(k.x-l.x)*(h.y-l.y)-(k.y-l.y)*(h.x-l.x),j=(f.x-h.x)*(h.y-l.y)-(f.y-h.y)*(h.x-l.x),g=(k.y-l.y)*(f.x-h.x)-(k.x-l.x)*(f.y-h.y);if(g!=0){var e=i/g,d=j/g;if(0<=e&&e<=1&&0<=d&&d<=1){m=new c("Intersection");m.points.push(new b.Point(h.x+e*(f.x-h.x),h.y+e*(f.y-h.y)))}else{m=new c("No Intersection")}}else{if(i==0||j==0){m=new c("Coincident")}else{m=new c("Parallel")}}return m};b.Intersection.intersectLinePolygon=function(e,d,l){var m=new c("No Intersection"),f=l.length;for(var h=0;h0){m.status="Intersection"}return m};b.Intersection.intersectPolygonPolygon=function(j,h){var f=new c("No Intersection"),l=j.length;for(var k=0;k0){f.status="Intersection"}return f};b.Intersection.intersectPolygonRectangle=function(n,e,d){var g=e.min(d),m=e.max(d),f=new b.Point(m.x,g.y),l=new b.Point(g.x,m.y),k=c.intersectLinePolygon(g,f,n),j=c.intersectLinePolygon(f,m,n),i=c.intersectLinePolygon(m,l,n),h=c.intersectLinePolygon(l,g,n),o=new c("No Intersection");o.appendPoints(k.points);o.appendPoints(j.points);o.appendPoints(i.points);o.appendPoints(h.points);if(o.points.length>0){o.status="Intersection"}return o}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Color){b.warn("fabric.Color is already defined.");return}function c(d){if(!d){this.setSource([0,0,0,1])}else{this._tryParsingColor(d)}}b.Color=c;b.Color.prototype={_tryParsingColor:function(d){var e=c.sourceFromHex(d);if(!e){e=c.sourceFromRgb(d)}if(e){this.setSource(e)}},getSource:function(){return this._source},setSource:function(d){this._source=d},toRgb:function(){var d=this.getSource();return"rgb("+d[0]+","+d[1]+","+d[2]+")"},toRgba:function(){var d=this.getSource();return"rgba("+d[0]+","+d[1]+","+d[2]+","+d[3]+")"},toHex:function(){var h=this.getSource();var f=h[0].toString(16);f=(f.length==1)?("0"+f):f;var e=h[1].toString(16);e=(e.length==1)?("0"+e):e;var d=h[2].toString(16);d=(d.length==1)?("0"+d):d;return f.toUpperCase()+e.toUpperCase()+d.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var d=this.getSource();d[3]=e;this.setSource(d);return this},toGrayscale:function(){var f=this.getSource(),e=parseInt((f[0]*0.3+f[1]*0.59+f[2]*0.11).toFixed(0),10),d=f[3];this.setSource([e,e,e,d]);return this},toBlackWhite:function(d){var g=this.getSource(),f=(g[0]*0.3+g[1]*0.59+g[2]*0.11).toFixed(0),e=g[3],d=d||127;f=(Number(f)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];for(var j=0,k=this.getObjects(),g=k.length;j");return h.join("")},isEmpty:function(){return this._objects.length===0},remove:function(g){e(this._objects,g);if(this.getActiveObject()===g){this.discardActiveObject()}this.renderAll();return g},sendToBack:function(g){e(this._objects,g);this._objects.unshift(g);return this.renderAll()},bringToFront:function(g){e(this._objects,g);this._objects.push(g);return this.renderAll()},sendBackwards:function(j){var h=this._objects.indexOf(j),g=h;if(h!==0){for(var k=h-1;k>=0;--k){if(j.intersectsWithObject(this._objects[k])||j.isContainedWithinObject(this._objects[k])){g=k;break}}e(this._objects,j);this._objects.splice(g,0,j)}return this.renderAll()},bringForward:function(k){var n=this.getObjects(),h=n.indexOf(k),g=h;if(h!==n.length-1){for(var m=h+1,j=this._objects.length;m"};f(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(l){var k=l.getContext("2d"),g=k.getImageData(0,0,l.width,l.height),p=g.data,m=g.width,r=g.height,q,h,o,n;for(o=0;o0)?0:-v),r.ey-((u>0)?0:-u),t,s);this.contextTop.lineWidth=this.selectionLineWidth;this.contextTop.strokeStyle=this.selectionBorderColor;this.contextTop.strokeRect(r.ex+a-((v>0)?0:t),r.ey+a-((u>0)?0:s),t,s)},_findSelectedObjects:function(x){var y,t,D=[],s=this._groupSelector.ex,C=this._groupSelector.ey,r=s+this._groupSelector.left,A=C+this._groupSelector.top,z,w=new fabric.Point(f(s,r),f(C,A)),B=new fabric.Point(l(s,r),l(C,A));for(var u=0,v=this._objects.length;u1){var D=new fabric.Group(D);this.setActiveGroup(D);D.saveCoords();this.fire("selection:created",{target:D})}}this.renderAll()},findTarget:function(v,s){var u,w=this.getPointer(v);var t=this.getActiveGroup();if(t&&!s&&this.containsPoint(v,t)){u=t;return u}for(var r=this._objects.length;r--;){if(this._objects[r]&&this.containsPoint(v,this._objects[r])){u=this._objects[r];this.relatedTarget=u;break}}if(u&&u.selectable){return u}},getPointer:function(r){var s=q(r);return{x:s.x-this._offset.left,y:s.y-this._offset.top}},_createUpperCanvas:function(){this.upperCanvasEl=this._createCanvasElement();this.upperCanvasEl.className="upper-canvas";this.wrapperEl.appendChild(this.upperCanvasEl);this._applyCanvasStyle(this.upperCanvasEl);this.contextTop=this.upperCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.CONTAINER_CLASS});fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"});fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(s){var t=this.getWidth()||s.width,r=this.getHeight()||s.height;fabric.util.setStyle(s,{position:"absolute",width:t+"px",height:r+"px",left:0,top:0});s.width=t;s.height=r;fabric.util.makeElementUnselectable(s)},getContext:function(){return this.contextTop},setActiveObject:function(r,s){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=r;r.setActive(true);this.renderAll();this.fire("object:selected",{target:r,e:s});return this},getActiveObject:function(){return this._activeObject},discardActiveObject:function(){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=null;return this},setActiveGroup:function(r){this._activeGroup=r;return this},getActiveGroup:function(){return this._activeGroup},discardActiveGroup:function(){var r=this.getActiveGroup();if(r){r.destroy()}return this.setActiveGroup(null)},deactivateAll:function(){var s=this.getObjects(),t=0,r=s.length;for(;t1){var o=new fabric.PathGroup(q,n)}else{var o=q[0]}o.setSourcePath(m);if(!(o instanceof fabric.PathGroup)){fabric.util.object.extend(o,n);if(typeof n.angle!=="undefined"){o.setAngle(n.angle)}}g(o,l)})}}}},this)}catch(c){fabric.log(c.message)}},loadFromJSON:function(a,d){if(!a){return}var b=JSON.parse(a);if(!b||(b&&!b.objects)){return}this.clear();var c=this;this._enlivenObjects(b.objects,function(){c.backgroundColor=b.background;if(d){d()}});return this},_enlivenObjects:function(b,e){var c=0,a=b.filter(function(f){return f.type==="image"}).length;var d=this;b.forEach(function(h,g){if(!h.type){return}switch(h.type){case"image":case"font":fabric[fabric.util.string.capitalize(h.type)].fromObject(h,function(i){d.insertAt(i,g,true);if(++c===a){if(e){e()}}});break;default:var f=fabric[fabric.util.string.camelize(fabric.util.string.capitalize(h.type))];if(f&&f.fromObject){d.insertAt(f.fromObject(h),g,true)}break}});if(a===0&&e){e()}},_toDataURL:function(a,b){this.clone(function(c){b(c.toDataURL(a))})},_toDataURLWithMultiplier:function(a,c,b){this.clone(function(d){b(d.toDataURLWithMultiplier(a,c))})},clone:function(c){var a=fabric.document.createElement("canvas");a.width=this.getWidth();a.height=this.getHeight();var b=this.__clone||(this.__clone=new fabric.Canvas(a));b.clipTo=this.clipTo;return b.loadFromJSON(JSON.stringify(this.toJSON()),function(){if(c){c(b)}})}});(function(a){var d=a.fabric||(a.fabric={}),l=d.util.object.extend,m=d.util.object.clone,c=d.util.toFixed,k=d.util.string.capitalize,p=d.util.getPointer,b=d.util.degreesToRadians,o=Array.prototype.slice;if(d.Object){return}d.Object=d.util.createClass({type:"object",includeDefaultValues:true,NUM_FRACTION_DIGITS:2,FX_DURATION:500,MIN_SCALE_LIMIT:0.1,stateProperties:("top left width height scaleX scaleY flipX flipY theta angle opacity cornersize fill overlayFill stroke strokeWidth fillRule borderScaleFactor transformMatrix selectable").split(" "),top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:false,flipY:false,theta:0,opacity:1,angle:0,cornersize:12,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",fill:"rgb(0,0,0)",fillRule:"source-over",overlayFill:null,stroke:null,strokeWidth:1,borderOpacityWhenMoving:0.4,borderScaleFactor:1,transformMatrix:null,selectable:true,hasControls:true,hasBorders:true,callSuper:function(i){var q=this.constructor.superclass.prototype[i];return(arguments.length>1)?q.apply(this,o.call(arguments,1)):q.call(this)},initialize:function(i){i&&this.setOptions(i)},setOptions:function(q){var r=this.stateProperties.length,s;while(r--){s=this.stateProperties[r];if(s in q){this.set(s,q[s])}}},transform:function(i){i.globalAlpha=this.opacity;i.translate(this.left,this.top);i.rotate(this.theta);i.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(){var i={type:this.type,left:c(this.left,this.NUM_FRACTION_DIGITS),top:c(this.top,this.NUM_FRACTION_DIGITS),width:c(this.width,this.NUM_FRACTION_DIGITS),height:c(this.height,this.NUM_FRACTION_DIGITS),fill:this.fill,overlayFill:this.overlayFill,stroke:this.stroke,strokeWidth:this.strokeWidth,scaleX:c(this.scaleX,this.NUM_FRACTION_DIGITS),scaleY:c(this.scaleY,this.NUM_FRACTION_DIGITS),angle:c(this.getAngle(),this.NUM_FRACTION_DIGITS),flipX:this.flipX,flipY:this.flipY,opacity:c(this.opacity,this.NUM_FRACTION_DIGITS),selectable:this.selectable};if(!this.includeDefaultValues){i=this._removeDefaultValues(i)}return i},toDatalessObject:function(){return this.toObject()},getSvgStyles:function(){return["stroke: ",(this.stroke?this.stroke:"none"),"; ","stroke-width: ",(this.strokeWidth?this.strokeWidth:"0"),"; ","fill: ",(this.fill?this.fill:"none"),"; ","opacity: ",(this.opacity?this.opacity:"1"),";"].join("")},getSvgTransform:function(){var i=this.getAngle();return["translate(",c(this.left,2)," ",c(this.top,2),")",i!==0?(" rotate("+c(i,2)+")"):"",(this.scaleX===1&&this.scaleY===1)?"":(" scale("+c(this.scaleX,2)+" "+c(this.scaleY,2)+")")].join("")},_removeDefaultValues:function(q){var i=d.Object.prototype.options;if(i){this.stateProperties.forEach(function(r){if(q[r]===i[r]){delete q[r]}})}return q},isActive:function(){return !!this.active},setActive:function(i){this.active=!!i;return this},toString:function(){return"#"},set:function(q,i){var s=(q==="scaleX"||q==="scaleY")&&ir.x&&s.xr.y&&u.y=v)&&(s.d.y>=v)){continue}if((s.o.x==s.d.x)&&(s.o.x>=w)){x=s.o.x;u=v}else{z=0;y=(s.d.y-s.o.y)/(s.d.x-s.o.x);r=v-z*w;q=s.o.y-y*s.o.x;x=-(r-q)/(z-y);u=r+z*x}if(x>=w){t+=1}if(t==2){break}}return t},_getImageLines:function(r,q){return{topline:{o:r.tl,d:r.tr},rightline:{o:r.tr,d:r.br},bottomline:{o:r.br,d:r.bl},leftline:{o:r.bl,d:r.tl}}},_setCornerCoords:function(){var t=this.oCoords,q=b(45-this.getAngle()),s=Math.sqrt(2*Math.pow(this.cornersize,2))/2,i=s*Math.cos(q),r=s*Math.sin(q);t.tl.corner={tl:{x:t.tl.x-r,y:t.tl.y-i},tr:{x:t.tl.x+i,y:t.tl.y-r},bl:{x:t.tl.x-i,y:t.tl.y+r},br:{x:t.tl.x+r,y:t.tl.y+i}};t.tr.corner={tl:{x:t.tr.x-r,y:t.tr.y-i},tr:{x:t.tr.x+i,y:t.tr.y-r},br:{x:t.tr.x+r,y:t.tr.y+i},bl:{x:t.tr.x-i,y:t.tr.y+r}};t.bl.corner={tl:{x:t.bl.x-r,y:t.bl.y-i},bl:{x:t.bl.x-i,y:t.bl.y+r},br:{x:t.bl.x+r,y:t.bl.y+i},tr:{x:t.bl.x+i,y:t.bl.y-r}};t.br.corner={tr:{x:t.br.x+i,y:t.br.y-r},bl:{x:t.br.x-i,y:t.br.y+r},br:{x:t.br.x+r,y:t.br.y+i},tl:{x:t.br.x-r,y:t.br.y-i}};t.ml.corner={tl:{x:t.ml.x-r,y:t.ml.y-i},tr:{x:t.ml.x+i,y:t.ml.y-r},bl:{x:t.ml.x-i,y:t.ml.y+r},br:{x:t.ml.x+r,y:t.ml.y+i}};t.mt.corner={tl:{x:t.mt.x-r,y:t.mt.y-i},tr:{x:t.mt.x+i,y:t.mt.y-r},bl:{x:t.mt.x-i,y:t.mt.y+r},br:{x:t.mt.x+r,y:t.mt.y+i}};t.mr.corner={tl:{x:t.mr.x-r,y:t.mr.y-i},tr:{x:t.mr.x+i,y:t.mr.y-r},bl:{x:t.mr.x-i,y:t.mr.y+r},br:{x:t.mr.x+r,y:t.mr.y+i}};t.mb.corner={tl:{x:t.mb.x-r,y:t.mb.y-i},tr:{x:t.mb.x+i,y:t.mb.y-r},bl:{x:t.mb.x-i,y:t.mb.y+r},br:{x:t.mb.x+r,y:t.mb.y+i}}},toGrayscale:function(){var i=this.get("fill");if(i){this.set("overlayFill",new d.Color(i).toGrayscale().toRgb())}return this},complexity:function(){return 0},straighten:function(){var i=this._getAngleValueForStraighten();this.setAngle(i);return this},fxStraighten:function(q){q=q||{};var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(u){t.setAngle(u);i()},onComplete:function(){t.setCoords();s()},onStart:function(){t.setActive(false)}});return this},fxRemove:function(q){q||(q={});var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("opacity"),endValue:0,duration:this.FX_DURATION,onChange:function(u){t.set("opacity",u);i()},onComplete:s,onStart:function(){t.setActive(false)}});return this},_getAngleValueForStraighten:function(){var i=this.get("angle");if(i>-225&&i<=-135){return -180}else{if(i>-135&&i<=-45){return -90}else{if(i>-45&&i<=45){return 0}else{if(i>45&&i<=135){return 90}else{if(i>135&&i<=225){return 180}else{if(i>225&&i<=315){return 270}else{if(i>315){return 360}}}}}}}return 0},toJSON:function(){return this.toObject()},setGradientFill:function(i,q){this.set("fill",d.Gradient.forObject(this,i,q))},animate:function(q,s,i){var r=this;if(!("from" in i)){i.from=this.get(q)}if(/[+-]/.test(s.charAt(0))){s=this.get(q)+parseFloat(s)}d.util.animate({startValue:i.from,endValue:s,duration:i.duration,onChange:function(t){r.set(q,t);i.onChange&&i.onChange()},onComplete:function(){r.setCoords();i.onComplete&&i.onComplete()}})}});d.Object.prototype.rotate=d.Object.prototype.setAngle;var j=d.Object.prototype;for(var g=j.stateProperties.length;g--;){var h=j.stateProperties[g],e=h.charAt(0).toUpperCase()+h.slice(1),f="set"+e,n="get"+e;if(!j[n]){j[n]=(function(i){return new Function('return this.get("'+i+'")')})(h)}if(!j[f]){j[f]=(function(i){return new Function("value",'return this.set("'+i+'", value)')})(h)}}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),e=c.util.object.extend,d=c.Object.prototype.set,a={x1:1,x2:1,y1:1,y2:1};if(c.Line){c.warn("fabric.Line is already defined");return}c.Line=c.util.createClass(c.Object,{type:"line",initialize:function(g,f){if(!g){g=[0,0,0,0]}this.callSuper("initialize",f);this.set("x1",g[0]);this.set("y1",g[1]);this.set("x2",g[2]);this.set("y2",g[3]);this._setWidthHeight()},_setWidthHeight:function(){this.set("width",(this.x2-this.x1)||1);this.set("height",(this.y2-this.y1)||1);this.set("left",this.x1+this.width/2);this.set("top",this.y1+this.height/2)},set:function(f,g){d.call(this,f,g);if(f in a){this._setWidthHeight()}return this},_render:function(f){f.beginPath();f.moveTo(this.width===1?0:(-this.width/2),this.height===1?0:(-this.height/2));f.lineTo(this.width===1?0:(this.width/2),this.height===1?0:(this.height/2));f.lineWidth=this.strokeWidth;var g=f.strokeStyle;f.strokeStyle=f.fillStyle;f.stroke();f.strokeStyle=g},complexity:function(){return 1},toObject:function(){return e(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}});c.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");c.Line.fromElement=function(g,f){var i=c.parseAttributes(g,c.Line.ATTRIBUTE_NAMES);var h=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new c.Line(h,e(i,f))};c.Line.fromObject=function(f){var g=[f.x1,f.y1,f.x2,f.y2];return new c.Line(g,f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),d=Math.PI*2,e=b.util.object.extend;if(b.Circle){b.warn("fabric.Circle is already defined.");return}b.Circle=b.util.createClass(b.Object,{type:"circle",initialize:function(f){f=f||{};this.set("radius",f.radius||0);this.callSuper("initialize",f);var g=this.get("radius")*2*this.get("scaleX");this.set("width",g).set("height",g)},toObject:function(){return e(this.callSuper("toObject"),{radius:this.get("radius")})},toSVG:function(){return('')},_render:function(f,g){f.beginPath();f.globalAlpha*=this.opacity;f.arc(g?this.left:0,g?this.top:0,this.radius,0,d,false);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},complexity:function(){return 1}});b.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Circle.fromElement=function(g,f){f||(f={});var h=b.parseAttributes(g,b.Circle.ATTRIBUTE_NAMES);if(!c(h)){throw Error("value of `r` attribute is required and can not be negative")}if("left" in h){h.left-=(f.width/2)||0}if("top" in h){h.top-=(f.height/2)||0}return new b.Circle(e(h,f))};function c(f){return(("radius" in f)&&(f.radius>0))}b.Circle.fromObject=function(f){return new b.Circle(f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Triangle){b.warn("fabric.Triangle is already defined");return}b.Triangle=b.util.createClass(b.Object,{type:"triangle",initialize:function(c){c=c||{};this.callSuper("initialize",c);this.set("width",c.width||100).set("height",c.height||100)},_render:function(c){var d=this.width/2,e=this.height/2;c.beginPath();c.moveTo(-d,e);c.lineTo(0,-e);c.lineTo(d,e);c.closePath();if(this.fill){c.fill()}if(this.stroke){c.stroke()}},complexity:function(){return 1},toSVG:function(){var c=this.width/2,d=this.height/2;var e=[-c+" "+d,"0 "+-d,c+" "+d].join(",");return''}});b.Triangle.fromObject=function(c){return new b.Triangle(c)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),c=Math.PI*2,d=b.util.object.extend;if(b.Ellipse){b.warn("fabric.Ellipse is already defined.");return}b.Ellipse=b.util.createClass(b.Object,{type:"ellipse",initialize:function(e){e=e||{};this.callSuper("initialize",e);this.set("rx",e.rx||0);this.set("ry",e.ry||0);this.set("width",this.get("rx")*2);this.set("height",this.get("ry")*2)},toObject:function(){return d(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,f){if(this.rx===0||this.ry===0){return}return this.callSuper("render",e,f)},_render:function(e,f){e.beginPath();e.save();e.globalAlpha*=this.opacity;e.transform(1,0,0,this.ry/this.rx,0,0);e.arc(f?this.left:0,f?this.top:0,this.rx,0,c,false);if(this.stroke){e.stroke()}if(this.fill){e.fill()}e.restore()},complexity:function(){return 1}});b.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Ellipse.fromElement=function(f,e){e||(e={});var g=b.parseAttributes(f,b.Ellipse.ATTRIBUTE_NAMES);if("left" in g){g.left-=(e.width/2)||0}if("top" in g){g.top-=(e.height/2)||0}return new b.Ellipse(d(g,e))};b.Ellipse.fromObject=function(e){return new b.Ellipse(e)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={});if(c.Rect){console.warn("fabric.Rect is already defined");return}c.Rect=c.util.createClass(c.Object,{type:"rect",options:{rx:0,ry:0},initialize:function(d){this._initStateProperties();this.callSuper("initialize",d);this._initRxRy()},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){if(this.rx&&!this.ry){this.ry=this.rx}else{if(this.ry&&!this.rx){this.rx=this.ry}}},_render:function(f){var j=this.rx||0,i=this.ry||0,d=-this.width/2,k=-this.height/2,e=this.width,g=this.height;f.beginPath();f.globalAlpha*=this.opacity;if(this.group){f.translate(this.x||0,this.y||0)}f.moveTo(d+j,k);f.lineTo(d+e-j,k);f.bezierCurveTo(d+e,k,d+e,k+i,d+e,k+i);f.lineTo(d+e,k+g-i);f.bezierCurveTo(d+e,k+g,d+e-j,k+g,d+e-j,k+g);f.lineTo(d+j,k+g);f.bezierCurveTo(d,k+g,d,k+g-i,d,k+g-i);f.lineTo(d,k+i);f.bezierCurveTo(d,k,d+j,k,d+j,k);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},_normalizeLeftTopProperties:function(d){if(d.left){this.set("left",d.left+this.getWidth()/2)}this.set("x",d.left||0);if(d.top){this.set("top",d.top+this.getHeight()/2)}this.set("y",d.top||0);return this},complexity:function(){return 1},toSVG:function(){return''}});c.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");function a(d){d.left=d.left||0;d.top=d.top||0;return d}c.Rect.fromElement=function(e,d){if(!e){return null}var g=c.parseAttributes(e,c.Rect.ATTRIBUTE_NAMES);g=a(g);var f=new c.Rect(c.util.object.extend((d?c.util.object.clone(d):{}),g));f._normalizeLeftTopProperties(g);return f};c.Rect.fromObject=function(d){return new c.Rect(d)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),a=c.util.toFixed;if(c.Polyline){c.warn("fabric.Polyline is already defined");return}c.Polyline=c.util.createClass(c.Object,{type:"polyline",initialize:function(e,d){d=d||{};this.set("points",e);this.callSuper("initialize",d);this._calcDimensions()},_calcDimensions:function(){return c.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return c.Polygon.prototype.toObject.call(this)},toSVG:function(){var f=[];for(var e=0,d=this.points.length;e"].join("")},_render:function(f){var e;f.beginPath();for(var g=0,d=this.points.length;g"].join("")},_render:function(l){var k;l.beginPath();for(var m=0,j=this.points.length;m1){E=Math.sqrt(E);O*=E;N*=E}var R=aa/O;var Q=W/O;var D=(-W)/N;var C=(aa)/N;var H=R*M+Q*L;var q=D*M+C*L;var F=R*T+Q*S;var ab=D*T+C*S;var Z=(F-H)*(F-H)+(ab-q)*(ab-q);var U=1/Z-0.25;if(U<0){U=0}var w=Math.sqrt(U);if(P==J){w=-w}var V=0.5*(H+F)-w*(ab-q);var K=0.5*(q+ab)+w*(F-H);var v=Math.atan2(q-K,H-V);var u=Math.atan2(ab-K,F-V);var Y=u-v;if(Y<0&&P==1){Y+=2*Math.PI}else{if(Y>0&&P==0){Y-=2*Math.PI}}var B=Math.ceil(Math.abs(Y/(Math.PI*0.5+0.001)));var I=[];for(var X=0;X"},toObject:function(){var q=g(this.callSuper("toObject"),{path:this.path});if(this.sourcePath){q.sourcePath=this.sourcePath}if(this.transformMatrix){q.transformMatrix=this.transformMatrix}return q},toDatalessObject:function(){var q=this.toObject();if(this.sourcePath){q.path=this.sourcePath}delete q.sourcePath;return q},toSVG:function(){var t=[];for(var r=0,q=this.path.length;r',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var C=[],z,v,y;for(var u=0,t,q,w=this.path.length;uB){for(var r=1,x=q.length;r"];for(var l=0,j=m.length;l");return k.join("")},toString:function(){return"#"},isSameColor:function(){var j=this.getObjects()[0].get("fill");return this.getObjects().every(function(k){return k.get("fill")===j})},complexity:function(){return this.paths.reduce(function(j,k){return j+((k&&k.complexity)?k.complexity():0)},0)},toGrayscale:function(){var j=this.paths.length;while(j--){this.paths[j].toGrayscale()}return this},getObjects:function(){return this.paths}});function c(m){for(var l=0,j=m.length;l"},getObjects:function(){return this.objects},add:function(h){this._restoreObjectsState();this.objects.push(h);h.setActive(true);this._calcBounds();this._updateObjectsCoords();return this},remove:function(h){this._restoreObjectsState();f(this.objects,h);h.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},size:function(){return this.getObjects().length},set:function(h,k){if(typeof k=="function"){this.set(h,k(this[h]))}else{if(h==="fill"||h==="opacity"){var j=this.objects.length;this[h]=k;while(j--){this.objects[j].set(h,k)}}else{this[h]=k}}return this},contains:function(h){return this.objects.indexOf(h)>-1},toObject:function(){return g(this.callSuper("toObject"),{objects:b(this.objects,"clone")})},render:function(j){j.save();this.transform(j);var n=Math.max(this.scaleX,this.scaleY);for(var l=0,h=this.objects.length,k;k=this.objects[l];l++){var m=k.borderScaleFactor;k.borderScaleFactor=n;k.render(j);k.borderScaleFactor=m}this.hideBorders||this.drawBorders(j);this.hideCorners||this.drawCorners(j);j.restore();this.setCoords()},item:function(h){return this.getObjects()[h]},complexity:function(){return this.getObjects().reduce(function(i,h){i+=(typeof h.complexity=="function")?h.complexity():0;return i},0)},_restoreObjectsState:function(){this.objects.forEach(this._restoreObjectState,this);return this},_restoreObjectState:function(j){var l=this.get("left"),m=this.get("top"),h=this.getAngle()*(Math.PI/180),k=j.get("originalLeft"),n=j.get("originalTop"),i=Math.cos(h)*j.get("top")+Math.sin(h)*j.get("left"),o=-Math.sin(h)*j.get("top")+Math.cos(h)*j.get("left");j.setAngle(j.getAngle()+this.getAngle());j.set("left",l+o*this.get("scaleX"));j.set("top",m+i*this.get("scaleY"));j.set("scaleX",j.get("scaleX")*this.get("scaleX"));j.set("scaleY",j.get("scaleY")*this.get("scaleY"));j.setCoords();j.hideCorners=false;j.setActive(false);j.setCoords();return this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){this._originalLeft=this.get("left");this._originalTop=this.get("top");return this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){this.forEachObject(function(h){h.setCoords()});return this},activateAllObjects:function(){return this.setActive(true)},setActive:function(h){this.forEachObject(function(i){i.setActive(h)});return this},forEachObject:e.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var j=this.getObjects(),i=j[0]?j[0].get("opacity"):1;var h=j.every(function(k){return k.get("opacity")===i});if(h){this.opacity=i}},_calcBounds:function(){var s=[],q=[],p,n,k,h,m,l,u,r=0,t=this.objects.length;for(;ri.x&&j-hi.y},toGrayscale:function(){var h=this.objects.length;while(h--){this.objects[h].toGrayscale()}}});e.Group.fromObject=function(h){return new e.Group(h.objects,h)}})(typeof exports!="undefined"?exports:this);(function(a){var b=fabric.util.object.extend;if(!a.fabric){a.fabric={}}if(a.fabric.Image){fabric.warn("fabric.Image is already defined.");return}if(!fabric.Object){fabric.warn("fabric.Object is required for fabric.Image initialization");return}fabric.Image=fabric.util.createClass(fabric.Object,{active:false,bordervisibility:false,cornervisibility:false,type:"image",filters:[],initialize:function(d,c){c||(c={});this.callSuper("initialize",c);this._initElement(d);this._originalImage=this.getElement();this._initConfig(c);if(c.filters){this.filters=c.filters;this.applyFilters()}},getElement:function(){return this._element},setElement:function(c){this._element=c;this._initConfig();return this},getOriginalSize:function(){var c=this.getElement();return{width:c.width,height:c.height}},setBorderVisibility:function(c){this._resetWidthHeight();this._adjustWidthHeightToBorders(showBorder);this.setCoords()},setCornersVisibility:function(c){this.cornervisibility=!!c},render:function(c,d){c.save();if(!d){this.transform(c)}this._render(c);if(this.active&&!d){this.drawBorders(c);this.hideCorners||this.drawCorners(c)}c.restore()},toObject:function(){return b(this.callSuper("toObject"),{src:this._originalImage.src||this._originalImage._src,filters:this.filters.concat()})},toSVG:function(){return''},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(c){this.constructor.fromObject(this.toObject(),c)},applyFilters:function(i){if(this.filters.length===0){this.setElement(this._originalImage);i&&i();return}var c=typeof Buffer!=="undefined"&&typeof window==="undefined",g=this._originalImage,e=fabric.document.createElement("canvas"),f=c?new (require("canvas").Image):fabric.document.createElement("img"),h=this;if(!e.getContext&&typeof G_vmlCanvasManager!="undefined"){G_vmlCanvasManager.initElement(e)}e.width=g.width;e.height=g.height;e.getContext("2d").drawImage(g,0,0);this.filters.forEach(function(j){j&&j.applyTo(e)});f.onload=function(){h.setElement(f);i&&i();f.onload=e=g=null};f.width=g.width;f.height=g.height;if(c){var d=e.toDataURL("image/png").replace(/data:image\/png;base64,/,"");f.src=new Buffer(d,"base64");h.setElement(f);i&&i()}else{f.src=e.toDataURL("image/png")}return this},_render:function(d){var c=this.getOriginalSize();d.drawImage(this.getElement(),-c.width/2,-c.height/2,c.width,c.height)},_adjustWidthHeightToBorders:function(c){if(c){this.currentBorder=this.borderwidth;this.width+=(2*this.currentBorder);this.height+=(2*this.currentBorder)}else{this.currentBorder=0}},_resetWidthHeight:function(){var c=this.getElement();this.set("width",c.width);this.set("height",c.height)},_initElement:function(c){this.setElement(fabric.util.getById(c));fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(c){this.setOptions(c||{});this._setBorder();this._setWidthHeight()},_initFilters:function(c){if(c.filters&&c.filters.length){this.filters=c.filters.map(function(d){return fabric.Image.filters[d.type].fromObject(d)})}},_setBorder:function(){if(this.bordervisibility){this.currentBorder=this.borderwidth}else{this.currentBorder=0}},_setWidthHeight:function(){var c=2*this.currentBorder;this.width=(this.getElement().width||0)+c;this.height=(this.getElement().height||0)+c},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc;fabric.Image.fromObject=function(d,f){var c=fabric.document.createElement("img"),e=d.src;if(d.width){c.width=d.width}if(d.height){c.height=d.height}c.onload=function(){fabric.Image.prototype._initFilters.call(d,d);var g=new fabric.Image(c,d);f&&f(g);c=c.onload=null};c.src=e};fabric.Image.fromURL=function(d,f,e){var c=fabric.document.createElement("img");c.onload=function(){if(f){f(new fabric.Image(c,e))}c=c.onload=null};c.src=d};fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" ");fabric.Image.fromElement=function(d,f,c){c||(c={});var e=fabric.parseAttributes(d,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(e["xlink:href"],f,b(e,c))};fabric.Image.async=true})(typeof exports!="undefined"?exports:this);fabric.Image.filters={};fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(d){var c=d.getContext("2d"),a=c.getImageData(0,0,d.width,d.height),h=a.data,e=a.width,l=a.height,k,b,g,f;for(g=0;gh&&m>h&&o>h&&p(a-m)'},_render:function(f){var h=Cufon.textOptions||(Cufon.textOptions={});h.left=this.left;h.top=this.top;h.context=f;h.color=this.fill;var g=this._initDummyElement();this.transform(f);Cufon.replaceElement(g,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor});this.width=h.width;this.height=h.height;this._totalLineHeight=h.totalLineHeight;this._fontAscent=h.fontAscent;this._boundaries=h.boundaries;this._shadowOffsets=h.shadowOffsets;this._shadows=h.shadows||[];this.setCoords()},_initDummyElement:function(){var g=c.document.createElement("pre"),f=c.document.createElement("div");f.appendChild(g);if(typeof G_vmlCanvasManager=="undefined"){g.innerHTML=this.text}else{g.innerText=this.text.replace(/\r?\n/gi,"\r")}g.style.fontSize=this.fontSize+"px";g.style.letterSpacing="normal";return g},render:function(f,g){f.save();this._render(f);if(!g&&this.active){this.drawBorders(f);this.hideCorners||this.drawCorners(f)}f.restore()},toObject:function(){return e(this.callSuper("toObject"),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor})},toSVG:function(){var i=this.text.split(/\r?\n/),j=-this._fontAscent-((this._fontAscent/5)*this.lineHeight),g=-(this.width/2),f=(this.height/2)-(i.length*this.fontSize)-this._totalLineHeight,h=this._getSVGTextAndBg(j,g,i),k=this._getSVGShadows(j,i);f+=((this._fontAscent/5)*this.lineHeight);return['',h.textBgRects.join(""),"',k.join(""),h.textSpans.join(""),"",""].join("")},_getSVGShadows:function(h,n){var o=[],k,l,p,g,f=1;for(k=0,p=this._shadows.length;k",c.util.string.escapeXml(n[l]),"");f=1}else{f++}}}return o},_getSVGTextAndBg:function(j,h,n){var g=[],k=[],l,m,o,f=1;for(l=0,o=n.length;l",c.util.string.escapeXml(n[l]),"");f=1}else{f++}if(!this.backgroundColor){continue}k.push("')}return{textSpans:g,textBgRects:k}},_getFillAttributes:function(f){var g=f?new c.Color(f):"";if(!g||!g.getSource()||g.getAlpha()===1){return'fill="'+f+'"'}return'opacity="'+g.getAlpha()+'" fill="'+g.setAlpha(1).toRgb()+'"'},setColor:function(f){this.set("fill",f);return this},setFontsize:function(f){this.set("fontSize",f);this.setCoords();return this},getText:function(){return this.text},setText:function(f){this.set("text",f);this.setCoords();return this},set:function(f,g){if(typeof f=="object"){for(var h in f){this.set(h,f[h])}}else{this[f]=g;if(f==="fontFamily"&&this.path){this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+g+"$3")}}return this}});c.Text.fromObject=function(f){return new c.Text(f.text,d(f))};c.Text.fromElement=function(f){}})(typeof exports!="undefined"?exports:this);(function(){if(typeof document!="undefined"&&typeof window!="undefined"){return}var XML=require("o3-xml"),URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;function request(url,encoding,callback){var oURL=URL.parse(url),client=HTTP.createClient(80,oURL.hostname),request=client.request("GET",oURL.pathname,{host:oURL.hostname});client.addListener("error",function(err){if(err.errno===process.ECONNREFUSED){fabric.log("ECONNREFUSED: connection refused to "+client.host+":"+client.port)}else{fabric.log(err.message)}});request.end();request.on("response",function(response){var body="";if(encoding){response.setEncoding(encoding)}response.on("end",function(){callback(body)});response.on("data",function(chunk){if(response.statusCode==200){body+=chunk}})})}fabric.util.loadImage=function(url,callback){request(url,"binary",function(body){var img=new Image();img.src=new Buffer(body,"binary");img._src=url;callback(img)})};fabric.loadSVGFromURL=function(url,callback){url=url.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();request(url,"",function(body){var doc=XML.parseFromString(body);fabric.parseSVGDocument(doc.documentElement,function(results,options){callback(results,options)})})};fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body);callback&&callback()})};fabric.Image.fromObject=function(object,callback){fabric.util.loadImage(object.src,function(img){var oImg=new fabric.Image(img);oImg._initConfig(object);oImg._initFilters(object);callback(oImg)})};fabric.createCanvasForNode=function(width,height){var canvasEl=fabric.document.createElement("canvas"),nodeCanvas=new Canvas(width||600,height||600);canvasEl.style={};canvasEl.width=nodeCanvas.width;canvasEl.height=nodeCanvas.height;var canvas=fabric.Canvas||fabric.StaticCanvas;var fabricCanvas=new canvas(canvasEl);fabricCanvas.contextContainer=nodeCanvas.getContext("2d");fabricCanvas.nodeCanvas=nodeCanvas;return fabricCanvas};fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};if(fabric.Canvas){fabric.Canvas.prototype.createPNGStream}var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(width){origSetWidth.call(this);this.nodeCanvas.width=width;return this};if(fabric.Canvas){fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth}var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(height){origSetHeight.call(this);this.nodeCanvas.height=height;return this};if(fabric.Canvas){fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight}})(); \ No newline at end of file +var Cufon=(function(){var k=function(){return k.replace.apply(null,arguments)};var u=k.DOM={ready:(function(){var z=false,B={loaded:1,complete:1};var y=[],A=function(){if(z){return}z=true;for(var C;C=y.shift();C()){}};if(fabric.document.addEventListener){fabric.document.addEventListener("DOMContentLoaded",A,false);fabric.window.addEventListener("pageshow",A,false)}if(!fabric.window.opera&&fabric.document.readyState){(function(){B[fabric.document.readyState]?A():setTimeout(arguments.callee,10)})()}if(fabric.document.readyState&&fabric.document.createStyleSheet){(function(){try{fabric.document.body.doScroll("left");A()}catch(C){setTimeout(arguments.callee,1)}})()}o(fabric.window,"load",A);return function(C){if(!arguments.length){A()}else{z?C():y.push(C)}}})()};var l=k.CSS={Size:function(z,y){this.value=parseFloat(z);this.unit=String(z).match(/[a-z%]*$/)[0]||"px";this.convert=function(A){return A/y*this.value};this.convertFrom=function(A){return A/this.value*y};this.toString=function(){return this.value+this.unit}},getStyle:function(y){return new a(y.style)},quotedList:i(function(B){var A=[],z=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,y;while(y=z.exec(B)){A.push(y[3]||y[1])}return A}),ready:(function(){var A=false;var z=[],B=function(){A=true;for(var D;D=z.shift();D()){}};var y=Object.prototype.propertyIsEnumerable?f("style"):{length:0};var C=f("link");u.ready(function(){var G=0,F;for(var E=0,D=C.length;F=C[E],E=y.length+G){B()}else{setTimeout(arguments.callee,10)}});return function(D){if(A){D()}else{z.push(D)}}})(),supports:function(A,z){var y=fabric.document.createElement("span").style;if(y[A]===undefined){return false}y[A]=z;return y[A]===z},textAlign:function(B,A,y,z){if(A.get("textAlign")=="right"){if(y>0){B=" "+B}}else{if(y400}if(F==500){F=400}for(var G in D){G=parseInt(G,10);if(!C||GA){A=G}H.push(G)}if(FA){F=A}H.sort(function(J,I){return(B?(J>F&&I>F)?JI:(JI:JV){V=Q}if(P>T){T=P}if(Qz){z=e}L.push(e);e=0;continue}var B=ab.glyphs[ag[aa]]||ab.missingGlyph;if(!B){continue}e+=D=Number(B.w||ab.w)+U}L.push(e);e=Math.max(z,e);var m=[];for(var aa=L.length;aa--;){m[aa]=e-L[aa]}if(D===null){return null}V+=(H.width-D);C+=H.minX;var v,p;if(n){v=J;p=J.firstChild}else{v=fabric.document.createElement("span");v.className="cufon cufon-canvas";v.alt=E;p=fabric.document.createElement("canvas");v.appendChild(p);if(A.printable){var Y=fabric.document.createElement("span");Y.className="cufon-alt";Y.appendChild(fabric.document.createTextNode(E));v.appendChild(Y)}}var ah=v.style;var O=p.style||{};var k=o.convert(H.height-I+T);var af=Math.ceil(k);var S=af/k;p.width=Math.ceil(o.convert(e+V-C)*S);p.height=af;I+=H.minY;O.top=Math.round(o.convert(I-ab.ascent))+"px";O.left=Math.round(o.convert(C))+"px";var j=Math.ceil(o.convert(e*S));var t=j+"px";var s=o.convert(ab.height);var F=(A.lineHeight-1)*o.convert(-ab.ascent/5)*(M-1);Cufon.textOptions.width=j;Cufon.textOptions.height=(s*M)+F;Cufon.textOptions.lines=M;Cufon.textOptions.totalLineHeight=F;if(a){ah.width=t;ah.height=s+"px"}else{ah.paddingLeft=t;ah.paddingBottom=(s-1)+"px"}var ad=Cufon.textOptions.context||p.getContext("2d"),K=af/H.height;Cufon.textOptions.fontAscent=ab.ascent*K;Cufon.textOptions.boundaries=null;for(var w=Cufon.textOptions.shadowOffsets,aa=R.length;aa--;){w[aa]=[R[aa][0]*K,R[aa][1]*K]}ad.save();ad.scale(K,K);ad.translate(-C-((1/K*p.width)/2)+(Cufon.fonts[ab.family].offsetLeft||0),-I-(Cufon.textOptions.height/K)/2);ad.lineWidth=ab.face["underline-thickness"];ad.save();function q(l,i){ad.strokeStyle=i;ad.beginPath();ad.moveTo(0,l);ad.lineTo(e,l);ad.stroke()}var r=Cufon.getTextDecoration(A),u=A.fontStyle==="italic";function ae(){ad.save();ad.fillStyle=A.backgroundColor;var aj=0,an=0,y=[{left:0}];if(A.textAlign==="right"){ad.translate(m[an],0);y[0].left=m[an]*K}else{if(A.textAlign==="center"){ad.translate(m[an]/2,0);y[0].left=m[an]/2*K}}for(var al=0,ak=ag.length;al.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}');function c(e,f){return a(e,/(?:em|ex|%)$/i.test(f)?"1em":f)}function a(h,i){if(/px$/i.test(i)){return parseFloat(i)}var g=h.style.left,f=h.runtimeStyle.left;h.runtimeStyle.left=h.currentStyle.left;h.style.left=i;var e=h.style.pixelLeft;h.style.left=g;h.runtimeStyle.left=f;return e}return function(T,z,O,w,D,U,M){var h=(z===null);if(h){z=D.alt}var B=T.viewBox;var j=O.computedFontSize||(O.computedFontSize=new Cufon.CSS.Size(c(U,O.get("fontSize"))+"px",T.baseSize));var L=O.computedLSpacing;if(L==undefined){L=O.get("letterSpacing");O.computedLSpacing=L=(L=="normal")?0:~~j.convertFrom(a(U,L))}var t,m;if(h){t=D;m=D.firstChild}else{t=fabric.document.createElement("span");t.className="cufon cufon-vml";t.alt=z;m=fabric.document.createElement("span");m.className="cufon-vml-canvas";t.appendChild(m);if(w.printable){var R=fabric.document.createElement("span");R.className="cufon-alt";R.appendChild(fabric.document.createTextNode(z));t.appendChild(R)}if(!M){t.appendChild(fabric.document.createElement("cvml:shape"))}}var Z=t.style;var G=m.style;var f=j.convert(B.height),W=Math.ceil(f);var K=W/f;var J=B.minX,I=B.minY;G.height=W;G.top=Math.round(j.convert(I-T.ascent));G.left=Math.round(j.convert(J));Z.height=j.convert(T.height)+"px";var p=Cufon.getTextDecoration(w);var y=O.get("color");var X=Cufon.CSS.textTransform(z,O).split("");var e=0,H=0,q=null;var x,r,A=w.textShadow;for(var S=0,Q=0,P=X.length;Su?1:(m-l)/n;q(k+(s-k)*r(t));if(m>u||o()){v.onComplete&&v.onComplete();return}i(p)})()}var i=(function(){return fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(l,k){fabric.window.setTimeout(l,1000/60)}})();function a(l,n,m){if(l){var k=new Image();k.onload=function(){n&&n.call(m,k);k=k.onload=null};k.src=l}else{n&&n.call(m,l)}}function g(m,q){function l(r){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(r))]}var o=[],n=0,k=m.filter(function(r){return l(r.type).async}).length;var p=this;m.forEach(function(t,s){if(!t.type){return}var r=l(t.type);if(r.async){r.fromObject(t,function(u){o[s]=u;if(++n===k){if(q){q(o)}}})}else{o[s]=r.fromObject(t)}});if(k===0&&q){q(o)}}fabric.util.removeFromArray=h;fabric.util.degreesToRadians=b;fabric.util.toFixed=d;fabric.util.getRandomInt=e;fabric.util.falseFunction=j;fabric.util.animate=c;fabric.util.requestAnimFrame=i;fabric.util.loadImage=a;fabric.util.enlivenObjects=g})();(function(){var d=Array.prototype.slice;if(!Array.prototype.indexOf){Array.prototype.indexOf=function(g){if(this===void 0||this===null){throw new TypeError()}var h=Object(this),e=h.length>>>0;if(e===0){return -1}var i=0;if(arguments.length>0){i=Number(arguments[1]);if(i!==i){i=0}else{if(i!==0&&i!==(1/0)&&i!==-(1/0)){i=(i>0||-1)*Math.floor(Math.abs(i))}}}if(i>=e){return -1}var f=i>=0?i:Math.max(e-Math.abs(i),0);for(;f>>0;f>>0;g>>0;f>>0;f>>0;g>>0,f=0,h;if(arguments.length>1){h=arguments[1]}else{do{if(f in this){h=this[f++];break}if(++f>=e){throw new TypeError()}}while(true)}for(;f=e){e=h[f][g]}}}else{while(f--){if(h[f]>=e){e=h[f]}}}return e}function c(h,g){if(!h||h.length===0){return undefined}var f=h.length-1,e=g?h[f][g]:h[f];if(g){while(f--){if(h[f][g]",">")}fabric.util.string={camelize:b,capitalize:c,escapeXml:a}}());(function(){var c=Array.prototype.slice,a=Function.prototype.apply,b=function(){};if(!Function.prototype.bind){Function.prototype.bind=function(d){var g=this,e=c.call(arguments,1),f;if(e.length){f=function(){return a.call(g,this instanceof b?this:d,e.concat(c.call(arguments)))}}else{f=function(){return a.call(g,this instanceof b?this:d,arguments)}}b.prototype=this.prototype;f.prototype=new b;return f}}})();(function(){var f=Array.prototype.slice,e=function(){};var c=(function(){for(var g in {toString:1}){if(g==="toString"){return false}}return true})();var b;if(c){b=function(g,i){if(i.toString!==Object.prototype.toString){g.prototype.toString=i.toString}if(i.valueOf!==Object.prototype.valueOf){g.prototype.valueOf=i.valueOf}for(var h in i){g.prototype[h]=i[h]}}}else{b=function(g,i){for(var h in i){g.prototype[h]=i[h]}}}function a(){}function d(){var k=null,j=f.call(arguments,0);if(typeof j[0]==="function"){k=j.shift()}function g(){this.initialize.apply(this,arguments)}g.superclass=k;g.subclasses=[];if(k){a.prototype=k.prototype;g.prototype=new a;k.subclasses.push(g)}for(var h=0,l=j.length;h-1?c(j,l.match(/opacity:\s*(\d?\.?\d*)/)[1]):j}for(var m in l){if(m==="opacity"){c(j,l[m])}else{var k=(m==="float"||m==="cssFloat")?(typeof n.styleFloat==="undefined"?"cssFloat":"styleFloat"):m;n[k]=l[m]}}return j}var h=fabric.document.createElement("div"),g=typeof h.style.opacity==="string",b=typeof h.style.filter==="string",a=fabric.document.defaultView,f=a&&typeof a.getComputedStyle!=="undefined",d=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,c=function(i){return i};if(g){c=function(i,j){i.style.opacity=j;return i}}else{if(b){c=function(i,j){var k=i.style;if(i.currentStyle&&!i.currentStyle.hasLayout){k.zoom=1}if(d.test(k.filter)){j=j>=0.9999?"":("alpha(opacity="+(j*100)+")");k.filter=k.filter.replace(d,j)}else{k.filter+=" alpha(opacity="+(j*100)+")"}return i}}}fabric.util.setStyle=e})();(function(){var h=Array.prototype.slice;function g(j){return typeof j==="string"?fabric.document.getElementById(j):j}function b(j){return h.call(j,0)}try{var i=b(fabric.document.childNodes) instanceof Array}catch(a){}if(!i){b=function(k){var j=new Array(k.length),l=k.length;while(l--){j[l]=k[l]}return j}}function c(k,j){var l=fabric.document.createElement(k);for(var m in j){if(m==="class"){l.className=j[m]}else{if(m==="for"){l.htmlFor=j[m]}else{l.setAttribute(m,j[m])}}}return l}function f(j,k){if((" "+j.className+" ").indexOf(" "+k+" ")===-1){j.className+=(j.className?" ":"")+k}}function e(k,l,j){if(typeof l==="string"){l=c(l,j)}if(k.parentNode){k.parentNode.replaceChild(l,k)}l.appendChild(k);return l}function d(k){var j=0,l=0;do{j+=k.offsetTop||0;l+=k.offsetLeft||0;k=k.offsetParent}while(k);return({left:l,top:j})}(function(){var k=fabric.document.documentElement.style;var l="userSelect" in k?"userSelect":"MozUserSelect" in k?"MozUserSelect":"WebkitUserSelect" in k?"WebkitUserSelect":"KhtmlUserSelect" in k?"KhtmlUserSelect":"";function m(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=fabric.util.falseFunction}if(l){n.style[l]="none"}else{if(typeof n.unselectable=="string"){n.unselectable="on"}}return n}function j(n){if(typeof n.onselectstart!=="undefined"){n.onselectstart=null}if(l){n.style[l]=""}else{if(typeof n.unselectable=="string"){n.unselectable=""}}return n}fabric.util.makeElementUnselectable=m;fabric.util.makeElementSelectable=j})();(function(){function j(k,o){var m=fabric.document.getElementsByTagName("head")[0],l=fabric.document.createElement("script"),n=true;l.type="text/javascript";l.setAttribute("runat","server");l.onload=l.onreadystatechange=function(p){if(n){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete"){return}n=false;o(p||fabric.window.event);l=l.onload=l.onreadystatechange=null}};l.src=k;m.appendChild(l)}fabric.util.getScript=j})();fabric.util.getById=g;fabric.util.toArray=b;fabric.util.makeElement=c;fabric.util.addClass=f;fabric.util.wrapElement=e;fabric.util.getElementOffset=d})();(function(){function d(e,f){return e+(/\?/.test(e)?"&":"?")+f}var c=(function(){var h=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest()}];for(var e=h.length;e--;){try{var g=h[e]();if(g){return h[e]}}catch(f){}}})();function a(){}function b(g,f){f||(f={});var j=f.method?f.method.toUpperCase():"GET",i=f.onComplete||function(){},h=c(),e;h.onreadystatechange=function(){if(h.readyState===4){i(h);h.onreadystatechange=a}};if(j==="GET"){e=null;if(typeof f.parameters=="string"){g=d(g,f.parameters)}}h.open(j,g,true);if(j==="POST"||j==="PUT"){h.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}h.send(e);return h}fabric.util.request=b})();(function(i){var g=i.fabric||(i.fabric={}),o=g.util.object.extend,e=g.util.string.capitalize,p=g.util.object.clone;var k={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix"};function d(v,u){if(!v){return}var x,t,s={};if(v.parentNode&&/^g$/i.test(v.parentNode.nodeName)){s=g.parseAttributes(v.parentNode,u)}var w=u.reduce(function(z,y){x=v.getAttribute(y);t=parseFloat(x);if(x){if((y==="fill"||y==="stroke")&&x==="none"){x=""}if(y==="fill-rule"){x=(x==="evenodd")?"destination-over":x}if(y==="transform"){x=g.parseTransformAttribute(x)}if(y in k){y=k[y]}z[y]=isNaN(t)?x:t}return z},{});w=o(w,o(n(v),g.parseStyleAttribute(v)));return o(s,w)}g.parseTransformAttribute=(function(){function s(L,M){var N=M[0];L[0]=Math.cos(N);L[1]=Math.sin(N);L[2]=-Math.sin(N);L[3]=Math.cos(N)}function x(N,O){var M=O[0],L=(O.length===2)?O[1]:O[0];N[0]=M;N[3]=L}function I(L,M){L[2]=M[0]}function u(L,M){L[1]=M[0]}function F(L,M){L[4]=M[0];if(M.length===2){L[5]=M[1]}}var z=[1,0,0,1,0,0],t="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",J="(?:\\s+,?\\s*|,\\s*)",A="(?:(skewX)\\s*\\(\\s*("+t+")\\s*\\))",y="(?:(skewY)\\s*\\(\\s*("+t+")\\s*\\))",H="(?:(rotate)\\s*\\(\\s*("+t+")(?:"+J+"("+t+")"+J+"("+t+"))?\\s*\\))",K="(?:(scale)\\s*\\(\\s*("+t+")(?:"+J+"("+t+"))?\\s*\\))",D="(?:(translate)\\s*\\(\\s*("+t+")(?:"+J+"("+t+"))?\\s*\\))",G="(?:(matrix)\\s*\\(\\s*("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")"+J+"("+t+")\\s*\\))",E="(?:"+G+"|"+D+"|"+K+"|"+H+"|"+A+"|"+y+")",B="(?:"+E+"(?:"+J+E+")*)",v="^\\s*(?:"+B+"?)\\s*$",C=new RegExp(v),w=new RegExp(E);return function(M){var L=z.concat();if(!M||(M&&!C.test(M))){return L}M.replace(w,function(Q){var N=new RegExp(E).exec(Q).filter(function(R){return(R!==""&&R!=null)}),O=N[1],P=N.slice(2).map(parseFloat);switch(O){case"translate":F(L,P);break;case"rotate":s(L,P);break;case"scale":x(L,P);break;case"skewX":I(L,P);break;case"skewY":u(L,P);break;case"matrix":L=P;break}});return L}})();function r(v){if(!v){return null}v=v.trim();var x=v.indexOf(",")>-1;v=v.split(/\s+/);var t=[];if(x){for(var u=0,s=v.length;u/i,""))}if(!v.documentElement){return}g.parseSVGDocument(v.documentElement,function(y,x){j.set(s,{objects:g.util.array.invoke(y,"toObject"),options:x});u(y,x)})}}function a(u){var t=u.objects,s=u.options;t=t.map(function(v){return g[e(v.type)].fromObject(v)});return({objects:t,options:s})}function m(s,v){s=s.trim();var t;if(typeof DOMParser!=="undefined"){var u=new DOMParser();if(u&&u.parseFromString){t=u.parseFromString(s,"text/xml")}}else{if(g.window.ActiveXObject){var t=new ActiveXObject("Microsoft.XMLDOM");t.async="false";t.loadXML(s.replace(//i,""))}}g.parseSVGDocument(t.documentElement,function(x,w){v(x,w)})}function l(v){var t="";for(var u=0,s=v.length;u",'",""].join("")}return t}o(g,{parseAttributes:d,parseElements:f,parseStyleAttribute:h,parsePointsAttribute:r,getCSSRules:c,loadSVGFromURL:b,loadSVGFromString:m,createSVGFontFacesMarkup:l})})(typeof exports!="undefined"?exports:this);(function(){function c(h){var g=h.getAttribute("style");if(g){var k=g.split(/\s*;\s*/);for(var f=k.length;f--;){var e=k[f].split(/\s*:\s*/),d=e[0].trim(),j=e[1].trim();if(d==="stop-color"){return j}}}}fabric.Gradient={create:function(l,m){m||(m={});var f=m.x1||0,k=m.y1||0,e=m.x2||l.canvas.width,i=m.y2||0,g=m.colorStops;var j=l.createLinearGradient(f,k,e,i);for(var h in g){var d=g[h];j.addColorStop(parseFloat(h),d)}return j},fromElement:function(d,m,l){var j=d.getElementsByTagName("stop"),d,f,e={},g,k={x1:d.getAttribute("x1")||0,y1:d.getAttribute("y1")||0,x2:d.getAttribute("x2")||"100%",y2:d.getAttribute("y2")||0};for(var h=j.length;h--;){d=j[h];f=d.getAttribute("offset");f=parseFloat(f)/(/%$/.test(f)?100:1);e[f]=c(d)||d.getAttribute("stop-color")}a(l,k);return fabric.Gradient.create(m,{x1:k.x1,y1:k.y1,x2:k.x2,y2:k.y2,colorStops:e})},forObject:function(g,d,e){e||(e={});a(g,e);var f=fabric.Gradient.create(d,{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,colorStops:e.colorStops});return f}};function a(f,e){for(var g in e){if(typeof e[g]==="string"&&/^\d+%$/.test(e[g])){var d=parseFloat(e[g],10);if(g==="x1"||g==="x2"){e[g]=f.width*d/100}else{if(g==="y1"||g==="y2"){e[g]=f.height*d/100}}}if(g==="x1"||g==="x2"){e[g]-=f.width/2}else{if(g==="y1"||g==="y2"){e[g]-=f.height/2}}}}function b(j){var f=j.getElementsByTagName("linearGradient"),d=j.getElementsByTagName("radialGradient"),g,h={};for(var e=f.length;e--;){g=f[e];h[g.id]=g}for(var e=d.length;e--;){g=d[e];h[g.id]=g}return h}fabric.getGradientDefs=b})();(function(b){var c=b.fabric||(b.fabric={});if(c.Point){c.warn("fabric.Point is already defined");return}c.Point=a;function a(d,e){if(arguments.length>0){this.init(d,e)}}a.prototype={constructor:a,init:function(d,e){this.x=d;this.y=e},add:function(d){return new a(this.x+d.x,this.y+d.y)},addEquals:function(d){this.x+=d.x;this.y+=d.y;return this},scalarAdd:function(d){return new a(this.x+d,this.y+d)},scalarAddEquals:function(d){this.x+=d;this.y+=d;return this},subtract:function(d){return new a(this.x-d.x,this.y-d.y)},subtractEquals:function(d){this.x-=d.x;this.y-=d.y;return this},scalarSubtract:function(d){return new a(this.x-d,this.y-d)},scalarSubtractEquals:function(d){this.x-=d;this.y-=d;return this},multiply:function(d){return new a(this.x*d,this.y*d)},multiplyEquals:function(d){this.x*=d;this.y*=d;return this},divide:function(d){return new a(this.x/d,this.y/d)},divideEquals:function(d){this.x/=d;this.y/=d;return this},eq:function(d){return(this.x==d.x&&this.y==d.y)},lt:function(d){return(this.xd.x&&this.y>d.y)},gte:function(d){return(this.x>=d.x&&this.y>=d.y)},lerp:function(e,d){return new a(this.x+(e.x-this.x)*d,this.y+(e.y-this.y)*d)},distanceFrom:function(f){var e=this.x-f.x,d=this.y-f.y;return Math.sqrt(e*e+d*d)},min:function(d){return new a(Math.min(this.x,d.x),Math.min(this.y,d.y))},max:function(d){return new a(Math.max(this.x,d.x),Math.max(this.y,d.y))},toString:function(){return this.x+","+this.y},setXY:function(d,e){this.x=d;this.y=e},setFromPoint:function(d){this.x=d.x;this.y=d.y},swap:function(e){var d=this.x,f=this.y;this.x=e.x;this.y=e.y;e.x=d;e.y=f}}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Intersection){b.warn("fabric.Intersection is already defined");return}function c(d){if(arguments.length>0){this.init(d)}}b.Intersection=c;b.Intersection.prototype={init:function(d){this.status=d;this.points=[]},appendPoint:function(d){this.points.push(d)},appendPoints:function(d){this.points=this.points.concat(d)}};b.Intersection.intersectLineLine=function(h,f,l,k){var m,i=(k.x-l.x)*(h.y-l.y)-(k.y-l.y)*(h.x-l.x),j=(f.x-h.x)*(h.y-l.y)-(f.y-h.y)*(h.x-l.x),g=(k.y-l.y)*(f.x-h.x)-(k.x-l.x)*(f.y-h.y);if(g!=0){var e=i/g,d=j/g;if(0<=e&&e<=1&&0<=d&&d<=1){m=new c("Intersection");m.points.push(new b.Point(h.x+e*(f.x-h.x),h.y+e*(f.y-h.y)))}else{m=new c("No Intersection")}}else{if(i==0||j==0){m=new c("Coincident")}else{m=new c("Parallel")}}return m};b.Intersection.intersectLinePolygon=function(e,d,l){var m=new c("No Intersection"),f=l.length;for(var h=0;h0){m.status="Intersection"}return m};b.Intersection.intersectPolygonPolygon=function(j,h){var f=new c("No Intersection"),l=j.length;for(var k=0;k0){f.status="Intersection"}return f};b.Intersection.intersectPolygonRectangle=function(n,e,d){var g=e.min(d),m=e.max(d),f=new b.Point(m.x,g.y),l=new b.Point(g.x,m.y),k=c.intersectLinePolygon(g,f,n),j=c.intersectLinePolygon(f,m,n),i=c.intersectLinePolygon(m,l,n),h=c.intersectLinePolygon(l,g,n),o=new c("No Intersection");o.appendPoints(k.points);o.appendPoints(j.points);o.appendPoints(i.points);o.appendPoints(h.points);if(o.points.length>0){o.status="Intersection"}return o}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Color){b.warn("fabric.Color is already defined.");return}function c(d){if(!d){this.setSource([0,0,0,1])}else{this._tryParsingColor(d)}}b.Color=c;b.Color.prototype={_tryParsingColor:function(d){var e=c.sourceFromHex(d);if(!e){e=c.sourceFromRgb(d)}if(e){this.setSource(e)}},getSource:function(){return this._source},setSource:function(d){this._source=d},toRgb:function(){var d=this.getSource();return"rgb("+d[0]+","+d[1]+","+d[2]+")"},toRgba:function(){var d=this.getSource();return"rgba("+d[0]+","+d[1]+","+d[2]+","+d[3]+")"},toHex:function(){var h=this.getSource();var f=h[0].toString(16);f=(f.length==1)?("0"+f):f;var e=h[1].toString(16);e=(e.length==1)?("0"+e):e;var d=h[2].toString(16);d=(d.length==1)?("0"+d):d;return f.toUpperCase()+e.toUpperCase()+d.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var d=this.getSource();d[3]=e;this.setSource(d);return this},toGrayscale:function(){var f=this.getSource(),e=parseInt((f[0]*0.3+f[1]*0.59+f[2]*0.11).toFixed(0),10),d=f[3];this.setSource([e,e,e,d]);return this},toBlackWhite:function(d){var g=this.getSource(),f=(g[0]*0.3+g[1]*0.59+g[2]*0.11).toFixed(0),e=g[3],d=d||127;f=(Number(f)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];for(var j=0,k=this.getObjects(),g=k.length;j");return h.join("")},isEmpty:function(){return this._objects.length===0},remove:function(g){e(this._objects,g);if(this.getActiveObject()===g){this.discardActiveObject()}this.renderAll();return g},sendToBack:function(g){e(this._objects,g);this._objects.unshift(g);return this.renderAll()},bringToFront:function(g){e(this._objects,g);this._objects.push(g);return this.renderAll()},sendBackwards:function(j){var h=this._objects.indexOf(j),g=h;if(h!==0){for(var k=h-1;k>=0;--k){if(j.intersectsWithObject(this._objects[k])||j.isContainedWithinObject(this._objects[k])){g=k;break}}e(this._objects,j);this._objects.splice(g,0,j)}return this.renderAll()},bringForward:function(k){var n=this.getObjects(),h=n.indexOf(k),g=h;if(h!==n.length-1){for(var m=h+1,j=this._objects.length;m"};f(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(l){var k=l.getContext("2d"),g=k.getImageData(0,0,l.width,l.height),p=g.data,m=g.width,r=g.height,q,h,o,n;for(o=0;o0)?0:-v),r.ey-((u>0)?0:-u),t,s);this.contextTop.lineWidth=this.selectionLineWidth;this.contextTop.strokeStyle=this.selectionBorderColor;this.contextTop.strokeRect(r.ex+a-((v>0)?0:t),r.ey+a-((u>0)?0:s),t,s)},_findSelectedObjects:function(x){var y,t,D=[],s=this._groupSelector.ex,C=this._groupSelector.ey,r=s+this._groupSelector.left,A=C+this._groupSelector.top,z,w=new fabric.Point(f(s,r),f(C,A)),B=new fabric.Point(l(s,r),l(C,A));for(var u=0,v=this._objects.length;u1){var D=new fabric.Group(D);this.setActiveGroup(D);D.saveCoords();this.fire("selection:created",{target:D})}}this.renderAll()},findTarget:function(v,s){var u,w=this.getPointer(v);var t=this.getActiveGroup();if(t&&!s&&this.containsPoint(v,t)){u=t;return u}for(var r=this._objects.length;r--;){if(this._objects[r]&&this.containsPoint(v,this._objects[r])){u=this._objects[r];this.relatedTarget=u;break}}if(u&&u.selectable){return u}},getPointer:function(r){var s=q(r);return{x:s.x-this._offset.left,y:s.y-this._offset.top}},_createUpperCanvas:function(){this.upperCanvasEl=this._createCanvasElement();this.upperCanvasEl.className="upper-canvas";this.wrapperEl.appendChild(this.upperCanvasEl);this._applyCanvasStyle(this.upperCanvasEl);this.contextTop=this.upperCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.CONTAINER_CLASS});fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"});fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(s){var t=this.getWidth()||s.width,r=this.getHeight()||s.height;fabric.util.setStyle(s,{position:"absolute",width:t+"px",height:r+"px",left:0,top:0});s.width=t;s.height=r;fabric.util.makeElementUnselectable(s)},getContext:function(){return this.contextTop},setActiveObject:function(r,s){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=r;r.setActive(true);this.renderAll();this.fire("object:selected",{target:r,e:s});return this},getActiveObject:function(){return this._activeObject},discardActiveObject:function(){if(this._activeObject){this._activeObject.setActive(false)}this._activeObject=null;return this},setActiveGroup:function(r){this._activeGroup=r;r&&r.setActive(true);return this},getActiveGroup:function(){return this._activeGroup},discardActiveGroup:function(){var r=this.getActiveGroup();if(r){r.destroy()}return this.setActiveGroup(null)},deactivateAll:function(){var s=this.getObjects(),t=0,r=s.length;for(;t1){var o=new fabric.PathGroup(q,n)}else{var o=q[0]}o.setSourcePath(m);if(!(o instanceof fabric.PathGroup)){fabric.util.object.extend(o,n);if(typeof n.angle!=="undefined"){o.setAngle(n.angle)}}g(o,l)})}}}},this)}catch(c){fabric.log(c.message)}},loadFromJSON:function(a,d){if(!a){return}var b=JSON.parse(a);if(!b||(b&&!b.objects)){return}this.clear();var c=this;this._enlivenObjects(b.objects,function(){c.backgroundColor=b.background;if(d){d()}});return this},_enlivenObjects:function(a,c){var b=this;fabric.util.enlivenObjects(a,function(d){d.forEach(function(f,e){b.insertAt(f,e,true)})})},_toDataURL:function(a,b){this.clone(function(c){b(c.toDataURL(a))})},_toDataURLWithMultiplier:function(a,c,b){this.clone(function(d){b(d.toDataURLWithMultiplier(a,c))})},clone:function(c){var a=fabric.document.createElement("canvas");a.width=this.getWidth();a.height=this.getHeight();var b=this.__clone||(this.__clone=new fabric.Canvas(a));b.clipTo=this.clipTo;return b.loadFromJSON(JSON.stringify(this.toJSON()),function(){if(c){c(b)}})}});(function(a){var d=a.fabric||(a.fabric={}),l=d.util.object.extend,m=d.util.object.clone,c=d.util.toFixed,k=d.util.string.capitalize,p=d.util.getPointer,b=d.util.degreesToRadians,o=Array.prototype.slice;if(d.Object){return}d.Object=d.util.createClass({type:"object",includeDefaultValues:true,NUM_FRACTION_DIGITS:2,FX_DURATION:500,MIN_SCALE_LIMIT:0.1,stateProperties:("top left width height scaleX scaleY flipX flipY theta angle opacity cornersize fill overlayFill stroke strokeWidth fillRule borderScaleFactor transformMatrix selectable").split(" "),top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:false,flipY:false,theta:0,opacity:1,angle:0,cornersize:12,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",fill:"rgb(0,0,0)",fillRule:"source-over",overlayFill:null,stroke:null,strokeWidth:1,borderOpacityWhenMoving:0.4,borderScaleFactor:1,transformMatrix:null,selectable:true,hasControls:true,hasBorders:true,callSuper:function(i){var q=this.constructor.superclass.prototype[i];return(arguments.length>1)?q.apply(this,o.call(arguments,1)):q.call(this)},initialize:function(i){i&&this.setOptions(i)},setOptions:function(q){var r=this.stateProperties.length,s;while(r--){s=this.stateProperties[r];if(s in q){this.set(s,q[s])}}},transform:function(i){i.globalAlpha=this.opacity;i.translate(this.left,this.top);i.rotate(this.theta);i.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(){var i={type:this.type,left:c(this.left,this.NUM_FRACTION_DIGITS),top:c(this.top,this.NUM_FRACTION_DIGITS),width:c(this.width,this.NUM_FRACTION_DIGITS),height:c(this.height,this.NUM_FRACTION_DIGITS),fill:this.fill,overlayFill:this.overlayFill,stroke:this.stroke,strokeWidth:this.strokeWidth,scaleX:c(this.scaleX,this.NUM_FRACTION_DIGITS),scaleY:c(this.scaleY,this.NUM_FRACTION_DIGITS),angle:c(this.getAngle(),this.NUM_FRACTION_DIGITS),flipX:this.flipX,flipY:this.flipY,opacity:c(this.opacity,this.NUM_FRACTION_DIGITS),selectable:this.selectable};if(!this.includeDefaultValues){i=this._removeDefaultValues(i)}return i},toDatalessObject:function(){return this.toObject()},getSvgStyles:function(){return["stroke: ",(this.stroke?this.stroke:"none"),"; ","stroke-width: ",(this.strokeWidth?this.strokeWidth:"0"),"; ","fill: ",(this.fill?this.fill:"none"),"; ","opacity: ",(this.opacity?this.opacity:"1"),";"].join("")},getSvgTransform:function(){var i=this.getAngle();return["translate(",c(this.left,2)," ",c(this.top,2),")",i!==0?(" rotate("+c(i,2)+")"):"",(this.scaleX===1&&this.scaleY===1)?"":(" scale("+c(this.scaleX,2)+" "+c(this.scaleY,2)+")")].join("")},_removeDefaultValues:function(q){var i=d.Object.prototype.options;if(i){this.stateProperties.forEach(function(r){if(q[r]===i[r]){delete q[r]}})}return q},isActive:function(){return !!this.active},setActive:function(i){this.active=!!i;return this},toString:function(){return"#"},set:function(q,i){var s=(q==="scaleX"||q==="scaleY")&&ir.x&&s.xr.y&&u.y=v)&&(s.d.y>=v)){continue}if((s.o.x==s.d.x)&&(s.o.x>=w)){x=s.o.x;u=v}else{z=0;y=(s.d.y-s.o.y)/(s.d.x-s.o.x);r=v-z*w;q=s.o.y-y*s.o.x;x=-(r-q)/(z-y);u=r+z*x}if(x>=w){t+=1}if(t==2){break}}return t},_getImageLines:function(r,q){return{topline:{o:r.tl,d:r.tr},rightline:{o:r.tr,d:r.br},bottomline:{o:r.br,d:r.bl},leftline:{o:r.bl,d:r.tl}}},_setCornerCoords:function(){var t=this.oCoords,q=b(45-this.getAngle()),s=Math.sqrt(2*Math.pow(this.cornersize,2))/2,i=s*Math.cos(q),r=s*Math.sin(q);t.tl.corner={tl:{x:t.tl.x-r,y:t.tl.y-i},tr:{x:t.tl.x+i,y:t.tl.y-r},bl:{x:t.tl.x-i,y:t.tl.y+r},br:{x:t.tl.x+r,y:t.tl.y+i}};t.tr.corner={tl:{x:t.tr.x-r,y:t.tr.y-i},tr:{x:t.tr.x+i,y:t.tr.y-r},br:{x:t.tr.x+r,y:t.tr.y+i},bl:{x:t.tr.x-i,y:t.tr.y+r}};t.bl.corner={tl:{x:t.bl.x-r,y:t.bl.y-i},bl:{x:t.bl.x-i,y:t.bl.y+r},br:{x:t.bl.x+r,y:t.bl.y+i},tr:{x:t.bl.x+i,y:t.bl.y-r}};t.br.corner={tr:{x:t.br.x+i,y:t.br.y-r},bl:{x:t.br.x-i,y:t.br.y+r},br:{x:t.br.x+r,y:t.br.y+i},tl:{x:t.br.x-r,y:t.br.y-i}};t.ml.corner={tl:{x:t.ml.x-r,y:t.ml.y-i},tr:{x:t.ml.x+i,y:t.ml.y-r},bl:{x:t.ml.x-i,y:t.ml.y+r},br:{x:t.ml.x+r,y:t.ml.y+i}};t.mt.corner={tl:{x:t.mt.x-r,y:t.mt.y-i},tr:{x:t.mt.x+i,y:t.mt.y-r},bl:{x:t.mt.x-i,y:t.mt.y+r},br:{x:t.mt.x+r,y:t.mt.y+i}};t.mr.corner={tl:{x:t.mr.x-r,y:t.mr.y-i},tr:{x:t.mr.x+i,y:t.mr.y-r},bl:{x:t.mr.x-i,y:t.mr.y+r},br:{x:t.mr.x+r,y:t.mr.y+i}};t.mb.corner={tl:{x:t.mb.x-r,y:t.mb.y-i},tr:{x:t.mb.x+i,y:t.mb.y-r},bl:{x:t.mb.x-i,y:t.mb.y+r},br:{x:t.mb.x+r,y:t.mb.y+i}}},toGrayscale:function(){var i=this.get("fill");if(i){this.set("overlayFill",new d.Color(i).toGrayscale().toRgb())}return this},complexity:function(){return 0},straighten:function(){var i=this._getAngleValueForStraighten();this.setAngle(i);return this},fxStraighten:function(q){q=q||{};var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(u){t.setAngle(u);i()},onComplete:function(){t.setCoords();s()},onStart:function(){t.setActive(false)}});return this},fxRemove:function(q){q||(q={});var r=function(){},s=q.onComplete||r,i=q.onChange||r,t=this;d.util.animate({startValue:this.get("opacity"),endValue:0,duration:this.FX_DURATION,onChange:function(u){t.set("opacity",u);i()},onComplete:s,onStart:function(){t.setActive(false)}});return this},_getAngleValueForStraighten:function(){var i=this.get("angle");if(i>-225&&i<=-135){return -180}else{if(i>-135&&i<=-45){return -90}else{if(i>-45&&i<=45){return 0}else{if(i>45&&i<=135){return 90}else{if(i>135&&i<=225){return 180}else{if(i>225&&i<=315){return 270}else{if(i>315){return 360}}}}}}}return 0},toJSON:function(){return this.toObject()},setGradientFill:function(i,q){this.set("fill",d.Gradient.forObject(this,i,q))},animate:function(q,s,i){var r=this;if(!("from" in i)){i.from=this.get(q)}if(/[+-]/.test(s.charAt(0))){s=this.get(q)+parseFloat(s)}d.util.animate({startValue:i.from,endValue:s,duration:i.duration,onChange:function(t){r.set(q,t);i.onChange&&i.onChange()},onComplete:function(){r.setCoords();i.onComplete&&i.onComplete()}})}});d.Object.prototype.rotate=d.Object.prototype.setAngle;var j=d.Object.prototype;for(var g=j.stateProperties.length;g--;){var h=j.stateProperties[g],e=h.charAt(0).toUpperCase()+h.slice(1),f="set"+e,n="get"+e;if(!j[n]){j[n]=(function(i){return new Function('return this.get("'+i+'")')})(h)}if(!j[f]){j[f]=(function(i){return new Function("value",'return this.set("'+i+'", value)')})(h)}}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),e=c.util.object.extend,d=c.Object.prototype.set,a={x1:1,x2:1,y1:1,y2:1};if(c.Line){c.warn("fabric.Line is already defined");return}c.Line=c.util.createClass(c.Object,{type:"line",initialize:function(g,f){if(!g){g=[0,0,0,0]}this.callSuper("initialize",f);this.set("x1",g[0]);this.set("y1",g[1]);this.set("x2",g[2]);this.set("y2",g[3]);this._setWidthHeight()},_setWidthHeight:function(){this.set("width",(this.x2-this.x1)||1);this.set("height",(this.y2-this.y1)||1);this.set("left",this.x1+this.width/2);this.set("top",this.y1+this.height/2)},set:function(f,g){d.call(this,f,g);if(f in a){this._setWidthHeight()}return this},_render:function(f){f.beginPath();f.moveTo(this.width===1?0:(-this.width/2),this.height===1?0:(-this.height/2));f.lineTo(this.width===1?0:(this.width/2),this.height===1?0:(this.height/2));f.lineWidth=this.strokeWidth;var g=f.strokeStyle;f.strokeStyle=f.fillStyle;f.stroke();f.strokeStyle=g},complexity:function(){return 1},toObject:function(){return e(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}});c.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" ");c.Line.fromElement=function(g,f){var i=c.parseAttributes(g,c.Line.ATTRIBUTE_NAMES);var h=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new c.Line(h,e(i,f))};c.Line.fromObject=function(f){var g=[f.x1,f.y1,f.x2,f.y2];return new c.Line(g,f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),d=Math.PI*2,e=b.util.object.extend;if(b.Circle){b.warn("fabric.Circle is already defined.");return}b.Circle=b.util.createClass(b.Object,{type:"circle",initialize:function(f){f=f||{};this.set("radius",f.radius||0);this.callSuper("initialize",f);var g=this.get("radius")*2*this.get("scaleX");this.set("width",g).set("height",g)},toObject:function(){return e(this.callSuper("toObject"),{radius:this.get("radius")})},toSVG:function(){return('')},_render:function(f,g){f.beginPath();f.globalAlpha*=this.opacity;f.arc(g?this.left:0,g?this.top:0,this.radius,0,d,false);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},complexity:function(){return 1}});b.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Circle.fromElement=function(g,f){f||(f={});var h=b.parseAttributes(g,b.Circle.ATTRIBUTE_NAMES);if(!c(h)){throw Error("value of `r` attribute is required and can not be negative")}if("left" in h){h.left-=(f.width/2)||0}if("top" in h){h.top-=(f.height/2)||0}return new b.Circle(e(h,f))};function c(f){return(("radius" in f)&&(f.radius>0))}b.Circle.fromObject=function(f){return new b.Circle(f)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={});if(b.Triangle){b.warn("fabric.Triangle is already defined");return}b.Triangle=b.util.createClass(b.Object,{type:"triangle",initialize:function(c){c=c||{};this.callSuper("initialize",c);this.set("width",c.width||100).set("height",c.height||100)},_render:function(c){var d=this.width/2,e=this.height/2;c.beginPath();c.moveTo(-d,e);c.lineTo(0,-e);c.lineTo(d,e);c.closePath();if(this.fill){c.fill()}if(this.stroke){c.stroke()}},complexity:function(){return 1},toSVG:function(){var c=this.width/2,d=this.height/2;var e=[-c+" "+d,"0 "+-d,c+" "+d].join(",");return''}});b.Triangle.fromObject=function(c){return new b.Triangle(c)}})(typeof exports!="undefined"?exports:this);(function(a){var b=a.fabric||(a.fabric={}),c=Math.PI*2,d=b.util.object.extend;if(b.Ellipse){b.warn("fabric.Ellipse is already defined.");return}b.Ellipse=b.util.createClass(b.Object,{type:"ellipse",initialize:function(e){e=e||{};this.callSuper("initialize",e);this.set("rx",e.rx||0);this.set("ry",e.ry||0);this.set("width",this.get("rx")*2);this.set("height",this.get("ry")*2)},toObject:function(){return d(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,f){if(this.rx===0||this.ry===0){return}return this.callSuper("render",e,f)},_render:function(e,f){e.beginPath();e.save();e.globalAlpha*=this.opacity;e.transform(1,0,0,this.ry/this.rx,0,0);e.arc(f?this.left:0,f?this.top:0,this.rx,0,c,false);if(this.stroke){e.stroke()}if(this.fill){e.fill()}e.restore()},complexity:function(){return 1}});b.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");b.Ellipse.fromElement=function(f,e){e||(e={});var g=b.parseAttributes(f,b.Ellipse.ATTRIBUTE_NAMES);if("left" in g){g.left-=(e.width/2)||0}if("top" in g){g.top-=(e.height/2)||0}return new b.Ellipse(d(g,e))};b.Ellipse.fromObject=function(e){return new b.Ellipse(e)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={});if(c.Rect){console.warn("fabric.Rect is already defined");return}c.Rect=c.util.createClass(c.Object,{type:"rect",options:{rx:0,ry:0},initialize:function(d){this._initStateProperties();this.callSuper("initialize",d);this._initRxRy()},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){if(this.rx&&!this.ry){this.ry=this.rx}else{if(this.ry&&!this.rx){this.rx=this.ry}}},_render:function(f){var j=this.rx||0,i=this.ry||0,d=-this.width/2,k=-this.height/2,e=this.width,g=this.height;f.beginPath();f.globalAlpha*=this.opacity;if(this.group){f.translate(this.x||0,this.y||0)}f.moveTo(d+j,k);f.lineTo(d+e-j,k);f.bezierCurveTo(d+e,k,d+e,k+i,d+e,k+i);f.lineTo(d+e,k+g-i);f.bezierCurveTo(d+e,k+g,d+e-j,k+g,d+e-j,k+g);f.lineTo(d+j,k+g);f.bezierCurveTo(d,k+g,d,k+g-i,d,k+g-i);f.lineTo(d,k+i);f.bezierCurveTo(d,k,d+j,k,d+j,k);f.closePath();if(this.fill){f.fill()}if(this.stroke){f.stroke()}},_normalizeLeftTopProperties:function(d){if(d.left){this.set("left",d.left+this.getWidth()/2)}this.set("x",d.left||0);if(d.top){this.set("top",d.top+this.getHeight()/2)}this.set("y",d.top||0);return this},complexity:function(){return 1},toSVG:function(){return''}});c.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" ");function a(d){d.left=d.left||0;d.top=d.top||0;return d}c.Rect.fromElement=function(e,d){if(!e){return null}var g=c.parseAttributes(e,c.Rect.ATTRIBUTE_NAMES);g=a(g);var f=new c.Rect(c.util.object.extend((d?c.util.object.clone(d):{}),g));f._normalizeLeftTopProperties(g);return f};c.Rect.fromObject=function(d){return new c.Rect(d)}})(typeof exports!="undefined"?exports:this);(function(b){var c=b.fabric||(b.fabric={}),a=c.util.toFixed;if(c.Polyline){c.warn("fabric.Polyline is already defined");return}c.Polyline=c.util.createClass(c.Object,{type:"polyline",initialize:function(e,d){d=d||{};this.set("points",e);this.callSuper("initialize",d);this._calcDimensions()},_calcDimensions:function(){return c.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return c.Polygon.prototype.toObject.call(this)},toSVG:function(){var f=[];for(var e=0,d=this.points.length;e"].join("")},_render:function(f){var e;f.beginPath();for(var g=0,d=this.points.length;g"].join("")},_render:function(l){var k;l.beginPath();for(var m=0,j=this.points.length;m1){E=Math.sqrt(E);O*=E;N*=E}var R=aa/O;var Q=W/O;var D=(-W)/N;var C=(aa)/N;var H=R*M+Q*L;var q=D*M+C*L;var F=R*T+Q*S;var ab=D*T+C*S;var Z=(F-H)*(F-H)+(ab-q)*(ab-q);var U=1/Z-0.25;if(U<0){U=0}var w=Math.sqrt(U);if(P==J){w=-w}var V=0.5*(H+F)-w*(ab-q);var K=0.5*(q+ab)+w*(F-H);var v=Math.atan2(q-K,H-V);var u=Math.atan2(ab-K,F-V);var Y=u-v;if(Y<0&&P==1){Y+=2*Math.PI}else{if(Y>0&&P==0){Y-=2*Math.PI}}var B=Math.ceil(Math.abs(Y/(Math.PI*0.5+0.001)));var I=[];for(var X=0;X"},toObject:function(){var q=g(this.callSuper("toObject"),{path:this.path});if(this.sourcePath){q.sourcePath=this.sourcePath}if(this.transformMatrix){q.transformMatrix=this.transformMatrix}return q},toDatalessObject:function(){var q=this.toObject();if(this.sourcePath){q.path=this.sourcePath}delete q.sourcePath;return q},toSVG:function(){var t=[];for(var r=0,q=this.path.length;r',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var C=[],z,v,y;for(var u=0,t,q,w=this.path.length;uB){for(var r=1,x=q.length;r"];for(var l=0,j=m.length;l");return k.join("")},toString:function(){return"#"},isSameColor:function(){var j=this.getObjects()[0].get("fill");return this.getObjects().every(function(k){return k.get("fill")===j})},complexity:function(){return this.paths.reduce(function(j,k){return j+((k&&k.complexity)?k.complexity():0)},0)},toGrayscale:function(){var j=this.paths.length;while(j--){this.paths[j].toGrayscale()}return this},getObjects:function(){return this.paths}});function c(m){for(var l=0,j=m.length;l"},getObjects:function(){return this.objects},addWithUpdate:function(h){this._restoreObjectsState();this.objects.push(h);this._calcBounds();this._updateObjectsCoords();return this},removeWithUpdate:function(h){this._restoreObjectsState();f(this.objects,h);h.setActive(false);this._calcBounds();this._updateObjectsCoords();return this},add:function(h){this.objects.push(h);return this},remove:function(h){f(this.objects,h)},size:function(){return this.getObjects().length},set:function(h,k){if(typeof k=="function"){this.set(h,k(this[h]))}else{if(h==="fill"||h==="opacity"){var j=this.objects.length;this[h]=k;while(j--){this.objects[j].set(h,k)}}else{this[h]=k}}return this},contains:function(h){return this.objects.indexOf(h)>-1},toObject:function(){return g(this.callSuper("toObject"),{objects:b(this.objects,"clone")})},render:function(j,o){j.save();this.transform(j);var n=Math.max(this.scaleX,this.scaleY);for(var l=0,h=this.objects.length,k;k=this.objects[l];l++){var m=k.borderScaleFactor;k.borderScaleFactor=n;k.render(j);k.borderScaleFactor=m}if(!o&&this.active){this.drawBorders(j);this.hideCorners||this.drawCorners(j)}j.restore();this.setCoords()},item:function(h){return this.getObjects()[h]},complexity:function(){return this.getObjects().reduce(function(i,h){i+=(typeof h.complexity=="function")?h.complexity():0;return i},0)},_restoreObjectsState:function(){this.objects.forEach(this._restoreObjectState,this);return this},_restoreObjectState:function(j){var l=this.get("left"),m=this.get("top"),h=this.getAngle()*(Math.PI/180),k=j.get("originalLeft"),n=j.get("originalTop"),i=Math.cos(h)*j.get("top")+Math.sin(h)*j.get("left"),o=-Math.sin(h)*j.get("top")+Math.cos(h)*j.get("left");j.setAngle(j.getAngle()+this.getAngle());j.set("left",l+o*this.get("scaleX"));j.set("top",m+i*this.get("scaleY"));j.set("scaleX",j.get("scaleX")*this.get("scaleX"));j.set("scaleY",j.get("scaleY")*this.get("scaleY"));j.setCoords();j.hideCorners=false;j.setActive(false);j.setCoords();return this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){this._originalLeft=this.get("left");this._originalTop=this.get("top");return this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){this.forEachObject(function(h){h.setCoords()});return this},activateAllObjects:function(){this.forEachObject(function(h){h.setActive()});return this},forEachObject:e.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var j=this.getObjects(),i=j[0]?j[0].get("opacity"):1;var h=j.every(function(k){return k.get("opacity")===i});if(h){this.opacity=i}},_calcBounds:function(){var s=[],q=[],p,n,k,h,m,l,u,r=0,t=this.objects.length;for(;ri.x&&j-hi.y},toGrayscale:function(){var h=this.objects.length;while(h--){this.objects[h].toGrayscale()}}});e.Group.fromObject=function(h,i){e.util.enlivenObjects(h.objects,function(j){delete h.objects;i(new e.Group(j,h))})};e.Group.async=true})(typeof exports!="undefined"?exports:this);(function(a){var b=fabric.util.object.extend;if(!a.fabric){a.fabric={}}if(a.fabric.Image){fabric.warn("fabric.Image is already defined.");return}if(!fabric.Object){fabric.warn("fabric.Object is required for fabric.Image initialization");return}fabric.Image=fabric.util.createClass(fabric.Object,{active:false,bordervisibility:false,cornervisibility:false,type:"image",filters:[],initialize:function(d,c){c||(c={});this.callSuper("initialize",c);this._initElement(d);this._originalImage=this.getElement();this._initConfig(c);if(c.filters){this.filters=c.filters;this.applyFilters()}},getElement:function(){return this._element},setElement:function(c){this._element=c;this._initConfig();return this},getOriginalSize:function(){var c=this.getElement();return{width:c.width,height:c.height}},setBorderVisibility:function(c){this._resetWidthHeight();this._adjustWidthHeightToBorders(showBorder);this.setCoords()},setCornersVisibility:function(c){this.cornervisibility=!!c},render:function(c,d){c.save();if(!d){this.transform(c)}this._render(c);if(this.active&&!d){this.drawBorders(c);this.hideCorners||this.drawCorners(c)}c.restore()},toObject:function(){return b(this.callSuper("toObject"),{src:this._originalImage.src||this._originalImage._src,filters:this.filters.concat()})},toSVG:function(){return''},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(c){this.constructor.fromObject(this.toObject(),c)},applyFilters:function(i){if(this.filters.length===0){this.setElement(this._originalImage);i&&i();return}var c=typeof Buffer!=="undefined"&&typeof window==="undefined",g=this._originalImage,e=fabric.document.createElement("canvas"),f=c?new (require("canvas").Image):fabric.document.createElement("img"),h=this;if(!e.getContext&&typeof G_vmlCanvasManager!="undefined"){G_vmlCanvasManager.initElement(e)}e.width=g.width;e.height=g.height;e.getContext("2d").drawImage(g,0,0);this.filters.forEach(function(j){j&&j.applyTo(e)});f.onload=function(){h.setElement(f);i&&i();f.onload=e=g=null};f.width=g.width;f.height=g.height;if(c){var d=e.toDataURL("image/png").replace(/data:image\/png;base64,/,"");f.src=new Buffer(d,"base64");h.setElement(f);i&&i()}else{f.src=e.toDataURL("image/png")}return this},_render:function(d){var c=this.getOriginalSize();d.drawImage(this.getElement(),-c.width/2,-c.height/2,c.width,c.height)},_adjustWidthHeightToBorders:function(c){if(c){this.currentBorder=this.borderwidth;this.width+=(2*this.currentBorder);this.height+=(2*this.currentBorder)}else{this.currentBorder=0}},_resetWidthHeight:function(){var c=this.getElement();this.set("width",c.width);this.set("height",c.height)},_initElement:function(c){this.setElement(fabric.util.getById(c));fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(c){this.setOptions(c||{});this._setBorder();this._setWidthHeight()},_initFilters:function(c){if(c.filters&&c.filters.length){this.filters=c.filters.map(function(d){return fabric.Image.filters[d.type].fromObject(d)})}},_setBorder:function(){if(this.bordervisibility){this.currentBorder=this.borderwidth}else{this.currentBorder=0}},_setWidthHeight:function(){var c=2*this.currentBorder;this.width=(this.getElement().width||0)+c;this.height=(this.getElement().height||0)+c},complexity:function(){return 1}});fabric.Image.CSS_CANVAS="canvas-img";fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc;fabric.Image.fromObject=function(d,f){var c=fabric.document.createElement("img"),e=d.src;if(d.width){c.width=d.width}if(d.height){c.height=d.height}c.onload=function(){fabric.Image.prototype._initFilters.call(d,d);var g=new fabric.Image(c,d);f&&f(g);c=c.onload=null};c.src=e};fabric.Image.fromURL=function(d,f,e){var c=fabric.document.createElement("img");c.onload=function(){if(f){f(new fabric.Image(c,e))}c=c.onload=null};c.src=d};fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" ");fabric.Image.fromElement=function(d,f,c){c||(c={});var e=fabric.parseAttributes(d,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(e["xlink:href"],f,b(e,c))};fabric.Image.async=true})(typeof exports!="undefined"?exports:this);fabric.Image.filters={};fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(d){var c=d.getContext("2d"),a=c.getImageData(0,0,d.width,d.height),h=a.data,e=a.width,l=a.height,k,b,g,f;for(g=0;gh&&m>h&&o>h&&p(a-m)'},_render:function(f){var h=Cufon.textOptions||(Cufon.textOptions={});h.left=this.left;h.top=this.top;h.context=f;h.color=this.fill;var g=this._initDummyElement();this.transform(f);Cufon.replaceElement(g,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor});this.width=h.width;this.height=h.height;this._totalLineHeight=h.totalLineHeight;this._fontAscent=h.fontAscent;this._boundaries=h.boundaries;this._shadowOffsets=h.shadowOffsets;this._shadows=h.shadows||[];this.setCoords()},_initDummyElement:function(){var g=c.document.createElement("pre"),f=c.document.createElement("div");f.appendChild(g);if(typeof G_vmlCanvasManager=="undefined"){g.innerHTML=this.text}else{g.innerText=this.text.replace(/\r?\n/gi,"\r")}g.style.fontSize=this.fontSize+"px";g.style.letterSpacing="normal";return g},render:function(f,g){f.save();this._render(f);if(!g&&this.active){this.drawBorders(f);this.hideCorners||this.drawCorners(f)}f.restore()},toObject:function(){return e(this.callSuper("toObject"),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor})},toSVG:function(){var i=this.text.split(/\r?\n/),j=-this._fontAscent-((this._fontAscent/5)*this.lineHeight),g=-(this.width/2),f=(this.height/2)-(i.length*this.fontSize)-this._totalLineHeight,h=this._getSVGTextAndBg(j,g,i),k=this._getSVGShadows(j,i);f+=((this._fontAscent/5)*this.lineHeight);return['',h.textBgRects.join(""),"',k.join(""),h.textSpans.join(""),"",""].join("")},_getSVGShadows:function(h,n){var o=[],k,l,p,g,f=1;for(k=0,p=this._shadows.length;k",c.util.string.escapeXml(n[l]),"");f=1}else{f++}}}return o},_getSVGTextAndBg:function(j,h,n){var g=[],k=[],l,m,o,f=1;for(l=0,o=n.length;l",c.util.string.escapeXml(n[l]),"");f=1}else{f++}if(!this.backgroundColor){continue}k.push("')}return{textSpans:g,textBgRects:k}},_getFillAttributes:function(f){var g=f?new c.Color(f):"";if(!g||!g.getSource()||g.getAlpha()===1){return'fill="'+f+'"'}return'opacity="'+g.getAlpha()+'" fill="'+g.setAlpha(1).toRgb()+'"'},setColor:function(f){this.set("fill",f);return this},setFontsize:function(f){this.set("fontSize",f);this.setCoords();return this},getText:function(){return this.text},setText:function(f){this.set("text",f);this.setCoords();return this},set:function(f,g){if(typeof f=="object"){for(var h in f){this.set(h,f[h])}}else{this[f]=g;if(f==="fontFamily"&&this.path){this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+g+"$3")}}return this}});c.Text.fromObject=function(f){return new c.Text(f.text,d(f))};c.Text.fromElement=function(f){};c.Text.async=true})(typeof exports!="undefined"?exports:this);(function(){if(typeof document!="undefined"&&typeof window!="undefined"){return}var XML=require("o3-xml"),URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;function request(url,encoding,callback){var oURL=URL.parse(url),client=HTTP.createClient(80,oURL.hostname),request=client.request("GET",oURL.pathname,{host:oURL.hostname});client.addListener("error",function(err){if(err.errno===process.ECONNREFUSED){fabric.log("ECONNREFUSED: connection refused to "+client.host+":"+client.port)}else{fabric.log(err.message)}});request.end();request.on("response",function(response){var body="";if(encoding){response.setEncoding(encoding)}response.on("end",function(){callback(body)});response.on("data",function(chunk){if(response.statusCode==200){body+=chunk}})})}fabric.util.loadImage=function(url,callback){request(url,"binary",function(body){var img=new Image();img.src=new Buffer(body,"binary");img._src=url;callback(img)})};fabric.loadSVGFromURL=function(url,callback){url=url.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim();request(url,"",function(body){var doc=XML.parseFromString(body);fabric.parseSVGDocument(doc.documentElement,function(results,options){callback(results,options)})})};fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body);callback&&callback()})};fabric.Image.fromObject=function(object,callback){fabric.util.loadImage(object.src,function(img){var oImg=new fabric.Image(img);oImg._initConfig(object);oImg._initFilters(object);callback(oImg)})};fabric.createCanvasForNode=function(width,height){var canvasEl=fabric.document.createElement("canvas"),nodeCanvas=new Canvas(width||600,height||600);canvasEl.style={};canvasEl.width=nodeCanvas.width;canvasEl.height=nodeCanvas.height;var canvas=fabric.Canvas||fabric.StaticCanvas;var fabricCanvas=new canvas(canvasEl);fabricCanvas.contextContainer=nodeCanvas.getContext("2d");fabricCanvas.nodeCanvas=nodeCanvas;return fabricCanvas};fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};if(fabric.Canvas){fabric.Canvas.prototype.createPNGStream}var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(width){origSetWidth.call(this);this.nodeCanvas.width=width;return this};if(fabric.Canvas){fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth}var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(height){origSetHeight.call(this);this.nodeCanvas.height=height;return this};if(fabric.Canvas){fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight}})(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index 65f3bd815b9a5934f0af7a39369952f29e8ab7b0..416b71c29e4a505f8aac69bd8342cf165629ec69 100644 GIT binary patch delta 31384 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%0DxZr4X167iM(i-GvWu6U{E)cmiz~@9YyPn?A40 zpVaPy=i>T#CtTz%DA$5B-CVt=h16-a(?u$69ohzF4&vp{_|TiF!{BzLe+6*bd}#qB z4p3WWID^LG1PDbG+4$eR3x(cWB(+Z9q#`wx9has^8$>LbaiCjV1Ep?I9{5saooxBe z?5Ka_+sZd$TR?4!l-CWrq@B!{8pE)lB@7HGX_7W_P+kwU7^Dqf_f)k&d99@)SM6)x zP#~F87=_AJMf3A8wx$V|e~P^+0BCHr!$Z&&nt(jz;kCEA@VifFu{Mz4ar^P{VIy42 zn?qt4B|t}ð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 qLd3sgIm0$hTuZCFZOb7aAE>`?Uy!ex7}BLtc diff --git a/src/canvas.class.js b/src/canvas.class.js index 1a98ee70..d0d69c76 100644 --- a/src/canvas.class.js +++ b/src/canvas.class.js @@ -225,7 +225,7 @@ } this._currentTransform = null; - + if (this._groupSelector) { // group selection was completed, determine its bounds this._findSelectedObjects(e); @@ -285,7 +285,7 @@ pointer = this.getPointer(e), activeGroup = this.getActiveGroup(), corner; - + if (this._shouldClearSelection(e)) { this._groupSelector = { @@ -542,7 +542,7 @@ }, _handleGroupLogic: function (e, target) { - if (target.isType('group')) { + if (target === this.getActiveGroup()) { // if it's a group, find target again, this time skipping group target = this.findTarget(e, true); // if even object is not found, bail out @@ -553,7 +553,7 @@ var activeGroup = this.getActiveGroup(); if (activeGroup) { if (activeGroup.contains(target)) { - activeGroup.remove(target); + activeGroup.removeWithUpdate(target); target.setActive(false); if (activeGroup.size() === 1) { // remove group alltogether if after removal it only contains 1 object @@ -561,7 +561,7 @@ } } else { - activeGroup.add(target); + activeGroup.addWithUpdate(target); } this.fire('selection:created', { target: activeGroup, e: e }); activeGroup.setActive(true); @@ -572,7 +572,7 @@ // only if there's an active object if (target !== this._activeObject) { // and that object is not the actual target - var group = new fabric.Group([ this._activeObject,target ]); + var group = new fabric.Group([ this._activeObject, target ]); this.setActiveGroup(group); activeGroup = this.getActiveGroup(); } @@ -1011,6 +1011,7 @@ */ setActiveGroup: function (group) { this._activeGroup = group; + group && group.setActive(true); return this; }, diff --git a/src/canvas.serialization.js b/src/canvas.serialization.js index 865773b6..43f39759 100644 --- a/src/canvas.serialization.js +++ b/src/canvas.serialization.js @@ -179,42 +179,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { * @param {Function} callback */ _enlivenObjects: function (objects, callback) { - var numLoadedImages = 0, - // get length of all images - numTotalImages = objects.filter(function (o) { - return o.type === 'image'; - }).length; - var _this = this; - - objects.forEach(function (o, index) { - if (!o.type) { - return; - } - switch (o.type) { - case 'image': - case 'font': - fabric[fabric.util.string.capitalize(o.type)].fromObject(o, function (o) { - _this.insertAt(o, index, true); - if (++numLoadedImages === numTotalImages) { - if (callback) { - callback(); - } - } - }); - break; - default: - var klass = fabric[fabric.util.string.camelize(fabric.util.string.capitalize(o.type))]; - if (klass && klass.fromObject) { - _this.insertAt(klass.fromObject(o), index, true); - } - break; - } + fabric.util.enlivenObjects(objects, function(enlivenedObjects) { + enlivenedObjects.forEach(function(obj, index) { + _this.insertAt(obj, index, true); + }); }); - - if (numTotalImages === 0 && callback) { - callback(); - } }, /** diff --git a/src/group.class.js b/src/group.class.js index 2dbe76db..a6056658 100644 --- a/src/group.class.js +++ b/src/group.class.js @@ -52,7 +52,7 @@ this.setCoords(true); this.saveCoords(); - this.activateAllObjects(); + //this.activateAllObjects(); }, /** @@ -101,15 +101,14 @@ /** * Adds an object to a group; Then recalculates group's dimension, position. - * @method add + * @method addWithUpdate * @param {Object} object * @return {fabric.Group} thisArg * @chainable */ - add: function(object) { + addWithUpdate: function(object) { this._restoreObjectsState(); this.objects.push(object); - object.setActive(true); this._calcBounds(); this._updateObjectsCoords(); return this; @@ -117,11 +116,12 @@ /** * Removes an object from a group; Then recalculates group's dimension, position. + * @method removeWithUpdate * @param {Object} object * @return {fabric.Group} thisArg * @chainable */ - remove: function(object) { + removeWithUpdate: function(object) { this._restoreObjectsState(); removeFromArray(this.objects, object); object.setActive(false); @@ -130,6 +130,29 @@ return this; }, + /** + * Adds an object to a group + * @method add + * @param {Object} object + * @return {fabric.Group} thisArg + * @chainable + */ + add: function(object) { + this.objects.push(object); + return this; + }, + + /** + * Removes an object from a group + * @method remove + * @param {Object} object + * @return {fabric.Group} thisArg + * @chainable + */ + remove: function(object) { + removeFromArray(this.objects, object); + }, + /** * Returns a size of a group (i.e: length of an array containing its objects) * @return {Number} Group size @@ -192,7 +215,7 @@ * @method render * @param {CanvasRenderingContext2D} ctx context to render instance on */ - render: function(ctx) { + render: function(ctx, noTransform) { ctx.save(); this.transform(ctx); @@ -204,8 +227,10 @@ object.render(ctx); object.borderScaleFactor = originalScaleFactor; } - this.hideBorders || this.drawBorders(ctx); - this.hideCorners || this.drawCorners(ctx); + if (!noTransform && this.active) { + this.drawBorders(ctx); + this.hideCorners || this.drawCorners(ctx); + } ctx.restore(); this.setCoords(); }, @@ -329,19 +354,8 @@ * @chainable */ activateAllObjects: function() { - return this.setActive(true); - }, - - /** - * Activates (makes active) all group objects - * @method setActive - * @param {Boolean} value `true` to activate object, `false` otherwise - * @return {fabric.Group} thisArg - * @chainable - */ - setActive: function(value) { this.forEachObject(function(object) { - object.setActive(value); + object.setActive(); }); return this; }, @@ -454,8 +468,13 @@ * @param options {Object} options object * @return {fabric.Group} an instance of fabric.Group */ - fabric.Group.fromObject = function(object) { - return new fabric.Group(object.objects, object); + fabric.Group.fromObject = function(object, callback) { + fabric.util.enlivenObjects(object.objects, function(enlivenedObjects) { + delete object.objects; + callback(new fabric.Group(enlivenedObjects, object)); + }); }; + fabric.Group.async = true; + })(typeof exports != 'undefined' ? exports : this); \ No newline at end of file diff --git a/src/image.class.js b/src/image.class.js index 5a759512..262ef5ec 100644 --- a/src/image.class.js +++ b/src/image.class.js @@ -449,4 +449,4 @@ fabric.Image.async = true; -})(typeof exports != 'undefined' ? exports : this); +})(typeof exports != 'undefined' ? exports : this); \ No newline at end of file diff --git a/src/text.class.js b/src/text.class.js index 86c74274..5707ab82 100644 --- a/src/text.class.js +++ b/src/text.class.js @@ -491,5 +491,7 @@ fabric.Text.fromElement = function(element) { // TODO (kangax): implement this }; + + fabric.Text.async = true; -})(typeof exports != 'undefined' ? exports : this); +})(typeof exports != 'undefined' ? exports : this); \ No newline at end of file diff --git a/src/util/misc.js b/src/util/misc.js index 5b75619a..2bf2292d 100644 --- a/src/util/misc.js +++ b/src/util/misc.js @@ -153,6 +153,46 @@ callback && callback.call(context, url); } } + + function enlivenObjects(objects, callback) { + + function getKlass(type) { + return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(type))]; + } + + var enlivenedObjects = [ ], + numLoadedAsyncObjects = 0, + // get length of all images + numTotalAsyncObjects = objects.filter(function (o) { + return getKlass(o.type).async; + }).length; + + var _this = this; + + objects.forEach(function (o, index) { + if (!o.type) { + return; + } + var klass = getKlass(o.type); + if (klass.async) { + klass.fromObject(o, function (o) { + enlivenedObjects[index] = o; + if (++numLoadedAsyncObjects === numTotalAsyncObjects) { + if (callback) { + callback(enlivenedObjects); + } + } + }); + } + else { + enlivenedObjects[index] = klass.fromObject(o); + } + }); + + if (numTotalAsyncObjects === 0 && callback) { + callback(enlivenedObjects); + } + } fabric.util.removeFromArray = removeFromArray; fabric.util.degreesToRadians = degreesToRadians; @@ -162,4 +202,5 @@ fabric.util.animate = animate; fabric.util.requestAnimFrame = requestAnimFrame; fabric.util.loadImage = loadImage; + fabric.util.enlivenObjects = enlivenObjects; })(); \ No newline at end of file