From 12f272d2fccf18763729865d08382e66424c467d Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 28 Sep 2013 23:47:45 +0200 Subject: [PATCH] Build distribution --- dist/all.js | 220 +++++++++++++++++++++++++++++--------------- dist/all.min.js | 10 +- dist/all.min.js.gz | Bin 51095 -> 51057 bytes dist/all.require.js | 216 +++++++++++++++++++++++++++++-------------- 4 files changed, 299 insertions(+), 147 deletions(-) diff --git a/dist/all.js b/dist/all.js index 52d46df4..0107606d 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.3.4" }; +var fabric = fabric || { version: "1.3.5" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -3258,8 +3258,8 @@ fabric.util.string = { scrollTop = 0; } else if (element === fabric.document) { - scrollLeft += body.scrollLeft || docElement.scrollLeft || 0; - scrollTop += body.scrollTop || docElement.scrollTop || 0; + scrollLeft = body.scrollLeft || docElement.scrollLeft || 0; + scrollTop = body.scrollTop || docElement.scrollTop || 0; } else { scrollLeft += element.scrollLeft || 0; @@ -7611,34 +7611,6 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ */ EMPTY_JSON: '{"objects": [], "background": "white"}', - /** - * Takes <canvas> element and transforms its data in such way that it becomes grayscale - * @static - * @param {HTMLCanvasElement} canvasEl - */ - toGrayscale: function (canvasEl) { - var context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - iLen = imageData.width, - jLen = imageData.height, - index, average, i, j; - - for (i = 0; i < iLen; i++) { - for (j = 0; j < jLen; j++) { - - index = (i * 4) * jLen + (j * 4); - average = (data[index] + data[index + 1] + data[index + 2]) / 3; - - data[index] = average; - data[index + 1] = average; - data[index + 2] = average; - } - } - - context.putImageData(imageData, 0, 0); - }, - /** * Provides a way to check support of some of the canvas methods * (either those of HTMLCanvasElement itself, or rendering context) @@ -8216,7 +8188,14 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric * @type Boolean * @default */ - randomOpacity: false, + randomOpacity: false, + + /** + * Whether overlapping dots (rectangles) should be removed (for performance reasons) + * @type Boolean + * @default + */ + optimizeOverlapping: true, /** * Constructor @@ -8276,6 +8255,11 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric rects.push(rect); } } + + if (this.optimizeOverlapping) { + rects = this._getOptimizedRects(rects); + } + var group = new fabric.Group(rects); this.canvas.add(group); this.canvas.fire('path:created', { path: group }); @@ -8286,6 +8270,25 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric this.canvas.renderAll(); }, + _getOptimizedRects: function(rects) { + + // avoid creating duplicate rects at the same coordinates + var uniqueRects = { }, key; + + for (var i = 0, len = rects.length; i < len; i++) { + key = rects[i].left + '' + rects[i].top; + if (!uniqueRects[key]) { + uniqueRects[key] = rects[i]; + } + } + var uniqueRectsArray = [ ]; + for (key in uniqueRects) { + uniqueRectsArray.push(uniqueRects[key]); + } + + return uniqueRectsArray; + }, + /** * Renders brush */ @@ -10048,6 +10051,25 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Number} [options.width] Cropping width. Introduced in v1.2.14 * @param {Number} [options.height] Cropping height. Introduced in v1.2.14 * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format + * @see {@link http://jsfiddle.net/fabricjs/NfZVb/|jsFiddle demo} + * @example Generate jpeg dataURL with lower quality + * var dataURL = canvas.toDataURL({ + * format: 'jpeg', + * quality: 0.8 + * }); + * @example Generate cropped png dataURL (clipping of canvas) + * var dataURL = canvas.toDataURL({ + * format: 'png', + * left: 100, + * top: 100, + * width: 200, + * height: 200 + * }); + * @example Generate double scaled png dataURL + * var dataURL = canvas.toDataURL({ + * format: 'png', + * multiplier: 2 + * }); */ toDataURL: function (options) { options || (options = { }); @@ -10264,6 +10286,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created. * @return {fabric.Canvas} instance * @chainable + * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo} + * @example loadFromJSON + * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas)); + * @example loadFromJSON with reviver + * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), function(o, object) { + * // `o` = json object + * // `object` = fabric.Object instance + * // ... do some stuff ... + * }); */ loadFromJSON: function (json, callback, reviver) { if (!json) return; @@ -10891,11 +10922,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati fillRule: 'source-over', /** - * Overlay fill (takes precedence over fill value) + * Background color of an object. Only works with text objects at the moment. * @type String * @default */ - overlayFill: null, + backgroundColor: '', /** * When defined, an object is rendered via stroke and this property specifies its color @@ -11093,7 +11124,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati stateProperties: ( 'top left width height scaleX scaleY flipX flipY originX originY transformMatrix ' + 'stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit ' + - 'angle opacity fill fillRule overlayFill shadow clipTo visible' + 'angle opacity fill fillRule shadow clipTo visible backgroundColor' ).split(' '), /** @@ -11187,7 +11218,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati width: toFixed(this.width, NUM_FRACTION_DIGITS), height: toFixed(this.height, NUM_FRACTION_DIGITS), fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill, - overlayFill: this.overlayFill, stroke: (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke, strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS), strokeDashArray: this.strokeDashArray, @@ -11202,7 +11232,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS), shadow: (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow, visible: this.visible, - clipTo: this.clipTo && String(this.clipTo) + clipTo: this.clipTo && String(this.clipTo), + backgroundColor: this.backgroundColor }; if (!this.includeDefaultValues) { @@ -11318,11 +11349,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Object} object */ _removeDefaultValues: function(object) { - this.stateProperties.forEach(function(prop) { - if (object[prop] === this.constructor.prototype[prop]) { + var prototype = fabric.util.getKlass(object.type).prototype; + var stateProperties = prototype.stateProperties; + + stateProperties.forEach(function(prop) { + if (object[prop] === prototype[prop]) { delete object[prop]; } - }, this); + }); + return object; }, @@ -11454,10 +11489,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati : this.stroke; } - if (this.overlayFill) { - ctx.fillStyle = this.overlayFill; - } - else if (this.fill) { + if (this.fill) { ctx.fillStyle = this.fill.toLive ? this.fill.toLive(ctx) : this.fill; @@ -11645,18 +11677,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati return this.type === type; }, - /** - * Makes object's color grayscale - * @return {fabric.Object} thisArg - */ - toGrayscale: function() { - var fillValue = this.get('fill'); - if (fillValue) { - this.set('overlayFill', new fabric.Color(fillValue).toGrayscale().toRgb()); - } - return this; - }, - /** * Returns complexity of an instance * @return {Number} complexity of this instance @@ -11690,6 +11710,37 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Object} [options.colorStops] Color stops object eg. {0: 'ff0000', 1: '000000'} * @return {fabric.Object} thisArg * @chainable + * @see {@link http://jsfiddle.net/fabricjs/58y8b/|jsFiddle demo} + * @example Set linear gradient + * object.setGradient('fill', { + * type: 'linear', + * x1: -object.width / 2, + * y1: 0, + * x2: object.width / 2, + * y2: 0, + * colorStops: { + * 0: 'red', + * 0.5: '#005555', + * 1: 'rgba(0,0,255,0.5)' + * } + * }); + * canvas.renderAll(); + * @example Set radial gradient + * object.setGradient('fill', { + * type: 'radial', + * x1: 0, + * y1: 0, + * x2: 0, + * y2: 0, + * r1: object.width / 2, + * r2: 10, + * colorStops: { + * 0: 'red', + * 0.5: '#005555', + * 1: 'rgba(0,0,255,0.5)' + * } + * }); + * canvas.renderAll(); */ setGradient: function(property, options) { options || (options = { }); @@ -11726,6 +11777,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Number} [options.offsetY=0] Pattern vertical offset from object's left/top corner * @return {fabric.Object} thisArg * @chainable + * @see {@link http://jsfiddle.net/fabricjs/QT3pa/|jsFiddle demo} + * @example Set pattern + * fabric.util.loadImage('http://fabricjs.com/assets/escheresque_ste.png', function(img) { + * object.setPatternFill({ + * source: img, + * repeat: 'repeat' + * }); + * canvas.renderAll(); + * }); */ setPatternFill: function(options) { return this.set('fill', new fabric.Pattern(options)); @@ -11740,6 +11800,18 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Number} [options.offsetY=0] Shadow vertical offset * @return {fabric.Object} thisArg * @chainable + * @see {@link http://jsfiddle.net/fabricjs/7gvJG/|jsFiddle demo} + * @example Set shadow with string notation + * object.setShadow('2px 2px 10px rgba(0,0,0,0.2)'); + * canvas.renderAll(); + * @example Set shadow with object notation + * object.setShadow({ + * color: 'red', + * blur: 10, + * offsetX: 20, + * offsetY: 20 + * }); + * canvas.renderAll(); */ setShadow: function(options) { return this.set('shadow', new fabric.Shadow(options)); @@ -13955,7 +14027,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } var stateProperties = fabric.Object.prototype.stateProperties.concat(); - stateProperties.push('rx', 'ry'); + stateProperties.push('rx', 'ry', 'x', 'y'); /** * Rectangle class @@ -13993,6 +14065,18 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ ry: 0, + /** + * @type Number + * @default + */ + x: 0, + + /** + * @type Number + * @default + */ + y: 0, + /** * Used to specify dash pattern for stroke on this object * @type Array @@ -14111,12 +14195,16 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {Object} object representation of an instance */ toObject: function(propertiesToInclude) { - return extend(this.callSuper('toObject', propertiesToInclude), { + var object = extend(this.callSuper('toObject', propertiesToInclude), { rx: this.get('rx') || 0, ry: this.get('ry') || 0, x: this.get('x'), y: this.get('y') }); + if (!this.includeDefaultValues) { + this._removeDefaultValues(object); + } + return object; }, /* _TO_SVG_START_ */ @@ -15033,10 +15121,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } // ctx.globalCompositeOperation = this.fillRule; - if (this.overlayFill) { - ctx.fillStyle = this.overlayFill; - } - else if (this.fill) { + if (this.fill) { ctx.fillStyle = this.fill.toLive ? this.fill.toLive(ctx) : this.fill; @@ -15423,7 +15508,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ _set: function(prop, value) { - if ((prop === 'fill' || prop === 'overlayFill') && value && this.isSameColor()) { + if (prop === 'fill' && value && this.isSameColor()) { var i = this.paths.length; while (i--) { this.paths[i]._set(prop, value); @@ -17719,7 +17804,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag 'textAlign', 'fontStyle', 'lineHeight', - 'backgroundColor', 'textBackgroundColor', 'useNative', 'path' @@ -17950,13 +18034,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag */ lineHeight: 1.3, - /** - * Background color of an entire text box - * @type String - * @default - */ - backgroundColor: '', - /** * Background color of text lines * @type String @@ -18496,7 +18573,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag textDecoration: this.textDecoration, textAlign: this.textAlign, path: this.path, - backgroundColor: this.backgroundColor, textBackgroundColor: this.textBackgroundColor, useNative: this.useNative }); diff --git a/dist/all.min.js b/dist/all.min.js index 7b3b97d4..9f08ee56 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,6 +1,6 @@ -/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.3.4"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(e){function r(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function i(e,t){return Math.floor(Math.random()*(t-e+1))+e}function o(e){return e*s}function u(e){return e/s}function a(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function f(e,t){return parseFloat(Number(e).toFixed(t))}function l(){return!1}function c(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),h(t)[e]}function h(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function w(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function E(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function S(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}function x(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]}function T(e,t,n,r){var i=r[0],s=r[1],o=r[2],u=r[3],a=r[4],f=r[5],l=r[6],c=A(f,l,i,s,u,a,o,t,n);for(var h=0;h1&&(d=Math.sqrt(d),n*=d,r*=d);var v=c/n,m=l/n,g=-l/r,y=c/r,b=v*u+m*a,w=g*u+y*a,E=v*e+m*t,S=g*e+y*t,x=(E-b)*(E-b)+(S-w)*(S-w),T=1/x-.25;T<0&&(T=0);var C=Math.sqrt(T);s===i&&(C=-C);var A=.5*(b+E)-C*(S-w),O=.5*(w+S)+C*(E-b),M=Math.atan2(w-O,b-A),_=Math.atan2(S-O,E-A),D=_-M;D<0&&s===1?D+=2*Math.PI:D>0&&s===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r"),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(e){function r(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function i(e,t){return Math.floor(Math.random()*(t-e+1))+e}function o(e){return e*s}function u(e){return e/s}function a(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function f(e,t){return parseFloat(Number(e).toFixed(t))}function l(){return!1}function c(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),h(t)[e]}function h(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;s1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function w(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function E(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function S(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}function x(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]}function T(e,t,n,r){var i=r[0],s=r[1],o=r[2],u=r[3],a=r[4],f=r[5],l=r[6],c=A(f,l,i,s,u,a,o,t,n);for(var h=0;h1&&(d=Math.sqrt(d),n*=d,r*=d);var v=c/n,m=l/n,g=-l/r,y=c/r,b=v*u+m*a,w=g*u+y*a,E=v*e+m*t,S=g*e+y*t,x=(E-b)*(E-b)+(S-w)*(S-w),T=1/x-.25;T<0&&(T=0);var C=Math.sqrt(T);s===i&&(C=-C);var A=.5*(b+E)-C*(S-w),O=.5*(w+S)+C*(E-b),M=Math.atan2(w-O,b-A),_=Math.atan2(S-O,E-A),D=_-M;D<0&&s===1?D+=2*Math.PI:D>0&&s===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t,n,r={left:0,top:0},i=e&&e.ownerDocument,s={left:0,top:0},o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!i)return{left:0,top:0};for(var u in o)s[o[u]]+=parseInt(f(e,u),10)||0;return t=i.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),i!=null&&i===i.window?n=i:n=i.nodeType===9&&(i.defaultView||i.parentWindow),{left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)+s.left,top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0)+s.top}}function f(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementStyle=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e){e||(e={});var t=+(new Date),r=e.duration||500,i=t+r,s,o=e.onChange||function(){},u=e.abort||function(){return!1},a=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},f="startValue"in e?e.startValue:0,l="endValue"in e?e.endValue:100,c=e.byValue||l-f;e.onStart&&e.onStart(),function h(){s=+(new Date);var l=s>i?r:s-t;if(u()){e.onComplete&&e.onComplete();return}o(a(l,f,c,r));if(s>i){e.onComplete&&e.onComplete();return}n(h)}()}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){w.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),w.has(e,function(r){r?w.get(e,function(e){var t=S(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function S(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function x(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function T(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function N(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}function C(e){var t=e.getElementsByTagName("linearGradient"),n=e.getElementsByTagName("radialGradient"),r,i,s={};i=t.length;for(;i--;)r=t[i],s[r.getAttribute("id")]=r;i=n.length;for(;i--;)r=n[i],s[r.getAttribute("id")]=r;return s}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices;t.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];var u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;ce.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=fabric.util.removeListener,i=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:"",backgroundImageOpacity:1,backgroundImageStretch:!0,overlayImage:"",overlayImageLeft:0,overlayImageTop:0,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.overlayImage=e,n&&"overlayImageLeft"in n&&(this.overlayImageLeft=n.overlayImageLeft),n&&"overlayImageTop"in n&&(this.overlayImageTop=n.overlayImageTop),t&&t()},this),this},setBackgroundImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.backgroundImage=e,n&&"backgroundImageOpacity"in n&&(this.backgroundImageOpacity=n.backgroundImageOpacity),n&&"backgroundImageStretch"in n&&(this.backgroundImageStretch=n.backgroundImageStretch),t&&t()},this),this},setBackgroundColor:function(e,t){if(e.source){var n=this;fabric.util.loadImage(e.source,function(r){n.backgroundColor=new fabric.Pattern({source:r,repeat:e.repeat}),t&&t()})}else this.backgroundColor=e,t&&t();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw i;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw i},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.fire("object:removed",{target:e}),e.fire("removed")},getObjects:function(){return this._objects},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"];this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this.backgroundColor&&(t.fillStyle=this.backgroundColor.toLive?this.backgroundColor.toLive(t):this.backgroundColor,t.fillRect(this.backgroundColor.offsetX||0,this.backgroundColor.offsetY||0,this.width,this.height)),typeof this.backgroundImage=="object"&&this._drawBackroundImage(t);var n=this.getActiveGroup();for(var r=0,i=this._objects.length;r','\n'),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i;if(t){i=r;for(var s=r-1;s>=0;--s){var o=e.intersectsWithObject(this._objects[s])||e.isContainedWithinObject(this._objects[s])||this._objects[s].isContainedWithinObject(e);if(o){i=s;break}}}else i=r-1;n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i;if(t){i=r;for(var s=r+1;s"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3,f=u.data.length;ao.padding?l.x<0?l.x+=o.padding:l.x-=o.padding:l.x=0,i(l.y)>o.padding?l.y<0?l.y+=o.padding:l.y-=o.padding:l.y=0;var c=o.scaleX,h=o.scaleY;if(n==="equally"&&!u&&!a){var p=l.y+l.x,d=(o.height+o.strokeWidth)*r.original.scaleY+(o.width+o.strokeWidth)*r.original.scaleX;c=r.original.scaleX*p/d,h=r.original.scaleY*p/d,o.set("scaleX",c),o.set("scaleY",h)}else n?n==="x"&&!o.get("lockUniScaling")?(c=l.x/(o.width+o.strokeWidth),u||o.set("scaleX",c)):n==="y"&&!o.get("lockUniScaling")&&(h=l.y/(o.height+o.strokeWidth),a||o.set("scaleY",h)):(c=l.x/(o.width+o.strokeWidth),h=l.y/(o.height+o.strokeWidth),u||o.set("scaleX",c),a||o.set("scaleY",h));c<0&&(r.originX==="left"?r.originX="right":r.originX==="right"&&(r.originX="left")),h<0&&(r.originY==="top"?r.originY="bottom":r.originY==="bottom"&&(r.originY="top")),o.setPositionByOrigin(f,r.originX,r.originY)},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,s=i(n),o=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),s,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+u-(n>0?0:s),f=t.ey+u-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+s,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+o-1,a+s,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,a+s-1,f,a+s-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+u-(n>0?0:s),t.ey+u-(r>0?0:o),s,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,u=r+this._groupSelector.top,a,f=new fabric.Point(s(n,i),s(r,u)),l=new fabric.Point(o(n,i),o(r,u)),c=n===i&&r===u;for(var h=this._objects.length;h--;){a=this._objects[h];if(!a)continue;if(a.intersectsWithRect(f,l)||a.isContainedWithinRect(f,l)||a.containsPoint(f)||a.containsPoint(l))if(this.selection&&a.selectable){a.set("active",!0),t.push(a);if(c)break}}t.length===1?this.setActiveObject(t[0],e):t.length>1&&(t=new fabric.Group(t.reverse()),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},findTarget:function(e,t){if(this.skipTargetFind)return;var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this._objects[o].evented&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e),this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke),this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center"),i.add(this);var o=i.toDataURL(e);return this.set(s).setCoords(),i.dispose(),i=null,o},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.group?t.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?t.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?t.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?t.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?t.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"?s=i.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:s=i.x,r==="top"?o=i.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"?o=i.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){var t=e(this.angle),n=this.getWidth()/2,r=Math.cos(t)*n,i=Math.sin(t)*n,s=this.left,o=this.top;if(this.originX==="center"||this.originX==="right")s-=r;if(this.originY==="center"||this.originY==="bottom")o-=i;return{x:s,y:o}}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=this.transparentCorners,w=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function( -t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(){var e=this._createBaseSVGMarkup(),t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return e.push("'),e.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")})},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed,r=t.util.array.min;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=this._createBaseSVGMarkup();for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=this._createBaseSVGMarkup();for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;i'+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke||this.strokeDashArray){var t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;n.onload=function(){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i),n=n.onload=n.onerror=null})},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1 -}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s=0&&N=0&&C-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){this.transform(e,t.isLikelyNode),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),e.save(),this._setShadow(e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this._removeShadow(e),e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_drawChars:function(e,t,n,r,i){t[e](n,r,i)},_drawTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._drawChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-s),this.textDecoration.indexOf("overline")>-1&&i(s)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Text.prototype,{_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.shadow&&this.shadow.toString(),textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,n=null,this.setCoords()},_initDummyElementForCufon:function(){var e=fabric.document.createElement("pre"),t=fabric.document.createElement("div");return t.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +.offsetX+'" dy="'+this.offsetY+'">'+""+""+''+""+""},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=fabric.util.removeListener,i=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:"",backgroundImageOpacity:1,backgroundImageStretch:!0,overlayImage:"",overlayImageLeft:0,overlayImageTop:0,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.overlayImage=e,n&&"overlayImageLeft"in n&&(this.overlayImageLeft=n.overlayImageLeft),n&&"overlayImageTop"in n&&(this.overlayImageTop=n.overlayImageTop),t&&t()},this),this},setBackgroundImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.backgroundImage=e,n&&"backgroundImageOpacity"in n&&(this.backgroundImageOpacity=n.backgroundImageOpacity),n&&"backgroundImageStretch"in n&&(this.backgroundImageStretch=n.backgroundImageStretch),t&&t()},this),this},setBackgroundColor:function(e,t){if(e.source){var n=this;fabric.util.loadImage(e.source,function(r){n.backgroundColor=new fabric.Pattern({source:r,repeat:e.repeat}),t&&t()})}else this.backgroundColor=e,t&&t();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw i;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw i},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.fire("object:removed",{target:e}),e.fire("removed")},getObjects:function(){return this._objects},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"];this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this.backgroundColor&&(t.fillStyle=this.backgroundColor.toLive?this.backgroundColor.toLive(t):this.backgroundColor,t.fillRect(this.backgroundColor.offsetX||0,this.backgroundColor.offsetY||0,this.width,this.height)),typeof this.backgroundImage=="object"&&this._drawBackroundImage(t);var n=this.getActiveGroup();for(var r=0,i=this._objects.length;r','\n'),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i;if(t){i=r;for(var s=r-1;s>=0;--s){var o=e.intersectsWithObject(this._objects[s])||e.isContainedWithinObject(this._objects[s])||this._objects[s].isContainedWithinObject(e);if(o){i=s;break}}}else i=r-1;n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i;if(t){i=r;for(var s=r+1;s"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;r0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3,f=u.data.length;ao.padding?l.x<0?l.x+=o.padding:l.x-=o.padding:l.x=0,i(l.y)>o.padding?l.y<0?l.y+=o.padding:l.y-=o.padding:l.y=0;var c=o.scaleX,h=o.scaleY;if(n==="equally"&&!u&&!a){var p=l.y+l.x,d=(o.height+o.strokeWidth)*r.original.scaleY+(o.width+o.strokeWidth)*r.original.scaleX;c=r.original.scaleX*p/d,h=r.original.scaleY*p/d,o.set("scaleX",c),o.set("scaleY",h)}else n?n==="x"&&!o.get("lockUniScaling")?(c=l.x/(o.width+o.strokeWidth),u||o.set("scaleX",c)):n==="y"&&!o.get("lockUniScaling")&&(h=l.y/(o.height+o.strokeWidth),a||o.set("scaleY",h)):(c=l.x/(o.width+o.strokeWidth),h=l.y/(o.height+o.strokeWidth),u||o.set("scaleX",c),a||o.set("scaleY",h));c<0&&(r.originX==="left"?r.originX="right":r.originX==="right"&&(r.originX="left")),h<0&&(r.originY==="top"?r.originY="bottom":r.originY==="bottom"&&(r.originY="top")),o.setPositionByOrigin(f,r.originX,r.originY)},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,s=i(n),o=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),s,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+u-(n>0?0:s),f=t.ey+u-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+s,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+o-1,a+s,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,a+s-1,f,a+s-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+u-(n>0?0:s),t.ey+u-(r>0?0:o),s,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,u=r+this._groupSelector.top,a,f=new fabric.Point(s(n,i),s(r,u)),l=new fabric.Point(o(n,i),o(r,u)),c=n===i&&r===u;for(var h=this._objects.length;h--;){a=this._objects[h];if(!a)continue;if(a.intersectsWithRect(f,l)||a.isContainedWithinRect(f,l)||a.containsPoint(f)||a.containsPoint(l))if(this.selection&&a.selectable){a.set("active",!0),t.push(a);if(c)break}}t.length===1?this.setActiveObject(t[0],e):t.length>1&&(t=new fabric.Group(t.reverse()),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},findTarget:function(e,t){if(this.skipTargetFind)return;var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this._objects[o].evented&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e),this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke),this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center"),i.add(this);var o=i.toDataURL(e);return this.set(s).setCoords(),i.dispose(),i=null,o},isType:function(e){return this.type===e},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},setColor:function(e){return this.set("fill",e),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.group?t.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?t.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?t.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?t.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?t.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"?s=i.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:s=i.x,r==="top"?o=i.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"?o=i.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){var t=e(this.angle),n=this.getWidth()/2,r=Math.cos(t)*n,i=Math.sin(t)*n,s=this.left,o=this.top;if(this.originX==="center"||this.originX==="right")s-=r;if(this.originY==="center"||this.originY==="bottom")o-=i;return{x:s,y:o}}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(e)!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=~~(this.strokeWidth/2)*2;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=~~(this.strokeWidth/2),i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=this.transparentCorners,w=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function( +){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(){var e=this._createBaseSVGMarkup(),t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return e.push("'),e.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed,r=t.util.array.min;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=this._createBaseSVGMarkup();for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=this._createBaseSVGMarkup();for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;i'+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke||this.strokeDashArray){var t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;n.onload=function(){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i),n=n.onload=n.onerror=null})},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this +.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s=0&&N=0&&C-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){this.transform(e,t.isLikelyNode),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),e.save(),this._setShadow(e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this._removeShadow(e),e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_drawChars:function(e,t,n,r,i){t[e](n,r,i)},_drawTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._drawChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-s),this.textDecoration.indexOf("overline")>-1&&i(s)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Text.prototype,{_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.shadow&&this.shadow.toString(),textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,n=null,this.setCoords()},_initDummyElementForCufon:function(){var e=fabric.document.createElement("pre"),t=fabric.document.createElement("div");return t.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index 615f6f2e8be8e39e6998214045f3a692ce7214b7..b9bda7a74fcfe1dbf3ab6e68ef17eab9c3d94267 100644 GIT binary patch delta 46556 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 element and transforms its data in such way that it becomes grayscale - * @static - * @param {HTMLCanvasElement} canvasEl - */ - toGrayscale: function (canvasEl) { - var context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - iLen = imageData.width, - jLen = imageData.height, - index, average, i, j; - - for (i = 0; i < iLen; i++) { - for (j = 0; j < jLen; j++) { - - index = (i * 4) * jLen + (j * 4); - average = (data[index] + data[index + 1] + data[index + 2]) / 3; - - data[index] = average; - data[index + 1] = average; - data[index + 2] = average; - } - } - - context.putImageData(imageData, 0, 0); - }, - /** * Provides a way to check support of some of the canvas methods * (either those of HTMLCanvasElement itself, or rendering context) @@ -8216,7 +8188,14 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric * @type Boolean * @default */ - randomOpacity: false, + randomOpacity: false, + + /** + * Whether overlapping dots (rectangles) should be removed (for performance reasons) + * @type Boolean + * @default + */ + optimizeOverlapping: true, /** * Constructor @@ -8276,6 +8255,11 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric rects.push(rect); } } + + if (this.optimizeOverlapping) { + rects = this._getOptimizedRects(rects); + } + var group = new fabric.Group(rects); this.canvas.add(group); this.canvas.fire('path:created', { path: group }); @@ -8286,6 +8270,25 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric this.canvas.renderAll(); }, + _getOptimizedRects: function(rects) { + + // avoid creating duplicate rects at the same coordinates + var uniqueRects = { }, key; + + for (var i = 0, len = rects.length; i < len; i++) { + key = rects[i].left + '' + rects[i].top; + if (!uniqueRects[key]) { + uniqueRects[key] = rects[i]; + } + } + var uniqueRectsArray = [ ]; + for (key in uniqueRects) { + uniqueRectsArray.push(uniqueRects[key]); + } + + return uniqueRectsArray; + }, + /** * Renders brush */ @@ -10048,6 +10051,25 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Number} [options.width] Cropping width. Introduced in v1.2.14 * @param {Number} [options.height] Cropping height. Introduced in v1.2.14 * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format + * @see {@link http://jsfiddle.net/fabricjs/NfZVb/|jsFiddle demo} + * @example Generate jpeg dataURL with lower quality + * var dataURL = canvas.toDataURL({ + * format: 'jpeg', + * quality: 0.8 + * }); + * @example Generate cropped png dataURL (clipping of canvas) + * var dataURL = canvas.toDataURL({ + * format: 'png', + * left: 100, + * top: 100, + * width: 200, + * height: 200 + * }); + * @example Generate double scaled png dataURL + * var dataURL = canvas.toDataURL({ + * format: 'png', + * multiplier: 2 + * }); */ toDataURL: function (options) { options || (options = { }); @@ -10264,6 +10286,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created. * @return {fabric.Canvas} instance * @chainable + * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo} + * @example loadFromJSON + * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas)); + * @example loadFromJSON with reviver + * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), function(o, object) { + * // `o` = json object + * // `object` = fabric.Object instance + * // ... do some stuff ... + * }); */ loadFromJSON: function (json, callback, reviver) { if (!json) return; @@ -10891,11 +10922,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati fillRule: 'source-over', /** - * Overlay fill (takes precedence over fill value) + * Background color of an object. Only works with text objects at the moment. * @type String * @default */ - overlayFill: null, + backgroundColor: '', /** * When defined, an object is rendered via stroke and this property specifies its color @@ -11093,7 +11124,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati stateProperties: ( 'top left width height scaleX scaleY flipX flipY originX originY transformMatrix ' + 'stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit ' + - 'angle opacity fill fillRule overlayFill shadow clipTo visible' + 'angle opacity fill fillRule shadow clipTo visible backgroundColor' ).split(' '), /** @@ -11187,7 +11218,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati width: toFixed(this.width, NUM_FRACTION_DIGITS), height: toFixed(this.height, NUM_FRACTION_DIGITS), fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill, - overlayFill: this.overlayFill, stroke: (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke, strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS), strokeDashArray: this.strokeDashArray, @@ -11202,7 +11232,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS), shadow: (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow, visible: this.visible, - clipTo: this.clipTo && String(this.clipTo) + clipTo: this.clipTo && String(this.clipTo), + backgroundColor: this.backgroundColor }; if (!this.includeDefaultValues) { @@ -11318,11 +11349,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Object} object */ _removeDefaultValues: function(object) { - this.stateProperties.forEach(function(prop) { - if (object[prop] === this.constructor.prototype[prop]) { + var prototype = fabric.util.getKlass(object.type).prototype; + var stateProperties = prototype.stateProperties; + + stateProperties.forEach(function(prop) { + if (object[prop] === prototype[prop]) { delete object[prop]; } - }, this); + }); + return object; }, @@ -11454,10 +11489,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati : this.stroke; } - if (this.overlayFill) { - ctx.fillStyle = this.overlayFill; - } - else if (this.fill) { + if (this.fill) { ctx.fillStyle = this.fill.toLive ? this.fill.toLive(ctx) : this.fill; @@ -11645,18 +11677,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati return this.type === type; }, - /** - * Makes object's color grayscale - * @return {fabric.Object} thisArg - */ - toGrayscale: function() { - var fillValue = this.get('fill'); - if (fillValue) { - this.set('overlayFill', new fabric.Color(fillValue).toGrayscale().toRgb()); - } - return this; - }, - /** * Returns complexity of an instance * @return {Number} complexity of this instance @@ -11690,6 +11710,37 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Object} [options.colorStops] Color stops object eg. {0: 'ff0000', 1: '000000'} * @return {fabric.Object} thisArg * @chainable + * @see {@link http://jsfiddle.net/fabricjs/58y8b/|jsFiddle demo} + * @example Set linear gradient + * object.setGradient('fill', { + * type: 'linear', + * x1: -object.width / 2, + * y1: 0, + * x2: object.width / 2, + * y2: 0, + * colorStops: { + * 0: 'red', + * 0.5: '#005555', + * 1: 'rgba(0,0,255,0.5)' + * } + * }); + * canvas.renderAll(); + * @example Set radial gradient + * object.setGradient('fill', { + * type: 'radial', + * x1: 0, + * y1: 0, + * x2: 0, + * y2: 0, + * r1: object.width / 2, + * r2: 10, + * colorStops: { + * 0: 'red', + * 0.5: '#005555', + * 1: 'rgba(0,0,255,0.5)' + * } + * }); + * canvas.renderAll(); */ setGradient: function(property, options) { options || (options = { }); @@ -11726,6 +11777,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Number} [options.offsetY=0] Pattern vertical offset from object's left/top corner * @return {fabric.Object} thisArg * @chainable + * @see {@link http://jsfiddle.net/fabricjs/QT3pa/|jsFiddle demo} + * @example Set pattern + * fabric.util.loadImage('http://fabricjs.com/assets/escheresque_ste.png', function(img) { + * object.setPatternFill({ + * source: img, + * repeat: 'repeat' + * }); + * canvas.renderAll(); + * }); */ setPatternFill: function(options) { return this.set('fill', new fabric.Pattern(options)); @@ -11740,6 +11800,18 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @param {Number} [options.offsetY=0] Shadow vertical offset * @return {fabric.Object} thisArg * @chainable + * @see {@link http://jsfiddle.net/fabricjs/7gvJG/|jsFiddle demo} + * @example Set shadow with string notation + * object.setShadow('2px 2px 10px rgba(0,0,0,0.2)'); + * canvas.renderAll(); + * @example Set shadow with object notation + * object.setShadow({ + * color: 'red', + * blur: 10, + * offsetX: 20, + * offsetY: 20 + * }); + * canvas.renderAll(); */ setShadow: function(options) { return this.set('shadow', new fabric.Shadow(options)); @@ -13955,7 +14027,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } var stateProperties = fabric.Object.prototype.stateProperties.concat(); - stateProperties.push('rx', 'ry'); + stateProperties.push('rx', 'ry', 'x', 'y'); /** * Rectangle class @@ -13993,6 +14065,18 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ ry: 0, + /** + * @type Number + * @default + */ + x: 0, + + /** + * @type Number + * @default + */ + y: 0, + /** * Used to specify dash pattern for stroke on this object * @type Array @@ -14111,12 +14195,16 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {Object} object representation of an instance */ toObject: function(propertiesToInclude) { - return extend(this.callSuper('toObject', propertiesToInclude), { + var object = extend(this.callSuper('toObject', propertiesToInclude), { rx: this.get('rx') || 0, ry: this.get('ry') || 0, x: this.get('x'), y: this.get('y') }); + if (!this.includeDefaultValues) { + this._removeDefaultValues(object); + } + return object; }, /* _TO_SVG_START_ */ @@ -15033,10 +15121,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } // ctx.globalCompositeOperation = this.fillRule; - if (this.overlayFill) { - ctx.fillStyle = this.overlayFill; - } - else if (this.fill) { + if (this.fill) { ctx.fillStyle = this.fill.toLive ? this.fill.toLive(ctx) : this.fill; @@ -15423,7 +15508,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ _set: function(prop, value) { - if ((prop === 'fill' || prop === 'overlayFill') && value && this.isSameColor()) { + if (prop === 'fill' && value && this.isSameColor()) { var i = this.paths.length; while (i--) { this.paths[i]._set(prop, value); @@ -17719,7 +17804,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag 'textAlign', 'fontStyle', 'lineHeight', - 'backgroundColor', 'textBackgroundColor', 'useNative', 'path' @@ -17950,13 +18034,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag */ lineHeight: 1.3, - /** - * Background color of an entire text box - * @type String - * @default - */ - backgroundColor: '', - /** * Background color of text lines * @type String @@ -18496,7 +18573,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag textDecoration: this.textDecoration, textAlign: this.textAlign, path: this.path, - backgroundColor: this.backgroundColor, textBackgroundColor: this.textBackgroundColor, useNative: this.useNative });