From d9291fbfe5775d6705ad15d36616a8c6c105a46a Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 6 Feb 2013 23:55:15 +0100 Subject: [PATCH] Add shadow support to brushes --- dist/all.js | 517 +++++++++++++++++++++++++------------- dist/all.min.js | 16 +- dist/all.min.js.gz | Bin 43470 -> 45096 bytes src/circle_brush.class.js | 8 +- src/path.class.js | 6 +- src/pencil_brush.class.js | 11 +- src/shadow.class.js | 7 + src/spray_brush.class.js | 8 +- 8 files changed, 381 insertions(+), 192 deletions(-) diff --git a/dist/all.js b/dist/all.js index 6e7aeb2c..3d8607c9 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,9 +1,5 @@ /* build: `node build.js modules=ALL exclude=gestures` */ -<<<<<<< HEAD -/*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */ -======= /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ ->>>>>>> master var fabric = fabric || { version: "1.0.6" }; @@ -4731,6 +4727,13 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { */ offsetY: 0, + /** + * Whether the shadow should affect stroke operations + * @property + * @type Boolean + */ + affectStroke: false, + /** * Constructor * @method initialize @@ -6844,6 +6847,81 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { })(); +/** + * BaseBrush class + * @class fabric.BaseBrush + */ +fabric.BaseBrush = fabric.util.createClass({ + + /** + * Color of a brush + * @property + * @type String + */ + color: 'rgb(0, 0, 0)', + + /** + * Width of a brush + * @property + * @type Number + */ + width: 1, + + /** + * Shadow blur of a brush + * @property + * @type Number + */ + shadowBlur: 0, + + /** + * Shadow color of a brush + * @property + * @type String + */ + shadowColor: '', + + /** + * Shadow offset x of a brush + * @property + * @type Number + */ + shadowOffsetX: 0, + + /** + * Shadow offset y of a brush + * @property + * @type Number + */ + shadowOffsetY: 0, + + /** + * Sets brush styles + * @method setBrushStyles + */ + setBrushStyles: function() { + var ctx = this.canvas.contextTop; + + ctx.strokeStyle = this.color; + ctx.lineWidth = this.width; + ctx.lineCap = ctx.lineJoin = 'round'; + }, + + /** + * Sets brush shadow styles + * @method setShadowStyles + */ + setShadowStyles: function() { + var ctx = this.canvas.contextTop; + + if (this.shadowBlur) { + ctx.shadowBlur = this.shadowBlur; + ctx.shadowColor = this.shadowColor || this.color; + ctx.shadowOffsetX = this.shadowOffsetX; + ctx.shadowOffsetY = this.shadowOffsetY; + } + } +}); (function() { var utilMin = fabric.util.array.min, @@ -6852,50 +6930,9 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { /** * PencilBrush class * @class fabric.PencilBrush + * @extends fabric.BaseBrush */ - fabric.PencilBrush = fabric.util.createClass( /** @scope fabric.PencilBrush.prototype */ { - - /** - * Color of the pencil - * @property - * @type String - */ - color: 'rgb(0, 0, 0)', - - /** - * Width of a pencil - * @property - * @type Number - */ - width: 1, - - /** - * Shadow blur of a pencil - * @property - * @type Number - */ - shadowBlur: 0, - - /** - * Shadow color of a pencil - * @property - * @type String - */ - shadowColor: '', - - /** - * Shadow offset x of a pencil - * @property - * @type Number - */ - shadowOffsetX: 0, - - /** - * Shadow offset y of a pencil - * @property - * @type Number - */ - shadowOffsetY: 0, + fabric.PencilBrush = fabric.util.createClass( fabric.BaseBrush, /** @scope fabric.PencilBrush.prototype */ { /** * Constructor @@ -6972,19 +7009,8 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { _reset: function() { this._points.length = 0; - var ctx = this.canvas.contextTop; - - ctx.strokeStyle = this.color; - ctx.lineWidth = this.width; - - if (this.shadowBlur) { - ctx.shadowBlur = this.shadowBlur; - ctx.shadowColor = this.shadowColor || this.color; - ctx.shadowOffsetX = this.shadowOffsetX; - ctx.shadowOffsetY = this.shadowOffsetY; - } - - ctx.lineCap = ctx.lineJoin = 'round'; + this.setBrushStyles(); + this.setShadowStyles(); }, /** @@ -7115,8 +7141,15 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { createPath: function(pathData) { var path = new fabric.Path(pathData); path.fill = null; - path.stroke = this.canvas.freeDrawingColor; - path.strokeWidth = this.canvas.freeDrawingLineWidth; + path.stroke = this.color; + path.strokeWidth = this.width; + path.setShadow({ + color: this.shadowColor || this.color, + blur: this.shadowBlur, + offsetX: this.shadowOffsetX, + offsetY: this.shadowOffsetY, + affectStroke: true + }); return path; }, @@ -7130,12 +7163,6 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { _finalizeAndAddPath: function() { var ctx = this.canvas.contextTop; ctx.closePath(); -<<<<<<< HEAD - - var path = this._getSVGPathData(); - path = path.join(''); -======= ->>>>>>> master var pathData = this._getSVGPathData().join(''); if (pathData === "M 0 0 Q 0 0 0 0 L 0 0") { @@ -7147,15 +7174,6 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { return; } -<<<<<<< HEAD - var p = new fabric.Path(path); - p.fill = null; - p.stroke = this.color; - p.strokeWidth = this.width; - this.canvas.add(p); - -======= ->>>>>>> master // set path origin coordinates based on our bounding box var originLeft = this.box.minx + (this.box.maxx - this.box.minx) /2; var originTop = this.box.miny + (this.box.maxy - this.box.miny) /2; @@ -7176,18 +7194,12 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { } }); })(); + /** * CircleBrush class * @class fabric.CircleBrush */ -fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prototype */ { - - /** - * Color of the brush - * @property - * @type String - */ - color: 'rgb(0, 0, 0)', +fabric.CircleBrush = fabric.util.createClass( fabric.BaseBrush, /** @scope fabric.CircleBrush.prototype */ { /** * Width of a brush @@ -7196,34 +7208,6 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot */ width: 10, - /** - * Shadow blur of a pencil - * @property - * @type Number - */ - shadowBlur: 0, - - /** - * Shadow color of a pencil - * @property - * @type String - */ - shadowColor: '', - - /** - * Shadow offset x of a pencil - * @property - * @type Number - */ - shadowOffsetX: 0, - - /** - * Shadow offset y of a pencil - * @property - * @type Number - */ - shadowOffsetY: 0, - /** * Constructor * @method initialize @@ -7281,7 +7265,13 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot radius: point.radius, left: point.x, top: point.y, - fill: point.fill + fill: point.fill, + shadow: { + color: this.shadowColor || this.color, + blur: this.shadowBlur, + offsetX: this.shadowOffsetX, + offsetY: this.shadowOffsetY + } }); this.canvas.add(circle); } @@ -7313,6 +7303,229 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot return pointerPoint; } }); +/** + * SprayBrush class + * @class fabric.SprayBrush + */ +fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @scope fabric.SprayBrush.prototype */ { + + /** + * Width of a spray + * @property + * @type Number + */ + width: 10, + + /** + * Density of a spray (number of dots per chunk) + * @property + * @type Number + */ + density: 20, + + /** + * Width of spray dots + * @property + * @type Number + */ + dotWidth: 1, + + /** + * Width variance of spray dots + * @property + * @type Number + */ + dotWidthVariance: 1, + + /** + * Whether opacity of a dot should be random + * @property + * @type Boolean + */ + randomOpacity: false, + + /** + * Constructor + * @method initialize + * @param {fabric.Canvas} canvas + * @return {fabric.SprayBrush} Instance of a spray brush + */ + initialize: function(canvas) { + this.canvas = canvas; + this.sprayChunks = [ ]; + }, + + /** + * @method onMouseDown + * @param {Object} pointer + */ + onMouseDown: function(pointer) { + this.sprayChunks.length = 0; + this.canvas.clearContext(this.canvas.contextTop); + this.setShadowStyles(); + + this.addSprayChunk(pointer); + this.render(); + }, + + /** + * @method onMouseMove + * @param {Object} pointer + */ + onMouseMove: function(pointer) { + this.addSprayChunk(pointer); + this.render(); + }, + + /** + * @method onMouseUp + */ + onMouseUp: function() { + var originalRenderOnAddition = this.canvas.renderOnAddition; + this.canvas.renderOnAddition = false; + + for (var i = 0, ilen = this.sprayChunks.length; i < ilen; i++) { + var sprayChunk = this.sprayChunks[i]; + + for (var j = 0, jlen = sprayChunk.length; j < jlen; j++) { + + var rect = new fabric.Rect({ + width: sprayChunk[j].width, + height: sprayChunk[j].width, + left: sprayChunk[j].x + 1, + top: sprayChunk[j].y + 1, + fill: this.color, + shadow: { + color: this.shadowColor || this.color, + blur: this.shadowBlur, + offsetX: this.shadowOffsetX, + offsetY: this.shadowOffsetY + } + }); + + this.canvas.add(rect); + } + } + + this.canvas.renderOnAddition = originalRenderOnAddition; + this.canvas.clearContext(this.canvas.contextTop); + this.canvas.renderAll(); + }, + + /** + * @method render + */ + render: function() { + var ctx = this.canvas.contextTop; + ctx.fillStyle = this.color; + ctx.save(); + + for (var i = 0, len = this.sprayChunkPoints.length; i < len; i++) { + var point = this.sprayChunkPoints[i]; + if (typeof point.opacity !== 'undefined') { + ctx.globalAlpha = point.opacity; + } + ctx.fillRect(point.x, point.y, point.width, point.width); + } + ctx.restore(); + }, + + /** + * @method addSprayChunk + * @param {Object} pointer + */ + addSprayChunk: function(pointer) { + this.sprayChunkPoints = [ ]; + + var x, y, width, radius = this.width / 2; + + for (var i = 0; i < this.density; i++) { + + x = fabric.util.getRandomInt(pointer.x - radius, pointer.x + radius); + y = fabric.util.getRandomInt(pointer.y - radius, pointer.y + radius); + + if (this.dotWidthVariance) { + width = fabric.util.getRandomInt( + // bottom clamp width to 1 + Math.max(1, this.dotWidth - this.dotWidthVariance), + this.dotWidth + this.dotWidthVariance); + } + else { + width = this.dotWidth; + } + + var point = { x: x, y: y, width: width }; + + if (this.randomOpacity) { + point.opacity = fabric.util.getRandomInt(0, 100) / 100; + } + + this.sprayChunkPoints.push(point); + } + + this.sprayChunks.push(this.sprayChunkPoints); + } +}); +/** + * PatternBrush class + * @class fabric.PatternBrush + * @extends fabric.BaseBrush + */ +fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @scope fabric.PatternBrush.prototype */ { + + getPatternSrc: function() { + + var dotWidth = 20, + dotDistance = 5, + patternCanvas = fabric.document.createElement('canvas'), + patternCtx = patternCanvas.getContext('2d'); + + patternCanvas.width = patternCanvas.height = dotWidth + dotDistance; + + patternCtx.fillStyle = this.color; + patternCtx.beginPath(); + patternCtx.arc(dotWidth / 2, dotWidth / 2, dotWidth / 2, 0, Math.PI * 2, false); + patternCtx.closePath(); + patternCtx.fill(); + + return patternCanvas; + }, + + getPatternSrcBody: function() { + return String(this.getPatternSrc) + .match(/function\s+\w*\s*\(.*\)\s+\{([\s\S]*)\}/)[1] + .replace('this.color', '"' + this.color + '"'); + }, + + /** + * Creates "pattern" instance property + * @method getPattern + */ + getPattern: function() { + return this.canvas.contextTop.createPattern(this.source || this.getPatternSrc(), 'repeat'); + }, + + /** + * Sets brush styles + * @method setBrushStyles + */ + setBrushStyles: function() { + this.callSuper('setBrushStyles'); + this.canvas.contextTop.strokeStyle = this.getPattern(); + }, + + /** + * Creates path + * @method createPath + */ + createPath: function(pathData) { + var path = this.callSuper('createPath', pathData); + path.stroke = new fabric.Pattern({ + source: this.source || this.getPatternSrcBody() + }); + return path; + } +}); (function() { var extend = fabric.util.object.extend, @@ -7470,10 +7683,12 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot _initInteractive: function() { this._currentTransform = null; this._groupSelector = null; - this.freeDrawing = fabric.FreeDrawing && new fabric.FreeDrawing(this); this._initWrapperElement(); this._createUpperCanvas(); this._initEvents(); + + this.freeDrawingBrush = fabric.PencilBrush && new fabric.PencilBrush(this); + this.calcOffset(); }, @@ -7549,18 +7764,6 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot * @private * @method _normalizePointer */ -<<<<<<< HEAD - _initInteractive: function() { - this._currentTransform = null; - this._groupSelector = null; - this._initWrapperElement(); - this._createUpperCanvas(); - this._initEvents(); - - this.freeDrawingBrush = fabric.PencilBrush && new fabric.PencilBrush(this); - - this.calcOffset(); -======= _normalizePointer: function (object, pointer) { var activeGroup = this.getActiveGroup(), @@ -7578,7 +7781,6 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot y -= activeGroup.top; } return { x: x, y: y }; ->>>>>>> master }, /** @@ -7707,14 +7909,6 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot mouseYSign: 1 }; -<<<<<<< HEAD - if (this.isDrawingMode && this._isCurrentlyDrawing) { - this._isCurrentlyDrawing = false; - this.freeDrawingBrush.onMouseUp(); - this.fire('mouse:up', { e: e }); - return; - } -======= this._currentTransform.original = { left: target.left, top: target.top, @@ -7723,7 +7917,6 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot originX: originX, originY: originY }; ->>>>>>> master this._resetCurrentTransform(e); }, @@ -7825,17 +8018,6 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot var lockScalingX = target.get('lockScalingX'), lockScalingY = target.get('lockScalingY'); -<<<<<<< HEAD - if (this.isDrawingMode) { - pointer = this.getPointer(e); - - this._isCurrentlyDrawing = true; - this.discardActiveObject().renderAll(); - - this.freeDrawingBrush.onMouseDown(pointer); - this.fire('mouse:down', { e: e }); - return; -======= if (lockScalingX && lockScalingY) return; // Get the constraint point @@ -7844,7 +8026,6 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot if (t.originX === 'right') { localMouse.x *= -1; ->>>>>>> master } else if (t.originX === 'center') { localMouse.x *= t.mouseXSign * 2; @@ -7897,16 +8078,6 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot lockScalingY || target.set('scaleY', newScaleY); } -<<<<<<< HEAD - if (this.isDrawingMode) { - if (this._isCurrentlyDrawing) { - pointer = this.getPointer(e); - this.freeDrawingBrush.onMouseMove(pointer); - } - this.upperCanvasEl.style.cursor = this.freeDrawingCursor; - this.fire('mouse:move', { e: e }); - return; -======= // Check if we flipped if (newScaleX < 0) { @@ -7922,7 +8093,6 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot t.originY = 'bottom'; else if (t.originY === 'bottom') t.originY = 'top'; ->>>>>>> master } // Make sure the constraints apply @@ -8466,7 +8636,8 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot var target; if (this.isDrawingMode && this._isCurrentlyDrawing) { - this.freeDrawing._finalizeAndAddPath(); + this._isCurrentlyDrawing = false; + this.freeDrawingBrush.onMouseUp(); this.fire('mouse:up', { e: e }); return; } @@ -8550,12 +8721,9 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot if (this.isDrawingMode) { pointer = this.getPointer(e); - this.freeDrawing._prepareForDrawing(pointer); - - // capture coordinates immediately; - // this allows to draw dots (when movement never occurs) - this.freeDrawing._captureDrawingPath(pointer); - + this._isCurrentlyDrawing = true; + this.discardActiveObject().renderAll(); + this.freeDrawingBrush.onMouseDown(pointer); this.fire('mouse:down', { e: e }); return; } @@ -8628,12 +8796,7 @@ fabric.CircleBrush = fabric.util.createClass( /** @scope fabric.CircleBrush.prot if (this.isDrawingMode) { if (this._isCurrentlyDrawing) { pointer = this.getPointer(e); - this.freeDrawing._captureDrawingPath(pointer); - - // redraw curve - // clear top canvas - this.clearContext(this.contextTop); - this.freeDrawing._render(this.contextTop); + this.freeDrawingBrush.onMouseMove(pointer); } this.upperCanvasEl.style.cursor = this.freeDrawingCursor; this.fire('mouse:move', { e: e }); @@ -13203,7 +13366,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati if (this.fill) { ctx.fill(); } - this._removeShadow(ctx); + if (this.shadow && !this.shadow.affectStroke) { + this._removeShadow(ctx); + } if (this.stroke) { ctx.strokeStyle = this.stroke; @@ -13211,6 +13376,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati ctx.lineCap = ctx.lineJoin = 'round'; ctx.stroke(); } + this._removeShadow(ctx); + if (!noTransform && this.active) { this.drawBorders(ctx); this.hideCorners || this.drawCorners(ctx); @@ -15580,7 +15747,7 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { fabric.Text = fabric.util.createClass(fabric.Object, /** @scope fabric.Text.prototype */ { /** - * Font size + * Font size (in pixels) * @property * @type Number */ diff --git a/dist/all.min.js b/dist/all.min.js index 367decf6..d3492b3d 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,13 +1,5 @@ -<<<<<<< HEAD -/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.0.0"};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;_r?n:i-t;s(u(f,a,c,n));if(i>r||o()){e.onComplete&&e.onComplete();return}l(h)}()}function c(e,t,n){if(e){var r=new Image;r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function h(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function p(e,t,n){var r;if(e.length>1){var i=e.some(function(e){return e.type==="text"});i?(r=new fabric.Group([],t),e.reverse().forEach(function(e){e.cx&&(e.left=e.cx),e.cy&&(e.top=e.cy),r.addWithUpdate(e)})):r=new fabric.PathGroup(e,t)}else r=e[0];return typeof n!="undefined"&&r.setSourcePath(n),r}function d(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;r=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!==1/0&&r!==-1/0&&(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=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}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});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),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.type="text/javascript",r.setAttribute("runat","server"),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.getElementPosition=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,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){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(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 g(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 y(e){var t="";for(var n=0,r=e.length;n",'",""].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};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 t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),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,p=f.length;c0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.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){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},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("No Intersection")}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("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),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("No Intersection");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])}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=n.sourceFromHex(e);t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];this.backgroundImage&&e.push(''),this.overlayImage&&e.push('');for(var t=0,n=this.getObjects(),r=n.length;t"),e.join("")},isEmpty:function(){return this._objects.length===0},remove:function(e){return n(this._objects,e),this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},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;a0?0:-n),t.ey-(r>0?0:-r),i,s),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var o=t.ex+h-(n>0?0:i),u=t.ey+h-(r>0?0:s);e.beginPath(),this.drawDashedLine(e,o,u,o+i,u,this.selectionDashArray),this.drawDashedLine(e,o,u+s-1,o+i,u+s-1,this.selectionDashArray),this.drawDashedLine(e,o,u,o,u+s,this.selectionDashArray),this.drawDashedLine(e,o+i-1,u,o+i-1,u+s,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+h-(n>0?0:i),t.ey+h-(r>0?0:s),i,s)},drawDashedLine:function(e,t,n,r,i,s){var o=r-t,f=i-n,l=u(o*o+f*f),c=a(f,o),h=s.length,p=0,d=!0;e.save(),e.translate(t,n),e.moveTo(0,0),e.rotate(c),t=0;while(l>t)t+=s[p++%h],t>l&&(t=l),e[d?"lineTo":"moveTo"](t,0),d=!d;e.restore()},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,o,u=new fabric.Point(l(n,i),l(r,s)),a=new fabric.Point(c(n,i),c(r,s));for(var f=0,h=this._objects.length;f1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay))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.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"},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,t=this.padding,n=o(this.angle);this.currentWidth=(this.width+e)*this.scaleX+t*2,this.currentHeight=(this.height+e)*this.scaleY+t*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var r=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),i=Math.atan(this.currentHeight/this.currentWidth),s=Math.cos(i+n)*r,u=Math.sin(i+n)*r,a=Math.sin(n),f=Math.cos(n),l=this.getCenterPoint(),c={x:l.x-s,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:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this},getBoundingRectWidth:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},getBoundingRectHeight:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},drawBorders:function(e){if(!this.hasBorders)return;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;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),~~(u+n+r*this.scaleY));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},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},drawCorners:function(e){if(!this.hasControls)return;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=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,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,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,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,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,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,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new u;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",!1).set("flipY",!1),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL("png");r.dispose(),r=t=null,e&&e(i)}var n=t.document.createElement("canvas");!n.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(n),n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},intersectsWithRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y),u=new t.Point(r.br.x,r.br.y),a=t.Intersection.intersectPolygonRectangle([i,s,u,o],e,n);return a.status==="Intersection"},intersectsWithObject:function(e){function n(e){return{tl:new t.Point(e.tl.x,e.tl.y),tr:new t.Point(e.tr.x,e.tr.y),bl:new t.Point(e.bl.x,e.bl.y),br:new t.Point(e.br.x,e.br.y)}}var r=n(this.oCoords),i=n(e.oCoords),s=t.Intersection.intersectPolygonPolygon([r.tl,r.tr,r.br,r.bl],[i.tl,i.tr,i.br,i.bl]);return s.status==="Intersection"},isContainedWithinObject:function(e){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y);return i.x>e.x&&s.xe.y&&o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,t=o(this.angle),n=o(45-this.angle),r=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,i=r*Math.cos(n),s=r*Math.sin(n),u=Math.sin(t),a=Math.cos(t);e.tl.corner={tl:{x:e.tl.x-s,y:e.tl.y-i},tr:{x:e.tl.x+i,y:e.tl.y-s},bl:{x:e.tl.x-i,y:e.tl.y+s},br:{x:e.tl.x+s,y:e.tl.y+i}},e.tr.corner={tl:{x:e.tr.x-s,y:e.tr.y-i},tr:{x:e.tr.x+i,y:e.tr.y-s},br:{x:e.tr.x+s,y:e.tr.y+i},bl:{x:e.tr.x-i,y:e.tr.y+s}},e.bl.corner={tl:{x:e.bl.x-s,y:e.bl.y-i},bl:{x:e.bl.x-i,y:e.bl.y+s},br:{x:e.bl.x+s,y:e.bl.y+i},tr:{x:e.bl.x+i,y:e.bl.y-s}},e.br.corner={tr:{x:e.br.x+i,y:e.br.y-s},bl:{x:e.br.x-i,y:e.br.y+s},br:{x:e.br.x+s,y:e.br.y+i},tl:{x:e.br.x-s,y:e.br.y-i}},e.ml.corner={tl:{x:e.ml.x-s,y:e.ml.y-i},tr:{x:e.ml.x+i,y:e.ml.y-s},bl:{x:e.ml.x-i,y:e.ml.y+s},br:{x:e.ml.x+s,y:e.ml.y+i}},e.mt.corner={tl:{x:e.mt.x-s,y:e.mt.y-i},tr:{x:e.mt.x+i,y:e.mt.y-s},bl:{x:e.mt.x-i,y:e.mt.y+s},br:{x:e.mt.x+s,y:e.mt.y+i}},e.mr.corner={tl:{x:e.mr.x-s,y:e.mr.y-i},tr:{x:e.mr.x+i,y:e.mr.y-s},bl:{x:e.mr.x-i,y:e.mr.y+s},br:{x:e.mr.x+s,y:e.mr.y+i}},e.mb.corner={tl:{x:e.mb.x-s,y:e.mb.y-i},tr:{x:e.mb.x+i,y:e.mb.y-s},bl:{x:e.mb.x-i,y:e.mb.y+s},br:{x:e.mb.x+s,y:e.mb.y+i}},e.mtr.corner={tl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y-i-a*this.rotatingPointOffset},tr:{x:e.mtr.x+i+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},bl:{x:e.mtr.x-i+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset},br:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y+i-a*this.rotatingPointOffset}}},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)},setGradientFill:function(e){this.set("fill",t.Gradient.forObject(this,e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e,arguments[0][e],arguments[1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this;n=n.toString(),r?r=t.util.object.clone(r):r={},"from"in r||(r.from=this.get(e)),~n.indexOf("=")?n=this.get(e)+parseFloat(n.replace("=","")):n=parseFloat(n),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},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.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}});var l=t.Object.prototype;for(var c=l.stateProperties.length;c--;){var h=l.stateProperties[c],p=h.charAt(0).toUpperCase()+h.slice(1),d="set"+p,v="get"+p;l[v]||(l[v]=function(e){return new Function('return this.get("'+e+'")')}(h)),l[d]||(l[d]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(h))}t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),n(t.Object,{NUM_FRACTION_DIGITS:2})}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".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);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){return'"},_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.fill&&e.fill(),this.stroke&&e.stroke()},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="cx cy r fill fill-opacity opacity stroke stroke-width transform".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.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),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",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(){return[""].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.stroke&&e.stroke(),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".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 r(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}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_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;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},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;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions()},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[];for(var t=0,r=this.points.length;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"].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;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});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=[];for(var t=0,n=this.path.length;t',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];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){var n=u(e.paths);return new t.PathGroup(n,e)}}(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,o=t.util.removeFromArray;if(t.Group)return;var u={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],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.hideCorners=!0},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,lineHeight:!0,textDecoration:!0,textShadow:!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},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this.objects,"toObject",e)})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hideCorners=!1,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale();return this},toSVG:function(){var e=[];for(var t=0,n=this.objects.length;t'+e.join("")+""},get:function(e){if(e in u){if(this[e])return this[e];for(var t=0,n=this.objects.length;t'+'"+""},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.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.document.createElement("canvas"),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;!r.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(r),r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").substring(22);i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return 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){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_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;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),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){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){r||(r={});var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(i,r))},fabric.Image.async=!0}(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.setActive(!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.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo: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;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0],this.tmpCtx=fabric.document.createElement("canvas").getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_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.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,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,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.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},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(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,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,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,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;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?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},setFontsize:function(e){return this.set("fontSize",e),this._initDimensions(),this.setCoords(),this},getText:function(){return this.text},setText:function(e){return this.set("text",e),this._initDimensions(),this.setCoords(),this},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t)}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},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}}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=new Image;e&&e.indexOf("data")===0?(r.src=r._src=e,t&&t.call(n,r)):e&&request(e,"binary",function(i){r.src=new Buffer(i,"binary"),r._src=e,t&&t.call(n,r)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,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),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},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this),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),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); -======= /* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.0.6"};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;_r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e,t,n){if(e){var r=new Image;r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function d(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function v(e,t,n){var r;if(e.length>1){var i=e.some(function(e){return e.type==="text"});i?(r=new fabric.Group([],t),e.reverse().forEach(function(e){e.cx&&(e.left=e.cx),e.cy&&(e.top=e.cy),r.addWithUpdate(e)})):r=new fabric.PathGroup(e,t)}else r=e[0];return 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),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(){var e=fabric.document.createElement("canvas");return!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}var e=Math.sqrt,t=Math.atan2;fabric.util={};var i=Math.PI/180,c=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},h=function(){return c.apply(fabric.window,arguments)};fabric.util.removeFromArray=n,fabric.util.degreesToRadians=s,fabric.util.radiansToDegrees=o,fabric.util.rotatePoint=u,fabric.util.toFixed=a,fabric.util.getRandomInt=r,fabric.util.falseFunction=f,fabric.util.animate=l,fabric.util.requestAnimFrame=h,fabric.util.loadImage=p,fabric.util.enlivenObjects=d,fabric.util.groupSVGElements=v,fabric.util.populateWithProperties=m,fabric.util.drawDashedLine=g,fabric.util.createCanvasElement=y}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=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!==1/0&&r!==-1/0&&(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=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}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});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),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.type="text/javascript",r.setAttribute("runat","server"),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.getElementPosition=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,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){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(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 g(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 y(e){var t="";for(var n=0,r=e.length;n",'",""].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};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 t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),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,p=f.length;c0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.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){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},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("No Intersection")}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("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),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("No Intersection");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])}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=n.sourceFromHex(e);t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),t.push("',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},isEmpty:function(){return this._objects.length===0},remove:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared"));var t=this._objects,n=t.indexOf(e);return n!==-1&&(t.splice(n,1),this.fire("object:removed",{target:e})),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},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;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&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.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"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,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,t){if(this.width===0||this.height===0)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=this.stroke;this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),n&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(n[0],n[1],n[2],n[3],n[4],n[5])),this._setShadow(e),this._render(e,t),this._removeShadow(e),this.active&&!t&&(this.drawBorders(e),this.hideCorners||this.drawCorners(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},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new o;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",!1).set("flipY",!1),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL("png");r.dispose(),r=t=null,e&&e(i)}var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},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)},setGradientFill:function(e){this.set("fill",t.Gradient.forObject(this,e))},setPatternFill:function(e){this.set("fill",new t.Pattern(e))},setShadow:function(e){this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e,arguments[0][e],arguments[1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this,s;n=n.toString(),r?r=t.util.object.clone(r):r={},~e.indexOf(".")&&(s=e.split("."));var o=s?this.get(s[0])[s[1]]:this.get(e);"from"in r||(r.from= -o),~n.indexOf("=")?n=o+parseFloat(n.replace("=","")):n=parseFloat(n),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){s?i[s[0]][s[1]]=t:i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},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.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}});var f=t.Object.prototype;for(var l=f.stateProperties.length;l--;){var c=f.stateProperties[l],h=c.charAt(0).toUpperCase()+c.slice(1),p="set"+h,d="get"+h;f[d]||(f[d]=function(e){return new Function('return this.get("'+e+'")')}(c)),f[p]||(f[p]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(c))}t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2}(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()/2:n==="right"&&(i=t.x-this.getWidth()/2),r==="top"?s=t.y+this.getHeight()/2:r==="bottom"&&(s=t.y-this.getHeight()/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()/2:n==="right"&&(i=t.x+this.getWidth()/2),r==="top"?s=t.y-this.getHeight()/2:r==="bottom"&&(s=t.y+this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){return this.translateToCenterPoint(new fabric.Point(this.left,this.top),this.originX,this.originY)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-this.getWidth()/2:n==="right"?s=i.x+this.getWidth()/2:s=i.x,r==="top"?o=i.y-this.getHeight()/2:r==="bottom"?o=i.y+this.getHeight()/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}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{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){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect: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);return r.x>e.x&&i.xe.y&&s.y1?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(this.currentHeight/this.currentWidth),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:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),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,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_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;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;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),~~(u+n+r*this.scaleY));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},drawCorners:function(e){if(!this.hasControls)return;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=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,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,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,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,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,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,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".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);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){return'"},_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.fill&&e.fill(),this._removeShadow(e),this.stroke&&e.stroke()},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="cx cy r fill fill-opacity opacity stroke stroke-width transform".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.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),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",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(){return[""].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.stroke&&e.stroke(),this._removeShadow(e),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".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 r(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}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_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;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},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;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions()},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[];for(var t=0,r=this.points.length;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"].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;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});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=[];for(var t=0,n=this.path.length;t',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];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){var n=u(e.paths);return new t.PathGroup(n,e)}}(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,o=t.util.removeFromArray;if(t.Group)return;var u={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],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.hideCorners=!0},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,lineHeight:!0,textDecoration:!0,textShadow:!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},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this.objects,"toObject",e)})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hideCorners=!1,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale();return this},toSVG:function(){var e=[];for(var t=0,n=this.objects.length;t'+e.join("")+""},get:function(e){if(e in u){if(this[e])return this[e];for(var t=0,n=this.objects.length;t'+'"+""},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.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.util.createCanvasElement(),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").substring(22);i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return 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){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_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;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),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){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){r||(r={});var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(i,r))},fabric.Image.async=!0}(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.setActive(!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.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo: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;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_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.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,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,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.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},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(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,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,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,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;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?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},setFontsize:function(e){return this.set("fontSize",e),this._initDimensions(),this.setCoords(),this},getText:function(){return this.text},setText:function(e){return this.set("text",e),this._initDimensions(),this.setCoords(),this},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t)}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},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}}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=new Image;e&&e.indexOf("data")===0?(r.src=r._src=e,t&&t.call(n,r)):e&&request(e,"binary",function(i){r.src=new Buffer(i,"binary"),r._src=e,t&&t.call(n,r)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,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),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},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),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),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); ->>>>>>> master +Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),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.type="text/javascript",r.setAttribute("runat","server"),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.getElementPosition=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,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){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(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 g(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 y(e){var t="";for(var n=0,r=e.length;n",'",""].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};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 t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),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,p=f.length;c0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.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){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},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("No Intersection")}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("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),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("No Intersection");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])}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=n.sourceFromHex(e);t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),t.push("',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},isEmpty:function(){return this._objects.length===0},remove:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared"));var t=this._objects,n=t.indexOf(e);return n!==-1&&(t.splice(n,1),this.fire("object:removed",{target:e})),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},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;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&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.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"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,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,t){if(this.width===0||this.height===0)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=this.stroke;this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),n&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(n[0],n[1],n[2],n[3],n[4],n[5])),this._setShadow(e),this._render(e,t),this._removeShadow(e),this.active&&!t&&(this.drawBorders(e),this.hideCorners||this.drawCorners(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},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new o;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",!1).set("flipY",!1),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL("png");r.dispose(),r=t=null,e&&e(i)}var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},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)},setGradientFill:function(e){this.set("fill",t.Gradient.forObject(this,e))},setPatternFill:function(e){this.set("fill",new t.Pattern(e))},setShadow:function(e){this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e,arguments[0][e],arguments[1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this,s;n=n.toString(),r?r=t.util.object.clone(r):r={},~e.indexOf(".")&&(s=e.split("."));var o=s?this.get(s[0])[s[1]]:this.get(e);"from"in r||(r.from=o),~n.indexOf("=")?n=o+parseFloat(n.replace("=","")):n=parseFloat(n),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){s?i[s[0]][s[1]]=t:i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},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.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}});var f=t.Object.prototype;for(var l=f.stateProperties.length;l--;){var c=f.stateProperties[l],h=c.charAt(0).toUpperCase()+c.slice(1),p="set"+h,d="get"+h;f[d]||(f[d]=function(e){return new Function('return this.get("'+e+'")')}(c)),f[p]||(f[p]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(c))}t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2}(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()/2:n==="right"&&(i=t.x-this.getWidth()/2),r==="top"?s=t.y+this.getHeight()/2:r==="bottom"&&(s=t.y-this.getHeight()/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()/2:n==="right"&&(i=t.x+this.getWidth()/2),r==="top"?s=t.y-this.getHeight()/2:r==="bottom"&&(s=t.y+this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){return this.translateToCenterPoint(new fabric.Point(this.left,this.top),this.originX,this.originY)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-this.getWidth()/2:n==="right"?s=i.x+this.getWidth()/2:s=i.x,r==="top"?o=i.y-this.getHeight()/2:r==="bottom"?o=i.y+this.getHeight()/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}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{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){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect: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);return r.x>e.x&&i.xe.y&&s.y1?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(this.currentHeight/this.currentWidth),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:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),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,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_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;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;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),~~(u+n+r*this.scaleY));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},drawCorners:function(e){if(!this.hasControls)return;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=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,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,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,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,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,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,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".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);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){return'"},_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.fill&&e.fill(),this._removeShadow(e),this.stroke&&e.stroke()},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="cx cy r fill fill-opacity opacity stroke stroke-width transform".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.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),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",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(){return[""].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.stroke&&e.stroke(),this._removeShadow(e),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".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 r(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}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_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;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},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;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions()},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[];for(var t=0,r=this.points.length;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"].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;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});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=[];for(var t=0,n=this.path.length;t',"',"" +].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];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){var n=u(e.paths);return new t.PathGroup(n,e)}}(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,o=t.util.removeFromArray;if(t.Group)return;var u={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],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.hideCorners=!0},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,lineHeight:!0,textDecoration:!0,textShadow:!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},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this.objects,"toObject",e)})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hideCorners=!1,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale();return this},toSVG:function(){var e=[];for(var t=0,n=this.objects.length;t'+e.join("")+""},get:function(e){if(e in u){if(this[e])return this[e];for(var t=0,n=this.objects.length;t'+'"+""},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.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.util.createCanvasElement(),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").substring(22);i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return 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){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_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;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),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){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){r||(r={});var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(i,r))},fabric.Image.async=!0}(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.setActive(!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.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo: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;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_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.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,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,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.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},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(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,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,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,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;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?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},setFontsize:function(e){return this.set("fontSize",e),this._initDimensions(),this.setCoords(),this},getText:function(){return this.text},setText:function(e){return this.set("text",e),this._initDimensions(),this.setCoords(),this},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t)}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},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}}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=new Image;e&&e.indexOf("data")===0?(r.src=r._src=e,t&&t.call(n,r)):e&&request(e,"binary",function(i){r.src=new Buffer(i,"binary"),r._src=e,t&&t.call(n,r)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,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),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},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),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),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 293561de647de4c2651afa71df70a749a1e81fe1..94053c07b8e45d6d693d1d0907d4dd54044f6e64 100644 GIT binary patch literal 45096 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

Y!t(?JU7SRj4Nn?T+R?BG_1SmUGrm)< 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�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 S&IDUOnEb!|TH3