From ff21b07be46796037ef89717773443920051acc2 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sun, 18 Dec 2016 11:05:13 +0100 Subject: [PATCH] build172 (#3547) --- CHANGELOG.md | 12 ++ HEADER.js | 2 +- ISSUE_TEMPLATE.md | 11 +- dist/fabric.js | 288 +++++++++++++++++++++++++++++-------- dist/fabric.min.js | 17 +-- dist/fabric.min.js.gz | Bin 68816 -> 69329 bytes dist/fabric.require.js | 162 ++++++++++++++++----- package.json | 2 +- src/shapes/object.class.js | 38 +++-- src/shapes/text.class.js | 16 +++ 10 files changed, 432 insertions(+), 116 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f27cdfc..d2aca5de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +**Version 1.7.2** + +- Fix: Textbox do not use stylemap for line wrapping [#3546](https://github.com/kangax/fabric.js/pull/3546) +- Fix: Fix for firing object:modfied in macOS sierra [#3539](https://github.com/kangax/fabric.js/pull/3539) +- Fix: Itext with object caching was not refreshing selection correctly. [#3538](https://github.com/kangax/fabric.js/pull/3538) +- Fix: stateful now works again with activeGroup and dinamyc swap between stateful false/true. [#3537](https://github.com/kangax/fabric.js/pull/3537) +- Fix: includeDefaultValues was not applied to child objects of groups and path-groups. [#3497](https://github.com/kangax/fabric.js/pull/3497) +- Fix: Itext style is cloned on paste action now, allow copie of styles to be independent. [#3502](https://github.com/kangax/fabric.js/pull/3502) +- Fix: Add subclasses properties to cacheProperties. [#3490](https://github.com/kangax/fabric.js/pull/3490) +- Add: Shift and Alt key used for transformations are now dinamic. [#3479](https://github.com/kangax/fabric.js/pull/3479) +- Fix: fix to polygon and cache. Added cacheProperties for all classes [#3490](https://github.com/kangax/fabric.js/pull/3490) + **Version 1.7.1** - Add: Gradients/Patterns support customAttributes in toObject method [#3477](https://github.com/kangax/fabric.js/pull/3477) diff --git a/HEADER.js b/HEADER.js index f826790e..1308130e 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.7.1" }; +var fabric = fabric || { version: "1.7.2" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 3f0dd969..dc952c84 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -5,16 +5,17 @@ Have a usage question? ====================== The issue tracker is only for bugs (with reproducible minimal test case) and feature requests, so please do the following if you have a question: -- Read the tutorial: http://fabricjs.com/articles/ -- Read the docs: http://fabricjs.com/docs/ -- Explore demos: http://fabricjs.com/demos/ +- Read the tutorial: http://fabricjs.com/articles +- Read the object caching introduction: http://fabricjs.com/fabric-object-caching +- Read the docs: http://fabricjs.com/docs +- Explore demos: http://fabricjs.com/demos - Look for/ask questions on StackOverflow: http://stackoverflow.com/questions/tagged/fabricjs - Ask on Google Group: https://groups.google.com/forum/#!forum/fabricjs Think you found a bug? ====================== -The best bug report is a failing test in the repository as a pull request. Otherwise, please use the "BUG REPORT" template below. +The best bug report is a failing test in the repository as a pull request. Otherwise, please use the "BUG REPORT" template below. You NEED to create a fiddle with very simple test case that illustrate the problem. Otherwise the issue will be closed. Have a feature request? @@ -24,7 +25,7 @@ Remove the template from below and provide thoughtful commentary *and code sampl ## Version -1.7.0 +1.7.2 ## Test Case http://jsfiddle.net/fabricjs/Da7SP/ diff --git a/dist/fabric.js b/dist/fabric.js index f6506401..69a39fe9 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=json,gestures minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.7.1" }; +var fabric = fabric || { version: "1.7.2" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -15,7 +15,9 @@ if (typeof document !== 'undefined' && typeof window !== 'undefined') { else { // assume we're running under node.js when document/window are not present fabric.document = require("jsdom") - .jsdom(""); + .jsdom( + decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E") + ); if (fabric.document.createWindow) { fabric.window = fabric.document.createWindow(); @@ -2594,6 +2596,57 @@ if (typeof console !== 'undefined') { })(); +(function() { + // Calculate an in-between color. Returns a "rgba()" string. + // Credit: Edwin Martin + // http://www.bitstorm.org/jquery/color-animation/jquery.animate-colors.js + function calculateColor(begin, end, pos) { + var color = 'rgba(' + + parseInt((begin[0] + pos * (end[0] - begin[0])), 10) + ',' + + parseInt((begin[1] + pos * (end[1] - begin[1])), 10) + ',' + + parseInt((begin[2] + pos * (end[2] - begin[2])), 10); + + color += ',' + (begin && end ? parseFloat(begin[3] + pos * (end[3] - begin[3])) : 1); + color += ')'; + return color; + } + + /** + * Changes the color from one to another within certain period of time, invoking callbacks as value is being changed. + * @memberOf fabric.util + * @param {String} fromColor The starting color in hex or rgb(a) format. + * @param {String} toColor The starting color in hex or rgb(a) format. + * @param {Number} [duration] Duration of change (in ms). + * @param {Object} [options] Animation options + * @param {Function} [options.onChange] Callback; invoked on every value change + * @param {Function} [options.onComplete] Callback; invoked when value change is completed + * @param {Function} [options.colorEasing] Easing function. Note that this function only take two arguments (currentTime, duration). Thus the regular animation easing functions cannot be used. + */ + function animateColor(fromColor, toColor, duration, options) { + var startColor = new fabric.Color(fromColor).getSource(), + endColor = new fabric.Color(toColor).getSource(); + + options = options || {}; + + fabric.util.animate(fabric.util.object.extend(options, { + duration: duration || 500, + startValue: startColor, + endValue: endColor, + byValue: endColor, + easing: function (currentTime, startValue, byValue, duration) { + var posValue = options.colorEasing + ? options.colorEasing(currentTime, duration) + : 1 - Math.cos(currentTime / duration * (Math.PI / 2)); + return calculateColor(startValue, byValue, posValue); + } + })); + } + + fabric.util.animateColor = animateColor; + +})(); + + (function() { function normalize(a, c, p, s) { @@ -6666,14 +6719,14 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @chainable true */ setViewportTransform: function (vpt) { - var activeGroup = this._activeGroup, object; + var activeGroup = this._activeGroup, object, ingoreVpt = false, skipAbsolute = true; this.viewportTransform = vpt; for (var i = 0, len = this._objects.length; i < len; i++) { object = this._objects[i]; - object.group || object.setCoords(); + object.group || object.setCoords(ingoreVpt, skipAbsolute); } if (activeGroup) { - activeGroup.setCoords(); + activeGroup.setCoords(ingoreVpt, skipAbsolute); } this.renderAll(); return this; @@ -7093,11 +7146,13 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @private */ __serializeBgOverlay: function(methodName, propertiesToInclude) { - var data = { - background: (this.backgroundColor && this.backgroundColor.toObject) + var data = { } + + if (this.backgroundColor) { + data.background = this.backgroundColor.toObject ? this.backgroundColor.toObject(propertiesToInclude) : this.backgroundColor - }; + } if (this.overlayColor) { data.overlay = this.overlayColor.toObject @@ -9299,7 +9354,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab angle = 360 + angle; } - angle %= 360 + angle %= 360; if (t.target.snapAngle > 0) { var snapAngle = t.target.snapAngle, @@ -9315,7 +9370,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab } if (t.target.angle === angle) { - hasRoated = false + hasRoated = false; } } @@ -10246,6 +10301,11 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab _shouldRender: function(target, pointer) { var activeObject = this.getActiveGroup() || this.getActiveObject(); + if (activeObject && activeObject.isEditing) { + // if we mouse up/down over a editing textbox a cursor change, + // there is no need to re render + return false; + } return !!( (target && ( target.isMoving || @@ -10618,6 +10678,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab transform.reset = false; transform.target.isMoving = true; + transform.shiftKey = e.shiftKey; + transform.altKey = e[this.centeredKey]; this._beforeScaleTransform(e, transform); this._performTransformAction(e, transform, pointer); @@ -10660,7 +10722,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab this.setCursor(target.moveCursor || this.moveCursor); } } - transform.actionPerformed = actionPerformed; + transform.actionPerformed = transform.actionPerformed || actionPerformed; }, /** @@ -12105,7 +12167,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * default to true * since 1.7.0 * @type Boolean - * @default + * @default true */ objectCaching: objectCaching, @@ -12125,7 +12187,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * When `true`, cache does not get updated during scaling. The picture will get blocky if scaled * too much and will be redrawn with correct details at the end of scaling. * this setting is performance and application dependant. - * default to false + * default to true * since 1.7.0 * @type Boolean * @default true @@ -12134,6 +12196,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati /** * When set to `true`, object's cache will be rerendered next render call. + * since 1.7.0 * @type Boolean * @default false */ @@ -12186,6 +12249,32 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati this._updateCacheCanvas(); }, + /** + * Return the dimension and the zoom level needed to create a cache canvas + * big enough to host the object to be cached. + * @private + * @return {Object}.width width of canvas + * @return {Object}.height height of canvas + * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache + * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache + */ + _getCacheCanvasDimensions: function() { + var zoom = this.canvas && this.canvas.getZoom() || 1, + objectScale = this.getObjectScaling(), + dim = this._getNonTransformedDimensions(), + retina = this.canvas && this.canvas._isRetinaScaling() ? fabric.devicePixelRatio : 1, + zoomX = objectScale.scaleX * zoom * retina, + zoomY = objectScale.scaleY * zoom * retina, + width = dim.x * zoomX, + height = dim.y * zoomY; + return { + width: width, + height: height, + zoomX: zoomX, + zoomY: zoomY + }; + }, + /** * Update width and height of the canvas for cache * returns true or false if canvas needed resize. @@ -12199,14 +12288,10 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati return false; } } - var zoom = this.getViewportTransform()[0], - objectScale = this.getObjectScaling(), - dim = this._getNonTransformedDimensions(), - retina = this.canvas && this.canvas._isRetinaScaling() ? fabric.devicePixelRatio : 1, - zoomX = objectScale.scaleX * zoom * retina, - zoomY = objectScale.scaleY * zoom * retina, - width = dim.x * zoomX, - height = dim.y * zoomY; + var dims = this._getCacheCanvasDimensions(), + width = dims.width, height = dims.height, + zoomX = dims.zoomX, zoomY = dims.zoomY; + if (width !== this.cacheWidth || height !== this.cacheHeight) { this._cacheCanvas.width = width; this._cacheCanvas.height = height; @@ -13796,12 +13881,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati tl = new fabric.Point(coords.x - offsetX, coords.y - offsetY), tr = new fabric.Point(tl.x + (currentWidth * cosTh), tl.y + (currentWidth * sinTh)), bl = new fabric.Point(tl.x - (currentHeight * sinTh), tl.y + (currentHeight * cosTh)), - br = new fabric.Point(coords.x + offsetX, coords.y + offsetY), - ml = new fabric.Point((tl.x + bl.x) / 2, (tl.y + bl.y) / 2), - mt = new fabric.Point((tr.x + tl.x) / 2, (tr.y + tl.y) / 2), - mr = new fabric.Point((br.x + tr.x) / 2, (br.y + tr.y) / 2), - mb = new fabric.Point((br.x + bl.x) / 2, (br.y + bl.y) / 2), - mtr = new fabric.Point(mt.x + sinTh * this.rotatingPointOffset, mt.y - cosTh * this.rotatingPointOffset); + br = new fabric.Point(coords.x + offsetX, coords.y + offsetY); + if (!ignoreVpt) { + var ml = new fabric.Point((tl.x + bl.x) / 2, (tl.y + bl.y) / 2), + mt = new fabric.Point((tr.x + tl.x) / 2, (tr.y + tl.y) / 2), + mr = new fabric.Point((br.x + tr.x) / 2, (br.y + tr.y) / 2), + mb = new fabric.Point((br.x + bl.x) / 2, (br.y + bl.y) / 2), + mtr = new fabric.Point(mt.x + sinTh * this.rotatingPointOffset, mt.y - cosTh * this.rotatingPointOffset); + } + // debugging /* setTimeout(function() { @@ -13817,14 +13905,20 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati canvas.contextTop.fillRect(mtr.x, mtr.y, 3, 3); }, 50); */ - return { + var coords = { // corners tl: tl, tr: tr, br: br, bl: bl, - // middle - ml: ml, mt: mt, mr: mr, mb: mb, - // rotating point - mtr: mtr }; + if (!ignoreVpt) { + // middle + coords.ml = ml; + coords.mt = mt; + coords.mr = mr; + coords.mb = mb; + // rotating point + coords.mtr = mtr; + } + return coords; }, /** @@ -13833,8 +13927,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati * @return {fabric.Object} thisArg * @chainable */ - setCoords: function(ignoreZoom) { + setCoords: function(ignoreZoom, skipAbsolute) { this.oCoords = this.calcCoords(ignoreZoom); + if (!skipAbsolute && !ignoreZoom) { + this.absoluteCoords = this.calcCoords(true); + } // set coordinates of the draggable boxes in the corners used to scale/rotate the image ignoreZoom || this._setCornerCoords && this._setCornerCoords(); @@ -14190,6 +14287,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot saveState: function(options) { var propertySet = options && options.propertySet || originalSet, destination = '_' + propertySet; + if (!this[destination]) { + return this.setupState(options); + } saveProps(this, destination, this[propertySet]); if (options && options.stateProperties) { saveProps(this, destination, options.stateProperties); @@ -14908,6 +15008,14 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return; } + var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); + cacheProperties.push( + 'x1', + 'x2', + 'y1', + 'y2' + ); + /** * Line class * @class fabric.Line @@ -14951,6 +15059,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ y2: 0, + cacheProperties: cacheProperties, + /** * Constructor * @param {Array} [points] Array of points @@ -15260,6 +15370,11 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return; } + var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); + cacheProperties.push( + 'radius' + ); + /** * Circle class * @class fabric.Circle @@ -15296,6 +15411,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ endAngle: pi * 2, + cacheProperties: cacheProperties, + /** * Constructor * @param {Object} [options] Options object @@ -15629,6 +15746,12 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return; } + var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); + cacheProperties.push( + 'rx', + 'ry' + ); + /** * Ellipse class * @class fabric.Ellipse @@ -15659,6 +15782,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ ry: 0, + cacheProperties: cacheProperties, + /** * Constructor * @param {Object} [options] Options object @@ -15839,7 +15964,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot } var stateProperties = fabric.Object.prototype.stateProperties.concat(); - stateProperties.push('rx', 'ry', 'x', 'y'); + stateProperties.push('rx', 'ry'); /** * Rectangle class @@ -16075,6 +16200,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return; } + var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); + cacheProperties.push('points'); + /** * Polyline class * @class fabric.Polyline @@ -16111,6 +16239,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ minY: 0, + cacheProperties: cacheProperties, + /** * Constructor * @param {Array} points Array of points (where each point is an object with x and y) @@ -16260,6 +16390,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return; } + var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); + cacheProperties.push('points'); + /** * Polygon class * @class fabric.Polygon @@ -16296,6 +16429,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ minY: 0, + cacheProperties: cacheProperties, + /** * Constructor * @param {Array} points Array of points @@ -16398,20 +16533,20 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @param {Boolean} noTransform */ commonRender: function(ctx, noTransform) { - var point, len = this.points.length; + var point, len = this.points.length, + x = noTransform ? 0 : this.pathOffset.x, + y = noTransform ? 0 : this.pathOffset.y; if (!len || isNaN(this.points[len - 1].y)) { // do not draw if no points or odd points // NaN comes from parseFloat of a empty string in parser return false; } - - noTransform || ctx.translate(-this.pathOffset.x, -this.pathOffset.y); ctx.beginPath(); - ctx.moveTo(this.points[0].x, this.points[0].y); + ctx.moveTo(this.points[0].x - x, this.points[0].y - y); for (var i = 0; i < len; i++) { point = this.points[i]; - ctx.lineTo(point.x, point.y); + ctx.lineTo(point.x - x, point.y - y); } return true; }, @@ -16513,6 +16648,9 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return; } + var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); + cacheProperties.push('path'); + /** * Path class * @class fabric.Path @@ -16550,6 +16688,8 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot */ minY: 0, + cacheProperties: cacheProperties, + /** * Constructor * @param {Array|String} path Path data (sequence of coordinates and corresponding "command" tokens) @@ -17464,9 +17604,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot 'use strict'; var fabric = global.fabric || (global.fabric = { }), - extend = fabric.util.object.extend, - invoke = fabric.util.array.invoke, - parentToObject = fabric.Object.prototype.toObject; + extend = fabric.util.object.extend; if (fabric.PathGroup) { fabric.warn('fabric.PathGroup is already defined'); @@ -17614,8 +17752,15 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {Object} object representation of an instance */ toObject: function(propertiesToInclude) { - var o = extend(parentToObject.call(this, ['sourcePath'].concat(propertiesToInclude)), { - paths: invoke(this.getObjects(), 'toObject', propertiesToInclude) + var pathsToObject = this.paths.map(function(path) { + var originalDefaults = path.includeDefaultValues; + path.includeDefaultValues = path.group.includeDefaultValues; + var obj = path.toObject(propertiesToInclude); + path.includeDefaultValues = originalDefaults; + return obj; + }); + var o = extend(this.callSuper('toObject', ['sourcePath'].concat(propertiesToInclude)), { + paths: pathsToObject }); return o; }, @@ -17751,8 +17896,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot var fabric = global.fabric || (global.fabric = { }), extend = fabric.util.object.extend, min = fabric.util.array.min, - max = fabric.util.array.max, - invoke = fabric.util.array.invoke; + max = fabric.util.array.max; if (fabric.Group) { return; @@ -18005,8 +18149,15 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {Object} object representation of an instance */ toObject: function(propertiesToInclude) { + var objsToObject = this.getObjects().map(function(obj) { + var originalDefaults = obj.includeDefaultValues; + obj.includeDefaultValues = obj.group.includeDefaultValues; + var _obj = obj.toObject(propertiesToInclude); + obj.includeDefaultValues = originalDefaults; + return _obj; + }); return extend(this.callSuper('toObject', propertiesToInclude), { - objects: invoke(this._objects, 'toObject', propertiesToInclude) + objects: objsToObject }); }, @@ -21573,6 +21724,22 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag '): { "text": "' + this.text + '", "fontFamily": "' + this.fontFamily + '" }>'; }, + /** + * Return the dimension and the zoom level needed to create a cache canvas + * big enough to host the object to be cached. + * @private + * @return {Object}.width width of canvas + * @return {Object}.height height of canvas + * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache + * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache + */ + _getCacheCanvasDimensions: function() { + var dim = this.callSuper('_getCacheCanvasDimensions'); + dim.width += 2 * this.fontSize; + dim.height += 2 * this.fontSize; + return dim; + }, + /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on @@ -22711,6 +22878,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag render: function(ctx, noTransform) { this.clearContextTop(); this.callSuper('render', ctx, noTransform); + // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor + // the correct position but not at every cursor animation. + this.cursorOffsetCache = { }; + this.renderCursorOrSelection(); }, /** @@ -22720,10 +22891,6 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag _render: function(ctx) { this.callSuper('_render', ctx); this.ctx = ctx; - // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor - // the correct position but not at every cursor animation. - this.cursorOffsetCache = { }; - this.renderCursorOrSelection(); }, /** @@ -24196,7 +24363,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag } for (var i = 0, len = _chars.length; i < len; i++) { if (useCopiedStyle) { - style = fabric.copiedTextStyle[i]; + style = fabric.util.object.clone(fabric.copiedTextStyle[i], true); } this.insertChar(_chars[i], i < len - 1, style); } @@ -24785,7 +24952,14 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } e.stopImmediatePropagation(); e.preventDefault(); - this.canvas && this.canvas.renderAll(); + if (e.keyCode >= 33 && e.keyCode <= 40) { + // if i press an arrow key just update selection + this.clearContextTop(); + this.renderCursorOrSelection(); + } + else { + this.canvas && this.canvas.renderAll(); + } }, /** @@ -24898,12 +25072,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } fabric.copiedText = selectedText; - fabric.copiedTextStyle = fabric.util.object.clone( - this.getSelectionStyles( - this.selectionStart, - this.selectionEnd - ) - ); + fabric.copiedTextStyle = this.getSelectionStyles(this.selectionStart, this.selectionEnd); e.stopImmediatePropagation(); e.preventDefault(); this._copyDone = true; @@ -25797,6 +25966,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot _splitTextIntoLines: function(ctx) { ctx = ctx || this.ctx; var originalAlign = this.textAlign; + this._styleMap = null; ctx.save(); this._setTextStyles(ctx); this.textAlign = 'left'; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 457f1d4c..0e9212c7 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,8 +1,9 @@ -var fabric=fabric||{version:"1.7.1"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(""),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?D-=2*f:1===c&&D<0&&(D+=2*f);for(var I=Math.ceil(Math.abs(D/f*2)),E=[],L=D/I,R=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),F=P+L,B=0;B=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){var e=this.constructor.superclass.prototype[t];return arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return y;if((f||d)&&(_=" translate("+x(f)+" "+x(d)+") "),r=_+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),y}function g(t){var e=t.objects,i=t.options;return e=e.map(function(t){return v[m(t.type)].fromObject(t)}),{objects:e,options:i}}function p(t,e,i){e[i]&&e[i].toSVG&&t.push('\t\n','\t\t\n\t\n')}var v=t.fabric||(t.fabric={}),b=v.util.object.extend,m=v.util.string.capitalize,y=v.util.object.clone,_=v.util.toFixed,x=v.util.parseUnit,C=v.util.multiplyTransformMatrices,S=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,w=/^(symbol|image|marker|pattern|view|svg)$/i,O=/^(?:pattern|defs|symbol|metadata)$/i,T=/^(symbol|g|a|svg)$/i,k={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},j={stroke:"strokeOpacity",fill:"fillOpacity"};v.cssRules={},v.gradientDefs={},v.parseTransformAttribute=function(){function t(t,e){var i=e[0],r=3===e.length?e[1]:0,n=3===e.length?e[2]:0;t[0]=Math.cos(i),t[1]=Math.sin(i),t[2]=-Math.sin(i),t[3]=Math.cos(i),t[4]=r-(t[0]*r+t[2]*n),t[5]=n-(t[1]*r+t[3]*n)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0]; -t[0]=i,t[3]=r}function i(t,e){t[2]=Math.tan(v.util.degreesToRadians(e[0]))}function r(t,e){t[1]=Math.tan(v.util.degreesToRadians(e[0]))}function n(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var s=[1,0,0,1,0,0],o=v.reNum,a="(?:\\s+,?\\s*|,\\s*)",h="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",c="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+")"+a+"("+o+"))?\\s*\\))",u="(?:(scale)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",f="(?:(translate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")\\s*\\))",g="(?:"+d+"|"+f+"|"+u+"|"+l+"|"+h+"|"+c+")",p="(?:"+g+"(?:"+a+"*"+g+")*)",b="^\\s*(?:"+p+"?)\\s*$",m=new RegExp(b),y=new RegExp(g,"g");return function(o){var a=s.concat(),h=[];if(!o||o&&!m.test(o))return a;o.replace(y,function(o){var c=new RegExp(g).exec(o).filter(function(t){return!!t}),l=c[1],u=c.slice(2).map(parseFloat);switch(l){case"translate":n(a,u);break;case"rotate":u[0]=v.util.degreesToRadians(u[0]),t(a,u);break;case"scale":e(a,u);break;case"skewX":i(a,u);break;case"skewY":r(a,u);break;case"matrix":a=u}h.push(a.concat()),a=s.concat()});for(var c=h[0];h.length>1;)h.shift(),c=v.util.multiplyTransformMatrices(c,h[0]);return c}}();var M=new RegExp("^\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*$");v.parseSVGDocument=function(){function t(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}return function(e,i,r){if(e){f(e);var n=new Date,s=v.Object.__uid++,o=d(e),a=v.util.toArray(e.getElementsByTagName("*"));if(o.svgUid=s,0===a.length&&v.isLikelyNode){a=e.selectNodes('//*[name(.)!="svg"]');for(var h=[],c=0,l=a.length;c/i,""))),n&&n.documentElement||e&&e(null),v.parseSVGDocument(n.documentElement,function(i,r){A.set(t,{objects:v.util.array.invoke(i,"toObject"),options:r}),e&&e(i,r)},i)}t=t.replace(/^\n\s*/,"").trim(),A.has(t,function(i){i?A.get(t,function(t){var i=g(t);e(i.objects,i.options)}):new v.util.request(t,{method:"get",onComplete:r})})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else v.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));v.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)},createSVGFontFacesMarkup:function(t){for(var e,i,r,n,s,o,a,h="",c={},l=v.fontPaths,u=0,f=t.length;u',"","\n"].join("")),h},createSVGRefElementsMarkup:function(t){var e=[];return p(e,t,"backgroundColor"),p(e,t,"overlayColor"),e.join("")}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,i,r=fabric.util.object.clone(this.coords);if(this.colorStops.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var n in r)"x1"===n||"x2"===n||"r2"===n?r[n]+=this.offsetX-t.width/2:"y1"!==n&&"y2"!==n||(r[n]+=this.offsetY-t.height/2);i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']);for(var s=0;s\n');return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:"y1"!==r&&"y2"!==r||(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;s\n\n\n'},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){if(e&&e.source){var r=this;fabric.util.loadImage(e.source,function(n){r[t]=new fabric.Pattern({source:n,repeat:e.repeat,offsetX:e.offsetX,offsetY:e.offsetY}),i&&i()})}else this[t]=e,i&&i();return this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw n;if("undefined"==typeof e.getContext)throw n;return e},_initOptions:function(t){for(var e in t)this[e]=t[e];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(t),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i=this._activeGroup;this.viewportTransform=t;for(var r=0,n=this._objects.length;r"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"\n")},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&ci.padding?t.x<0?t.x+=i.padding:t.x-=i.padding:t.x=0,n(t.y)>i.padding?t.y<0?t.y+=i.padding:t.y-=i.padding:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(a<0&&(a=360+a),a%=360,n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&this._checkTarget(n,s))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&this._checkTarget(n,o)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout")),this.fire("mouse:over",{target:t,e:e}),t.fire("mouseover"),this._hoveredTarget=t):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){return this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e&&e.fire("deselected",{e:t}),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t}),this},deactivateAll:function(){for(var t,e=this.getObjects(),i=0,r=e.length;i1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this.fire("mouse:wheel",{e:t})},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor;if(e.selectable){var r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this._setCornerCursor(n,e,t):this.setCursor(i)}else this.setCursor(i);return!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay;for(var t in r)n[t]=r[t];e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n),n()},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.Image.fromObject(e,function(e){n[t]=e,i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):void(i[t]=!0)},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.toFixed,n=e.util.string.capitalize,s=e.util.degreesToRadians,o=e.StaticCanvas.supports("setLineDash"),a=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:a,statefullCache:!1,noScaleCache:!0,dirty:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t),this.objectCaching&&(this._createCacheCanvas(),this.setupState({propertySet:"cacheProperties"}))},_createCacheCanvas:function(){this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.action;if("scale"===t.slice(0,5))return!1}var i=this.getViewportTransform()[0],r=this.getObjectScaling(),n=this._getNonTransformedDimensions(),s=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,o=r.scaleX*i*s,a=r.scaleY*i*s,h=n.x*o,c=n.y*a;return(h!==this.cacheWidth||c!==this.cacheHeight)&&(this._cacheCanvas.width=h,this._cacheCanvas.height=c,this._cacheContext.translate(h/2,c/2),this._cacheContext.scale(o,a),this.cacheWidth=h,this.cacheHeight=c,this.zoomX=o,this.zoomY=a,!0)},_initGradient:function(t){!t.fill||!t.fill.colorStops||t.fill instanceof e.Gradient||this.set("fill",new e.Gradient(t.fill)),!t.stroke||!t.stroke.colorStops||t.stroke instanceof e.Gradient||this.set("stroke",new e.Gradient(t.stroke))},_initPattern:function(t){!t.fill||!t.fill.source||t.fill instanceof e.Pattern||this.set("fill",new e.Pattern(t.fill)),!t.stroke||!t.stroke.source||t.stroke instanceof e.Pattern||this.set("stroke",new e.Pattern(t.stroke))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var i=e.util.getFunctionBody(t.clipTo);"undefined"!=typeof i&&(this.clipTo=new Function("ctx",i))}},setOptions:function(t){for(var e in t)this.set(e,t[e]);this._initGradient(t),this._initPattern(t),this._initClipping(t)},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),t.rotate(s(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),t.transform(1,0,Math.tan(s(this.skewX)),1,0,0),t.transform(1,Math.tan(s(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,n={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,i),top:r(this.top,i),width:r(this.width,i),height:r(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,i),scaleX:r(this.scaleX,i),scaleY:r(this.scaleY,i),angle:r(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():this.transformMatrix,skewX:r(this.skewX,i),skewY:r(this.skewY,i)};return e.util.populateWithProperties(this,n,t),this.includeDefaultValues||(n=this._removeDefaultValues(n)),n},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},get:function(t){return this[t]},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow||(i=new e.Shadow(i)),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.dirty=!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(t,i){0===this.width&&0===this.height||!this.visible||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.objectCaching&&!this.group?(this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)):(this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},drawObject:function(t,e){this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._render(t,e)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheWidth/2,-this.cacheHeight/2)},isCacheDirty:function(t){if(!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(!t){var e=this._getNonTransformedDimensions();this._cacheContext.clearRect(-e.x/2,-e.y/2,e.x,e.y)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),o?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),o=this.calcTransformMatrix();o=e.util.multiplyTransformMatrices(n,o),r=e.util.qrDecompose(o),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(s(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(s(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_renderFill:function(t){if(this.fill){if(t.save(),this.fill.gradientTransform){var e=this.fill.gradientTransform;t.transform.apply(t,e)}this.fill.toLive&&t.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore()}},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this.stroke.gradientTransform){var e=this.stroke.gradientTransform;t.transform.apply(t,e)}this.stroke.toLive&&t.translate(-this.width/2+this.stroke.offsetX||0,-this.height/2+this.stroke.offsetY||0),t.stroke(),t.restore()}},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 0},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),i.gradientTransform&&(r.gradientTransform=i.gradientTransform);for(var n in i.colorStops){var s=new e.Color(i.colorStops[n]);r.colorStops.push({offset:n,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,e.util.degreesToRadians(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,i){var r=t(this.oCoords),n=fabric.Intersection.intersectPolygonRectangle(r,e,i);return"Intersection"===n.status},intersectsWithObject:function(e){var i=fabric.Intersection.intersectPolygonPolygon(t(this.oCoords),t(e.oCoords));return"Intersection"===i.status||e.isContainedWithinObject(this)||this.isContainedWithinObject(e); -},isContainedWithinObject:function(e){for(var i=t(this.oCoords),r=0;r<4;r++)if(!e.containsPoint(i[r]))return!1;return!0},isContainedWithinRect:function(t,e){var i=this.getBoundingRect();return i.left>=t.x&&i.left+i.width<=e.x&&i.top>=t.y&&i.top+i.height<=e.y},containsPoint:function(t){this.oCoords||this.setCoords();var e=this._getImageLines(this.oCoords),i=this._findCrossPoints(t,e);return 0!==i&&i%2===1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t){var e=this.calcCoords(t);return fabric.util.makeBoundingBoxFromPoints([e.tl,e.tr,e.br,e.bl])},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f),y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);return{tl:p,tr:v,br:m,bl:b,ml:y,mt:_,mr:x,mb:C,mtr:S}},setCoords:function(t){return this.oCoords=this.calcCoords(t),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return[1,0,0,1,0,0]},calcTransformMatrix:function(){var t=this.getCenterPoint(),e=[1,0,0,1,t.x,t.y],r=this._calcRotateMatrix(),n=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),s=this.group?this.group.calcTransformMatrix():[1,0,0,1,0,0];return s=i(s,e),s=i(s,r),s=i(s,n)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas.moveTo(this,t),this}}),function(){function t(t,e){if(e){if(e.toLive)return t+": url(#SVGID_"+e.id+"); ";var i=new fabric.Color(e),r=t+": "+i.toRgb()+"; ",n=i.getAlpha();return 1!==n&&(r+=t+"-opacity: "+n.toString()+"; "),r}return t+": none; "}fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(e){var i=this.fillRule,r=this.strokeWidth?this.strokeWidth:"0",n=this.strokeDashArray?this.strokeDashArray.join(" "):"none",s=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",a=this.strokeMiterLimit?this.strokeMiterLimit:"4",h="undefined"!=typeof this.opacity?this.opacity:"1",c=this.visible?"":" visibility: hidden;",l=e?"":this.getSvgFilter(),u=t("fill",this.fill),f=t("stroke",this.stroke);return[f,"stroke-width: ",r,"; ","stroke-dasharray: ",n,"; ","stroke-linecap: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",a,"; ",u,"fill-rule: ",i,"; ","opacity: ",h,";",l,c].join("")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgId:function(){return this.id?'id="'+this.id+'" ':""},getSvgTransform:function(){if(this.group&&"path-group"===this.group.type)return"";var t=fabric.util.toFixed,e=this.getAngle(),i=this.getSkewX()%360,r=this.getSkewY()%360,n=this.getCenterPoint(),s=fabric.Object.NUM_FRACTION_DIGITS,o="path-group"===this.type?"":"translate("+t(n.x,s)+" "+t(n.y,s)+")",a=0!==e?" rotate("+t(e,s)+")":"",h=1===this.scaleX&&1===this.scaleY?"":" scale("+t(this.scaleX,s)+" "+t(this.scaleY,s)+")",c=0!==i?" skewX("+t(i,s)+")":"",l=0!==r?" skewY("+t(r,s)+")":"",u="path-group"===this.type?this.width:0,f=this.flipX?" matrix(-1 0 0 1 "+u+" 0) ":"",d="path-group"===this.type?this.height:0,g=this.flipY?" matrix(1 0 0 -1 0 "+d+")":"";return[o,a,h,f,g,c,l].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.join(" ")+") ":""},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t}})}(),function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i,r){if(!fabric.isLikelyNode&&t instanceof Element)return t===i;if(t instanceof Array){if(t.length!==i.length)return!1;for(var n=0,s=t.length;n\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return new i.Line(s,r(n,e))},void(i.Line.fromObject=function(t,e){var r=[t.x1,t.y1,t.x2,t.y2],n=new i.Line(r,t);return e&&e(n),n}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;return i.Circle?void i.warn("fabric.Circle is already defined."):(i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)},complexity:function(){return 1}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},void(i.Circle.fromObject=function(t,e){var r=new i.Circle(t);return e&&e(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),void(e.Triangle.fromObject=function(t,i){var r=new e.Triangle(t);return i&&i(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;return e.Ellipse?void e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)},complexity:function(){return 1}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},void(e.Ellipse.fromObject=function(t,i){var r=new e.Ellipse(t);return i&&i(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i){var r=new e.Rect(t);return i&&i(r),r}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Polyline?void e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,initialize:function(t,i){return e.Polygon.prototype.initialize.call(this,t,i)},_calcDimensions:function(){return e.Polygon.prototype._calcDimensions.call(this)},toObject:function(t){return e.Polygon.prototype.toObject.call(this,t)},toSVG:function(t){return e.Polygon.prototype.toSVG.call(this,t)},_render:function(t,i){e.Polygon.prototype.commonRender.call(this,t,i)&&(this._renderFill(t),this._renderStroke(t))},_renderDashedStroke:function(t){var i,r;t.beginPath();for(var n=0,s=this.points.length;n\n'),t?t(r.join("")):r.join("")},_render:function(t,e){this.commonRender(t,e)&&(this._renderFill(t),(this.stroke||this.strokeDashArray)&&(t.closePath(),this._renderStroke(t)))},commonRender:function(t,e){var i,r=this.points.length;if(!r||isNaN(this.points[r-1].y))return!1;e||t.translate(-this.pathOffset.x,-this.pathOffset.y),t.beginPath(),t.moveTo(this.points[0].x,this.points[0].y);for(var n=0;n"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()})});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){"string"==typeof t.paths?e.loadSVGFromURL(t.paths,function(r){var n=t.paths;delete t.paths;var s=e.util.groupSVGElements(r,t,n);i(s)}):e.util.enlivenObjects(t.paths,function(r){delete t.paths,i(new e.PathGroup(r,t))})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,s=e.util.array.invoke;if(!e.Group){var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0;t.set({originalLeft:r,originalTop:n,left:r-e.x,top:n-e.y}),t.setCoords(s)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){return i(this.callSuper("toObject",t),{objects:s(this._objects,"toObject",t)})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},drawObject:function(t){for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in o){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=function(t){return new e.Image.filters.Convolute(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,j,M,A,P,D,I;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;h=e)){D=r(1e3*s(c-T.x)),O[D]||(O[D]={});for(var E=k.y-w;E<=k.y+w;E++)E<0||E>=o||(I=r(1e3*s(E-T.y)),O[D][I]||(O[D][I]=m(n(i(D*x,2)+i(I*C,2))/1e3)),u=O[D][I],u>0&&(d=4*(E*e+c),g+=u,j+=u*v[d],M+=u*v[d+1],A+=u*v[d+2],P+=u*v[d+3]))}d=4*(h*a+t),b[d]=j/g,b[d+1]=M/g,b[d+2]=A/g,b[d+3]=P/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(E=4*(I+M*e),k+=x*p[E+3],S+=x,p[E+3]<255&&(x=x*p[E+3]/250),w+=x*p[E],O+=x*p[E+1],T+=x*p[E+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=k/S}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=function(t){return new e.Image.filters.Resize(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;t.fillStyle=s,this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearDimensionCache:function(){var t=!1;return this._forceClearCache?(this._forceClearCache=!1,this.dirty=!0,!0):(t=this.hasStateChanged("_dimensionAffectingProps"),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),t)},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e))},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",e)},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,i,s,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,i,s,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),this._dimensionAffectingProps.indexOf(t)>-1&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,r){var n=new e.Text(t.text,i(t));return r&&r(n),n},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(e,r)):t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a=0,h=this._getLeftOffset(),c=this._getTopOffset();t.save();for(var l=0,u=this._textLines.length;l0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(this.ctx,r)):e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.hiddenTextarea&&this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(s[parseInt(o,10)-i]=this.styles[e][o],delete this.styles[e][o]);this.styles[e+1]=s}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}this.styles[e][i]=r||t(n[i-1]),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this._fireSelectionChanged(),this._updateTextarea()},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=fabric.util.object.clone(this.getSelectionStyles(this.selectionStart,this.selectionEnd)),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.clone;e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(t){t=t||this.ctx;var e=this.textAlign;t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())};var e=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,i){var r=e(this.styles),n=this._styleMap[t];t=n.line;for(var s in this.styles){var o=parseInt(s,10);o>t&&(this.styles[o+i]=r[o],r[o-i]||delete this.styles[o])}},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height),originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file +var fabric=fabric||{version:"1.7.2"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E")),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.fontPaths={},fabric.charWidthsCache={},fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:fabric.util.array.fill(i,!1)}}function e(t,e){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this}function i(e,i){if(this.__eventListeners){if(0===arguments.length)for(e in this.__eventListeners)t.call(this,e);else if(1===arguments.length&&"object"==typeof arguments[0])for(var r in e)t.call(this,r,e[r]);else t.call(this,e,i);return this}}function r(t,e){if(this.__eventListeners){var i=this.__eventListeners[t];if(i){for(var r=0,n=i.length;r-1},complexity:function(){return this.getObjects().reduce(function(t,e){return t+=e.complexity?e.complexity():0},0)}},function(t){var e=Math.sqrt,i=Math.atan2,r=Math.pow,n=Math.abs,s=Math.PI/180;fabric.util={removeFromArray:function(t,e){var i=t.indexOf(e);return i!==-1&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*s},radiansToDegrees:function(t){return t/s},rotatePoint:function(t,e,i){t.subtractEquals(e);var r=fabric.util.rotateVector(t,i);return new fabric.Point(r.x,r.y).addEquals(e)},rotateVector:function(t,e){var i=Math.sin(e),r=Math.cos(e),n=t.x*r-t.y*i,s=t.x*i+t.y*r;return{x:n,y:s}},transformPoint:function(t,e,i){return i?new fabric.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new fabric.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t){var e=[t[0].x,t[1].x,t[2].x,t[3].x],i=fabric.util.array.min(e),r=fabric.util.array.max(e),n=Math.abs(i-r),s=[t[0].y,t[1].y,t[2].y,t[3].y],o=fabric.util.array.min(s),a=fabric.util.array.max(s),h=Math.abs(o-a);return{left:i,top:o,width:n,height:h}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=fabric.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=fabric.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*fabric.DPI/25.4;case"cm":return r*fabric.DPI/2.54;case"in":return r*fabric.DPI;case"pt":return r*fabric.DPI/72;case"pc":return r*fabric.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=fabric.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),fabric.util.resolveNamespace(e)[t]},resolveNamespace:function(e){if(!e)return fabric;var i,r=e.split("."),n=r.length,s=t||fabric.window;for(i=0;ir;)r+=a[d++%f],r>l&&(r=l),t[g?"lineTo":"moveTo"](r,0),g=!g;t.restore()},createCanvasElement:function(t){return t||(t=fabric.document.createElement("canvas")),t.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(t),t},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(t){var e,i,r,n,s,o=t.prototype;for(e=o.stateProperties.length;e--;)i=o.stateProperties[e],r=i.charAt(0).toUpperCase()+i.slice(1),n="set"+r,s="get"+r,o[s]||(o[s]=function(t){return new Function('return this.get("'+t+'")')}(i)),o[n]||(o[n]=function(t){return new Function("value",'return this.set("'+t+'", value)')}(i))},clipContext:function(t,e){e.save(),e.beginPath(),t.clipTo(e),e.clip()},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var n=i(t[1],t[0]),o=r(t[0],2)+r(t[1],2),a=e(o),h=(t[0]*t[3]-t[2]*t[1])/a,c=i(t[0]*t[2]+t[1]*t[3],o);return{angle:n/s,scaleX:a,scaleY:h,skewX:c/s,skewY:0,translateX:t[4],translateY:t[5]}},customTransformMatrix:function(t,e,i){var r=[1,0,n(Math.tan(i*s)),1],o=[n(t),0,0,n(e)];return fabric.util.multiplyTransformMatrices(o,r,!0)},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.setAngle(0)},getFunctionBody:function(t){return(String(t).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,s,o=!0,a=t.getImageData(e,i,2*r||1,2*r||1),h=a.data.length;for(n=3;n0?D-=2*f:1===c&&D<0&&(D+=2*f);for(var E=Math.ceil(Math.abs(D/f*2)),I=[],L=D/E,R=8/3*Math.sin(L/4)*Math.sin(L/4)/Math.sin(L/2),F=A+L,B=0;B=n?s-n:2*Math.PI-(n-s)}function r(t,e,i,r,n,s,h,c){var l=a.call(arguments);if(o[l])return o[l];var u,f,d,g,p,v,b,m,y=Math.sqrt,_=Math.min,x=Math.max,C=Math.abs,S=[],w=[[],[]];f=6*t-12*i+6*n,u=-3*t+9*i-9*n+3*h,d=3*i-3*t;for(var O=0;O<2;++O)if(O>0&&(f=6*e-12*r+6*s,u=-3*e+9*r-9*s+3*c,d=3*r-3*e),C(u)<1e-12){if(C(f)<1e-12)continue;g=-d/f,0=e})}function i(t,e){return n(t,e,function(t,e){return t>>0;if(0===i)return-1;var r=0;if(arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=i)return-1;for(var n=r>=0?r:Math.max(i-Math.abs(r),0);n>>0;i>>0;r>>0;i>>0;i>>0;n>>0,r=0;if(arguments.length>1)e=arguments[1];else for(;;){if(r in this){e=this[r++];break}if(++r>=i)throw new TypeError}for(;r/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:t,capitalize:e,escapeXml:i}}(),function(){var t=Array.prototype.slice,e=Function.prototype.apply,i=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var n,s=this,o=t.call(arguments,1);return n=o.length?function(){return e.call(s,this instanceof i?this:r,o.concat(t.call(arguments)))}:function(){return e.call(s,this instanceof i?this:r,arguments)},i.prototype=this.prototype,n.prototype=new i,n})}(),function(){function t(){}function e(t){var e=this.constructor.superclass.prototype[t];return arguments.length>1?e.apply(this,r.call(arguments,1)):e.call(this)}function i(){function i(){this.initialize.apply(this,arguments)}var s=null,a=r.call(arguments,0);"function"==typeof a[0]&&(s=a.shift()),i.superclass=s,i.subclasses=[],s&&(t.prototype=s.prototype,i.prototype=new t,s.subclasses.push(i));for(var h=0,c=a.length;h-1?t.prototype[r]=function(t){return function(){var r=this.constructor.superclass;this.constructor.superclass=i;var n=e[t].apply(this,arguments);if(this.constructor.superclass=r,"initialize"!==t)return n}}(r):t.prototype[r]=e[r],s&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};fabric.util.createClass=i}(),function(){function t(t){var e,i,r=Array.prototype.slice.call(arguments,1),n=r.length;for(i=0;i-1?s(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)s(t,e[r]);else{var n="float"===r||"cssFloat"===r?"undefined"==typeof i.styleFloat?"cssFloat":"styleFloat":r;i[n]=e[r]}return t}var e=fabric.document.createElement("div"),i="string"==typeof e.style.opacity,r="string"==typeof e.style.filter,n=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(t){return t};i?s=function(t,e){return t.style.opacity=e,t}:r&&(s=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),n.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(n,e)):i.filter+=" alpha(opacity="+100*e+")",t}),fabric.util.setStyle=t}(),function(){function t(t){return"string"==typeof t?fabric.document.getElementById(t):t}function e(t,e){var i=fabric.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function i(t,e){t&&(" "+t.className+" ").indexOf(" "+e+" ")===-1&&(t.className+=(t.className?" ":"")+e)}function r(t,i,r){return"string"==typeof i&&(i=e(i,r)),t.parentNode&&t.parentNode.replaceChild(i,t),i.appendChild(t),i}function n(t){for(var e=0,i=0,r=fabric.document.documentElement,n=fabric.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&(t=t.parentNode||t.host,t===fabric.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==fabric.util.getElementStyle(t,"position")););return{left:e,top:i}}function s(t){var e,i,r=t&&t.ownerDocument,s={left:0,top:0},o={left:0,top:0},a={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!r)return o;for(var h in a)o[a[h]]+=parseInt(c(t,h),10)||0;return e=r.documentElement,"undefined"!=typeof t.getBoundingClientRect&&(s=t.getBoundingClientRect()),i=n(t),{left:s.left+i.left-(e.clientLeft||0)+o.left,top:s.top+i.top-(e.clientTop||0)+o.top}}var o,a=Array.prototype.slice,h=function(t){return a.call(t,0)};try{o=h(fabric.document.childNodes)instanceof Array}catch(t){}o||(h=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e});var c;c=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(t,e){var i=fabric.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},function(){function t(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=fabric.util.falseFunction),r?t.style[r]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t}function e(t){return"undefined"!=typeof t.onselectstart&&(t.onselectstart=null),r?t.style[r]="":"string"==typeof t.unselectable&&(t.unselectable=""),t}var i=fabric.document.documentElement.style,r="userSelect"in i?"userSelect":"MozUserSelect"in i?"MozUserSelect":"WebkitUserSelect"in i?"WebkitUserSelect":"KhtmlUserSelect"in i?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=t,fabric.util.makeElementSelectable=e}(),function(){function t(t,e){var i=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),n=!0;r.onload=r.onreadystatechange=function(t){if(n){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;n=!1,e(t||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=t,i.appendChild(r)}fabric.util.getScript=t}(),fabric.util.getById=t,fabric.util.toArray=h,fabric.util.makeElement=e,fabric.util.addClass=i,fabric.util.wrapElement=r,fabric.util.getScrollLeftTop=n,fabric.util.getElementOffset=s,fabric.util.getElementStyle=c}(),function(){function t(t,e){return t+(/\?/.test(t)?"&":"?")+e}function e(){}function i(i,n){n||(n={});var s=n.method?n.method.toUpperCase():"GET",o=n.onComplete||function(){},a=r(),h=n.body||n.parameters;return a.onreadystatechange=function(){4===a.readyState&&(o(a),a.onreadystatechange=e)},"GET"===s&&(h=null,"string"==typeof n.parameters&&(i=t(i,n.parameters))),a.open(s,i,!0),"POST"!==s&&"PUT"!==s||a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(h),a}var r=function(){for(var t=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],e=t.length;e--;)try{var i=t[e]();if(i)return t[e]}catch(t){}}();fabric.util.request=i}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(t){"undefined"!=typeof console[t]&&"function"==typeof console[t].apply&&(fabric[t]=function(){return console[t].apply(console,arguments)})}),function(){function t(t){e(function(i){t||(t={});var r,n=i||+new Date,s=t.duration||500,o=n+s,a=t.onChange||function(){},h=t.abort||function(){return!1},c=t.easing||function(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e},l="startValue"in t?t.startValue:0,u="endValue"in t?t.endValue:100,f=t.byValue||u-l;t.onStart&&t.onStart(),function i(u){r=u||+new Date;var d=r>o?s:r-n;return h()?void(t.onComplete&&t.onComplete()):(a(c(d,l,f,s)),r>o?void(t.onComplete&&t.onComplete()):void e(i))}(n)})}function e(){return i.apply(fabric.window,arguments)}var i=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(t){fabric.window.setTimeout(t,1e3/60)};fabric.util.animate=t,fabric.util.requestAnimFrame=e}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}function e(e,i,r,n){var s=new fabric.Color(e).getSource(),o=new fabric.Color(i).getSource();n=n||{},fabric.util.animate(fabric.util.object.extend(n,{duration:r||500,startValue:s,endValue:o,byValue:o,easing:function(e,i,r,s){var o=n.colorEasing?n.colorEasing(e,s):1-Math.cos(e/s*(Math.PI/2));return t(i,r,o)}}))}fabric.util.animateColor=e}(),function(){function t(t,e,i,r){return ta?a:o),1===o&&1===a&&0===h&&0===c&&0===f&&0===d)return y;if((f||d)&&(_=" translate("+x(f)+" "+x(d)+") "),r=_+" matrix("+o+" 0 0 "+a+" "+h*o+" "+c*a+") ","svg"===t.nodeName){for(n=t.ownerDocument.createElement("g");t.firstChild;)n.appendChild(t.firstChild);t.appendChild(n)}else n=t,r=n.getAttribute("transform")+r;return n.setAttribute("transform",r),y}function g(t){var e=t.objects,i=t.options;return e=e.map(function(t){return v[m(t.type)].fromObject(t)}),{objects:e,options:i}}function p(t,e,i){e[i]&&e[i].toSVG&&t.push('\t\n','\t\t\n\t\n')}var v=t.fabric||(t.fabric={}),b=v.util.object.extend,m=v.util.string.capitalize,y=v.util.object.clone,_=v.util.toFixed,x=v.util.parseUnit,C=v.util.multiplyTransformMatrices,S=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,w=/^(symbol|image|marker|pattern|view|svg)$/i,O=/^(?:pattern|defs|symbol|metadata)$/i,T=/^(symbol|g|a|svg)$/i,k={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray", +"stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},j={stroke:"strokeOpacity",fill:"fillOpacity"};v.cssRules={},v.gradientDefs={},v.parseTransformAttribute=function(){function t(t,e){var i=e[0],r=3===e.length?e[1]:0,n=3===e.length?e[2]:0;t[0]=Math.cos(i),t[1]=Math.sin(i),t[2]=-Math.sin(i),t[3]=Math.cos(i),t[4]=r-(t[0]*r+t[2]*n),t[5]=n-(t[1]*r+t[3]*n)}function e(t,e){var i=e[0],r=2===e.length?e[1]:e[0];t[0]=i,t[3]=r}function i(t,e){t[2]=Math.tan(v.util.degreesToRadians(e[0]))}function r(t,e){t[1]=Math.tan(v.util.degreesToRadians(e[0]))}function n(t,e){t[4]=e[0],2===e.length&&(t[5]=e[1])}var s=[1,0,0,1,0,0],o=v.reNum,a="(?:\\s+,?\\s*|,\\s*)",h="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",c="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+")"+a+"("+o+"))?\\s*\\))",u="(?:(scale)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",f="(?:(translate)\\s*\\(\\s*("+o+")(?:"+a+"("+o+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")"+a+"("+o+")\\s*\\))",g="(?:"+d+"|"+f+"|"+u+"|"+l+"|"+h+"|"+c+")",p="(?:"+g+"(?:"+a+"*"+g+")*)",b="^\\s*(?:"+p+"?)\\s*$",m=new RegExp(b),y=new RegExp(g,"g");return function(o){var a=s.concat(),h=[];if(!o||o&&!m.test(o))return a;o.replace(y,function(o){var c=new RegExp(g).exec(o).filter(function(t){return!!t}),l=c[1],u=c.slice(2).map(parseFloat);switch(l){case"translate":n(a,u);break;case"rotate":u[0]=v.util.degreesToRadians(u[0]),t(a,u);break;case"scale":e(a,u);break;case"skewX":i(a,u);break;case"skewY":r(a,u);break;case"matrix":a=u}h.push(a.concat()),a=s.concat()});for(var c=h[0];h.length>1;)h.shift(),c=v.util.multiplyTransformMatrices(c,h[0]);return c}}();var M=new RegExp("^\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*,?\\s*("+v.reNum+"+)\\s*$");v.parseSVGDocument=function(){function t(t,e){for(;t&&(t=t.parentNode);)if(t.nodeName&&e.test(t.nodeName.replace("svg:",""))&&!t.getAttribute("instantiated_by_use"))return!0;return!1}return function(e,i,r){if(e){f(e);var n=new Date,s=v.Object.__uid++,o=d(e),a=v.util.toArray(e.getElementsByTagName("*"));if(o.svgUid=s,0===a.length&&v.isLikelyNode){a=e.selectNodes('//*[name(.)!="svg"]');for(var h=[],c=0,l=a.length;c/i,""))),n&&n.documentElement||e&&e(null),v.parseSVGDocument(n.documentElement,function(i,r){P.set(t,{objects:v.util.array.invoke(i,"toObject"),options:r}),e&&e(i,r)},i)}t=t.replace(/^\n\s*/,"").trim(),P.has(t,function(i){i?P.get(t,function(t){var i=g(t);e(i.objects,i.options)}):new v.util.request(t,{method:"get",onComplete:r})})},loadSVGFromString:function(t,e,i){t=t.trim();var r;if("undefined"!=typeof DOMParser){var n=new DOMParser;n&&n.parseFromString&&(r=n.parseFromString(t,"text/xml"))}else v.window.ActiveXObject&&(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(t.replace(//i,"")));v.parseSVGDocument(r.documentElement,function(t,i){e(t,i)},i)},createSVGFontFacesMarkup:function(t){for(var e,i,r,n,s,o,a,h="",c={},l=v.fontPaths,u=0,f=t.length;u',"\n",h,"","\n"].join("")),h},createSVGRefElementsMarkup:function(t){var e=[];return p(e,t,"backgroundColor"),p(e,t,"overlayColor"),e.join("")}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(t,e,i,r){this.elements=t,this.callback=e,this.options=i,this.reviver=r,this.svgUid=i&&i.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var t=0,e=this.elements.length;tt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,i){return"undefined"==typeof i&&(i=.5),i=Math.max(Math.min(1,i),0),new e(this.x+(t.x-this.x)*i,this.y+(t.y-this.y)*i)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new e(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new e(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new e(this.x,this.y)}}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){this.status=t,this.points=[]}var i=t.fabric||(t.fabric={});return i.Intersection?void i.warn("fabric.Intersection is already defined"):(i.Intersection=e,i.Intersection.prototype={constructor:e,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},i.Intersection.intersectLineLine=function(t,r,n,s){var o,a=(s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(s.y-n.y)*(r.x-t.x)-(s.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(o=new e("Intersection"),o.appendPoint(new i.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y)))):o=new e}else o=new e(0===a||0===h?"Coincident":"Parallel");return o},i.Intersection.intersectLinePolygon=function(t,i,r){for(var n,s,o,a=new e,h=r.length,c=0;c0&&(a.status="Intersection"),a},i.Intersection.intersectPolygonPolygon=function(t,i){for(var r=new e,n=t.length,s=0;s0&&(r.status="Intersection"),r},void(i.Intersection.intersectPolygonRectangle=function(t,r,n){var s=r.min(n),o=r.max(n),a=new i.Point(o.x,s.y),h=new i.Point(s.x,o.y),c=e.intersectLinePolygon(s,a,t),l=e.intersectLinePolygon(a,o,t),u=e.intersectLinePolygon(o,h,t),f=e.intersectLinePolygon(h,s,t),d=new e;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function i(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}var r=t.fabric||(t.fabric={});return r.Color?void r.warn("fabric.Color is already defined."):(r.Color=e,r.Color.prototype={_tryParsingColor:function(t){var i;t in e.colorNameMap&&(t=e.colorNameMap[t]),"transparent"===t&&(i=[255,255,255,0]),i||(i=e.sourceFromHex(t)),i||(i=e.sourceFromRgb(t)),i||(i=e.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,e,i){t/=255,e/=255,i/=255;var n,s,o,a=r.util.array.max([t,e,i]),h=r.util.array.min([t,e,i]);if(o=(a+h)/2,a===h)n=s=0;else{var c=a-h;switch(s=o>.5?c/(2-a-h):c/(a+h),a){case t:n=(e-i)/c+(e1?1:s,n){var o=n.split(/\s*;\s*/);""===o[o.length-1]&&o.pop();for(var a=o.length;a--;){var h=o[a].split(/\s*:\s*/),c=h[0].trim(),l=h[1].trim();"stop-color"===c?e=l:"stop-opacity"===c&&(r=l)}}return e||(e=t.getAttribute("stop-color")||"rgb(0,0,0)"),r||(r=t.getAttribute("stop-opacity")),e=new fabric.Color(e),i=e.getAlpha(),r=isNaN(parseFloat(r))?1:parseFloat(r),r*=i,{offset:s,color:e.toRgb(),opacity:r}}function e(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}function i(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}function r(t,e,i){var r,n=0,s=1,o="";for(var a in e)"Infinity"===e[a]?e[a]=1:"-Infinity"===e[a]&&(e[a]=0),r=parseFloat(e[a],10),s="string"==typeof e[a]&&/^\d+%$/.test(e[a])?.01:1,"x1"===a||"x2"===a||"r2"===a?(s*="objectBoundingBox"===i?t.width:1,n="objectBoundingBox"===i?t.left||0:0):"y1"!==a&&"y2"!==a||(s*="objectBoundingBox"===i?t.height:1,n="objectBoundingBox"===i?t.top||0:0),e[a]=r*s+n;if("ellipse"===t.type&&null!==e.r2&&"objectBoundingBox"===i&&t.rx!==t.ry){var h=t.ry/t.rx;o=" scale(1, "+h+")",e.y1&&(e.y1/=h),e.y2&&(e.y2/=h)}return o}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(t){t||(t={});var e={};this.id=fabric.Object.__uid++,this.type=t.type||"linear",e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice(),t.gradientTransform&&(this.gradientTransform=t.gradientTransform),this.offsetX=t.offsetX||this.offsetX,this.offsetY=t.offsetY||this.offsetY},addColorStop:function(t){for(var e in t){var i=new fabric.Color(t[e]);this.colorStops.push({offset:e,color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return fabric.util.populateWithProperties(this,e,t),e},toSVG:function(t){var e,i,r=fabric.util.object.clone(this.coords);if(this.colorStops.sort(function(t,e){return t.offset-e.offset}),!t.group||"path-group"!==t.group.type)for(var n in r)"x1"===n||"x2"===n||"r2"===n?r[n]+=this.offsetX-t.width/2:"y1"!==n&&"y2"!==n||(r[n]+=this.offsetY-t.height/2);i='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(i+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?e=["\n']:"radial"===this.type&&(e=["\n']);for(var s=0;s\n');return e.push("linear"===this.type?"\n":"\n"),e.join("")},toLive:function(t,e){var i,r,n=fabric.util.object.clone(this.coords);if(this.type){if(e.group&&"path-group"===e.group.type)for(r in n)"x1"===r||"x2"===r?n[r]+=-this.offsetX+e.width/2:"y1"!==r&&"y2"!==r||(n[r]+=-this.offsetY+e.height/2);"linear"===this.type?i=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(i=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2));for(var s=0,o=this.colorStops.length;s\n\n\n'},toLive:function(t){var e="function"==typeof this.source?this.source():this.source;if(!e)return"";if("undefined"!=typeof e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.toFixed;return e.Shadow?void e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(t){"string"==typeof t&&(t=this._parseShadow(t));for(var i in t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[],n=i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:n.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,s=e.Object.NUM_FRACTION_DIGITS,o=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=20;return t.width&&t.height&&(r=100*i((Math.abs(o.x)+this.blur)/t.width,s)+a,n=100*i((Math.abs(o.y)+this.blur)/t.height,s)+a),t.flipX&&(o.x*=-1),t.flipY&&(o.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke"].forEach(function(e){this[e]!==i[e]&&(t[e]=this[e])},this),t}}),void(e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var t=fabric.util.object.extend,e=fabric.util.getElementOffset,i=fabric.util.removeFromArray,r=fabric.util.toFixed,n=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(t,e){e||(e={}),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],backgroundVpt:!0,overlayVpt:!0,onBeforeScaleRotate:function(){},enableRetinaScaling:!0,_initStatic:function(t,e){var i=fabric.StaticCanvas.prototype.renderAll.bind(this);this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==fabric.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?fabric.devicePixelRatio:1},_initRetinaScaling:function(){this._isRetinaScaling()&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},_setImageSmoothing:function(){var t=this.getContext();t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?fabric.util.loadImage(e,function(e){e&&(this[t]=new fabric.Image(e,r)),i&&i(e)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,i&&i(e)),this},__setBgOverlayColor:function(t,e,i){if(e&&e.source){var r=this;fabric.util.loadImage(e.source,function(n){r[t]=new fabric.Pattern({source:n,repeat:e.repeat,offsetX:e.offsetX,offsetY:e.offsetY}),i&&i()})}else this[t]=e,i&&i();return this},_createCanvasElement:function(t){var e=fabric.util.createCanvasElement(t);if(e.style||(e.style={}),!e)throw n;if("undefined"==typeof e.getContext)throw n;return e},_initOptions:function(t){for(var e in t)this[e]=t[e];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){this.lowerCanvasEl=fabric.util.getById(t)||this._createCanvasElement(t),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;e=e||{};for(var r in t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px"),e.backstoreOnly||this._setCssDimension(r,i);return this._initRetinaScaling(),this._setImageSmoothing(),this.calcOffset(),e.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i=this._activeGroup,r=!1,n=!0;this.viewportTransform=t;for(var s=0,o=this._objects.length;s"),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,s=e.height||this.height,o='viewBox="0 0 '+this.width+" "+this.height+'" ',a=fabric.Object.NUM_FRACTION_DIGITS;e.viewBox?o='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,o='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",fabric.version,"\n","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"\n")},_setSVGObjects:function(t,e){for(var i,r=0,n=this.getObjects(),s=n.length;r\n"):this[e]&&"overlayColor"===e&&t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=n.length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderAll&&this.renderAll()},bringToFront:function(t){if(!t)return this;var e,r,n,s=this._activeGroup;if(t===s)for(n=s._objects,e=0;e=0;--n){var s=t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t);if(s){r=n;break}}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,s,o,a,h=this._activeGroup;if(t===h)for(a=h._objects,r=a.length;r--;)n=a[r],s=this._objects.indexOf(n),s!==this._objects.length-1&&(o=s+1,i(this._objects,n),this._objects.splice(o,0,n));else s=this._objects.indexOf(t),s!==this._objects.length-1&&(o=this._findNewUpperIndex(t,s,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderAll&&this.renderAll(),this},_findNewUpperIndex:function(t,e,i){var r;if(i){r=e;for(var n=e+1;n"}}),t(fabric.StaticCanvas.prototype,fabric.Observable),t(fabric.StaticCanvas.prototype,fabric.Collection),t(fabric.StaticCanvas.prototype,fabric.DataURLExporter),t(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=fabric.util.createCanvasElement();if(!e||!e.getContext)return null;var i=e.getContext("2d");if(!i)return null;switch(t){case"getImageData":return"undefined"!=typeof i.getImageData;case"setLineDash":return"undefined"!=typeof i.setLineDash;case"toDataURL":return"undefined"!=typeof e.toDataURL;case"toDataURLWithQuality":try{return e.toDataURL("image/jpeg",0),!0}catch(t){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(t){return this.shadow=new fabric.Shadow(t),this},_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&t.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var t=this.canvas.contextTop,e=this.canvas.getZoom();t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*e,t.shadowOffsetX=this.shadow.offsetX*e,t.shadowOffsetY=this.shadow.offsetY*e}},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(t){this.canvas=t,this._points=[]},onMouseDown:function(t){this._prepareForDrawing(t),this._captureDrawingPath(t),this._render()},onMouseMove:function(t){this._captureDrawingPath(t),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(t){var e=new fabric.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){this._points.push(t)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new fabric.Point(t.x,t.y);this._addPoint(e)},_render:function(){var t=this.canvas.contextTop,e=this.canvas.viewportTransform,i=this._points[0],r=this._points[1];t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.beginPath(),2===this._points.length&&i.x===r.x&&i.y===r.y&&(i.x-=.5,r.x+=.5),t.moveTo(i.x,i.y);for(var n=1,s=this._points.length;n0?1:-1,"y"===i&&(s=e.target.skewY,o="top",a="bottom",r="originY"),n[-1]=o,n[1]=a,e.target.flipX&&(c*=-1),e.target.flipY&&(c*=-1),0===s?(e.skewSign=-h*t*c,e[r]=n[-t]):(s=s>0?1:-1,e.skewSign=s,e[r]=n[s*h*c])},_skewObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=!1,o=n.get("lockSkewingX"),a=n.get("lockSkewingY");if(o&&"x"===i||a&&"y"===i)return!1;var h,c,l=n.getCenterPoint(),u=n.toLocalPoint(new fabric.Point(t,e),"center","center")[i],f=n.toLocalPoint(new fabric.Point(r.lastX,r.lastY),"center","center")[i],d=n._getTransformedDimensions();return this._changeSkewTransformOrigin(u-f,r,i),h=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY)[i],c=n.translateToOriginPoint(l,r.originX,r.originY),s=this._setObjectSkew(h,r,i,d),r.lastX=t,r.lastY=e,n.setPositionByOrigin(c,r.originX,r.originY),s},_setObjectSkew:function(t,e,i,r){var n,s,o,a,h,c,l,u,f,d=e.target,g=!1,p=e.skewSign;return"x"===i?(a="y",h="Y",c="X",u=0,f=d.skewY):(a="x",h="X",c="Y",u=d.skewX,f=0),o=d._getTransformedDimensions(u,f),l=2*Math.abs(t)-o[i],l<=2?n=0:(n=p*Math.atan(l/d["scale"+c]/(o[a]/d["scale"+h])),n=fabric.util.radiansToDegrees(n)),g=d["skew"+c]!==n,d.set("skew"+c,n),0!==d["skew"+h]&&(s=d._getTransformedDimensions(),n=r[a]/s[a]*d["scale"+h],d.set("scale"+h,n)),g},_scaleObject:function(t,e,i){var r=this._currentTransform,n=r.target,s=n.get("lockScalingX"),o=n.get("lockScalingY"),a=n.get("lockScalingFlip");if(s&&o)return!1;var h=n.translateToOriginPoint(n.getCenterPoint(),r.originX,r.originY),c=n.toLocalPoint(new fabric.Point(t,e),r.originX,r.originY),l=n._getTransformedDimensions(),u=!1;return this._setLocalMouse(c,r),u=this._setObjectScale(c,r,s,o,i,a,l),n.setPositionByOrigin(h,r.originX,r.originY),u},_setObjectScale:function(t,e,i,r,n,s,o){var a,h,c,l,u=e.target,f=!1,d=!1,g=!1;return c=t.x*u.scaleX/o.x,l=t.y*u.scaleY/o.y,a=u.scaleX!==c,h=u.scaleY!==l,s&&c<=0&&ci.padding?t.x<0?t.x+=i.padding:t.x-=i.padding:t.x=0,n(t.y)>i.padding?t.y<0?t.y+=i.padding:t.y-=i.padding:t.y=0},_rotateObject:function(t,e){var n=this._currentTransform;if(n.target.get("lockRotation"))return!1;var s=r(n.ey-n.top,n.ex-n.left),o=r(e-n.top,t-n.left),a=i(o-s+n.theta),h=!0;if(a<0&&(a=360+a),a%=360,n.target.snapAngle>0){var c=n.target.snapAngle,l=n.target.snapThreshold||c,u=Math.ceil(a/c)*c,f=Math.floor(a/c)*c;Math.abs(a-f)0?0:-i),e.ey-(r>0?0:-r),a,h)),this.selectionLineWidth&&this.selectionBorderColor)if(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1&&!s){var c=e.ex+o-(i>0?0:a),l=e.ey+o-(r>0?0:h);t.beginPath(),fabric.util.drawDashedLine(t,c,l,c+a,l,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l+h-1,c+a,l+h-1,this.selectionDashArray),fabric.util.drawDashedLine(t,c,l,c,l+h,this.selectionDashArray),fabric.util.drawDashedLine(t,c+a-1,l,c+a-1,l+h,this.selectionDashArray),t.closePath(),t.stroke()}else fabric.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(e.ex+o-(i>0?0:a),e.ey+o-(r>0?0:h),a,h)},findTarget:function(t,e){if(!this.skipTargetFind){var i,r=!0,n=this.getPointer(t,r),s=this.getActiveGroup(),o=this.getActiveObject();if(s&&!e&&this._checkTarget(n,s))return this._fireOverOutEvents(s,t),s;if(o&&o._findTargetCorner(n))return this._fireOverOutEvents(o,t),o;if(o&&this._checkTarget(n,o)){if(!this.preserveObjectStacking)return this._fireOverOutEvents(o,t),o;i=o}this.targets=[];var a=this._searchPossibleTargets(this._objects,n);return t[this.altSelectionKey]&&a&&i&&a!==i&&(a=i),this._fireOverOutEvents(a,t),a}},_fireOverOutEvents:function(t,e){t?this._hoveredTarget!==t&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout")),this.fire("mouse:over",{target:t,e:e}),t.fire("mouseover"),this._hoveredTarget=t):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:e}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(t,e){if(e&&e.visible&&e.evented&&this.containsPoint(null,e,t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;var i=this.isTargetTransparent(e,t.x,t.y);if(!i)return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n,s=t.length;s--;)if(this._checkTarget(e,t[s])){i=t[s],"group"===i.type&&i.subTargetCheck&&(r=this._normalizePointer(i,e),n=this._searchPossibleTargets(i._objects,r),n&&this.targets.push(n));break}return i},restorePointerVpt:function(t){return fabric.util.transformPoint(t,fabric.util.invertTransform(this.viewportTransform))},getPointer:function(e,i,r){r||(r=this.upperCanvasEl);var n,s=t(e),o=r.getBoundingClientRect(),a=o.width||0,h=o.height||0;return a&&h||("top"in o&&"bottom"in o&&(h=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(a=Math.abs(o.right-o.left))),this.calcOffset(),s.x=s.x-this._offset.left,s.y=s.y-this._offset.top,i||(s=this.restorePointerVpt(s)),n=0===a||0===h?{width:1,height:1}:{width:r.width/a,height:r.height/h},{x:s.x*n.width,y:s.y*n.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+t),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.getWidth()||t.width,i=this.getHeight()||t.height;fabric.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0}),t.width=e,t.height=i,fabric.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(t){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=t,t.set("active",!0)},setActiveObject:function(t,e){return this._setActiveObject(t),this.renderAll(),this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e}),this},getActiveObject:function(){return this._activeObject},_onObjectRemoved:function(t){this.getActiveObject()===t&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),this.callSuper("_onObjectRemoved",t)},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(t){var e=this._activeObject;return this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(),this.fire("selection:cleared",{e:t}),e&&e.fire("deselected",{e:t}),this},_setActiveGroup:function(t){this._activeGroup=t,t&&t.set("active",!0)},setActiveGroup:function(t,e){return this._setActiveGroup(t),t&&(this.fire("object:selected",{target:t,e:e}),t.fire("selected",{e:e})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var t=this.getActiveGroup();t&&t.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(t){var e=this.getActiveGroup();return this.fire("before:selection:cleared",{e:t,target:e}),this._discardActiveGroup(),this.fire("selection:cleared",{e:t}),this},deactivateAll:function(){for(var t,e=this.getObjects(),i=0,r=e.length;i1)){var r=this._groupSelector;r?(i=this.getPointer(t,!0),r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t),this._setCursorFromEvent(t,e)),this._handleEvent(t,"move",e?e:null)}},__onMouseWheel:function(t){this.fire("mouse:wheel",{e:t})},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.target.isMoving=!0,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._beforeScaleTransform(t,i),this._performTransformAction(t,i,e),i.actionPerformed&&this.renderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,s=e.target,o=e.action,a=!1;"rotate"===o?(a=this._rotateObject(r,n))&&this._fire("rotating",s,t):"scale"===o?(a=this._onScale(t,e,r,n))&&this._fire("scaling",s,t):"scaleX"===o?(a=this._scaleObject(r,n,"x"))&&this._fire("scaling",s,t):"scaleY"===o?(a=this._scaleObject(r,n,"y"))&&this._fire("scaling",s,t):"skewX"===o?(a=this._skewObject(r,n,"x"))&&this._fire("skewing",s,t):"skewY"===o?(a=this._skewObject(r,n,"y"))&&this._fire("skewing",s,t):(a=this._translateObject(r,n),a&&(this._fire("moving",s,t),this.setCursor(s.moveCursor||this.moveCursor))),e.actionPerformed=e.actionPerformed||a},_fire:function(t,e,i){this.fire("object:"+t,{target:e,e:i}),e.fire(t,{e:i})},_beforeScaleTransform:function(t,e){if("scale"===e.action||"scaleX"===e.action||"scaleY"===e.action){var i=this._shouldCenterTransform(e.target);(i&&("center"!==e.originX||"center"!==e.originY)||!i&&"center"===e.originX&&"center"===e.originY)&&(this._resetCurrentTransform(),e.reset=!0)}},_onScale:function(t,e,i,r){return!t[this.uniScaleKey]&&!this.uniScaleTransform||e.target.get("lockUniScaling")?(e.reset||"scale"!==e.currentAction||this._resetCurrentTransform(),e.currentAction="scaleEqually",this._scaleObject(i,r,"equally")):(e.currentAction="scale",this._scaleObject(i,r))},_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor;if(e.selectable){var r=this.getActiveGroup(),n=e._findTargetCorner&&(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this._setCornerCursor(n,e,t):this.setCursor(i)}else this.setCursor(i);return!0},_setCornerCursor:function(e,i,r){if(e in t)this.setCursor(this._getRotatedCornerCursor(e,i,r));else{if("mtr"!==e||!i.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(e,i,r){var n=Math.round(i.getAngle()%360/45);return n<0&&(n+=8),n+=t[e],r[this.altActionKey]&&t[e]%2===0&&(n+=2),n%=8,this.cursorMap[n]}})}(),function(){var t=Math.min,e=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(t,e){var i=this.getActiveObject();return t[this.selectionKey]&&e&&e.selectable&&(this.getActiveGroup()||i&&i!==e)&&this.selection},_handleGrouping:function(t,e){var i=this.getActiveGroup();(e!==i||(e=this.findTarget(t,!0)))&&(i?this._updateActiveGroup(e,t):this._createActiveGroup(e,t),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(t,e){var i=this.getActiveGroup();if(i.contains(t)){if(i.removeWithUpdate(t),t.set("active",!1),1===i.size())return this.discardActiveGroup(e),void this.setActiveObject(i.item(0))}else i.addWithUpdate(t);this.fire("selection:created",{target:i,e:e}),i.set("active",!0)},_createActiveGroup:function(t,e){if(this._activeObject&&t!==this._activeObject){var i=this._createGroup(t);i.addWithUpdate(),this.setActiveGroup(i),this._activeObject=null,this.fire("selection:created",{target:i,e:e})}t.set("active",!0)},_createGroup:function(t){var e=this.getObjects(),i=e.indexOf(this._activeObject)1&&(e=new fabric.Group(e.reverse(),{canvas:this}),e.addWithUpdate(),this.setActiveGroup(e,t),e.saveCoords(),this.fire("selection:created",{target:e}),this.renderAll())},_collectObjects:function(){for(var i,r=[],n=this._groupSelector.ex,s=this._groupSelector.ey,o=n+this._groupSelector.left,a=s+this._groupSelector.top,h=new fabric.Point(t(n,o),t(s,a)),c=new fabric.Point(e(n,o),e(s,a)),l=n===o&&s===a,u=this._objects.length;u--&&(i=this._objects[u],!(i&&i.selectable&&i.visible&&(i.intersectsWithRect(h,c)||i.isContainedWithinRect(h,c)||i.containsPoint(h)||i.containsPoint(c))&&(i.set("active",!0),r.push(i),l))););return r},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t);var e=this.getActiveGroup();e&&(e.setObjectsCoords().setCoords(),e.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),function(){var t=fabric.StaticCanvas.supports("toDataURLWithQuality");fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=t.multiplier||1,n={left:t.left||0,top:t.top||0,width:t.width||0,height:t.height||0};return this.__toDataURLWithMultiplier(e,i,n,r)},__toDataURLWithMultiplier:function(t,e,i,r){var n=this.getWidth(),s=this.getHeight(),o=(i.width||this.getWidth())*r,a=(i.height||this.getHeight())*r,h=this.getZoom(),c=h*r,l=this.viewportTransform,u=(l[4]-i.left)*r,f=(l[5]-i.top)*r,d=[c,0,0,c,u,f],g=this.interactive;this.viewportTransform=d,this.interactive&&(this.interactive=!1),n!==o||s!==a?this.setDimensions({width:o,height:a}):this.renderAll();var p=this.__toDataURL(t,e,i);return g&&(this.interactive=g),this.viewportTransform=l,this.setDimensions({width:n,height:s}),p},__toDataURL:function(e,i){var r=this.contextContainer.canvas;"jpg"===e&&(e="jpeg");var n=t?r.toDataURL("image/"+e,i):r.toDataURL("image/"+e);return n},toDataURLWithMultiplier:function(t,e,i){return this.toDataURL({format:t,multiplier:e,quality:i})}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(t,e,i){return this.loadFromJSON(t,e,i)},loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):fabric.util.object.clone(t);this.clear();var n=this;return this._enlivenObjects(r.objects,function(){n._setBgOverlay(r,function(){delete r.objects,delete r.backgroundImage,delete r.overlayImage,delete r.background,delete r.overlay;for(var t in r)n[t]=r[t];e&&e()})},i),this}},_setBgOverlay:function(t,e){var i=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(t.backgroundImage||t.overlayImage||t.background||t.overlay))return void(e&&e());var n=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(i.renderAll(),e&&e())};this.__setBgOverlay("backgroundImage",t.backgroundImage,r,n),this.__setBgOverlay("overlayImage",t.overlayImage,r,n),this.__setBgOverlay("backgroundColor",t.background,r,n),this.__setBgOverlay("overlayColor",t.overlay,r,n),n()},__setBgOverlay:function(t,e,i,r){var n=this;return e?void("backgroundImage"===t||"overlayImage"===t?fabric.Image.fromObject(e,function(e){n[t]=e,i[t]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})):void(i[t]=!0)},_enlivenObjects:function(t,e,i){var r=this;if(!t||0===t.length)return void(e&&e());var n=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(t,function(t){t.forEach(function(t,e){r.insertAt(t,e)}),r.renderOnAddRemove=n,e&&e()},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=fabric.document.createElement("canvas");e.width=this.getWidth(),e.height=this.getHeight();var i=new fabric.Canvas(e);i.clipTo=this.clipTo,this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.toFixed,n=e.util.string.capitalize,s=e.util.degreesToRadians,o=e.StaticCanvas.supports("setLineDash"),a=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",borderDashArray:null,cornerColor:"rgba(102,153,255,0.5)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:a,statefullCache:!1,noScaleCache:!0,dirty:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor skewX skewY".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit fillRule backgroundColor".split(" "),initialize:function(t){t=t||{},t&&this.setOptions(t),this.objectCaching&&(this._createCacheCanvas(),this.setupState({propertySet:"cacheProperties"}))},_createCacheCanvas:function(){this._cacheCanvas=e.document.createElement("canvas"),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas()},_getCacheCanvasDimensions:function(){var t=this.canvas&&this.canvas.getZoom()||1,i=this.getObjectScaling(),r=this._getNonTransformedDimensions(),n=this.canvas&&this.canvas._isRetinaScaling()?e.devicePixelRatio:1,s=i.scaleX*t*n,o=i.scaleY*t*n,a=r.x*s,h=r.y*o;return{width:a,height:h,zoomX:s,zoomY:o}},_updateCacheCanvas:function(){if(this.noScaleCache&&this.canvas&&this.canvas._currentTransform){var t=this.canvas._currentTransform.action;if("scale"===t.slice(0,5))return!1}var e=this._getCacheCanvasDimensions(),i=e.width,r=e.height,n=e.zoomX,s=e.zoomY;return(i!==this.cacheWidth||r!==this.cacheHeight)&&(this._cacheCanvas.width=i,this._cacheCanvas.height=r,this._cacheContext.translate(i/2,r/2),this._cacheContext.scale(n,s),this.cacheWidth=i,this.cacheHeight=r,this.zoomX=n,this.zoomY=s,!0)},_initGradient:function(t){!t.fill||!t.fill.colorStops||t.fill instanceof e.Gradient||this.set("fill",new e.Gradient(t.fill)),!t.stroke||!t.stroke.colorStops||t.stroke instanceof e.Gradient||this.set("stroke",new e.Gradient(t.stroke))},_initPattern:function(t){!t.fill||!t.fill.source||t.fill instanceof e.Pattern||this.set("fill",new e.Pattern(t.fill)),!t.stroke||!t.stroke.source||t.stroke instanceof e.Pattern||this.set("stroke",new e.Pattern(t.stroke))},_initClipping:function(t){if(t.clipTo&&"string"==typeof t.clipTo){var i=e.util.getFunctionBody(t.clipTo);"undefined"!=typeof i&&(this.clipTo=new Function("ctx",i))}},setOptions:function(t){for(var e in t)this.set(e,t[e]);this._initGradient(t),this._initPattern(t),this._initClipping(t)},transform:function(t,e){this.group&&!this.group._transformDone&&this.group===this.canvas._activeGroup&&this.group.transform(t);var i=e?this._getLeftTopCoords():this.getCenterPoint();t.translate(i.x,i.y),t.rotate(s(this.angle)),t.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1)),t.transform(1,0,Math.tan(s(this.skewX)),1,0,0),t.transform(1,Math.tan(s(this.skewY)),0,1,0,0)},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,n={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,i),top:r(this.top,i),width:r(this.width,i),height:r(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,i),scaleX:r(this.scaleX,i),scaleY:r(this.scaleY,i),angle:r(this.getAngle(),i),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix?this.transformMatrix.concat():this.transformMatrix,skewX:r(this.skewX,i),skewY:r(this.skewY,i)};return e.util.populateWithProperties(this,n,t),this.includeDefaultValues||(n=this._removeDefaultValues(n)),n},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype,r=i.stateProperties;return r.forEach(function(e){t[e]===i[e]&&delete t[e];var r="[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e]);r&&0===t[e].length&&0===i[e].length&&delete t[e]}),t},toString:function(){return"#"},get:function(t){return this[t]},getObjectScaling:function(){var t=this.scaleX,e=this.scaleY;if(this.group){var i=this.group.getObjectScaling();t*=i.scaleX,e*=i.scaleY}return{scaleX:t,scaleY:e}},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):"function"==typeof e&&"clipTo"!==t?this._set(t,e(this.get(t))):this._set(t,e),this},_set:function(t,i){var r="scaleX"===t||"scaleY"===t;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow||(i=new e.Shadow(i)),this[t]=i,this.cacheProperties.indexOf(t)>-1&&(this.dirty=!0),"width"!==t&&"height"!==t||(this.minScaleLimit=Math.min(.1,1/Math.max(this.width,this.height))),this},setOnGroup:function(){},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},setSourcePath:function(t){return this.sourcePath=t,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(t,i){0===this.width&&0===this.height||!this.visible||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),i||this.transform(t),this._setOpacity(t),this._setShadow(t),this.transformMatrix&&t.transform.apply(t,this.transformMatrix),this.clipTo&&e.util.clipContext(this,t),this.objectCaching&&!this.group?(this.isCacheDirty(i)&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i),this.dirty=!1),this.drawCacheOnCanvas(t)):(this.drawObject(t,i),i&&this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),this.clipTo&&t.restore(),t.restore())},drawObject:function(t,e){this._renderBackground(t),this._setStrokeStyles(t),this._setFillStyles(t),this._render(t,e)},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheWidth/2,-this.cacheHeight/2)},isCacheDirty:function(t){if(!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(!t){var e=this._getNonTransformedDimensions();this._cacheContext.clearRect(-e.x/2,-e.y/2,e.x,e.y)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){t.globalAlpha*=this.opacity},_setStrokeStyles:function(t){this.stroke&&(t.lineWidth=this.strokeWidth,t.lineCap=this.strokeLineCap,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,t.strokeStyle=this.stroke.toLive?this.stroke.toLive(t,this):this.stroke)},_setFillStyles:function(t){this.fill&&(t.fillStyle=this.fill.toLive?this.fill.toLive(t,this):this.fill)},_setLineDash:function(t,e,i){e&&(1&e.length&&e.push.apply(e,e),o?t.setLineDash(e):i&&i(t))},_renderControls:function(t,i){if(!(!this.active||i||this.group&&this.group!==this.canvas.getActiveGroup())){var r,n=this.getViewportTransform(),o=this.calcTransformMatrix();o=e.util.multiplyTransformMatrices(n,o),r=e.util.qrDecompose(o),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.group&&this.group===this.canvas.getActiveGroup()?(t.rotate(s(r.angle)),this.drawBordersInGroup(t,r)):(t.rotate(s(this.angle)),this.drawBorders(t)),this.drawControls(t),t.restore()}},_setShadow:function(t){if(this.shadow){var i=this.canvas&&this.canvas.viewportTransform[0]||1,r=this.canvas&&this.canvas.viewportTransform[3]||1,n=this.getObjectScaling();this.canvas&&this.canvas._isRetinaScaling()&&(i*=e.devicePixelRatio,r*=e.devicePixelRatio),t.shadowColor=this.shadow.color,t.shadowBlur=this.shadow.blur*(i+r)*(n.scaleX+n.scaleY)/4,t.shadowOffsetX=this.shadow.offsetX*i*n.scaleX,t.shadowOffsetY=this.shadow.offsetY*r*n.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_renderFill:function(t){if(this.fill){if(t.save(),this.fill.gradientTransform){var e=this.fill.gradientTransform;t.transform.apply(t,e)}this.fill.toLive&&t.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore()}},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray,this._renderDashedStroke),this.stroke.gradientTransform){var e=this.stroke.gradientTransform;t.transform.apply(t,e)}this.stroke.toLive&&t.translate(-this.width/2+this.stroke.offsetX||0,-this.height/2+this.stroke.offsetY||0),t.stroke(),t.restore()}},clone:function(t,i){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(i),t):new e.Object(this.toObject(i))},cloneAsImage:function(t,i){var r=this.toDataURL(i);return e.util.loadImage(r,function(i){t&&t(new e.Image(i))}),this},toDataURL:function(t){t||(t={});var i=e.util.createCanvasElement(),r=this.getBoundingRect();i.width=r.width,i.height=r.height,e.util.wrapElement(i,"div");var n=new e.StaticCanvas(i,{enableRetinaScaling:t.enableRetinaScaling});"jpg"===t.format&&(t.format="jpeg"),"jpeg"===t.format&&(n.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new e.Point(n.getWidth()/2,n.getHeight()/2),"center","center");var o=this.canvas;n.add(this);var a=n.toDataURL(t);return this.set(s).setCoords(),this.canvas=o,n.dispose(),n=null,a},isType:function(t){return this.type===t},complexity:function(){return 0},toJSON:function(t){return this.toObject(t)},setGradient:function(t,i){i||(i={});var r={colorStops:[]};r.type=i.type||(i.r1||i.r2?"radial":"linear"),r.coords={x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2},(i.r1||i.r2)&&(r.coords.r1=i.r1,r.coords.r2=i.r2),i.gradientTransform&&(r.gradientTransform=i.gradientTransform);for(var n in i.colorStops){var s=new e.Color(i.colorStops[n]);r.colorStops.push({offset:n,color:s.toRgb(),opacity:s.getAlpha()})}return this.set(t,e.Gradient.forObject(this,r))},setPatternFill:function(t){return this.set("fill",new e.Pattern(t))},setShadow:function(t){return this.set("shadow",t?new e.Shadow(t):null)},setColor:function(t){return this.set("fill",t),this},setAngle:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},remove:function(){return this.canvas&&this.canvas.remove(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,e.util.degreesToRadians(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors(e.Object),e.Object.prototype.rotate=e.Object.prototype.setAngle,i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(t,r,n,s,o){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof s?s=e[s]:s-=.5,a=s-r,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof o?o=i[o]:o-=.5,h=o-n,(a||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new fabric.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?fabric.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,s,o=this.getCenterPoint();return n="undefined"!=typeof i&&"undefined"!=typeof r?this.translateToGivenOrigin(o,"center","center",i,r):new fabric.Point(this.left,this.top),s=new fabric.Point(e.x,e.y),this.angle&&(s=fabric.util.rotatePoint(s,o,-t(this.angle))),s.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,s=t(this.angle),o=this.getWidth(),a=Math.cos(s)*o,h=Math.sin(s)*o;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY); +this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function t(t){return[new fabric.Point(t.tl.x,t.tl.y),new fabric.Point(t.tr.x,t.tr.y),new fabric.Point(t.br.x,t.br.y),new fabric.Point(t.bl.x,t.bl.y)]}var e=fabric.util.degreesToRadians,i=fabric.util.multiplyTransformMatrices;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,i){var r=t(this.oCoords),n=fabric.Intersection.intersectPolygonRectangle(r,e,i);return"Intersection"===n.status},intersectsWithObject:function(e){var i=fabric.Intersection.intersectPolygonPolygon(t(this.oCoords),t(e.oCoords));return"Intersection"===i.status||e.isContainedWithinObject(this)||this.isContainedWithinObject(e)},isContainedWithinObject:function(e){for(var i=t(this.oCoords),r=0;r<4;r++)if(!e.containsPoint(i[r]))return!1;return!0},isContainedWithinRect:function(t,e){var i=this.getBoundingRect();return i.left>=t.x&&i.left+i.width<=e.x&&i.top>=t.y&&i.top+i.height<=e.y},containsPoint:function(t){this.oCoords||this.setCoords();var e=this._getImageLines(this.oCoords),i=this._findCrossPoints(t,e);return 0!==i&&i%2===1},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,s,o,a,h=0;for(var c in e)if(a=e[c],!(a.o.y=t.y&&a.d.y>=t.y||(a.o.x===a.d.x&&a.o.x>=t.x?o=a.o.x:(i=0,r=(a.d.y-a.o.y)/(a.d.x-a.o.x),n=t.y-i*t.x,s=a.o.y-r*a.o.x,o=-(n-s)/(i-r)),o>=t.x&&(h+=1),2!==h)))break;return h},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(t){var e=this.calcCoords(t);return fabric.util.makeBoundingBoxFromPoints([e.tl,e.tr,e.br,e.bl])},getWidth:function(){return this._getTransformedDimensions().x},getHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)0?Math.atan(o/s):0,l=s/Math.cos(c)/2,u=Math.cos(c+i)*l,f=Math.sin(c+i)*l,d=this.getCenterPoint(),g=t?d:fabric.util.transformPoint(d,r),p=new fabric.Point(g.x-u,g.y-f),v=new fabric.Point(p.x+s*h,p.y+s*a),b=new fabric.Point(p.x-o*a,p.y+o*h),m=new fabric.Point(g.x+u,g.y+f);if(!t)var y=new fabric.Point((p.x+b.x)/2,(p.y+b.y)/2),_=new fabric.Point((v.x+p.x)/2,(v.y+p.y)/2),x=new fabric.Point((m.x+v.x)/2,(m.y+v.y)/2),C=new fabric.Point((m.x+b.x)/2,(m.y+b.y)/2),S=new fabric.Point(_.x+a*this.rotatingPointOffset,_.y-h*this.rotatingPointOffset);var g={tl:p,tr:v,br:m,bl:b};return t||(g.ml=y,g.mt=_,g.mr=x,g.mb=C,g.mtr=S),g},setCoords:function(t,e){return this.oCoords=this.calcCoords(t),e||t||(this.absoluteCoords=this.calcCoords(!0)),t||this._setCornerCoords&&this._setCornerCoords(),this},_calcRotateMatrix:function(){if(this.angle){var t=e(this.angle),i=Math.cos(t),r=Math.sin(t);return[i,r,-r,i,0,0]}return[1,0,0,1,0,0]},calcTransformMatrix:function(){var t=this.getCenterPoint(),e=[1,0,0,1,t.x,t.y],r=this._calcRotateMatrix(),n=this._calcDimensionsTransformMatrix(this.skewX,this.skewY,!0),s=this.group?this.group.calcTransformMatrix():[1,0,0,1,0,0];return s=i(s,e),s=i(s,r),s=i(s,n)},_calcDimensionsTransformMatrix:function(t,r,n){var s=[1,0,Math.tan(e(t)),1],o=[1,Math.tan(e(r)),0,1],a=this.scaleX*(n&&this.flipX?-1:1),h=this.scaleY*(n&&this.flipY?-1:1),c=[a,0,0,h],l=i(c,s,!0);return i(l,o,!0)}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas.moveTo(this,t),this}}),function(){function t(t,e){if(e){if(e.toLive)return t+": url(#SVGID_"+e.id+"); ";var i=new fabric.Color(e),r=t+": "+i.toRgb()+"; ",n=i.getAlpha();return 1!==n&&(r+=t+"-opacity: "+n.toString()+"; "),r}return t+": none; "}fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(e){var i=this.fillRule,r=this.strokeWidth?this.strokeWidth:"0",n=this.strokeDashArray?this.strokeDashArray.join(" "):"none",s=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",a=this.strokeMiterLimit?this.strokeMiterLimit:"4",h="undefined"!=typeof this.opacity?this.opacity:"1",c=this.visible?"":" visibility: hidden;",l=e?"":this.getSvgFilter(),u=t("fill",this.fill),f=t("stroke",this.stroke);return[f,"stroke-width: ",r,"; ","stroke-dasharray: ",n,"; ","stroke-linecap: ",s,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",a,"; ",u,"fill-rule: ",i,"; ","opacity: ",h,";",l,c].join("")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgId:function(){return this.id?'id="'+this.id+'" ':""},getSvgTransform:function(){if(this.group&&"path-group"===this.group.type)return"";var t=fabric.util.toFixed,e=this.getAngle(),i=this.getSkewX()%360,r=this.getSkewY()%360,n=this.getCenterPoint(),s=fabric.Object.NUM_FRACTION_DIGITS,o="path-group"===this.type?"":"translate("+t(n.x,s)+" "+t(n.y,s)+")",a=0!==e?" rotate("+t(e,s)+")":"",h=1===this.scaleX&&1===this.scaleY?"":" scale("+t(this.scaleX,s)+" "+t(this.scaleY,s)+")",c=0!==i?" skewX("+t(i,s)+")":"",l=0!==r?" skewY("+t(r,s)+")":"",u="path-group"===this.type?this.width:0,f=this.flipX?" matrix(-1 0 0 1 "+u+" 0) ":"",d="path-group"===this.type?this.height:0,g=this.flipY?" matrix(1 0 0 -1 0 "+d+")":"";return[o,a,h,f,g,c,l].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.join(" ")+") ":""},_createBaseSVGMarkup:function(){var t=[];return this.fill&&this.fill.toLive&&t.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&t.push(this.stroke.toSVG(this,!1)),this.shadow&&t.push(this.shadow.toSVG(this)),t}})}(),function(){function t(t,e,r){var n={},s=!0;r.forEach(function(e){n[e]=t[e]}),i(t[e],n,s)}function e(t,i,r){if(!fabric.isLikelyNode&&t instanceof Element)return t===i;if(t instanceof Array){if(t.length!==i.length)return!1;for(var n=0,s=t.length;n\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(t,e){var n=i.parseAttributes(t,i.Line.ATTRIBUTE_NAMES),s=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];return new i.Line(s,r(n,e))},i.Line.fromObject=function(t,e){var r=[t.x1,t.y1,t.x2,t.y2],n=new i.Line(r,t);return e&&e(n),n}}("undefined"!=typeof exports?exports:this),function(t){"use strict";function e(t){return"radius"in t&&t.radius>=0}var i=t.fabric||(t.fabric={}),r=Math.PI,n=i.util.object.extend;if(i.Circle)return void i.warn("fabric.Circle is already defined.");var s=i.Object.prototype.cacheProperties.concat();s.push("radius"),i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*r,cacheProperties:s,initialize:function(t){this.callSuper("initialize",t),this.set("radius",t&&t.radius||0)},_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,n=0,s=(this.endAngle-this.startAngle)%(2*r);if(0===s)this.group&&"path-group"===this.group.type&&(i=this.left+this.radius,n=this.top+this.radius),e.push("\n');else{var o=Math.cos(this.startAngle)*this.radius,a=Math.sin(this.startAngle)*this.radius,h=Math.cos(this.endAngle)*this.radius,c=Math.sin(this.endAngle)*this.radius,l=s>r?"1":"0";e.push('\n')}return t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.arc(e?this.left+this.radius:0,e?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(t),this._renderStroke(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)},complexity:function(){return 1}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){r||(r={});var s=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!e(s))throw new Error("value of `r` attribute is required and can not be negative");s.left=s.left||0,s.top=s.top||0;var o=new i.Circle(n(s,r));return o.left-=o.radius,o.top-=o.radius,o},i.Circle.fromObject=function(t,e){var r=new i.Circle(t);return e&&e(r),r}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});return e.Triangle?void e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",initialize:function(t){this.callSuper("initialize",t),this.set("width",t&&t.width||100).set("height",t&&t.height||100)},_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=this.width/2,r=this.height/2;t.beginPath(),e.util.drawDashedLine(t,-i,r,0,-r,this.strokeDashArray),e.util.drawDashedLine(t,0,-r,i,r,this.strokeDashArray),e.util.drawDashedLine(t,i,r,-i,r,this.strokeDashArray),t.closePath()},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.width/2,r=this.height/2,n=[-i+" "+r,"0 "+-r,i+" "+r].join(",");return e.push("'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),void(e.Triangle.fromObject=function(t,i){var r=new e.Triangle(t);return i&&i(r),r}))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=2*Math.PI,r=e.util.object.extend;if(e.Ellipse)return void e.warn("fabric.Ellipse is already defined.");var n=e.Object.prototype.cacheProperties.concat();n.push("rx","ry"),e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n,initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=0,r=0;return this.group&&"path-group"===this.group.type&&(i=this.left+this.rx,r=this.top+this.ry),e.push("\n'),t?t(e.join("")):e.join("")},_render:function(t,e){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(e?this.left+this.rx:0,e?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,i,!1),t.restore(),this._renderFill(t),this._renderStroke(t)},complexity:function(){return 1}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){i||(i={});var n=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Ellipse(r(n,i));return s.top-=s.ry,s.left-=s.rx,s},e.Ellipse.fromObject=function(t,i){var r=new e.Ellipse(t);return i&&i(r),r}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend;if(e.Rect)return void e.warn("fabric.Rect is already defined");var r=e.Object.prototype.stateProperties.concat();r.push("rx","ry"),e.Rect=e.util.createClass(e.Object,{stateProperties:r,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t,e){if(1===this.width&&1===this.height)return void t.fillRect(-.5,-.5,1,1);var i=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,n=this.width,s=this.height,o=e?this.left:-this.width/2,a=e?this.top:-this.height/2,h=0!==i||0!==r,c=.4477152502;t.beginPath(),t.moveTo(o+i,a),t.lineTo(o+n-i,a),h&&t.bezierCurveTo(o+n-c*i,a,o+n,a+c*r,o+n,a+r),t.lineTo(o+n,a+s-r),h&&t.bezierCurveTo(o+n,a+s-c*r,o+n-c*i,a+s,o+n-i,a+s),t.lineTo(o+i,a+s),h&&t.bezierCurveTo(o+c*i,a+s,o,a+s-c*r,o,a+s-r),t.lineTo(o,a+r),h&&t.bezierCurveTo(o,a+c*r,o+c*i,a,o+i,a),t.closePath(),this._renderFill(t),this._renderStroke(t)},_renderDashedStroke:function(t){var i=-this.width/2,r=-this.height/2,n=this.width,s=this.height;t.beginPath(),e.util.drawDashedLine(t,i,r,i+n,r,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r,i+n,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i+n,r+s,i,r+s,this.strokeDashArray),e.util.drawDashedLine(t,i,r+s,i,r,this.strokeDashArray),t.closePath()},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},toSVG:function(t){var e=this._createBaseSVGMarkup(),i=this.left,r=this.top;return this.group&&"path-group"===this.group.type||(i=-this.width/2,r=-this.height/2),e.push("\n'),t?t(e.join("")):e.join("")},complexity:function(){return 1}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r){if(!t)return null;r=r||{};var n=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);n.left=n.left||0,n.top=n.top||0;var s=new e.Rect(i(r?e.util.object.clone(r):{},n));return s.visible=s.visible&&s.width>0&&s.height>0,s},e.Rect.fromObject=function(t,i){var r=new e.Rect(t);return i&&i(r),r}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={});if(e.Polyline)return void e.warn("fabric.Polyline is already defined");var i=e.Object.prototype.cacheProperties.concat();i.push("points"),e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,minX:0,minY:0,cacheProperties:i,initialize:function(t,i){return e.Polygon.prototype.initialize.call(this,t,i)},_calcDimensions:function(){return e.Polygon.prototype._calcDimensions.call(this)},toObject:function(t){return e.Polygon.prototype.toObject.call(this,t)},toSVG:function(t){return e.Polygon.prototype.toSVG.call(this,t)},_render:function(t,i){e.Polygon.prototype.commonRender.call(this,t,i)&&(this._renderFill(t),this._renderStroke(t))},_renderDashedStroke:function(t){var i,r;t.beginPath();for(var n=0,s=this.points.length;n\n'),t?t(r.join("")):r.join("")},_render:function(t,e){this.commonRender(t,e)&&(this._renderFill(t),(this.stroke||this.strokeDashArray)&&(t.closePath(),this._renderStroke(t)))},commonRender:function(t,e){var i,r=this.points.length,n=e?0:this.pathOffset.x,s=e?0:this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-n,this.points[0].y-s);for(var o=0;o"},toObject:function(t){var e=n(this.callSuper("toObject",["sourcePath","pathOffset"].concat(t)),{path:this.path.map(function(t){return t.slice()})});return e},toDatalessObject:function(t){var e=this.toObject(t);return this.sourcePath&&(e.path=this.sourcePath),delete e.sourcePath,e},toSVG:function(t){for(var e=[],i=this._createBaseSVGMarkup(),r="",n=0,s=this.path.length;n\n"),t?t(i.join("")):i.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var t,e,i,r,n,s=[],o=[],c=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,l=0,u=this.path.length;lp)for(var b=1,m=n.length;b\n");for(var s=0,o=e.length;s\n"),t?t(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var t=this.getObjects()[0].get("fill")||"";return"string"==typeof t&&(t=t.toLowerCase(),this.getObjects().every(function(e){var i=e.get("fill")||"";return"string"==typeof i&&i.toLowerCase()===t}))},complexity:function(){return this.paths.reduce(function(t,e){return t+(e&&e.complexity?e.complexity():0)},0)},getObjects:function(){return this.paths}}),e.PathGroup.fromObject=function(t,i){"string"==typeof t.paths?e.loadSVGFromURL(t.paths,function(r){var n=t.paths;delete t.paths;var s=e.util.groupSVGElements(r,t,n);i(s)}):e.util.enlivenObjects(t.paths,function(r){delete t.paths,i(new e.PathGroup(r,t))})},void(e.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max;if(!e.Group){var s={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};e.Group=e.util.createClass(e.Object,e.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),i?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",e)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(t){for(var e=this.getCenterPoint(),i=this._objects.length;i--;)this._updateObjectCoords(this._objects[i],e,t)},_updateObjectCoords:function(t,e,i){if(t.__origHasControls=t.hasControls,t.hasControls=!1,!i){var r=t.getLeft(),n=t.getTop(),s=!0;t.set({originalLeft:r,originalTop:n,left:r-e.x,top:n-e.y}),t.setCoords(s)}},toString:function(){return"#"},addWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_setObjectActive:function(t){t.set("active",!0),t.group=this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.forEachObject(this._setObjectActive,this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group,t.set("active",!1)},delegatedProperties:{fill:!0,stroke:!0,strokeWidth:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(t,e){var i=this._objects.length;if(this.delegatedProperties[t]||"canvas"===t)for(;i--;)this._objects[i].set(t,e);else for(;i--;)this._objects[i].setOnGroup(t,e);this.callSuper("_set",t,e)},toObject:function(t){var e=this.getObjects().map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=e.group.includeDefaultValues;var r=e.toObject(t);return e.includeDefaultValues=i,r});return i(this.callSuper("toObject",t),{objects:e})},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},drawObject:function(t){for(var e=0,i=this._objects.length;e\n');for(var i=0,r=this._objects.length;i\n"),t?t(e.join("")):e.join("")},get:function(t){if(t in s){if(this[t])return this[t];for(var e=0,i=this._objects.length;e\n',"\n"),this.stroke||this.strokeDashArray){var o=this.fill;this.fill=null,e.push("\n'),this.fill=o}return e.push("\n"),t?t(e.join("")):e.join("")},getSrc:function(t){var e=t?this._element:this._originalElement;return e?fabric.isLikelyNode?e._src:e.src:this.src||""},setSrc:function(t,e,i){fabric.util.loadImage(t,function(t){return this.setElement(t,e,i)},this,i&&i.crossOrigin)},toString:function(){return'#'},applyFilters:function(t,e,i,r){if(e=e||this.filters,i=i||this._originalElement){var n,s,o=fabric.util.createImage(),a=this.canvas?this.canvas.getRetinaScaling():fabric.devicePixelRatio,h=this.minimumScaleTrigger/a,c=this;if(0===e.length)return this._element=i,t&&t(this),i;var l=fabric.util.createCanvasElement();return l.width=i.width,l.height=i.height,l.getContext("2d").drawImage(i,0,0,i.width,i.height),e.forEach(function(t){t&&(r?(n=c.scaleX0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(t){t=t||{};var e=function(){},i=t.onComplete||e,r=t.onChange||e,n=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.setAngle(t),r()},onComplete:function(){n.setCoords(),i()},onStart:function(){n.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.renderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.Brightness=n(r.BaseFilter,{type:"Brightness",initialize:function(t){t=t||{},this.brightness=t.brightness||0},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.brightness,s=0,o=r.length;sb||o<0||o>v||(h=4*(a*v+o),c=l[S*d+w],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,n+=p[h+3]*c);y[s]=e,y[s+1]=i,y[s+2]=r,y[s+3]=n+_*(255-n)}u.putImageData(m,0,0)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=function(t){return new e.Image.filters.Convolute(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.GradientTransparency=n(r.BaseFilter,{type:"GradientTransparency",initialize:function(t){t=t||{},this.threshold=t.threshold||100},applyTo:function(t){for(var e=t.getContext("2d"),i=e.getImageData(0,0,t.width,t.height),r=i.data,n=this.threshold,s=r.length,o=0,a=r.length;o-1?t.channel:0},applyTo:function(t){if(this.mask){var i,r=t.getContext("2d"),n=r.getImageData(0,0,t.width,t.height),s=n.data,o=this.mask.getElement(),a=e.util.createCanvasElement(),h=this.channel,c=n.width*n.height*4;a.width=t.width,a.height=t.height,a.getContext("2d").drawImage(o,0,0,t.width,t.height);var l=a.getContext("2d").getImageData(0,0,t.width,t.height),u=l.data;for(i=0;ic&&i>c&&r>c&&l(e-i)i&&(l=2,f=-1),a>n&&(u=2,d=-1),h=c.getImageData(0,0,i,n),t.width=o(s,i),t.height=o(a,n),c.putImageData(h,0,0);!g||!p;)i=v,n=b,s*ft)return 0;if(e*=Math.PI,s(e)<1e-16)return 1;var i=e/t;return h(e)*h(i)/e/i}}function f(t){var h,c,u,d,g,j,M,P,A,D,E;for(T.x=(t+.5)*y,k.x=r(T.x),h=0;h=e)){D=r(1e3*s(c-T.x)),O[D]||(O[D]={});for(var I=k.y-w;I<=k.y+w;I++)I<0||I>=o||(E=r(1e3*s(I-T.y)),O[D][E]||(O[D][E]=m(n(i(D*x,2)+i(E*C,2))/1e3)),u=O[D][E],u>0&&(d=4*(I*e+c),g+=u,j+=u*v[d],M+=u*v[d+1],P+=u*v[d+2],A+=u*v[d+3]))}d=4*(h*a+t),b[d]=j/g,b[d+1]=M/g,b[d+2]=P/g,b[d+3]=A/g}return++t1&&L<-1||(x=2*L*L*L-3*L*L+1,x>0&&(I=4*(E+M*e),k+=x*p[I+3],S+=x,p[I+3]<255&&(x=x*p[I+3]/250),w+=x*p[I],O+=x*p[I+1],T+=x*p[I+2],C+=x))}b[_]=w/C,b[_+1]=O/C,b[_+2]=T/C,b[_+3]=k/S}return v},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=function(t){return new e.Image.filters.Resize(t)}}("undefined"!=typeof exports?exports:this),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.Image.filters,n=e.util.createClass;r.ColorMatrix=n(r.BaseFilter,{type:"ColorMatrix",initialize:function(t){t||(t={}),this.matrix=t.matrix||[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0]},applyTo:function(t){var e,i,r,n,s,o=t.getContext("2d"),a=o.getImageData(0,0,t.width,t.height),h=a.data,c=h.length,l=this.matrix;for(e=0;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions");return t.width+=2*this.fontSize,t.height+=2*this.fontSize,t},_render:function(t){this._setTextStyles(t),this.group&&"path-group"===this.group.type&&t.translate(this.left,this.top),this._renderTextLinesBackground(t),this._renderText(t),this._renderTextDecoration(t)},_renderText:function(t){this._renderTextFill(t),this._renderTextStroke(t)},_setTextStyles:function(t){t.textBaseline="alphabetic",t.font=this._getFontDeclaration()},_getTextHeight:function(){return this._getHeightOfSingleLine()+(this._textLines.length-1)*this._getHeightOfLine()},_getTextWidth:function(t){for(var e=this._getLineWidth(t,0),i=1,r=this._textLines.length;ie&&(e=n)}return e},_renderChars:function(t,e,i,r,n){var s,o,a=t.slice(0,-4);if(this[a].toLive){var h=-this.width/2+this[a].offsetX||0,c=-this.height/2+this[a].offsetY||0;e.save(),e.translate(h,c),r-=h,n-=c}if(0!==this.charSpacing){var l=this._getWidthOfCharSpacing();i=i.split("");for(var u=0,f=i.length;u0?o:0}else e[t](i,r,n);this[a].toLive&&e.restore()},_renderTextLine:function(t,e,i,r,n,s){n-=this.fontSize*this._fontSizeFraction;var o=this._getLineWidth(e,s);if("justify"!==this.textAlign||this.width0?u/f:0,g=0,p=0,v=h.length;p0?n:0},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},isEmptyStyles:function(){return!0},_renderTextCommon:function(t,e){for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),s=0,o=this._textLines.length;s0&&(r=this._getLineLeftOffset(i),t.fillRect(this._getLeftOffset()+r,this._getTopOffset()+n,i,e/this.lineHeight)),n+=e;t.fillStyle=s,this._removeShadow(t)}},_getLineLeftOffset:function(t){return"center"===this.textAlign?(this.width-t)/2:"right"===this.textAlign?this.width-t:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[]},_shouldClearDimensionCache:function(){var t=!1;return this._forceClearCache?(this._forceClearCache=!1,this.dirty=!0,!0):(t=this.hasStateChanged("_dimensionAffectingProps"),t&&(this.saveState({propertySet:"_dimensionAffectingProps"}),this.dirty=!0),t)},_getLineWidth:function(t,e){if(this.__lineWidths[e])return this.__lineWidths[e]===-1?this.width:this.__lineWidths[e];var i,r,n=this._textLines[e];return i=""===n?0:this._measureLine(t,e),this.__lineWidths[e]=i,i&&"justify"===this.textAlign&&(r=n.split(/\s+/),r.length>1&&(this.__lineWidths[e]=-1)),i},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},_measureLine:function(t,e){var i,r,n=this._textLines[e],s=t.measureText(n).width,o=0;return 0!==this.charSpacing&&(i=n.split("").length,o=(i-1)*this._getWidthOfCharSpacing()),r=s+o,r>0?r:0},_renderTextDecoration:function(t){function e(e){var n,s,o,a,h,c,l,u=0;for(n=0,s=r._textLines.length;n-1&&n.push(.85),this.textDecoration.indexOf("line-through")>-1&&n.push(.43),this.textDecoration.indexOf("overline")>-1&&n.push(-.12),n.length>0&&e(n)}},_getFontDeclaration:function(){return[e.isLikelyNode?this.fontWeight:this.fontStyle,e.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",e.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(t,e){this.visible&&(this._shouldClearDimensionCache()&&(this._setTextStyles(t),this._initDimensions(t)),this.callSuper("render",t,e))},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(t){var e=["text","fontSize","fontWeight","fontFamily","fontStyle","lineHeight","textDecoration","textAlign","textBackgroundColor","charSpacing"].concat(t);return this.callSuper("toObject",e)},toSVG:function(t){this.ctx||(this.ctx=e.util.createCanvasElement().getContext("2d"));var i=this._createBaseSVGMarkup(),r=this._getSVGLeftTopOffsets(this.ctx),n=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(i,n),t?t(i.join("")):i.join("")},_getSVGLeftTopOffsets:function(t){var e=this._getHeightOfLine(t,0),i=-this.width/2,r=0;return{textLeft:i+(this.group&&"path-group"===this.group.type?this.left:0),textTop:r+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:e}},_wrapSVGTextAndBg:function(t,e){var i=!0,r=this.getSvgFilter(),n=""===r?"":' style="'+r+'"';t.push("\t\n",e.textBgRects.join(""),"\t\t\n',e.textSpans.join(""),"\t\t\n","\t\n")},_getSVGTextAndBg:function(t,e){var i=[],r=[],n=0;this._setSVGBg(r);for(var s=0,o=this._textLines.length;s",e.util.string.escapeXml(this._textLines[t]),"\n")},_setSVGTextLineJustifed:function(t,i,s,o){var a=e.util.createCanvasElement().getContext("2d");this._setTextStyles(a);var h,c,l=this._textLines[t],u=l.split(/\s+/),f=this._getWidthOfWords(a,u.join("")),d=this.width-f,g=u.length-1,p=g>0?d/g:0,v=this._getFillAttributes(this.fill);for(o+=this._getLineLeftOffset(this._getLineWidth(a,t)),t=0,c=u.length;t",e.util.string.escapeXml(h),"\n"),o+=this._getWidthOfWords(a,h)+p},_setSVGTextLineBg:function(t,e,i,s,o){t.push("\t\t\n')},_setSVGBg:function(t){this.backgroundColor&&t.push("\t\t\n')},_getFillAttributes:function(t){var i=t&&"string"==typeof t?new e.Color(t):"";return i&&i.getSource()&&1!==i.getAlpha()?'opacity="'+i.getAlpha()+'" fill="'+i.setAlpha(1).toRgb()+'"':'fill="'+t+'"'},_set:function(t,e){this.callSuper("_set",t,e),this._dimensionAffectingProps.indexOf(t)>-1&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),e.Text.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),e.Text.DEFAULT_SVG_FONT_SIZE=16,e.Text.fromElement=function(t,i){if(!t)return null;var r=e.parseAttributes(t,e.Text.ATTRIBUTE_NAMES);i=e.util.object.extend(i?e.util.object.clone(i):{},r),i.top=i.top||0,i.left=i.left||0,"dx"in r&&(i.left+=r.dx),"dy"in r&&(i.top+=r.dy),"fontSize"in i||(i.fontSize=e.Text.DEFAULT_SVG_FONT_SIZE),i.originX||(i.originX="left");var n="";"textContent"in t?n=t.textContent:"firstChild"in t&&null!==t.firstChild&&"data"in t.firstChild&&null!==t.firstChild.data&&(n=t.firstChild.data),n=n.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var s=new e.Text(n,i),o=s.getHeight()/s.height,a=(s.height+s.strokeWidth)*s.lineHeight-s.height,h=a*o,c=s.getHeight()+h,l=0;return"left"===s.originX&&(l=s.getWidth()/2),"right"===s.originX&&(l=-s.getWidth()/2),s.set({left:s.getLeft()+l,top:s.getTop()-c/2+s.fontSize*(.18+s._fontSizeFraction)/s.lineHeight}),s},e.Text.fromObject=function(t,r){var n=new e.Text(t.text,i(t));return r&&r(n),n},e.util.createAccessors(e.Text)}("undefined"!=typeof exports?exports:this),function(){var t=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],initialize:function(t,e){this.styles=e?e.styles||{}:{},this.callSuper("initialize",t,e),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var t=this.styles;for(var e in t)for(var i in t[e])for(var r in t[e][i])return!1;return!0},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},getSelectionStyles:function(t,e){if(2===arguments.length){for(var i=[],r=t;r0?a:0,lineLeft:r},this.cursorOffsetCache=i,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(e,r)):t.leftOffset,a=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/a;e.fillStyle=this.getCurrentCharColor(r,n),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+o-h/2,t.top+t.topOffset,h,s)},renderSelection:function(t,e,i){i.fillStyle=this.selectionColor;for(var r=this.get2DCursorLocation(this.selectionStart),n=this.get2DCursorLocation(this.selectionEnd),s=r.lineIndex,o=n.lineIndex,a=s;a<=o;a++){var h=this._getLineLeftOffset(this._getLineWidth(i,a))||0,c=this._getHeightOfLine(this.ctx,a),l=0,u=0,f=this._textLines[a];if(a===s){for(var d=0,g=f.length;d=r.charIndex&&(a!==o||ds&&a1)&&(c/=this.lineHeight),i.fillRect(e.left+h,e.top+e.topOffset,u>0?u:0,c),e.topOffset+=l}},_renderChars:function(t,e,i,r,n,s,o){if(this.isEmptyStyles())return this._renderCharsFast(t,e,i,r,n);o=o||0;var a,h,c=this._getHeightOfLine(e,s),l="";e.save(),n-=c/this.lineHeight*this._fontSizeFraction;for(var u=o,f=i.length+o;u<=f;u++)a=a||this.getCurrentCharStyle(s,u),h=this.getCurrentCharStyle(s,u+1),(this._hasStyleChanged(a,h)||u===f)&&(this._renderChar(t,e,s,u-1,l,r,n,c),l="",a=h),l+=i[u-o];e.restore()},_renderCharsFast:function(t,e,i,r,n){"fillText"===t&&this.fill&&this.callSuper("_renderChars",t,e,i,r,n),"strokeText"===t&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",t,e,i,r,n)},_renderChar:function(t,e,i,r,n,s,o,a){var h,c,l,u,f,d,g,p,v,b=this._getStyleDeclaration(i,r);if(b?(c=this._getHeightOfChar(e,n,i,r),u=b.stroke,l=b.fill,d=b.textDecoration):c=this.fontSize,u=(u||this.stroke)&&"strokeText"===t,l=(l||this.fill)&&"fillText"===t,b&&e.save(),h=this._applyCharStylesGetWidth(e,n,i,r,b||null),d=d||this.textDecoration,b&&b.textBackgroundColor&&this._removeShadow(e),0!==this.charSpacing){p=this._getWidthOfCharSpacing(),g=n.split(""),h=0;for(var m,y=0,_=g.length;y<_;y++)m=g[y],l&&e.fillText(m,s+h,o),u&&e.strokeText(m,s+h,o),v=e.measureText(m).width+p,h+=v>0?v:0}else l&&e.fillText(n,s,o),u&&e.strokeText(n,s,o);(d||""!==d)&&(f=this._fontSizeFraction*a/this.lineHeight,this._renderCharDecoration(e,d,s,o,f,h,c)),b&&e.restore(),e.translate(h,0)},_hasStyleChanged:function(t,e){return t.fill!==e.fill||t.fontSize!==e.fontSize||t.textBackgroundColor!==e.textBackgroundColor||t.textDecoration!==e.textDecoration||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth},_renderCharDecoration:function(t,e,i,r,n,s,o){if(e){var a,h,c=o/15,l={underline:r+o/10,"line-through":r-o*(this._fontSizeFraction+this._fontSizeMult-1)+c,overline:r-(this._fontSizeMult-this._fontSizeFraction)*o},u=["underline","line-through","overline"];for(a=0;a-1&&t.fillRect(i,l[h],s,c)}},_renderTextLine:function(t,e,i,r,n,s){this.isEmptyStyles()||(n+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",t,e,i,r,n,s)},_renderTextDecoration:function(t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",t)},_renderTextLinesBackground:function(t){this.callSuper("_renderTextLinesBackground",t);var e,i,r,n,s,o,a=0,h=this._getLeftOffset(),c=this._getTopOffset();t.save();for(var l=0,u=this._textLines.length;l0?n:0},_getHeightOfChar:function(t,e,i){var r=this._getStyleDeclaration(e,i);return r&&r.fontSize?r.fontSize:this.fontSize},_getWidthOfCharsAt:function(t,e,i){var r,n,s=0;for(r=0;r0?i:0},_getWidthOfSpace:function(t,e){if(this.__widthOfSpace[e])return this.__widthOfSpace[e];var i=this._textLines[e],r=this._getWidthOfWords(t,i,e,0),n=this.width-r,s=i.length-i.replace(this._reSpacesAndTabs,"").length,o=Math.max(n/s,t.measureText(" ").width);return this.__widthOfSpace[e]=o,o},_getWidthOfWords:function(t,e,i,r){for(var n=0,s=0;sr&&(r=o)}return this.__lineHeights[e]=r*this.lineHeight*this._fontSizeMult,this.__lineHeights[e]},_getTextHeight:function(t){for(var e,i=0,r=0,n=this._textLines.length;r-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this.text.charAt(i)))for(;this._reSpace.test(this.text.charAt(i));)e++,i++;for(;/\S/.test(this.text.charAt(i))&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this.text.charAt(i))&&i0&&ithis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){if(this.hiddenTextarea&&!this.inCompositionMode&&(this.cursorOffsetCache={},this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd,this.selectionStart===this.selectionEnd)){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top,this.hiddenTextarea.style.fontSize=t.fontSize}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.text.split(""),e=this._getCursorBoundaries(t,"cursor"),i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex,s=this.getCurrentCharFontSize(r,n),o=0===r&&0===n?this._getLineLeftOffset(this._getLineWidth(this.ctx,r)):e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+o,y:e.top+e.topOffset+s},c=this.canvas.upperCanvasEl,l=c.width-s,u=c.height-s;return h=fabric.util.transformPoint(h,a),h=fabric.util.transformPoint(h,this.canvas.viewportTransform),h.x<0&&(h.x=0),h.x>l&&(h.x=l),h.y<0&&(h.y=0),h.y>u&&(h.y=u),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:s}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text;return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea.blur&&this.hiddenTextarea.blur(),this.hiddenTextarea&&this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},_removeCharsFromTo:function(t,e){for(;e!==t;)this._removeSingleCharAndStyle(t+1),e--;this.selectionStart=t,this.selectionEnd=t},_removeSingleCharAndStyle:function(t){var e="\n"===this.text[t-1],i=e?t:t-1;this.removeStyleObject(e,i),this.text=this.text.slice(0,t-1)+this.text.slice(t),this._textLines=this._splitTextIntoLines()},insertChars:function(t,e){var i;if(this.selectionEnd-this.selectionStart>1&&this._removeCharsFromTo(this.selectionStart,this.selectionEnd),!e&&this.isEmptyStyles())return void this.insertChar(t,!1);for(var r=0,n=t.length;r=i&&(s[parseInt(o,10)-i]=this.styles[e][o],delete this.styles[e][o]);this.styles[e+1]=s}this._forceClearCache=!0},insertCharStyleObject:function(e,i,r){var n=this.styles[e],s=t(n);0!==i||r||(i=1);for(var o in s){var a=parseInt(o,10);a>=i&&(n[a+1]=s[a],s[a-1]||delete n[a])}this.styles[e][i]=r||t(n[i-1]),this._forceClearCache=!0},insertStyleObjects:function(t,e,i){var r=this.get2DCursorLocation(),n=r.lineIndex,s=r.charIndex;this._getLineStyle(n)||this._setLineStyle(n,{}),"\n"===t?this.insertNewlineStyleObject(n,s,e):this.insertCharStyleObject(n,s,i)},shiftLineStyles:function(e,i){var r=t(this.styles);for(var n in this.styles){var s=parseInt(n,10);s>e&&(this.styles[s+i]=r[s],r[s-i]||delete this.styles[s])}},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=i.lineIndex,n=i.charIndex;this._removeStyleObject(t,i,r,n)},_getTextOnPreviousLine:function(t){return this._textLines[t-1]},_removeStyleObject:function(e,i,r,n){if(e){var s=this._getTextOnPreviousLine(i.lineIndex),o=s?s.length:0;this.styles[r-1]||(this.styles[r-1]={});for(n in this.styles[r])this.styles[r-1][parseInt(n,10)+o]=this.styles[r][n];this.shiftLineStyles(i.lineIndex,-1)}else{var a=this.styles[r];a&&delete a[n];var h=t(a);for(var c in h){var l=parseInt(c,10);l>=n&&0!==l&&(a[l-1]=h[l],delete a[l])}}},insertNewline:function(){this.insertChars("\n")},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(t){this.__newClickTime=+new Date;var e=this.canvas.getPointer(t.e);this.isTripleClick(e)?(this.fire("tripleclick",t),this._stopEvent(t.e)):this.isDoubleClick(e)&&(this.fire("dblclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y&&this.__lastIsEditing},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(t){this.selectWord(this.getSelectionStartFromPointer(t.e))}),this.on("tripleclick",function(t){this.selectLine(this.getSelectionStartFromPointer(t.e))})},initMousedownHandler:function(){this.on("mousedown",function(t){if(this.editable){var e=this.canvas.getPointer(t.e);this.__mousedownX=e.x,this.__mousedownY=e.y,this.__isMousedown=!0,this.selected&&this.setCursorByClick(t.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())}})},_isObjectMoved:function(t){var e=this.canvas.getPointer(t);return this.__mousedownX!==e.x||this.__mousedownY!==e.y},initMouseupHandler:function(){this.on("mouseup",function(t){this.__isMousedown=!1,this.editable&&!this._isObjectMoved(t.e)&&(this.__lastSelected&&!this.__corner&&(this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()),this.selected=!0)})},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this._fireSelectionChanged(),this._updateTextarea()},getSelectionStartFromPointer:function(t){for(var e,i,r=this.getLocalPointer(t),n=0,s=0,o=0,a=0,h=0,c=this._textLines.length;hs?0:1,h=r+a;return this.flipX&&(h=n-h),h>this.text.length&&(h=this.text.length),h}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"cut",this.cut.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),fabric.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMapUp:{67:"copy",88:"cut"},_ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){if(t.keyCode in this._keysMap)this[this._keysMap[t.keyCode]](t);else{if(!(t.keyCode in this._ctrlKeysMapDown&&(t.ctrlKey||t.metaKey)))return;this[this._ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.renderAll()}},onKeyUp:function(t){return!this.isEditing||this._copyDone?void(this._copyDone=!1):void(t.keyCode in this._ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this._ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.renderAll()))},onInput:function(t){if(this.isEditing&&!this.inCompositionMode){var e,i,r,n=this.selectionStart||0,s=this.selectionEnd||0,o=this.text.length,a=this.hiddenTextarea.value.length;a>o?(r="left"===this._selectionDirection?s:n,e=a-o,i=this.hiddenTextarea.value.slice(r,r+e)):(e=a-o+s-n,i=this.hiddenTextarea.value.slice(n,n+e)),this.insertChars(i),t.stopPropagation()}},onCompositionStart:function(){this.inCompositionMode=!0,this.prevCompositionLength=0,this.compositionStart=this.selectionStart},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(t){var e=t.data;this.selectionStart=this.compositionStart,this.selectionEnd=this.selectionEnd===this.selectionStart?this.compositionStart+this.prevCompositionLength:this.selectionEnd,this.insertChars(e,!1),this.prevCompositionLength=e.length},forwardDelete:function(t){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(t)}this.removeChars(t)},copy:function(t){if(this.selectionStart!==this.selectionEnd){var e=this.getSelectedText(),i=this._getClipboardData(t);i&&i.setData("text",e),fabric.copiedText=e,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd),t.stopImmediatePropagation(),t.preventDefault(),this._copyDone=!0}},paste:function(t){var e=null,i=this._getClipboardData(t),r=!0;i?(e=i.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===e||(r=!1)):e=fabric.copiedText,e&&this.insertChars(e,r),t.stopImmediatePropagation(),t.preventDefault()},cut:function(t){this.selectionStart!==this.selectionEnd&&(this.copy(t),this.removeChars(t))},_getClipboardData:function(t){return t&&t.clipboardData||fabric.window.clipboardData},_getWidthBeforeCursor:function(t,e){for(var i,r=this._textLines[t].slice(0,e),n=this._getLineWidth(this.ctx,t),s=this._getLineLeftOffset(n),o=0,a=r.length;oe){i=!0;var f=o-u,d=o,g=Math.abs(f-e),p=Math.abs(d-e);a=p=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i="get"+t+"CursorOffset",r=this[i](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(r):this.moveCursorWithoutShift(r),0!==r&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,i+=e.shiftKey?"Shift":"outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this.text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(t):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(t){if(0!==this.selectionStart)if(t.metaKey){var e=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(e,this.selectionStart),this.setSelectionStart(e)}else if(t.altKey){var i=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(i,this.selectionStart),this.setSelectionStart(i)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var t=fabric.util.toFixed,e=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(t,e,i,r,n,s){this._getLineStyle(t)?this._setSVGTextLineChars(t,e,i,r,s):fabric.Text.prototype._setSVGTextLineText.call(this,t,e,i,r,n)},_setSVGTextLineChars:function(t,e,i,r,n){for(var s=this._textLines[t],o=0,a=this._getLineLeftOffset(this._getLineWidth(this.ctx,t))-this.width/2,h=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t),l=0,u=s.length;l\n'].join("")},_createTextCharSpan:function(i,r,n,s,o){var a=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text",getSvgFilter:fabric.Object.prototype.getSvgFilter},r));return['\t\t\t',fabric.util.string.escapeXml(i),"\n"].join("")}})}(),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.clone;e.Textbox=e.util.createClass(e.IText,e.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingY:!0,lockScalingFlip:!0,noScaleCache:!1,initialize:function(t,i){this.callSuper("initialize",t,i),this.setControlsVisibility(e.Textbox.getTextboxControlVisibility()),this.ctx=this.objectCaching?this._cacheContext:e.util.createCanvasElement().getContext("2d"),this._dimensionAffectingProps.push("width")},_initDimensions:function(t){this.__skipDimension||(t||(t=e.util.createCanvasElement().getContext("2d"),this._setTextStyles(t),this.clearContextTop()),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(t),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(t))},_generateStyleMap:function(){for(var t=0,e=0,i=0,r={},n=0;n0?(e=0,i++,t++):" "===this.text[i]&&n>0&&(e++,i++),r[n]={line:t,offset:e},i+=this._textLines[n].length,e+=this._textLines[n].length;return r},_getStyleDeclaration:function(t,e,i){if(this._styleMap){var r=this._styleMap[t];if(!r)return i?{}:null;t=r.line,e=r.offset+e}return this.callSuper("_getStyleDeclaration",t,e,i)},_setStyleDeclaration:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){var i=this._styleMap[t];t=i.line,e=i.offset+e,delete this.styles[t][e]},_getLineStyle:function(t){var e=this._styleMap[t];return this.styles[e.line]},_setLineStyle:function(t,e){var i=this._styleMap[t];this.styles[i.line]=e},_deleteLineStyle:function(t){var e=this._styleMap[t];delete this.styles[e.line]},_wrapText:function(t,e){var i,r=e.split(this._reNewline),n=[];for(i=0;i=this.width&&!d?(n.push(s),s="",r=l,d=!0):r+=g,d||(s+=c),s+=a,u=this._measureText(t,c,i,h),h++,d=!1,l>f&&(f=l);return p&&n.push(s),f>this.dynamicMinWidth&&(this.dynamicMinWidth=f-g),n},_splitTextIntoLines:function(t){t=t||this.ctx;var e=this.textAlign;this._styleMap=null,t.save(),this._setTextStyles(t),this.textAlign="left";var i=this._wrapText(t,this.text);return this.textAlign=e,t.restore(),this._textLines=i,this._styleMap=this._generateStyleMap(),i},setOnGroup:function(t,e){"scaleX"===t&&(this.set("scaleX",Math.abs(1/e)),this.set("width",this.get("width")*e/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=e)},get2DCursorLocation:function(t){"undefined"==typeof t&&(t=this.selectionStart);for(var e=this._textLines.length,i=0,r=0;r=h.getMinWidth()?(h.set("width",c),!0):void 0},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var t=this._objects.length;t--;)if(this._objects[t]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())};var e=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var t in this._styleMap)this._textLines[t]||delete this.styles[this._styleMap[t].line]},insertCharStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertCharStyleObject.apply(this,[t,e,i])},insertNewlineStyleObject:function(t,e,i){var r=this._styleMap[t];t=r.line,e=r.offset+e,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[t,e,i])},shiftLineStyles:function(t,i){var r=e(this.styles),n=this._styleMap[t];t=n.line;for(var s in this.styles){var o=parseInt(s,10);o>t&&(this.styles[o+i]=r[o],r[o-i]||delete this.styles[o])}},_getTextOnPreviousLine:function(t){for(var e=this._textLines[t-1];this._styleMap[t-2]&&this._styleMap[t-2].line===this._styleMap[t-1].line;)e=this._textLines[t-2]+e,t--;return e},removeStyleObject:function(t,e){var i=this.get2DCursorLocation(e),r=this._styleMap[i.lineIndex],n=r.line,s=r.offset+i.charIndex;this._removeStyleObject(t,i,n,s)}})}(),function(){var t=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(e,i,r,n,s){n=t.call(this,e,i,r,n,s);for(var o=0,a=0,h=0;h=n));h++)"\n"!==this.text[o+a]&&" "!==this.text[o+a]||a++;return n-h+a}}(),function(){function request(t,e,i){var r=URL.parse(t);r.port||(r.port=0===r.protocol.indexOf("https:")?443:80);var n=0===r.protocol.indexOf("https:")?HTTPS:HTTP,s=n.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(t){var r="";e&&t.setEncoding(e),t.on("end",function(){i(r)}),t.on("data",function(e){200===t.statusCode&&(r+=e)})});s.on("error",function(t){t.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(t.message),i(null)}),s.end()}function requestFs(t,e){var i=require("fs");i.readFile(t,function(t,i){if(t)throw fabric.log(t),t;e(i)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(t,e,i){function r(r){r?(n.src=new Buffer(r,"binary"),n._src=t,e&&e.call(i,n)):(n=null,e&&e.call(i,null,!0))}var n=new Image;t&&(t instanceof Buffer||0===t.indexOf("data"))?(n.src=n._src=t,e&&e.call(i,n)):t&&0!==t.indexOf("http")?requestFs(t,r):t?request(t,"binary",r):e&&e.call(i,t)},fabric.loadSVGFromURL=function(t,e,i){t=t.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==t.indexOf("http")?requestFs(t,function(t){fabric.loadSVGFromString(t.toString(),e,i)}):request(t,"",function(t){fabric.loadSVGFromString(t,e,i)})},fabric.loadSVGFromString=function(t,e,i){var r=(new DOMParser).parseFromString(t);fabric.parseSVGDocument(r.documentElement,function(t,i){e&&e(t,i)},i)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.createCanvasForNode=function(t,e,i,r){r=r||i;var n=fabric.document.createElement("canvas"),s=new Canvas(t||600,e||600,r),o=new Canvas(t||600,e||600,r);n.style={},n.width=s.width,n.height=s.height,i=i||{},i.nodeCanvas=s,i.nodeCacheCanvas=o;var a=fabric.Canvas||fabric.StaticCanvas,h=new a(n,i);return h.nodeCanvas=s,h.nodeCacheCanvas=o,h.contextContainer=s.getContext("2d"),h.contextCache=o.getContext("2d"),h.Font=Canvas.Font,h};var originaInitStatic=fabric.StaticCanvas.prototype._initStatic;fabric.StaticCanvas.prototype._initStatic=function(t,e){t=t||fabric.document.createElement("canvas"),this.nodeCanvas=new Canvas(t.width,t.height),this.nodeCacheCanvas=new Canvas(t.width,t.height), +originaInitStatic.call(this,t,e),this.contextContainer=this.nodeCanvas.getContext("2d"),this.contextCache=this.nodeCacheCanvas.getContext("2d"),this.Font=Canvas.Font},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(t){return this.nodeCanvas.createJPEGStream(t)},fabric.StaticCanvas.prototype._initRetinaScaling=function(){if(this._isRetinaScaling())return this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.nodeCanvas.width=this.width*fabric.devicePixelRatio,this.nodeCanvas.height=this.height*fabric.devicePixelRatio,this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio),this},fabric.Canvas&&(fabric.Canvas.prototype._initRetinaScaling=fabric.StaticCanvas.prototype._initRetinaScaling);var origSetBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension;fabric.StaticCanvas.prototype._setBackstoreDimension=function(t,e){return origSetBackstoreDimension.call(this,t,e),this.nodeCanvas[t]=e,this},fabric.Canvas&&(fabric.Canvas.prototype._setBackstoreDimension=fabric.StaticCanvas.prototype._setBackstoreDimension)}}(); \ No newline at end of file diff --git a/dist/fabric.min.js.gz b/dist/fabric.min.js.gz index 3ac3e64ef4fa05bf62eeb09c28294d0989944267..62aa0f42e1fef17378b6f4b2960e99a310911956 100644 GIT binary patch literal 69329 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 rl7+wcR_h&@7lWt;Jnhc7lg@iUvu9inm`sFh literal 68816 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 diff --git a/dist/fabric.require.js b/dist/fabric.require.js index 75d5924b..c5332974 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,5 +1,5 @@ var fabric = fabric || { - version: "1.7.1" + version: "1.7.2" }; if (typeof exports !== "undefined") { @@ -11,7 +11,7 @@ if (typeof document !== "undefined" && typeof window !== "undefined") { fabric.window = window; window.fabric = fabric; } else { - fabric.document = require("jsdom").jsdom(""); + fabric.document = require("jsdom").jsdom(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E")); if (fabric.document.createWindow) { fabric.window = fabric.document.createWindow(); } else { @@ -1400,6 +1400,30 @@ if (typeof console !== "undefined") { fabric.util.requestAnimFrame = requestAnimFrame; })(); +(function() { + function calculateColor(begin, end, pos) { + var color = "rgba(" + parseInt(begin[0] + pos * (end[0] - begin[0]), 10) + "," + parseInt(begin[1] + pos * (end[1] - begin[1]), 10) + "," + parseInt(begin[2] + pos * (end[2] - begin[2]), 10); + color += "," + (begin && end ? parseFloat(begin[3] + pos * (end[3] - begin[3])) : 1); + color += ")"; + return color; + } + function animateColor(fromColor, toColor, duration, options) { + var startColor = new fabric.Color(fromColor).getSource(), endColor = new fabric.Color(toColor).getSource(); + options = options || {}; + fabric.util.animate(fabric.util.object.extend(options, { + duration: duration || 500, + startValue: startColor, + endValue: endColor, + byValue: endColor, + easing: function(currentTime, startValue, byValue, duration) { + var posValue = options.colorEasing ? options.colorEasing(currentTime, duration) : 1 - Math.cos(currentTime / duration * (Math.PI / 2)); + return calculateColor(startValue, byValue, posValue); + } + })); + } + fabric.util.animateColor = animateColor; +})(); + (function() { function normalize(a, c, p, s) { if (a < Math.abs(c)) { @@ -3385,14 +3409,14 @@ fabric.Pattern = fabric.util.createClass({ return this.viewportTransform[0]; }, setViewportTransform: function(vpt) { - var activeGroup = this._activeGroup, object; + var activeGroup = this._activeGroup, object, ingoreVpt = false, skipAbsolute = true; this.viewportTransform = vpt; for (var i = 0, len = this._objects.length; i < len; i++) { object = this._objects[i]; - object.group || object.setCoords(); + object.group || object.setCoords(ingoreVpt, skipAbsolute); } if (activeGroup) { - activeGroup.setCoords(); + activeGroup.setCoords(ingoreVpt, skipAbsolute); } this.renderAll(); return this; @@ -3597,9 +3621,10 @@ fabric.Pattern = fabric.util.createClass({ return object; }, __serializeBgOverlay: function(methodName, propertiesToInclude) { - var data = { - background: this.backgroundColor && this.backgroundColor.toObject ? this.backgroundColor.toObject(propertiesToInclude) : this.backgroundColor - }; + var data = {}; + if (this.backgroundColor) { + data.background = this.backgroundColor.toObject ? this.backgroundColor.toObject(propertiesToInclude) : this.backgroundColor; + } if (this.overlayColor) { data.overlay = this.overlayColor.toObject ? this.overlayColor.toObject(propertiesToInclude) : this.overlayColor; } @@ -5199,6 +5224,9 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { }, _shouldRender: function(target, pointer) { var activeObject = this.getActiveGroup() || this.getActiveObject(); + if (activeObject && activeObject.isEditing) { + return false; + } return !!(target && (target.isMoving || target !== activeObject) || !target && !!activeObject || !target && !activeObject && !this._groupSelector || pointer && this._previousPointer && this.selection && (pointer.x !== this._previousPointer.x || pointer.y !== this._previousPointer.y)); }, __onMouseUp: function(e) { @@ -5401,6 +5429,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { var pointer = this.getPointer(e), transform = this._currentTransform; transform.reset = false; transform.target.isMoving = true; + transform.shiftKey = e.shiftKey; + transform.altKey = e[this.centeredKey]; this._beforeScaleTransform(e, transform); this._performTransformAction(e, transform, pointer); transform.actionPerformed && this.renderAll(); @@ -5426,7 +5456,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, { this.setCursor(target.moveCursor || this.moveCursor); } } - transform.actionPerformed = actionPerformed; + transform.actionPerformed = transform.actionPerformed || actionPerformed; }, _fire: function(eventName, target, e) { this.fire("object:" + eventName, { @@ -5881,6 +5911,15 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { this._cacheContext = this._cacheCanvas.getContext("2d"); this._updateCacheCanvas(); }, + _getCacheCanvasDimensions: function() { + var zoom = this.canvas && this.canvas.getZoom() || 1, objectScale = this.getObjectScaling(), dim = this._getNonTransformedDimensions(), retina = this.canvas && this.canvas._isRetinaScaling() ? fabric.devicePixelRatio : 1, zoomX = objectScale.scaleX * zoom * retina, zoomY = objectScale.scaleY * zoom * retina, width = dim.x * zoomX, height = dim.y * zoomY; + return { + width: width, + height: height, + zoomX: zoomX, + zoomY: zoomY + }; + }, _updateCacheCanvas: function() { if (this.noScaleCache && this.canvas && this.canvas._currentTransform) { var action = this.canvas._currentTransform.action; @@ -5888,7 +5927,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { return false; } } - var zoom = this.getViewportTransform()[0], objectScale = this.getObjectScaling(), dim = this._getNonTransformedDimensions(), retina = this.canvas && this.canvas._isRetinaScaling() ? fabric.devicePixelRatio : 1, zoomX = objectScale.scaleX * zoom * retina, zoomY = objectScale.scaleY * zoom * retina, width = dim.x * zoomX, height = dim.y * zoomY; + var dims = this._getCacheCanvasDimensions(), width = dims.width, height = dims.height, zoomX = dims.zoomX, zoomY = dims.zoomY; if (width !== this.cacheWidth || height !== this.cacheHeight) { this._cacheCanvas.width = width; this._cacheCanvas.height = height; @@ -6664,21 +6703,30 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, { return this.scale(value / this.height / boundingRectFactor); }, calcCoords: function(ignoreVpt) { - var theta = degreesToRadians(this.angle), vpt = this.getViewportTransform(), dim = ignoreVpt ? this._getTransformedDimensions() : this._calculateCurrentDimensions(), currentWidth = dim.x, currentHeight = dim.y, sinTh = Math.sin(theta), cosTh = Math.cos(theta), _angle = currentWidth > 0 ? Math.atan(currentHeight / currentWidth) : 0, _hypotenuse = currentWidth / Math.cos(_angle) / 2, offsetX = Math.cos(_angle + theta) * _hypotenuse, offsetY = Math.sin(_angle + theta) * _hypotenuse, center = this.getCenterPoint(), coords = ignoreVpt ? center : fabric.util.transformPoint(center, vpt), tl = new fabric.Point(coords.x - offsetX, coords.y - offsetY), tr = new fabric.Point(tl.x + currentWidth * cosTh, tl.y + currentWidth * sinTh), bl = new fabric.Point(tl.x - currentHeight * sinTh, tl.y + currentHeight * cosTh), br = new fabric.Point(coords.x + offsetX, coords.y + offsetY), ml = new fabric.Point((tl.x + bl.x) / 2, (tl.y + bl.y) / 2), mt = new fabric.Point((tr.x + tl.x) / 2, (tr.y + tl.y) / 2), mr = new fabric.Point((br.x + tr.x) / 2, (br.y + tr.y) / 2), mb = new fabric.Point((br.x + bl.x) / 2, (br.y + bl.y) / 2), mtr = new fabric.Point(mt.x + sinTh * this.rotatingPointOffset, mt.y - cosTh * this.rotatingPointOffset); - return { + var theta = degreesToRadians(this.angle), vpt = this.getViewportTransform(), dim = ignoreVpt ? this._getTransformedDimensions() : this._calculateCurrentDimensions(), currentWidth = dim.x, currentHeight = dim.y, sinTh = Math.sin(theta), cosTh = Math.cos(theta), _angle = currentWidth > 0 ? Math.atan(currentHeight / currentWidth) : 0, _hypotenuse = currentWidth / Math.cos(_angle) / 2, offsetX = Math.cos(_angle + theta) * _hypotenuse, offsetY = Math.sin(_angle + theta) * _hypotenuse, center = this.getCenterPoint(), coords = ignoreVpt ? center : fabric.util.transformPoint(center, vpt), tl = new fabric.Point(coords.x - offsetX, coords.y - offsetY), tr = new fabric.Point(tl.x + currentWidth * cosTh, tl.y + currentWidth * sinTh), bl = new fabric.Point(tl.x - currentHeight * sinTh, tl.y + currentHeight * cosTh), br = new fabric.Point(coords.x + offsetX, coords.y + offsetY); + if (!ignoreVpt) { + var ml = new fabric.Point((tl.x + bl.x) / 2, (tl.y + bl.y) / 2), mt = new fabric.Point((tr.x + tl.x) / 2, (tr.y + tl.y) / 2), mr = new fabric.Point((br.x + tr.x) / 2, (br.y + tr.y) / 2), mb = new fabric.Point((br.x + bl.x) / 2, (br.y + bl.y) / 2), mtr = new fabric.Point(mt.x + sinTh * this.rotatingPointOffset, mt.y - cosTh * this.rotatingPointOffset); + } + var coords = { tl: tl, tr: tr, br: br, - bl: bl, - ml: ml, - mt: mt, - mr: mr, - mb: mb, - mtr: mtr + bl: bl }; + if (!ignoreVpt) { + coords.ml = ml; + coords.mt = mt; + coords.mr = mr; + coords.mb = mb; + coords.mtr = mtr; + } + return coords; }, - setCoords: function(ignoreZoom) { + setCoords: function(ignoreZoom, skipAbsolute) { this.oCoords = this.calcCoords(ignoreZoom); + if (!skipAbsolute && !ignoreZoom) { + this.absoluteCoords = this.calcCoords(true); + } ignoreZoom || this._setCornerCoords && this._setCornerCoords(); return this; }, @@ -6841,6 +6889,9 @@ fabric.util.object.extend(fabric.Object.prototype, { }, saveState: function(options) { var propertySet = options && options.propertySet || originalSet, destination = "_" + propertySet; + if (!this[destination]) { + return this.setupState(options); + } saveProps(this, destination, this[propertySet]); if (options && options.stateProperties) { saveProps(this, destination, options.stateProperties); @@ -7230,12 +7281,15 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.warn("fabric.Line is already defined"); return; } + var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); + cacheProperties.push("x1", "x2", "y1", "y2"); fabric.Line = fabric.util.createClass(fabric.Object, { type: "line", x1: 0, y1: 0, x2: 0, y2: 0, + cacheProperties: cacheProperties, initialize: function(points, options) { if (!points) { points = [ 0, 0, 0, 0 ]; @@ -7379,11 +7433,14 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.warn("fabric.Circle is already defined."); return; } + var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); + cacheProperties.push("radius"); fabric.Circle = fabric.util.createClass(fabric.Object, { type: "circle", radius: 0, startAngle: 0, endAngle: pi * 2, + cacheProperties: cacheProperties, initialize: function(options) { this.callSuper("initialize", options); this.set("radius", options && options.radius || 0); @@ -7510,10 +7567,13 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.warn("fabric.Ellipse is already defined."); return; } + var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); + cacheProperties.push("rx", "ry"); fabric.Ellipse = fabric.util.createClass(fabric.Object, { type: "ellipse", rx: 0, ry: 0, + cacheProperties: cacheProperties, initialize: function(options) { this.callSuper("initialize", options); this.set("rx", options && options.rx || 0); @@ -7591,7 +7651,7 @@ fabric.util.object.extend(fabric.Object.prototype, { return; } var stateProperties = fabric.Object.prototype.stateProperties.concat(); - stateProperties.push("rx", "ry", "x", "y"); + stateProperties.push("rx", "ry"); fabric.Rect = fabric.util.createClass(fabric.Object, { stateProperties: stateProperties, type: "rect", @@ -7681,11 +7741,14 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.warn("fabric.Polyline is already defined"); return; } + var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); + cacheProperties.push("points"); fabric.Polyline = fabric.util.createClass(fabric.Object, { type: "polyline", points: null, minX: 0, minY: 0, + cacheProperties: cacheProperties, initialize: function(points, options) { return fabric.Polygon.prototype.initialize.call(this, points, options); }, @@ -7741,11 +7804,14 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.warn("fabric.Polygon is already defined"); return; } + var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); + cacheProperties.push("points"); fabric.Polygon = fabric.util.createClass(fabric.Object, { type: "polygon", points: null, minX: 0, minY: 0, + cacheProperties: cacheProperties, initialize: function(points, options) { options = options || {}; this.points = points || []; @@ -7796,16 +7862,15 @@ fabric.util.object.extend(fabric.Object.prototype, { } }, commonRender: function(ctx, noTransform) { - var point, len = this.points.length; + var point, len = this.points.length, x = noTransform ? 0 : this.pathOffset.x, y = noTransform ? 0 : this.pathOffset.y; if (!len || isNaN(this.points[len - 1].y)) { return false; } - noTransform || ctx.translate(-this.pathOffset.x, -this.pathOffset.y); ctx.beginPath(); - ctx.moveTo(this.points[0].x, this.points[0].y); + ctx.moveTo(this.points[0].x - x, this.points[0].y - y); for (var i = 0; i < len; i++) { point = this.points[i]; - ctx.lineTo(point.x, point.y); + ctx.lineTo(point.x - x, point.y - y); } return true; }, @@ -7853,11 +7918,14 @@ fabric.util.object.extend(fabric.Object.prototype, { fabric.warn("fabric.Path is already defined"); return; } + var cacheProperties = fabric.Object.prototype.cacheProperties.concat(); + cacheProperties.push("path"); fabric.Path = fabric.util.createClass(fabric.Object, { type: "path", path: null, minX: 0, minY: 0, + cacheProperties: cacheProperties, initialize: function(path, options) { options = options || {}; if (options) { @@ -8366,7 +8434,7 @@ fabric.util.object.extend(fabric.Object.prototype, { (function(global) { "use strict"; - var fabric = global.fabric || (global.fabric = {}), extend = fabric.util.object.extend, invoke = fabric.util.array.invoke, parentToObject = fabric.Object.prototype.toObject; + var fabric = global.fabric || (global.fabric = {}), extend = fabric.util.object.extend; if (fabric.PathGroup) { fabric.warn("fabric.PathGroup is already defined"); return; @@ -8462,8 +8530,15 @@ fabric.util.object.extend(fabric.Object.prototype, { return this.callSuper("_set", prop, value); }, toObject: function(propertiesToInclude) { - var o = extend(parentToObject.call(this, [ "sourcePath" ].concat(propertiesToInclude)), { - paths: invoke(this.getObjects(), "toObject", propertiesToInclude) + var pathsToObject = this.paths.map(function(path) { + var originalDefaults = path.includeDefaultValues; + path.includeDefaultValues = path.group.includeDefaultValues; + var obj = path.toObject(propertiesToInclude); + path.includeDefaultValues = originalDefaults; + return obj; + }); + var o = extend(this.callSuper("toObject", [ "sourcePath" ].concat(propertiesToInclude)), { + paths: pathsToObject }); return o; }, @@ -8526,7 +8601,7 @@ fabric.util.object.extend(fabric.Object.prototype, { (function(global) { "use strict"; - var fabric = global.fabric || (global.fabric = {}), extend = fabric.util.object.extend, min = fabric.util.array.min, max = fabric.util.array.max, invoke = fabric.util.array.invoke; + var fabric = global.fabric || (global.fabric = {}), extend = fabric.util.object.extend, min = fabric.util.array.min, max = fabric.util.array.max; if (fabric.Group) { return; } @@ -8656,8 +8731,15 @@ fabric.util.object.extend(fabric.Object.prototype, { this.callSuper("_set", key, value); }, toObject: function(propertiesToInclude) { + var objsToObject = this.getObjects().map(function(obj) { + var originalDefaults = obj.includeDefaultValues; + obj.includeDefaultValues = obj.group.includeDefaultValues; + var _obj = obj.toObject(propertiesToInclude); + obj.includeDefaultValues = originalDefaults; + return _obj; + }); return extend(this.callSuper("toObject", propertiesToInclude), { - objects: invoke(this._objects, "toObject", propertiesToInclude) + objects: objsToObject }); }, render: function(ctx) { @@ -10091,6 +10173,12 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ toString: function() { return "#'; }, + _getCacheCanvasDimensions: function() { + var dim = this.callSuper("_getCacheCanvasDimensions"); + dim.width += 2 * this.fontSize; + dim.height += 2 * this.fontSize; + return dim; + }, _render: function(ctx) { this._setTextStyles(ctx); if (this.group && this.group.type === "path-group") { @@ -10585,12 +10673,12 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ render: function(ctx, noTransform) { this.clearContextTop(); this.callSuper("render", ctx, noTransform); + this.cursorOffsetCache = {}; + this.renderCursorOrSelection(); }, _render: function(ctx) { this.callSuper("_render", ctx); this.ctx = ctx; - this.cursorOffsetCache = {}; - this.renderCursorOrSelection(); }, clearContextTop: function() { if (!this.active || !this.isEditing) { @@ -11455,7 +11543,7 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass({ } for (var i = 0, len = _chars.length; i < len; i++) { if (useCopiedStyle) { - style = fabric.copiedTextStyle[i]; + style = fabric.util.object.clone(fabric.copiedTextStyle[i], true); } this.insertChar(_chars[i], i < len - 1, style); } @@ -11813,7 +11901,12 @@ fabric.util.object.extend(fabric.IText.prototype, { } e.stopImmediatePropagation(); e.preventDefault(); - this.canvas && this.canvas.renderAll(); + if (e.keyCode >= 33 && e.keyCode <= 40) { + this.clearContextTop(); + this.renderCursorOrSelection(); + } else { + this.canvas && this.canvas.renderAll(); + } }, onKeyUp: function(e) { if (!this.isEditing || this._copyDone) { @@ -11878,7 +11971,7 @@ fabric.util.object.extend(fabric.IText.prototype, { clipboardData.setData("text", selectedText); } fabric.copiedText = selectedText; - fabric.copiedTextStyle = fabric.util.object.clone(this.getSelectionStyles(this.selectionStart, this.selectionEnd)); + fabric.copiedTextStyle = this.getSelectionStyles(this.selectionStart, this.selectionEnd); e.stopImmediatePropagation(); e.preventDefault(); this._copyDone = true; @@ -12306,6 +12399,7 @@ fabric.util.object.extend(fabric.IText.prototype, { _splitTextIntoLines: function(ctx) { ctx = ctx || this.ctx; var originalAlign = this.textAlign; + this._styleMap = null; ctx.save(); this._setTextStyles(ctx); this.textAlign = "left"; diff --git a/package.json b/package.json index 70ded894..6502a2f5 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", "homepage": "http://fabricjs.com/", - "version": "1.7.1", + "version": "1.7.2", "author": "Juriy Zaytsev ", "contributors": [ { diff --git a/src/shapes/object.class.js b/src/shapes/object.class.js index 0999e891..f68c53cf 100644 --- a/src/shapes/object.class.js +++ b/src/shapes/object.class.js @@ -841,6 +841,32 @@ this._updateCacheCanvas(); }, + /** + * Return the dimension and the zoom level needed to create a cache canvas + * big enough to host the object to be cached. + * @private + * @return {Object}.width width of canvas + * @return {Object}.height height of canvas + * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache + * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache + */ + _getCacheCanvasDimensions: function() { + var zoom = this.canvas && this.canvas.getZoom() || 1, + objectScale = this.getObjectScaling(), + dim = this._getNonTransformedDimensions(), + retina = this.canvas && this.canvas._isRetinaScaling() ? fabric.devicePixelRatio : 1, + zoomX = objectScale.scaleX * zoom * retina, + zoomY = objectScale.scaleY * zoom * retina, + width = dim.x * zoomX, + height = dim.y * zoomY; + return { + width: width, + height: height, + zoomX: zoomX, + zoomY: zoomY + }; + }, + /** * Update width and height of the canvas for cache * returns true or false if canvas needed resize. @@ -854,14 +880,10 @@ return false; } } - var zoom = this.getViewportTransform()[0], - objectScale = this.getObjectScaling(), - dim = this._getNonTransformedDimensions(), - retina = this.canvas && this.canvas._isRetinaScaling() ? fabric.devicePixelRatio : 1, - zoomX = objectScale.scaleX * zoom * retina, - zoomY = objectScale.scaleY * zoom * retina, - width = dim.x * zoomX, - height = dim.y * zoomY; + var dims = this._getCacheCanvasDimensions(), + width = dims.width, height = dims.height, + zoomX = dims.zoomX, zoomY = dims.zoomY; + if (width !== this.cacheWidth || height !== this.cacheHeight) { this._cacheCanvas.width = width; this._cacheCanvas.height = height; diff --git a/src/shapes/text.class.js b/src/shapes/text.class.js index edd5e133..275ff553 100644 --- a/src/shapes/text.class.js +++ b/src/shapes/text.class.js @@ -393,6 +393,22 @@ '): { "text": "' + this.text + '", "fontFamily": "' + this.fontFamily + '" }>'; }, + /** + * Return the dimension and the zoom level needed to create a cache canvas + * big enough to host the object to be cached. + * @private + * @return {Object}.width width of canvas + * @return {Object}.height height of canvas + * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache + * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache + */ + _getCacheCanvasDimensions: function() { + var dim = this.callSuper('_getCacheCanvasDimensions'); + dim.width += 2 * this.fontSize; + dim.height += 2 * this.fontSize; + return dim; + }, + /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on