From fde521317e14811c1a33c8ae114a0aff03f74e03 Mon Sep 17 00:00:00 2001 From: kangax Date: Sat, 4 May 2013 20:29:59 -0400 Subject: [PATCH] Store result of setLineDash support check. Build distribution. Version 1.1.11 --- HEADER.js | 2 +- dist/all.js | 325 ++++++++++++++++++++++++++++---------------- dist/all.min.js | 10 +- dist/all.min.js.gz | Bin 47673 -> 47952 bytes package.json | 2 +- src/line.class.js | 5 +- src/object.class.js | 5 +- 7 files changed, 223 insertions(+), 126 deletions(-) diff --git a/HEADER.js b/HEADER.js index 90ee7e74..6f654e12 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.1.10" }; +var fabric = fabric || { version: "1.1.11" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; diff --git a/dist/all.js b/dist/all.js index 4e14c08a..17efa112 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.1.10" }; +var fabric = fabric || { version: "1.1.11" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; @@ -7129,7 +7129,7 @@ fabric.Shadow = fabric.util.createClass(/** @lends fabric.Shadow.prototype */ { * (either those of HTMLCanvasElement itself, or rendering context) * * @param methodName {String} Method to check support for; - * Could be one of "getImageData", "toDataURL" or "toDataURLWithQuality" + * Could be one of "getImageData", "toDataURL", "toDataURLWithQuality" or "setLineDash" * @return {Boolean | null} `true` if method is supported (or at least exists), * `null` if canvas element or context can not be initialized */ @@ -7150,6 +7150,9 @@ fabric.Shadow = fabric.util.createClass(/** @lends fabric.Shadow.prototype */ { case 'getImageData': return typeof ctx.getImageData !== 'undefined'; + case 'setLineDash': + return typeof ctx.setLineDash !== 'undefined'; + case 'toDataURL': return typeof el.toDataURL !== 'undefined'; @@ -7240,6 +7243,16 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype ctx.shadowColor = this.shadowColor || this.color; ctx.shadowOffsetX = this.shadowOffsetX; ctx.shadowOffsetY = this.shadowOffsetY; + }, + + /** + * Remove brush shadow styles + */ + removeShadowStyles: function() { + var ctx = this.canvas.contextTop; + + ctx.shadowColor = ''; + ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0; } }); @@ -7496,7 +7509,8 @@ fabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype this.canvas.add(path); path.setCoords(); - this.canvas.contextTop && this.canvas.clearContext(this.canvas.contextTop); + this.canvas.clearContext(this.canvas.contextTop); + this.removeShadowStyles(); this.canvas.renderAll(); // fire event 'path' created @@ -7576,6 +7590,8 @@ fabric.CircleBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabri this.canvas.add(circle); } + this.canvas.clearContext(this.canvas.contextTop); + this.removeShadowStyles(); this.canvas.renderOnAddition = originalRenderOnAddition; this.canvas.renderAll(); }, @@ -7701,8 +7717,9 @@ fabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric } } - this.canvas.renderOnAddition = originalRenderOnAddition; this.canvas.clearContext(this.canvas.contextTop); + this.removeShadowStyles(); + this.canvas.renderOnAddition = originalRenderOnAddition; this.canvas.renderAll(); }, @@ -9638,7 +9655,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati extend = fabric.util.object.extend, toFixed = fabric.util.toFixed, capitalize = fabric.util.string.capitalize, - degreesToRadians = fabric.util.degreesToRadians; + degreesToRadians = fabric.util.degreesToRadians, + supportsLineDash = fabric.StaticCanvas.supports('setLineDash'); if (fabric.Object) { return; @@ -10060,7 +10078,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati return [ "stroke: ", (this.stroke ? this.stroke : 'none'), "; ", "stroke-width: ", (this.strokeWidth ? this.strokeWidth : '0'), "; ", - "stroke-dasharray: ", (this.strokeDashArray ? this.strokeDashArray.join(' ') : "; "), + "stroke-dasharray: ", (this.strokeDashArray ? this.strokeDashArray.join(' ') : ''), "; ", "fill: ", (this.fill ? (this.fill && this.fill.toLive ? 'url(#SVGID_' + this.fill.id + ')' : this.fill) : 'none'), "; ", "opacity: ", (typeof this.opacity !== 'undefined' ? this.opacity : '1'), ";", (this.visible ? '' : " visibility: hidden;") @@ -10269,6 +10287,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati /** * @private + * @param {CanvasRenderingContext2D} ctx Context to render on */ _setShadow: function(ctx) { if (!this.shadow) return; @@ -10281,6 +10300,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati /** * @private + * @param {CanvasRenderingContext2D} ctx Context to render on */ _removeShadow: function(ctx) { ctx.shadowColor = ''; @@ -10289,6 +10309,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati /** * @private + * @param {CanvasRenderingContext2D} ctx Context to render on */ _renderFill: function(ctx) { if (!this.fill) return; @@ -10303,6 +10324,37 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati if (this.fill.toLive) { ctx.restore(); } + if (this.shadow && !this.shadow.affectStroke) { + this._removeShadow(ctx); + } + }, + + /** + * @private + * @param {CanvasRenderingContext2D} ctx Context to render on + */ + _renderStroke: function(ctx) { + if (!this.stroke && !this.strokeDashArray) return; + + if (this.strokeDashArray) { + // Spec requires the concatenation of two copies the dash list when the number of elements is odd + if (1 & this.strokeDashArray.length) { + this.strokeDashArray.push.apply(this.strokeDashArray, this.strokeDashArray); + } + + if (supportsLineDash) { + ctx.setLineDash(this.strokeDashArray); + this._stroke && this._stroke(ctx); + } + else { + this._renderDashedStroke && this._renderDashedStroke(ctx); + } + ctx.stroke(); + } + else { + this._stroke ? this._stroke(ctx) : ctx.stroke(); + } + this._removeShadow(ctx); }, /** @@ -11743,7 +11795,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, - coordProps = { 'x1': 1, 'x2': 1, 'y1': 1, 'y2': 1 }; + coordProps = { 'x1': 1, 'x2': 1, 'y1': 1, 'y2': 1 }, + supportsLineDash = fabric.StaticCanvas.supports('setLineDash'); if (fabric.Line) { fabric.warn('fabric.Line is already defined'); @@ -11828,9 +11881,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.translate(this.left, this.top); } - // move from center (of virtual box) to its left/top corner - ctx.moveTo(this.width === 1 ? 0 : (-this.width / 2), this.height === 1 ? 0 : (-this.height / 2)); - ctx.lineTo(this.width === 1 ? 0 : (this.width / 2), this.height === 1 ? 0 : (this.height / 2)); + if (!this.strokeDashArray || this.strokeDashArray && supportsLineDash) { + // move from center (of virtual box) to its left/top corner + ctx.moveTo(this.width === 1 ? 0 : (-this.width / 2), this.height === 1 ? 0 : (-this.height / 2)); + ctx.lineTo(this.width === 1 ? 0 : (this.width / 2), this.height === 1 ? 0 : (this.height / 2)); + } ctx.lineWidth = this.strokeWidth; @@ -11839,10 +11894,23 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot // (by copying fillStyle to strokeStyle, since line is stroked, not filled) var origStrokeStyle = ctx.strokeStyle; ctx.strokeStyle = this.stroke || ctx.fillStyle; - ctx.stroke(); + this._renderStroke(ctx); ctx.strokeStyle = origStrokeStyle; }, + /** + * @private + * @param {CanvasRenderingContext2D} ctx Context to render on + */ + _renderDashedStroke: function(ctx) { + var x = this.width === 1 ? 0 : -this.width / 2, + y = this.height === 1 ? 0 : -this.height / 2; + + ctx.beginPath(); + fabric.util.drawDashedLine(ctx, x, y, -x, -y, this.strokeDashArray); + ctx.closePath(); + }, + /** * Returns complexity of an instance * @return {Number} complexity @@ -12017,11 +12085,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.globalAlpha = this.group ? (ctx.globalAlpha * this.opacity) : this.opacity; ctx.arc(noTransform ? this.left : 0, noTransform ? this.top : 0, this.radius, 0, piBy2, false); ctx.closePath(); + this._renderFill(ctx); - this._removeShadow(ctx); - if (this.stroke) { - ctx.stroke(); - } + this._renderStroke(ctx); }, /** @@ -12166,10 +12232,22 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.closePath(); this._renderFill(ctx); + this._renderStroke(ctx); + }, - if (this.stroke) { - ctx.stroke(); - } + /** + * @private + * @param ctx {CanvasRenderingContext2D} Context to render on + */ + _renderDashedStroke: function(ctx) { + var widthBy2 = this.width / 2, + heightBy2 = this.height / 2; + + ctx.beginPath(); + fabric.util.drawDashedLine(ctx, -widthBy2, heightBy2, 0, -heightBy2, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, 0, -heightBy2, widthBy2, heightBy2, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, widthBy2, heightBy2, -widthBy2, heightBy2, this.strokeDashArray); + ctx.closePath(); }, /** @@ -12344,11 +12422,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } ctx.transform(1, 0, 0, this.ry/this.rx, 0, 0); ctx.arc(noTransform ? this.left : 0, noTransform ? this.top : 0, this.rx, 0, piBy2, false); - if (this.stroke) { - ctx.stroke(); - } - this._removeShadow(ctx); + this._renderFill(ctx); + this._renderStroke(ctx); ctx.restore(); }, @@ -12530,74 +12606,25 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.closePath(); this._renderFill(ctx); - this._removeShadow(ctx); - - if (this.strokeDashArray) { - this._renderDashedStroke(ctx); - } - else if (this.stroke) { - ctx.stroke(); - } + this._renderStroke(ctx); }, /** * @private + * @param ctx {CanvasRenderingContext2D} context to render on */ _renderDashedStroke: function(ctx) { + var x = -this.width/2, + y = -this.height/2, + w = this.width, + h = this.height; - if (1 & this.strokeDashArray.length /* if odd number of items */) { - /* duplicate items */ - this.strokeDashArray.push.apply(this.strokeDashArray, this.strokeDashArray); - } - - var i = 0, - x = -this.width/2, y = -this.height/2, - _this = this, - padding = this.padding, - dashedArrayLength = this.strokeDashArray.length; - - ctx.save(); ctx.beginPath(); - - /** @ignore */ - function renderSide(xMultiplier, yMultiplier) { - - var lineLength = 0, - lengthDiff = 0, - sideLength = (yMultiplier ? _this.height : _this.width) + padding * 2; - - while (lineLength < sideLength) { - - var lengthOfSubPath = _this.strokeDashArray[i++]; - lineLength += lengthOfSubPath; - - if (lineLength > sideLength) { - lengthDiff = lineLength - sideLength; - } - - // track coords - if (xMultiplier) { - x += (lengthOfSubPath * xMultiplier) - (lengthDiff * xMultiplier || 0); - } - else { - y += (lengthOfSubPath * yMultiplier) - (lengthDiff * yMultiplier || 0); - } - - ctx[1 & i /* odd */ ? 'moveTo' : 'lineTo'](x, y); - if (i >= dashedArrayLength) { - i = 0; - } - } - } - - renderSide(1, 0); - renderSide(0, 1); - renderSide(-1, 0); - renderSide(0, -1); - - ctx.stroke(); + fabric.util.drawDashedLine(ctx, x, y, x+w, y, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x+w, y, x+w, y+h, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x+w, y+h, x, y+h, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x, y+h, x, y, this.strokeDashArray); ctx.closePath(); - ctx.restore(); }, /** @@ -12741,7 +12768,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * Constructor * @param {Array} points array of points * @param {Object} [options] Options object - * @param {Boolean} Whether points offsetting should be skipped + * @param {Boolean} skipOffset Whether points offsetting should be skipped * @return {fabric.Polyline} thisArg */ initialize: function(points, options, skipOffset) { @@ -12753,6 +12780,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot /** * @private + * @param {Boolean} skipOffset Whether points offsetting should be skipped */ _calcDimensions: function(skipOffset) { return fabric.Polygon.prototype._calcDimensions.call(this, skipOffset); @@ -12809,10 +12837,23 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot point = this.points[i]; ctx.lineTo(point.x, point.y); } + this._renderFill(ctx); - this._removeShadow(ctx); - if (this.stroke) { - ctx.stroke(); + this._renderStroke(ctx); + }, + + /** + * @private + * @param {CanvasRenderingContext2D} ctx Context to render on + */ + _renderDashedStroke: function(ctx) { + var p1, p2; + + ctx.beginPath(); + for (var i = 0, len = this.points.length; i < len; i++) { + p1 = this.points[i]; + p2 = this.points[i+1] || p1; + fabric.util.drawDashedLine(ctx, p1.x, p1.y, p2.x, p2.y, this.strokeDashArray); } }, @@ -12995,13 +13036,28 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.lineTo(point.x, point.y); } this._renderFill(ctx); - this._removeShadow(ctx); - if (this.stroke) { + if (this.stroke || this.strokeDashArray) { ctx.closePath(); - ctx.stroke(); + this._renderStroke(ctx); } }, + /** + * @private + * @param ctx {CanvasRenderingContext2D} context to render on + */ + _renderDashedStroke: function(ctx) { + var p1, p2; + + ctx.beginPath(); + for (var i = 0, len = this.points.length; i < len; i++) { + p1 = this.points[i]; + p2 = this.points[i+1] || this.points[0]; + fabric.util.drawDashedLine(ctx, p1.x, p1.y, p2.x, p2.y, this.strokeDashArray); + } + ctx.closePath(); + }, + /** * Returns complexity of an instance * @return {Number} complexity of this instance @@ -13618,17 +13674,14 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this._render(ctx); this._renderFill(ctx); - this.clipTo && ctx.restore(); - if (this.shadow && !this.shadow.affectStroke) { - this._removeShadow(ctx); - } - if (this.stroke) { ctx.strokeStyle = this.stroke; ctx.lineWidth = this.strokeWidth; ctx.lineCap = ctx.lineJoin = 'round'; - ctx.stroke(); + this._renderStroke(ctx); } + this.clipTo && ctx.restore(); + this._removeShadow(ctx); if (!noTransform && this.active) { @@ -14680,12 +14733,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot this._setShadow(ctx); this.clipTo && fabric.util.clipContext(this, ctx); this._render(ctx); - this.clipTo && ctx.restore(); - this._removeShadow(ctx); - - if (this.stroke) { - this._stroke(ctx); + if (this.shadow && !this.shadow.affectStroke) { + this._removeShadow(ctx); } + this._renderStroke(ctx); + this.clipTo && ctx.restore(); if (this.active && !noTransform) { this.drawBorders(ctx); @@ -14694,18 +14746,40 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot ctx.restore(); }, + /** + * @private + * @param {CanvasRenderingContext2D} ctx Context to render on + */ _stroke: function(ctx) { ctx.save(); ctx.lineWidth = this.strokeWidth; ctx.strokeStyle = this.stroke; - ctx.strokeRect( - -this.width / 2, - -this.height / 2, - this.width, - this.height); + ctx.beginPath(); + ctx.strokeRect(-this.width / 2, -this.height / 2, this.width, this.height); + ctx.beginPath(); ctx.restore(); }, + /** + * @private + * @param {CanvasRenderingContext2D} ctx Context to render on + */ + _renderDashedStroke: function(ctx) { + var x = -this.width/2, + y = -this.height/2, + w = this.width, + h = this.height; + + ctx.lineWidth = this.strokeWidth; + ctx.strokeStyle = this.stroke; + ctx.beginPath(); + fabric.util.drawDashedLine(ctx, x, y, x+w, y, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x+w, y, x+w, y+h, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x+w, y+h, x, y+h, this.strokeDashArray); + fabric.util.drawDashedLine(ctx, x, y+h, x, y, this.strokeDashArray); + ctx.closePath(); + }, + /** * Returns object representation of an instance * @param {Array} propertiesToInclude @@ -14723,16 +14797,37 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {String} svg representation of an instance */ toSVG: function() { - return ''+ - ' element with actual transformation, then offsetting object to the top/left - // so that object's center aligns with container's left/top - 'transform="translate('+ (-this.width/2) + ' ' + (-this.height/2) + ')" ' + - 'width="' + this.width + '" ' + - 'height="' + this.height + '"' + '>' + - ''; + var markup = []; + + markup.push( + '', + '' + ); + + if (this.stroke || this.strokeDashArray) { + var origFill = this.fill; + this.fill = null; + markup.push( + '' + ); + this.fill = origFill; + } + + markup.push(''); + + return markup.join(''); }, /** @@ -16803,7 +16898,7 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { var req = reqHandler.request({ hostname: oURL.hostname, port: oURL.port, - path: oURL.pathname, + path: oURL.path, method: 'GET' }, function(response){ var body = ""; diff --git a/dist/all.min.js b/dist/all.min.js index 4be06932..842f9701 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,6 +1,6 @@ -/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.1.10"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){e||(e={});var t=+(new Date),n=e.duration||500,r=t+n,i,s=e.onChange||function(){},o=e.abort||function(){return!1},u=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},a="startValue"in e?e.startValue:0,f="endValue"in e?e.endValue:100,l=e.byValue||f-a;e.onStart&&e.onStart(),function c(){i=+(new Date);var f=i>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=fabric.util.createImage();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;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function w(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function E(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function S(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}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,fabric.util.createImage=b,fabric.util.createAccessors=w,fabric.util.clipContext=E,fabric.util.multiplyTransformMatrices=S}(),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!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r"),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){e||(e={});var t=+(new Date),n=e.duration||500,r=t+n,i,s=e.onChange||function(){},o=e.abort||function(){return!1},u=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},a="startValue"in e?e.startValue:0,f="endValue"in e?e.endValue:100,l=e.byValue||f-a;e.onStart&&e.onStart(),function c(){i=+(new Date);var f=i>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=fabric.util.createImage();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;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function w(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function E(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function S(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}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,fabric.util.createImage=b,fabric.util.createAccessors=w,fabric.util.clipContext=E,fabric.util.multiplyTransformMatrices=S}(),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!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=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){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=y(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function y(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 b(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 w(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function E(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.multiplyTransformMatrices,o={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 n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(n,r){var i=n.getElementsByTagName("stop"),s=n.nodeName==="linearGradient"?"linear":"radial",o=n.getAttribute("gradientUnits")||"objectBoundingBox",u=[],a={};s==="linear"?a={x1:n.getAttribute("x1")||0,y1:n.getAttribute("y1")||0,x2:n.getAttribute("x2")||"100%",y2:n.getAttribute("y2")||0}:s==="radial"&&(a={x1:n.getAttribute("fx")||n.getAttribute("cx")||"50%",y1:n.getAttribute("fy")||n.getAttribute("cy")||"50%",r1:0,x2:n.getAttribute("cx")||"50%",y2:n.getAttribute("cy")||"50%",r2:n.getAttribute("r")||"50%"});for(var f=i.length;f--;)u.push(e(i[f]));return t(r,a),new fabric.Gradient({type:s,coords:a,gradientUnits:o,colorStops:u})},forObject:function(e,n){return n||(n={}),t(e,n),new fabric.Gradient(n)}}),fabric.getGradientDefs=r}(),fabric.Pattern=fabric.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,initialize:function(e){e||(e={}),e.source&&(this.source=typeof e.source=="string"?new Function(e.source):e.source),e.repeat&&(this.repeat=e.repeat),e.offsetX&&(this.offsetX=e.offsetX),e.offsetY&&(this.offsetY=e.offsetY)},toObject:function(){var e;return typeof this.source=="function"?e=String(this.source).match(/function\s+\w*\s*\(.*\)\s+\{([\s\S]*)\}/)[1]:typeof this.source.src=="string"&&(e=this.source.src),{source:e,repeat:this.repeat,offsetX:this.offsetX,offsetY:this.offsetY}},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;return e.createPattern(t,this.repeat)}}),fabric.Shadow=fabric.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,initialize:function(e){for(var t in e)this[t]=e[t]},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(){}}),function(e){"use strict";function n(e,t){arguments.length>0&&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;e in n.colorNameMap&&(e=n.colorNameMap[e]),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()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e){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&&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,f=u.data.length;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.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.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,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e);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),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(){var e=t.util.createCanvasElement();e.width=this.getBoundingRectWidth(),e.height=this.getBoundingRectHeight(),t.util.wrapElement(e,"div");var n=new t.Canvas(e);n.backgroundColor="transparent",n.renderAll();var r={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:e.width/2,top:e.height/2}),n.add(this);var i=n.toDataURL();return this.set(r).setCoords(),n.dispose(),n=null,i},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;re.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:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,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 this;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},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=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();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):e.translate(this.left,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 n=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,e.stroke(),e.strokeStyle=n},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(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.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(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._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._renderFill(e),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this._removeShadow(e),this._renderFill(e),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,strokeDashArray:null,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,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),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._renderFill(e),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"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},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(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")}}),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,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;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=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){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;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;ie.x&&i-ne.y},toSVG:function(){var e=[];for(var t=this._objects.length;t--;)e.push(this._objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in o){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=this._originalImage,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.width=t.width,r.height=t.height;if(fabric.isLikelyNode){var s=n.toDataURL("image/png").substring(22);r.src=new Buffer(s,"base64"),i._element=r,e&&e()}else r.src=n.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){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},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){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.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){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_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,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.originX==="left"?e.translate(this.left,this.top):this.transform(e),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),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[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?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){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,stroke:this.stroke,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&&typeof e=="string"?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},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in s&&(this._initDimensions(),this.setCoords())}}),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},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.pathname,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):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.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +this.getActiveGroup();if(t)e.save(),fabric.Group.prototype.transform.call(t,e),t.drawBorders(e).drawControls(e),e.restore();else for(var n=0,r=this._objects.length;n',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e){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&&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,f=u.data.length;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.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.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,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e);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),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke&&!this.strokeDashArray)return;this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e)},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(){var e=t.util.createCanvasElement();e.width=this.getBoundingRectWidth(),e.height=this.getBoundingRectHeight(),t.util.wrapElement(e,"div");var n=new t.Canvas(e);n.backgroundColor="transparent",n.renderAll();var r={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:e.width/2,top:e.height/2}),n.add(this);var i=n.toDataURL();return this.set(r).setCoords(),n.dispose(),n=null,i},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;re.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:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,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 this;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},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=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},i=t.StaticCanvas.supports("setLineDash");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();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):e.translate(this.left,this.top);if(!this.strokeDashArray||this.strokeDashArray&&i)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 n=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this._renderStroke(e),e.strokeStyle=n},_renderDashedStroke:function(e){var n=this.width===1?0:-this.width/2,r=this.height===1?0:-this.height/2;e.beginPath(),t.util.drawDashedLine(e,n,r,-n,-r,this.strokeDashArray),e.closePath()},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(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.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(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES="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._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},complexity:function(){return 1},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="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,strokeDashArray:null,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,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),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._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},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(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")}}),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,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;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=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){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;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;ie.x&&i-ne.y},toSVG:function(){var e=[];for(var t=this._objects.length;t--;)e.push(this._objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke||this.strokeDashArray){var t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=this._originalImage,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.width=t.width,r.height=t.height;if(fabric.isLikelyNode){var s=n.toDataURL("image/png").substring(22);r.src=new Buffer(s,"base64"),i._element=r,e&&e()}else r.src=n.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){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},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){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.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){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_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,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent= +t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.originX==="left"?e.translate(this.left,this.top):this.transform(e),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),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[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?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){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,stroke:this.stroke,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&&typeof e=="string"?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},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in s&&(this._initDimensions(),this.setCoords())}}),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},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):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.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index 72ca1cf971fccd990d527ad3b3ceece579d77790..cbe82963315638bd02ac09e9c512ad9132e52a7e 100644 GIT binary patch delta 36522 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 diff --git a/package.json b/package.json index 09181b63..726a4de0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "1.1.10", + "version": "1.1.11", "author": "Juriy Zaytsev ", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "repository": "git://github.com/kangax/fabric.js", diff --git a/src/line.class.js b/src/line.class.js index 6ae6da44..1d4f6ea2 100644 --- a/src/line.class.js +++ b/src/line.class.js @@ -4,7 +4,8 @@ var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, - coordProps = { 'x1': 1, 'x2': 1, 'y1': 1, 'y2': 1 }; + coordProps = { 'x1': 1, 'x2': 1, 'y1': 1, 'y2': 1 }, + supportsLineDash = fabric.StaticCanvas.supports('setLineDash'); if (fabric.Line) { fabric.warn('fabric.Line is already defined'); @@ -89,7 +90,7 @@ ctx.translate(this.left, this.top); } - if (!this.strokeDashArray || this.strokeDashArray && fabric.StaticCanvas.supports('setLineDash')) { + if (!this.strokeDashArray || this.strokeDashArray && supportsLineDash) { // move from center (of virtual box) to its left/top corner ctx.moveTo(this.width === 1 ? 0 : (-this.width / 2), this.height === 1 ? 0 : (-this.height / 2)); ctx.lineTo(this.width === 1 ? 0 : (this.width / 2), this.height === 1 ? 0 : (this.height / 2)); diff --git a/src/object.class.js b/src/object.class.js index 3cc8ea8d..6928005f 100644 --- a/src/object.class.js +++ b/src/object.class.js @@ -6,7 +6,8 @@ extend = fabric.util.object.extend, toFixed = fabric.util.toFixed, capitalize = fabric.util.string.capitalize, - degreesToRadians = fabric.util.degreesToRadians; + degreesToRadians = fabric.util.degreesToRadians, + supportsLineDash = fabric.StaticCanvas.supports('setLineDash'); if (fabric.Object) { return; @@ -692,7 +693,7 @@ this.strokeDashArray.push.apply(this.strokeDashArray, this.strokeDashArray); } - if (fabric.StaticCanvas.supports('setLineDash')) { + if (supportsLineDash) { ctx.setLineDash(this.strokeDashArray); this._stroke && this._stroke(ctx); }