From 315a2c9bf3a1e854107e3691723ee0933d6fde83 Mon Sep 17 00:00:00 2001 From: kangax Date: Fri, 23 Nov 2012 13:39:50 +0100 Subject: [PATCH] Move callSuper out of `fabric.Object.prototype` and create it dynamically in `createClass`. --- dist/all.js | 182 +++++++++++++++++++++++++++++------------ dist/all.min.js | 10 +-- dist/all.min.js.gz | Bin 40260 -> 40251 bytes src/object.class.js | 19 ++--- src/util/lang_class.js | 13 ++- 5 files changed, 153 insertions(+), 71 deletions(-) diff --git a/dist/all.js b/dist/all.js index 0599b229..4e330a46 100644 --- a/dist/all.js +++ b/dist/all.js @@ -37,17 +37,19 @@ fabric.isLikelyNode = typeof Buffer !== 'undefined' && typeof window === 'undefi var Cufon = (function() { + /** @ignore */ var api = function() { return api.replace.apply(null, arguments); }; + /** @ignore */ var DOM = api.DOM = { ready: (function() { var complete = false, readyStatus = { loaded: 1, complete: 1 }; - var queue = [], perform = function() { + var queue = [], /** @ignore */ perform = function() { if (complete) return; complete = true; for (var fn; fn = queue.shift(); fn()); @@ -89,27 +91,33 @@ var Cufon = (function() { }; - var CSS = api.CSS = { + /** @ignore */ + var CSS = api.CSS = /** @ignore */ { + /** @ignore */ Size: function(value, base) { this.value = parseFloat(value); this.unit = String(value).match(/[a-z%]*$/)[0] || 'px'; + /** @ignore */ this.convert = function(value) { return value / base * this.value; }; + /** @ignore */ this.convertFrom = function(value) { return value / this.value * base; }; + /** @ignore */ this.toString = function() { return this.value + this.unit; }; }, + /** @ignore */ getStyle: function(el) { return new Style(el.style); /* @@ -161,6 +169,7 @@ var Cufon = (function() { })(), + /** @ignore */ supports: function(property, value) { var checker = fabric.document.createElement('span').style; if (checker[property] === undefined) return false; @@ -168,6 +177,7 @@ var Cufon = (function() { return checker[property] === value; }, + /** @ignore */ textAlign: function(word, style, position, wordCount) { if (style.get('textAlign') == 'right') { if (position > 0) word = ' ' + word; @@ -176,6 +186,7 @@ var Cufon = (function() { return word; }, + /** @ignore */ textDecoration: function(el, style) { if (!style) style = this.getStyle(el); var types = { @@ -225,6 +236,7 @@ var Cufon = (function() { return parsed; }), + /** @ignore */ textTransform: function(text, style) { return text[{ uppercase: 'toUpperCase', @@ -255,6 +267,7 @@ var Cufon = (function() { }; box.width = box.maxX - box.minX, box.height = box.maxY - box.minY; + /** @ignore */ box.toString = function() { return [ this.minX, this.minY, this.width, this.height ].join(' '); }; @@ -279,6 +292,7 @@ var Cufon = (function() { (styles[font.style] || (styles[font.style] = {}))[font.weight] = font; }; + /** @ignore */ this.get = function(style, weight) { var weights = styles[style] || styles[mapping[style]] || styles.normal || styles.italic || styles.oblique; @@ -364,6 +378,7 @@ var Cufon = (function() { return el.cufid || (el.cufid = ++at); } + /** @ignore */ this.get = function(el) { var id = identify(el); return map[id] || (map[id] = {}); @@ -461,6 +476,7 @@ var Cufon = (function() { return fragment; } + /** @ignore */ function replaceElement(el, options) { var font, style, nextNode, redraw; for (var node = attach(el, options).firstChild; node; node = nextNode) { @@ -529,11 +545,13 @@ var Cufon = (function() { characters: '' }; + /** @ignore */ api.now = function() { DOM.ready(); return api; }; + /** @ignore */ api.refresh = function() { var currentHistory = replaceHistory.splice(0, replaceHistory.length); for (var i = 0, l = currentHistory.length; i < l; ++i) { @@ -542,12 +560,14 @@ var Cufon = (function() { return api; }; + /** @ignore */ api.registerEngine = function(id, engine) { if (!engine) return api; engines[id] = engine; return api.set('engine', id); }; + /** @ignore */ api.registerFont = function(data) { var font = new Font(data), family = font.family; if (!fonts[family]) fonts[family] = new FontFamily(); @@ -555,6 +575,7 @@ var Cufon = (function() { return api.set('fontFamily', '"' + family + '"'); }; + /** @ignore */ api.replace = function(elements, options, ignoreHistory) { options = merge(defaultOptions, options); if (!options.engine) return api; // there's no browser support so we'll just stop here @@ -572,6 +593,7 @@ var Cufon = (function() { return api; }; + /** @ignore */ api.replaceElement = function(el, options) { options = merge(defaultOptions, options); if (typeof options.textShadow == 'string' && options.textShadow) @@ -579,14 +601,14 @@ var Cufon = (function() { return replaceElement(el, options); }; - // ==> api.engines = engines; api.fonts = fonts; + /** @ignore */ api.getOptions = function() { return merge(defaultOptions); - } - // <== + }; + /** @ignore */ api.set = function(option, value) { defaultOptions[option] = value; return api; @@ -1404,6 +1426,7 @@ if (!JSON) { if (typeof Date.prototype.toJSON !== 'function') { + /** @ignore */ Date.prototype.toJSON = function (key) { return isFinite(this.valueOf()) @@ -1418,6 +1441,7 @@ if (!JSON) { String.prototype.toJSON = Number.prototype.toJSON = + /** @ignore */ Boolean.prototype.toJSON = function (key) { return this.valueOf(); }; @@ -1587,6 +1611,7 @@ if (!JSON) { // If the JSON object does not yet have a stringify method, give it one. if (typeof JSON.stringify !== 'function') { + /** @ignore */ JSON.stringify = function (value, replacer, space) { // The stringify method takes a value and an optional replacer, and an optional @@ -1634,6 +1659,7 @@ if (!JSON) { // If the JSON object does not yet have a parse method, give it one. if (typeof JSON.parse !== 'function') { + /** @ignore */ JSON.parse = function (text, reviver) { // The parse method takes a text and an optional reviver function, and returns @@ -1718,7 +1744,7 @@ if (!JSON) { /** * Wrapper around `console.log` (when available) * @method log - * @param {Any} Values to log + * @param {Any} values Values to log */ fabric.log = function() { }; @@ -1731,12 +1757,12 @@ fabric.warn = function() { }; if (typeof console !== 'undefined') { if (typeof console.log !== 'undefined' && console.log.apply) { - fabric.log = function() { + fabric.log = function() { return console.log.apply(console, arguments); }; } if (typeof console.warn !== 'undefined' && console.warn.apply) { - fabric.warn = function() { + fabric.warn = function() { return console.warn.apply(console, arguments); }; } @@ -1815,13 +1841,14 @@ fabric.Observable = { /** * Alias for observe * @method observe - * @memberOf fabric.Observable + * @type function */ fabric.Observable.on = fabric.Observable.observe; /** * Alias for stopObserving * @method off + * @type function */ fabric.Observable.off = fabric.Observable.stopObserving; (function() { @@ -2373,23 +2400,24 @@ fabric.util.string = { * @param {Any[]} [...] Values to pass to a bound function * @return {Function} */ - Function.prototype.bind = function(thisArg) { - var fn = this, args = slice.call(arguments, 1), bound; - if (args.length) { - bound = function() { - return apply.call(fn, this instanceof Dummy ? this : thisArg, args.concat(slice.call(arguments))); - }; - } - else { - bound = function() { - return apply.call(fn, this instanceof Dummy ? this : thisArg, arguments); - }; - } - Dummy.prototype = this.prototype; - bound.prototype = new Dummy(); + Function.prototype.bind = function(thisArg) { + var fn = this, args = slice.call(arguments, 1), bound; + if (args.length) { + bound = function() { + return apply.call(fn, this instanceof Dummy ? this : thisArg, args.concat(slice.call(arguments))); + }; + } + else { + /** @ignore */ + bound = function() { + return apply.call(fn, this instanceof Dummy ? this : thisArg, arguments); + }; + } + Dummy.prototype = this.prototype; + bound.prototype = new Dummy(); - return bound; - }; + return bound; + }; } })(); @@ -2441,9 +2469,19 @@ fabric.util.string = { function Subclass() { } + function callSuper(methodName) { + var fn = this.constructor.superclass.prototype[methodName]; + return (arguments.length > 1) + ? fn.apply(this, slice.call(arguments, 1)) + : fn.call(this); + } + /** - * Helper for creation of "classes" + * Helper for creation of "classes". Note that pr * @method createClass + * @param parent optional "Class" to inherit from + * @param properties Properties shared by all instances of this class + * (be careful modifying objects defined here as this would affect all instances) * @memberOf fabric.util */ function createClass() { @@ -2472,6 +2510,7 @@ fabric.util.string = { klass.prototype.initialize = emptyFunction; } klass.prototype.constructor = klass; + klass.prototype.callSuper = callSuper; return klass; } @@ -2913,12 +2952,13 @@ fabric.util.string = { }; } else { + /** @ignore */ getElementPosition = function (element) { var value = element.style.position; if (!value && element.currentStyle) value = element.currentStyle.position; return value; }; - } + } (function () { var style = fabric.document.documentElement.style; @@ -3997,6 +4037,7 @@ fabric.util.string = { /** * Takes url corresponding to an SVG document, and parses it into a set of fabric objects * @method loadSVGFromURL + * @memberof fabric * @param {String} url * @param {Function} callback * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created. @@ -4059,6 +4100,7 @@ fabric.util.string = { /** * Takes string corresponding to an SVG document, and parses it into a set of fabric objects * @method loadSVGFromString + * @memberof fabric * @param {String} string * @param {Function} callback * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created. @@ -4155,11 +4197,15 @@ fabric.util.string = { } /** - * @class Object + * @class Gradient * @memberOf fabric */ fabric.Gradient = fabric.util.createClass(/** @scope fabric.Gradient.prototype */ { + /** + * @method initialize + * @param options optional Options with x1, y1, x2, y2 and colorStops + */ initialize: function(options) { options || (options = { }); @@ -4172,6 +4218,10 @@ fabric.util.string = { this.colorStops = options.colorStops; }, + /** + * Returns object representation of a gradient + * @method toObject + */ toObject: function() { return { x1: this.x1, @@ -4182,6 +4232,11 @@ fabric.util.string = { }; }, + /** + * Returns an instance of CanvasGradient + * @method toLiveGradient + * @param ctx + */ toLiveGradient: function(ctx) { var gradient = ctx.createLinearGradient( this.x1, this.y1, this.x2 || ctx.canvas.width, this.y2); @@ -4200,6 +4255,7 @@ fabric.util.string = { /** * @method fromElement * @static + * @memberof fabric.Gradient * @see http://www.w3.org/TR/SVG/pservers.html#LinearGradientElement */ fromElement: function(el, instance) { @@ -4254,6 +4310,7 @@ fabric.util.string = { /** * @method forObject * @static + * @memberof fabric.Gradient */ forObject: function(obj, options) { options || (options = { }); @@ -4678,7 +4735,7 @@ fabric.util.string = { * * @class Color * @memberOf fabric - * @param {String} color (optional) in hex or rgb(a) format + * @param {String} color optional in hex or rgb(a) format */ function Color(color) { if (!color) { @@ -7381,7 +7438,7 @@ fabric.util.string = { /** * @class fabric.Element * @alias fabric.Canvas - * @deprecated + * @deprecated Use {@link fabric.Canvas} instead. * @constructor */ fabric.Element = fabric.Canvas; @@ -7590,6 +7647,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { else { obj.path = path; var object = fabric.Text.fromObject(obj); + /** @ignore */ var onscriptload = function () { // TODO (kangax): find out why Opera refuses to work without this timeout if (Object.prototype.toString.call(fabric.window.opera) === '[object Opera]') { @@ -8009,17 +8067,6 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { 'borderScaleFactor transformMatrix selectable' ).split(' '), - /** - * @method callSuper - * @param {String} methodName - */ - callSuper: function(methodName) { - var fn = this.constructor.superclass.prototype[methodName]; - return (arguments.length > 1) - ? fn.apply(this, slice.call(arguments, 1)) - : fn.call(this); - }, - /** * Constructor * @method initialize @@ -8032,7 +8079,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { }, /** - * @method initGradient + * @private + * @method _initGradient */ _initGradient: function(options) { if (options.fill && typeof options.fill === 'object' && !(options.fill instanceof fabric.Gradient)) { @@ -8564,6 +8612,10 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { return this; }, + /** + * @private + * @method _renderDashedStroke + */ _renderDashedStroke: function(ctx) { if (1 & this.strokeDashArray.length /* if odd number of items */) { @@ -8580,6 +8632,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { ctx.save(); ctx.beginPath(); + /** @ignore */ function renderSide(xMultiplier, yMultiplier) { var lineLength = 0, @@ -9638,7 +9691,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { }); /** - * List of attribute names to account for when parsing SVG element (used by `fabric.Line.fromElement`) + * List of attribute names to account for when parsing SVG element (used by {@link fabric.Line.fromElement}) * @static * @see http://www.w3.org/TR/SVG/shapes.html#LineElement */ @@ -10109,7 +10162,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { }; /** - * Returns fabric.Ellipse instance from an object representation + * Returns {@link fabric.Ellipse} instance from an object representation * @static * @method fabric.Ellipse.fromObject * @param {Object} object Object to create an instance from @@ -10457,7 +10510,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { }); /** - * List of attribute names to account for when parsing SVG element (used by `fabric.Polyline.fromElement`) + * List of attribute names to account for when parsing SVG element (used by {@link fabric.Polyline.fromElement}) * @static * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement */ @@ -12685,6 +12738,7 @@ fabric.Image.filters.Grayscale = fabric.util.createClass( /** @scope fabric.Imag type: "Grayscale", /** + * Applies filter to canvas element * @method applyTo * @memberOf fabric.Image.filters.Grayscale.prototype * @param {Object} canvasEl Canvas element to apply filter to @@ -12713,6 +12767,7 @@ fabric.Image.filters.Grayscale = fabric.util.createClass( /** @scope fabric.Imag }, /** + * Returns json representation of filter * @method toJSON * @return {String} json representation of filter */ @@ -12747,6 +12802,7 @@ fabric.Image.filters.RemoveWhite = fabric.util.createClass( /** @scope fabric.Im }, /** + * Applies filter to canvas element * @method applyTo * @param {Object} canvasEl Canvas element to apply filter to */ @@ -12781,6 +12837,7 @@ fabric.Image.filters.RemoveWhite = fabric.util.createClass( /** @scope fabric.Im }, /** + * Returns json representation of filter * @method toJSON * @return {String} json representation of filter */ @@ -12809,6 +12866,7 @@ fabric.Image.filters.Invert = fabric.util.createClass( /** @scope fabric.Image.f type: "Invert", /** + * Applies filter to canvas element * @method applyTo * @memberOf fabric.Image.filters.Invert.prototype * @param {Object} canvasEl Canvas element to apply filter to @@ -12829,6 +12887,7 @@ fabric.Image.filters.Invert = fabric.util.createClass( /** @scope fabric.Image.f }, /** + * Returns json representation of filter * @method toJSON * @return {String} json representation of filter */ @@ -12853,6 +12912,7 @@ fabric.Image.filters.Sepia = fabric.util.createClass( /** @scope fabric.Image.fi type: "Sepia", /** + * Applies filter to canvas element * @method applyTo * @memberOf fabric.Image.filters.Sepia.prototype * @param {Object} canvasEl Canvas element to apply filter to @@ -12874,6 +12934,7 @@ fabric.Image.filters.Sepia = fabric.util.createClass( /** @scope fabric.Image.fi }, /** + * Returns json representation of filter * @method toJSON * @return {String} json representation of filter */ @@ -12898,6 +12959,7 @@ fabric.Image.filters.Sepia2 = fabric.util.createClass( /** @scope fabric.Image.f type: "Sepia2", /** + * Applies filter to canvas element * @method applyTo * @memberOf fabric.Image.filters.Sepia.prototype * @param {Object} canvasEl Canvas element to apply filter to @@ -12923,6 +12985,7 @@ fabric.Image.filters.Sepia2 = fabric.util.createClass( /** @scope fabric.Image.f }, /** + * Returns json representation of filter * @method toJSON * @return {String} json representation of filter */ @@ -12956,6 +13019,7 @@ fabric.Image.filters.Brightness = fabric.util.createClass( /** @scope fabric.Ima }, /** + * Applies filter to canvas element * @method applyTo * @param {Object} canvasEl Canvas element to apply filter to */ @@ -12975,6 +13039,7 @@ fabric.Image.filters.Brightness = fabric.util.createClass( /** @scope fabric.Ima }, /** + * Returns json representation of filter * @method toJSON * @return {String} json representation of filter */ @@ -12991,7 +13056,7 @@ fabric.Image.filters.Brightness.fromObject = function(object) { }; /** - * @class fabric.Image.filters.Brightness + * @class fabric.Image.filters.Noise * @memberOf fabric.Image.filters */ fabric.Image.filters.Noise = fabric.util.createClass( /** @scope fabric.Image.filters.Noise.prototype */ { @@ -13002,7 +13067,7 @@ fabric.Image.filters.Noise = fabric.util.createClass( /** @scope fabric.Image.fi type: "Noise", /** - * @memberOf fabric.Image.filters.Brightness.prototype + * @memberOf fabric.Image.filters.Noise.prototype * @param {Object} [options] Options object */ initialize: function(options) { @@ -13011,6 +13076,7 @@ fabric.Image.filters.Noise = fabric.util.createClass( /** @scope fabric.Image.fi }, /** + * Applies filter to canvas element * @method applyTo * @param {Object} canvasEl Canvas element to apply filter to */ @@ -13033,6 +13099,7 @@ fabric.Image.filters.Noise = fabric.util.createClass( /** @scope fabric.Image.fi }, /** + * Returns json representation of filter * @method toJSON * @return {String} json representation of filter */ @@ -13049,7 +13116,7 @@ fabric.Image.filters.Noise.fromObject = function(object) { }; /** - * @class fabric.Image.filters.Brightness + * @class fabric.Image.filters.GradientTransparency * @memberOf fabric.Image.filters */ fabric.Image.filters.GradientTransparency = fabric.util.createClass( /** @scope fabric.Image.filters.GradientTransparency.prototype */ { @@ -13060,7 +13127,6 @@ fabric.Image.filters.GradientTransparency = fabric.util.createClass( /** @scope type: "GradientTransparency", /** - * @memberOf fabric.Image.filters.GradientTransparency.prototype * @param {Object} [options] Options object */ initialize: function(options) { @@ -13069,6 +13135,7 @@ fabric.Image.filters.GradientTransparency = fabric.util.createClass( /** @scope }, /** + * Applies filter to canvas element * @method applyTo * @param {Object} canvasEl Canvas element to apply filter to */ @@ -13087,6 +13154,7 @@ fabric.Image.filters.GradientTransparency = fabric.util.createClass( /** @scope }, /** + * Returns json representation of filter * @method toJSON * @return {String} json representation of filter */ @@ -13123,6 +13191,7 @@ fabric.Image.filters.Tint = fabric.util.createClass( /** @scope fabric.Image.fil }, /** + * Applies filter to canvas element * @method applyTo * @param {Object} canvasEl Canvas element to apply filter to */ @@ -13154,6 +13223,7 @@ fabric.Image.filters.Tint = fabric.util.createClass( /** @scope fabric.Image.fil }, /** + * Returns json representation of filter * @method toJSON * @return {String} json representation of filter */ @@ -13170,11 +13240,11 @@ fabric.Image.filters.Tint.fromObject = function(object) { }; /** + * Adapted from html5rocks article * @class fabric.Image.filters.Convolute * @memberOf fabric.Image.filters - * Adapted from http://www.html5rocks.com/en/tutorials/canvas/imagefilters/ */ -fabric.Image.filters.Convolute = fabric.util.createClass({ +fabric.Image.filters.Convolute = fabric.util.createClass(/** @scope fabric.Image.filters.Convolute.prototype */ { /** * @param {String} type @@ -13205,6 +13275,7 @@ fabric.Image.filters.Convolute = fabric.util.createClass({ }, /** + * Applies filter to canvas element * @method applyTo * @param {Object} canvasEl Canvas element to apply filter to */ @@ -13262,6 +13333,7 @@ fabric.Image.filters.Convolute = fabric.util.createClass({ }, /** + * Returns json representation of filter * @method toJSON * @return {String} json representation of filter */ @@ -13281,7 +13353,7 @@ fabric.Image.filters.Convolute.fromObject = function(object) { * @class fabric.Image.filters.Pixelate * @memberOf fabric.Image.filters */ -fabric.Image.filters.Pixelate = fabric.util.createClass({ +fabric.Image.filters.Pixelate = fabric.util.createClass(/** @scope fabric.Image.filters.Pixelate.prototype */ { /** * @param {String} type @@ -13298,6 +13370,7 @@ fabric.Image.filters.Pixelate = fabric.util.createClass({ }, /** + * Applies filter to canvas element * @method applyTo * @param {Object} canvasEl Canvas element to apply filter to */ @@ -13346,6 +13419,7 @@ fabric.Image.filters.Pixelate = fabric.util.createClass({ }, /** + * Returns json representation of filter * @method toJSON * @return {String} json representation of filter */ @@ -13806,6 +13880,7 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { var halfOfVerticalBox = this._getTextHeight(ctx, textLines) / 2; var _this = this; + /** @ignore */ function renderLinesAtOffset(offset) { for (var i = 0, len = textLines.length; i < len; i++) { @@ -14107,7 +14182,7 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { }); /** - * List of attribute names to account for when parsing SVG element (used by `fabric.Text.fromElement`) + * List of attribute names to account for when parsing SVG element (used by {@link fabric.Text.fromElement}) * @static */ fabric.Text.ATTRIBUTE_NAMES = @@ -14220,6 +14295,7 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { }); }; + /** @ignore */ fabric.loadSVGFromString = function(string, callback) { var doc = new DOMParser().parseFromString(string); fabric.parseSVGDocument(doc.documentElement, function(results, options) { diff --git a/dist/all.min.js b/dist/all.min.js index 3091c3c1..7b31c2ed 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,5 +1,5 @@ -/* build: `node build.js modules=ALL` *//*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"0.9.22"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_r?n:i-t;s(u(l,a,c,n));if(i>r||o()){e.onComplete&&e.onComplete();return}f(h)}()}function l(e,t,n){if(e){var r=new Image;r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function c(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){i[t]=e,r()}):(i[t]=s.fromObject(e),r())})}function h(e,t,n){var r=e.length>1?new fabric.PathGroup(e,t):e[0];return typeof n!="undefined"&&r.setSourcePath(n),r}fabric.util={};var n=Math.PI/180,a=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},f=function(){return a.apply(fabric.window,arguments)};fabric.util.removeFromArray=e,fabric.util.degreesToRadians=r,fabric.util.radiansToDegrees=i,fabric.util.toFixed=s,fabric.util.getRandomInt=t,fabric.util.falseFunction=o,fabric.util.animate=u,fabric.util.requestAnimFrame=f,fabric.util.loadImage=l,fabric.util.enlivenObjects=c,fabric.util.groupSVGElements=h}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==1/0&&r!==-1/0&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(){function o(){this.initialize.apply(this,arguments)}var n=null,s=e.call(arguments,0);typeof s[0]=="function"&&(n=s.shift()),o.superclass=n,o.subclasses=[],n&&(i.prototype=n.prototype,o.prototype=new i,n.subclasses.push(o));for(var u=0,a=s.length;u-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).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric -.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function g(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function y(e){var t="";for(var n=0,r=e.length;n",'",""].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,p=f.length;c0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t=n.sourceFromHex(e);t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];this.backgroundImage&&e.push(''),this.overlayImage&&e.push('');for(var t=0,n=this.getObjects(),r=n.length;t"),e.join("")},isEmpty:function(){return this._objects.length===0},remove:function(e){return n(this._objects,e),this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-t),e.ey-(n>0?0:-n),r,i),this.contextTop.lineWidth=this.selectionLineWidth,this.contextTop.strokeStyle=this.selectionBorderColor,this.contextTop.strokeRect(e.ex+v-(t>0?0:r),e.ey+v-(n>0?0:i),r,i)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,o,u=new fabric.Point(p(n,i),p(r,s)),a=new fabric.Point(d(n,i),d(r,s));for(var f=0,l=this._objects.length;f1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u1?t.apply(this,u.call(arguments,1)):t.call(this)},initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&typeof e.fill=="object"&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},setOptions:function(e){var t=this.stateProperties.length,n;while(t--)n=this.stateProperties[t],n in e&&this.set(n,e[n]);this._initGradient(e)},transform:function(e){e.globalAlpha=this.opacity,e.translate(this.left,this.top),e.rotate(o(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(){var e=t.Object.NUM_FRACTION_DIGITS,n={type:this.type,left:r(this.left,e),top:r(this.top,e),width:r(this.width,e),height:r(this.height,e),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,overlayFill:this.overlayFill,stroke:this.stroke,strokeWidth:this.strokeWidth,strokeDashArray:this.strokeDashArray,scaleX:r(this.scaleX,e),scaleY:r(this.scaleY,e),angle:r(this.getAngle(),e),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,e),selectable:this.selectable,hasControls:this.hasControls,hasBorders:this.hasBorders,hasRotatingPoint:this.hasRotatingPoint,transparentCorners:this.transparentCorners,perPixelTargetFind:this.perPixelTargetFind};return this.includeDefaultValues||(n=this._removeDefaultValues(n)),n},toDatalessObject:function(){return this.toObject()},getSvgStyles:function(){return["stroke: ",this.stroke?this.stroke:"none","; ","stroke-width: ",this.strokeWidth?this.strokeWidth:"0","; ","stroke-dasharray: ",this.strokeDashArray?this.strokeDashArray.join(" "):"; ","fill: ",this.fill?this.fill:"none","; ","opacity: ",this.opacity?this.opacity:"1",";"].join("")},getSvgTransform:function(){var e=this.getAngle(),n=t.Object.NUM_FRACTION_DIGITS,i="translate("+r(this.left,n)+" "+r(this.top,n)+")",s=e!==0?" rotate("+r(e,n)+")":"",o=this.scaleX===1&&this.scaleY===1?"":" scale("+r(this.scaleX,n)+" "+r(this.scaleY,n)+")",u=this.flipX?"matrix(-1 0 0 1 0 0) ":"",a=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[i,s,o,u,a].join("")},_removeDefaultValues:function(e){var n=t.Object.prototype.options;return n&&this.stateProperties.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},isActive:function(){return!!this.active},setActive:function(e){return this.active=!!e,this},toString:function(){return"#"},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,n){var r=(e==="scaleX"||e==="scaleY")&&n1?this.strokeWidth:0,t=this.padding,n=o(this.angle);this.currentWidth=(this.width+e)*this.scaleX+t*2,this.currentHeight=(this.height+e)*this.scaleY+t*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var r=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),i=Math.atan(this.currentHeight/this.currentWidth),s=Math.cos(i+n)*r,u=Math.sin(i+n)*r,a=Math.sin(n),f=Math.cos(n),l={x:this.left-s,y:this.top-u},c={x:l.x+this.currentWidth*f,y:l.y+this.currentWidth*a},h={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},p={x:l.x-this.currentHeight*a,y:l.y+this.currentHeight*f},d={x:l.x-this.currentHeight/2*a,y:l.y+this.currentHeight/2*f},v={x:l.x+this.currentWidth/2*f,y:l.y+this.currentWidth/2*a},m={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},g={x:p.x+this.currentWidth/2*f,y:p.y+this.currentWidth/2*a},y={x:l.x+this.currentWidth/2*f,y:l.y+this.currentWidth/2*a};return this.oCoords={tl:l,tr:c,br:h,bl:p,ml:d,mt:v,mr:m,mb:g,mtr:y},this._setCornerCoords(),this},getBoundingRectWidth:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},getBoundingRectHeight:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},drawBorders:function(e){if(!this.hasBorders)return;var n=t.Object.MIN_SCALE_LIMIT,r=this.padding,i=r*2,s=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var o=1/(this.scaleXc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},drawCorners:function(e){if(!this.hasControls)return;var t=this.cornersize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect";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,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,e.clearRect(o,u,a,f),e[y](o,u,a,f),this.lockUniScaling||(o=i+g/2-p,u=s-h-r-c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,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,e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this},clone:function(e){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(),e):new t.Object(this.toObject())},cloneAsImage:function(e){if(t.Image){var n=new Image;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",!1).set("flipY",!1),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL("png");r.dispose(),r=t=null,e&&e(i)}var n=t.document.createElement("canvas");!n.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(n),n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},intersectsWithRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y),u=new t.Point(r.br.x,r.br.y),a=t.Intersection.intersectPolygonRectangle([i,s,u,o],e,n);return a.status==="Intersection"},intersectsWithObject:function(e){function n(e){return{tl:new t.Point(e.tl.x,e.tl.y),tr:new t.Point(e.tr.x,e.tr.y),bl:new t.Point(e.bl.x,e.bl.y),br:new t.Point(e.br.x,e.br.y)}}var r=n(this.oCoords),i=n(e.oCoords),s=t.Intersection.intersectPolygonPolygon([r.tl,r.tr,r.br,r.bl],[i.tl,i.tr,i.br,i.bl]);return s.status==="Intersection"},isContainedWithinObject:function(e){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y);return i.x>e.x&&s.xe.y&&o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,t=o(this.angle),n=o(45-this.angle),r=Math.sqrt(2*Math.pow(this.cornersize,2))/2,i=r*Math.cos(n),s=r*Math.sin(n),u=Math.sin(t),a=Math.cos(t);e.tl.corner={tl:{x:e.tl.x-s,y:e.tl.y-i},tr:{x:e.tl.x+i,y:e.tl.y-s},bl:{x:e.tl.x-i,y:e.tl.y+s},br:{x:e.tl.x+s,y:e.tl.y+i}},e.tr.corner={tl:{x:e.tr.x-s,y:e.tr.y-i},tr:{x:e.tr.x+i,y:e.tr.y-s},br:{x:e.tr.x+s,y:e.tr.y+i},bl:{x:e.tr.x-i,y:e.tr.y+s}},e.bl.corner={tl:{x:e.bl.x-s,y:e.bl.y-i},bl:{x:e.bl.x-i,y:e.bl.y+s},br:{x:e.bl.x+s,y:e.bl.y+i},tr:{x:e.bl.x+i,y:e.bl.y-s}},e.br.corner={tr:{x:e.br.x+i,y:e.br.y-s},bl:{x:e.br.x-i,y:e.br.y+s},br:{x:e.br.x+s,y:e.br.y+i},tl:{x:e.br.x-s,y:e.br.y-i}},e.ml.corner={tl:{x:e.ml.x-s,y:e.ml.y-i},tr:{x:e.ml.x+i,y:e.ml.y-s},bl:{x:e.ml.x-i,y:e.ml.y+s},br:{x:e.ml.x+s,y:e.ml.y+i}},e.mt.corner={tl:{x:e.mt.x-s,y:e.mt.y-i},tr:{x:e.mt.x+i,y:e.mt.y-s},bl:{x:e.mt.x-i,y:e.mt.y+s},br:{x:e.mt.x+s,y:e.mt.y+i}},e.mr.corner={tl:{x:e.mr.x-s,y:e.mr.y-i},tr:{x:e.mr.x+i,y:e.mr.y-s},bl:{x:e.mr.x-i,y:e.mr.y+s},br:{x:e.mr.x+s,y:e.mr.y+i}},e.mb.corner={tl:{x:e.mb.x-s,y:e.mb.y-i},tr:{x:e.mb.x+i,y:e.mb.y-s},bl:{x:e.mb.x-i,y:e.mb.y+s},br:{x:e.mb.x+s,y:e.mb.y+i}},e.mtr.corner={tl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y-i-a*this.rotatingPointOffset},tr:{x:e.mtr.x+i+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},bl:{x:e.mtr.x-i+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset},br:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y+i-a*this.rotatingPointOffset}}},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(){return this.toObject()},setGradientFill:function(e){this.set("fill",t.Gradient.forObject(this,e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e,arguments[0][e],arguments[1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this;r||(r={}),"from"in r||(r.from=this.get(e)),/[+\-]/.test((n+"").charAt(0))&&(n=this.get(e)+parseFloat(n)),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}});var a=t.Object.prototype;for(var f=a.stateProperties.length;f--;){var l=a.stateProperties[f],c=l.charAt(0).toUpperCase()+l.slice(1),h="set"+c,p="get"+c;a[p]||(a[p]=function(e){return new Function('return this.get("'+e+'")')}(l)),a[h]||(a[h]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(l))}t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),n(t.Object,{NUM_FRACTION_DIGITS:2,MIN_SCALE_LIMIT:.1})}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo -(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(){return n(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(){return r(this.callSuper("toObject"),{radius:this.get("radius")})},toSVG:function(){return'"},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");return"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0),new t.Circle(r(s,n))},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(){return r(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={});if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy()},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(){return t.util.object.extend(this.callSuper("toObject"),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,r){if(!e)return null;var i=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);i=n(i);var s=new t.Rect(t.util.object.extend(r?t.util.object.clone(r):{},i));return s._normalizeLeftTopProperties(i),s},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions()},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return t.Polygon.prototype.toObject.call(this)},toSVG:function(){var e=[];for(var t=0,r=this.points.length;t"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(){var e=h(this.callSuper("toObject"),{path:this.path});return this.sourcePath&&(e.sourcePath=this.sourcePath),this.transformMatrix&&(e.transformMatrix=this.transformMatrix),e},toDatalessObject:function(){var e=this.toObject();return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(){var e=[];for(var t=0,n=this.path.length;t',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke,o=t.util.removeFromArray;if(t.Group)return;t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.hideCorners=!0},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},_set:function(e,t){if(e==="fill"||e==="opacity"){var n=this.objects.length;this[e]=t;while(n--)this.objects[n].set(e,t)}else this[e]=t},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(){return n(this.callSuper("toObject"),{objects:s(this.objects,"toObject")})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hideCorners=!1,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale()},toSVG:function(){var e=[];for(var t=0,n=this.objects.length;t'+e.join("")+""}}),t.Group.fromObject=function(e,n){t.util.enlivenObjects(e.objects,function(r){delete e.objects,n&&n(new t.Group(r,e))})},t.Group.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=fabric.util.object.extend;e.fabric||(e.fabric={});if(e.fabric.Image){fabric.warn("fabric.Image is already defined.");return}fabric.Image=fabric.util.createClass(fabric.Object,{active:!1,type:"image",initialize:function(e,t){t||(t={}),this.callSuper("initialize",t),this._initElement(e),this._originalImage=this.getElement(),this._initConfig(t),this.filters=[],t.filters&&(this.filters=t.filters,this.applyFilters())},getElement:function(){return this._element},setElement:function(e){return this._element=e,this._initConfig(),this},getOriginalSize:function(){var e=this.getElement();return{width:e.width,height:e.height}},render:function(e,t){e.save();var n=this.transformMatrix;this._resetWidthHeight(),this.group&&e.translate(-this.group.width/2+this.width/2,-this.group.height/2+this.height/2),n&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e),this._render(e),this.active&&!t&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore()},toObject:function(){return t(this.callSuper("toObject"),{src:this._originalImage.src||this._originalImage._src,filters:this.filters.concat()})},toSVG:function(){return''+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e){this.constructor.fromObject(this.toObject(),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.document.createElement("canvas"),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;!r.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(r),r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").replace(/data:image\/png;base64,/,"");i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return this},_render:function(e){e.drawImage(this.getElement(),-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=null},n.src=r},fabric.Image.fromURL=function(e,t,n){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){r||(r={});var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(i,r))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.get("angle");return e>-225&&e<=-135?-180:e>-135&&e<=-45?-90:e>-45&&e<=45?0:e>45&&e<=135?90:e>135&&e<=225?180:e>225&&e<=315?270:e>315?360:0},straighten:function(){var e=this._getAngleValueForStraighten();return this.setAngle(e),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.setActive(!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint. -fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0],this.tmpCtx=fabric.document.createElement("canvas").getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_renderTextFill:function(e,t){this._boundaries=[];for(var n=0,r=t.length;n-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore()},toObject:function(){return n(this.callSuper("toObject"),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,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;for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.backgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},setFontsize:function(e){return this.set("fontSize",e),this._initDimensions(),this.setCoords(),this},getText:function(){return this.text},setText:function(e){return this.set("text",e),this._initDimensions(),this.setCoords(),this},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t)}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i}}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t){request(e,"binary",function(n){var r=new Image;r.src=new Buffer(n,"binary"),r._src=e,t(r)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL` *//*! Fabric.js Copyright 2008-2012, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"0.9.22"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_r?n:i-t;s(u(l,a,c,n));if(i>r||o()){e.onComplete&&e.onComplete();return}f(h)}()}function l(e,t,n){if(e){var r=new Image;r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function c(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){i[t]=e,r()}):(i[t]=s.fromObject(e),r())})}function h(e,t,n){var r=e.length>1?new fabric.PathGroup(e,t):e[0];return typeof n!="undefined"&&r.setSourcePath(n),r}fabric.util={};var n=Math.PI/180,a=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},f=function(){return a.apply(fabric.window,arguments)};fabric.util.removeFromArray=e,fabric.util.degreesToRadians=r,fabric.util.radiansToDegrees=i,fabric.util.toFixed=s,fabric.util.getRandomInt=t,fabric.util.falseFunction=o,fabric.util.animate=u,fabric.util.requestAnimFrame=f,fabric.util.loadImage=l,fabric.util.enlivenObjects=c,fabric.util.groupSVGElements=h}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==1/0&&r!==-1/0&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?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).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r. +onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function g(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function y(e){var t="";for(var n=0,r=e.length;n",'",""].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,p=f.length;c0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t=n.sourceFromHex(e);t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)','',"',"Created with Fabric.js ",fabric.version,"",fabric.createSVGFontFacesMarkup(this.getObjects())];this.backgroundImage&&e.push(''),this.overlayImage&&e.push('');for(var t=0,n=this.getObjects(),r=n.length;t"),e.join("")},isEmpty:function(){return this._objects.length===0},remove:function(e){return n(this._objects,e),this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-t),e.ey-(n>0?0:-n),r,i),this.contextTop.lineWidth=this.selectionLineWidth,this.contextTop.strokeStyle=this.selectionBorderColor,this.contextTop.strokeRect(e.ex+v-(t>0?0:r),e.ey+v-(n>0?0:i),r,i)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,o,u=new fabric.Point(p(n,i),p(r,s)),a=new fabric.Point(d(n,i),d(r,s));for(var f=0,l=this._objects.length;f1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},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,n){var r=(e==="scaleX"||e==="scaleY")&&n1?this.strokeWidth:0,t=this.padding,n=o(this.angle);this.currentWidth=(this.width+e)*this.scaleX+t*2,this.currentHeight=(this.height+e)*this.scaleY+t*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var r=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),i=Math.atan(this.currentHeight/this.currentWidth),s=Math.cos(i+n)*r,u=Math.sin(i+n)*r,a=Math.sin(n),f=Math.cos(n),l={x:this.left-s,y:this.top-u},c={x:l.x+this.currentWidth*f,y:l.y+this.currentWidth*a},h={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},p={x:l.x-this.currentHeight*a,y:l.y+this.currentHeight*f},d={x:l.x-this.currentHeight/2*a,y:l.y+this.currentHeight/2*f},v={x:l.x+this.currentWidth/2*f,y:l.y+this.currentWidth/2*a},m={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},g={x:p.x+this.currentWidth/2*f,y:p.y+this.currentWidth/2*a},y={x:l.x+this.currentWidth/2*f,y:l.y+this.currentWidth/2*a};return this.oCoords={tl:l,tr:c,br:h,bl:p,ml:d,mt:v,mr:m,mb:g,mtr:y},this._setCornerCoords(),this},getBoundingRectWidth:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},getBoundingRectHeight:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],n=t.util.array.min(e),r=t.util.array.max(e);return Math.abs(n-r)},drawBorders:function(e){if(!this.hasBorders)return;var n=t.Object.MIN_SCALE_LIMIT,r=this.padding,i=r*2,s=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var o=1/(this.scaleXc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},drawCorners:function(e){if(!this.hasControls)return;var t=this.cornersize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect";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,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,e.clearRect(o,u,a,f),e[y](o,u,a,f),this.lockUniScaling||(o=i+g/2-p,u=s-h-r-c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,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,e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this},clone:function(e){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(),e):new t.Object(this.toObject())},cloneAsImage:function(e){if(t.Image){var n=new Image;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.get("angle"),flipX:this.get("flipX"),flipY:this.get("flipY")};this.set("angle",0).set("flipX",!1).set("flipY",!1),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL("png");r.dispose(),r=t=null,e&&e(i)}var n=t.document.createElement("canvas");!n.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(n),n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},intersectsWithRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y),u=new t.Point(r.br.x,r.br.y),a=t.Intersection.intersectPolygonRectangle([i,s,u,o],e,n);return a.status==="Intersection"},intersectsWithObject:function(e){function n(e){return{tl:new t.Point(e.tl.x,e.tl.y),tr:new t.Point(e.tr.x,e.tr.y),bl:new t.Point(e.bl.x,e.bl.y),br:new t.Point(e.br.x,e.br.y)}}var r=n(this.oCoords),i=n(e.oCoords),s=t.Intersection.intersectPolygonPolygon([r.tl,r.tr,r.br,r.bl],[i.tl,i.tr,i.br,i.bl]);return s.status==="Intersection"},isContainedWithinObject:function(e){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect:function(e,n){var r=this.oCoords,i=new t.Point(r.tl.x,r.tl.y),s=new t.Point(r.tr.x,r.tr.y),o=new t.Point(r.bl.x,r.bl.y);return i.x>e.x&&s.xe.y&&o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,t=o(this.angle),n=o(45-this.angle),r=Math.sqrt(2*Math.pow(this.cornersize,2))/2,i=r*Math.cos(n),s=r*Math.sin(n),u=Math.sin(t),a=Math.cos(t);e.tl.corner={tl:{x:e.tl.x-s,y:e.tl.y-i},tr:{x:e.tl.x+i,y:e.tl.y-s},bl:{x:e.tl.x-i,y:e.tl.y+s},br:{x:e.tl.x+s,y:e.tl.y+i}},e.tr.corner={tl:{x:e.tr.x-s,y:e.tr.y-i},tr:{x:e.tr.x+i,y:e.tr.y-s},br:{x:e.tr.x+s,y:e.tr.y+i},bl:{x:e.tr.x-i,y:e.tr.y+s}},e.bl.corner={tl:{x:e.bl.x-s,y:e.bl.y-i},bl:{x:e.bl.x-i,y:e.bl.y+s},br:{x:e.bl.x+s,y:e.bl.y+i},tr:{x:e.bl.x+i,y:e.bl.y-s}},e.br.corner={tr:{x:e.br.x+i,y:e.br.y-s},bl:{x:e.br.x-i,y:e.br.y+s},br:{x:e.br.x+s,y:e.br.y+i},tl:{x:e.br.x-s,y:e.br.y-i}},e.ml.corner={tl:{x:e.ml.x-s,y:e.ml.y-i},tr:{x:e.ml.x+i,y:e.ml.y-s},bl:{x:e.ml.x-i,y:e.ml.y+s},br:{x:e.ml.x+s,y:e.ml.y+i}},e.mt.corner={tl:{x:e.mt.x-s,y:e.mt.y-i},tr:{x:e.mt.x+i,y:e.mt.y-s},bl:{x:e.mt.x-i,y:e.mt.y+s},br:{x:e.mt.x+s,y:e.mt.y+i}},e.mr.corner={tl:{x:e.mr.x-s,y:e.mr.y-i},tr:{x:e.mr.x+i,y:e.mr.y-s},bl:{x:e.mr.x-i,y:e.mr.y+s},br:{x:e.mr.x+s,y:e.mr.y+i}},e.mb.corner={tl:{x:e.mb.x-s,y:e.mb.y-i},tr:{x:e.mb.x+i,y:e.mb.y-s},bl:{x:e.mb.x-i,y:e.mb.y+s},br:{x:e.mb.x+s,y:e.mb.y+i}},e.mtr.corner={tl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y-i-a*this.rotatingPointOffset},tr:{x:e.mtr.x+i+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},bl:{x:e.mtr.x-i+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset},br:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y+i-a*this.rotatingPointOffset}}},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(){return this.toObject()},setGradientFill:function(e){this.set("fill",t.Gradient.forObject(this,e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e,arguments[0][e],arguments[1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this;r||(r={}),"from"in r||(r.from=this.get(e)),/[+\-]/.test((n+"").charAt(0))&&(n=this.get(e)+parseFloat(n)),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}});var a=t.Object.prototype;for(var f=a.stateProperties.length;f--;){var l=a.stateProperties[f],c=l.charAt(0).toUpperCase()+l.slice(1),h="set"+c,p="get"+c;a[p]||(a[p]=function(e){return new Function('return this.get("'+e+'")')}(l)),a[h]||(a[h]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(l))}t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),n(t.Object,{NUM_FRACTION_DIGITS:2,MIN_SCALE_LIMIT:.1})}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top +),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(){return n(this.callSuper("toObject"),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(){return r(this.callSuper("toObject"),{radius:this.get("radius")})},toSVG:function(){return'"},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");return"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0),new t.Circle(r(s,n))},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(){return r(this.callSuper("toObject"),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={});if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy()},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(){return t.util.object.extend(this.callSuper("toObject"),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,r){if(!e)return null;var i=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);i=n(i);var s=new t.Rect(t.util.object.extend(r?t.util.object.clone(r):{},i));return s._normalizeLeftTopProperties(i),s},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions()},_calcDimensions:function(){return t.Polygon.prototype._calcDimensions.call(this)},toObject:function(){return t.Polygon.prototype.toObject.call(this)},toSVG:function(){var e=[];for(var t=0,r=this.points.length;t"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(){var e=h(this.callSuper("toObject"),{path:this.path});return this.sourcePath&&(e.sourcePath=this.sourcePath),this.transformMatrix&&(e.transformMatrix=this.transformMatrix),e},toDatalessObject:function(){var e=this.toObject();return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(){var e=[];for(var t=0,n=this.path.length;t',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke,o=t.util.removeFromArray;if(t.Group)return;t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.hideCorners=!0},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},_set:function(e,t){if(e==="fill"||e==="opacity"){var n=this.objects.length;this[e]=t;while(n--)this.objects[n].set(e,t)}else this[e]=t},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(){return n(this.callSuper("toObject"),{objects:s(this.objects,"toObject")})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hideCorners=!1,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale()},toSVG:function(){var e=[];for(var t=0,n=this.objects.length;t'+e.join("")+""}}),t.Group.fromObject=function(e,n){t.util.enlivenObjects(e.objects,function(r){delete e.objects,n&&n(new t.Group(r,e))})},t.Group.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=fabric.util.object.extend;e.fabric||(e.fabric={});if(e.fabric.Image){fabric.warn("fabric.Image is already defined.");return}fabric.Image=fabric.util.createClass(fabric.Object,{active:!1,type:"image",initialize:function(e,t){t||(t={}),this.callSuper("initialize",t),this._initElement(e),this._originalImage=this.getElement(),this._initConfig(t),this.filters=[],t.filters&&(this.filters=t.filters,this.applyFilters())},getElement:function(){return this._element},setElement:function(e){return this._element=e,this._initConfig(),this},getOriginalSize:function(){var e=this.getElement();return{width:e.width,height:e.height}},render:function(e,t){e.save();var n=this.transformMatrix;this._resetWidthHeight(),this.group&&e.translate(-this.group.width/2+this.width/2,-this.group.height/2+this.height/2),n&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e),this._render(e),this.active&&!t&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore()},toObject:function(){return t(this.callSuper("toObject"),{src:this._originalImage.src||this._originalImage._src,filters:this.filters.concat()})},toSVG:function(){return''+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e){this.constructor.fromObject(this.toObject(),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.document.createElement("canvas"),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;!r.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(r),r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").replace(/data:image\/png;base64,/,"");i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return this},_render:function(e){e.drawImage(this.getElement(),-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=null},n.src=r},fabric.Image.fromURL=function(e,t,n){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){r||(r={});var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(i,r))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.get("angle");return e>-225&&e<=-135?-180:e>-135&&e<=-45?-90:e>-45&&e<=45?0:e>45&&e<=135?90:e>135&&e<=225?180:e>225&&e<=315?270:e>315?360:0},straighten:function(){var e=this._getAngleValueForStraighten();return this.setAngle(e),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.setActive(!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters +.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0],this.tmpCtx=fabric.document.createElement("canvas").getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_renderTextFill:function(e,t){this._boundaries=[];for(var n=0,r=t.length;n-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[this.fontStyle,this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.hideCorners||this.drawCorners(e)),e.restore()},toObject:function(){return n(this.callSuper("toObject"),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,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;for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.backgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},setFontsize:function(e){return this.set("fontSize",e),this._initDimensions(),this.setCoords(),this},getText:function(){return this.text},setText:function(e){return this.set("text",e),this._initDimensions(),this.setCoords(),this},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t)}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i}}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.createClient(r.port,r.hostname),s=i.request("GET",r.pathname,{host:r.hostname});i.addListener("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+i.host+":"+i.port):fabric.log(e.message)}),s.end(),s.on("response",function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t){request(e,"binary",function(n){var r=new Image;r.src=new Buffer(n,"binary"),r._src=e,t(r)})},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index 0d17b4e9227047fb2f7022f470815aeb79166690..de6500f3654d84a77de47e1743d34dfcc8103508 100644 GIT binary patch delta 32595 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 GGXem@w5~+} delta 32604 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¥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 P!Q}r1N5fWjBUwZ diff --git a/src/object.class.js b/src/object.class.js index 431e58f3..9d624b6a 100644 --- a/src/object.class.js +++ b/src/object.class.js @@ -233,17 +233,6 @@ 'borderScaleFactor transformMatrix selectable' ).split(' '), - /** - * @method callSuper - * @param {String} methodName - */ - callSuper: function(methodName) { - var fn = this.constructor.superclass.prototype[methodName]; - return (arguments.length > 1) - ? fn.apply(this, slice.call(arguments, 1)) - : fn.call(this); - }, - /** * Constructor * @method initialize @@ -256,7 +245,8 @@ }, /** - * @method initGradient + * @private + * @method _initGradient */ _initGradient: function(options) { if (options.fill && typeof options.fill === 'object' && !(options.fill instanceof fabric.Gradient)) { @@ -788,6 +778,10 @@ return this; }, + /** + * @private + * @method _renderDashedStroke + */ _renderDashedStroke: function(ctx) { if (1 & this.strokeDashArray.length /* if odd number of items */) { @@ -804,6 +798,7 @@ ctx.save(); ctx.beginPath(); + /** @ignore */ function renderSide(xMultiplier, yMultiplier) { var lineLength = 0, diff --git a/src/util/lang_class.js b/src/util/lang_class.js index 75086960..ff34d073 100644 --- a/src/util/lang_class.js +++ b/src/util/lang_class.js @@ -46,9 +46,19 @@ function Subclass() { } + function callSuper(methodName) { + var fn = this.constructor.superclass.prototype[methodName]; + return (arguments.length > 1) + ? fn.apply(this, slice.call(arguments, 1)) + : fn.call(this); + } + /** - * Helper for creation of "classes" + * Helper for creation of "classes". Note that pr * @method createClass + * @param parent optional "Class" to inherit from + * @param properties Properties shared by all instances of this class + * (be careful modifying objects defined here as this would affect all instances) * @memberOf fabric.util */ function createClass() { @@ -77,6 +87,7 @@ klass.prototype.initialize = emptyFunction; } klass.prototype.constructor = klass; + klass.prototype.callSuper = callSuper; return klass; }