{"version":3,"file":"ext-closepath.js","sources":["../../../../src/common/svgpathseg.js","../../../../src/editor/extensions/ext-closepath/ext-closepath.js"],"sourcesContent":["/* eslint-disable import/unambiguous, max-len */\n/* globals SVGPathSeg, SVGPathSegMovetoRel, SVGPathSegMovetoAbs,\n SVGPathSegMovetoRel, SVGPathSegLinetoRel, SVGPathSegLinetoAbs,\n SVGPathSegLinetoHorizontalRel, SVGPathSegLinetoHorizontalAbs,\n SVGPathSegLinetoVerticalRel, SVGPathSegLinetoVerticalAbs,\n SVGPathSegClosePath, SVGPathSegCurvetoCubicRel,\n SVGPathSegCurvetoCubicAbs, SVGPathSegCurvetoCubicSmoothRel,\n SVGPathSegCurvetoCubicSmoothAbs, SVGPathSegCurvetoQuadraticRel,\n SVGPathSegCurvetoQuadraticAbs, SVGPathSegCurvetoQuadraticSmoothRel,\n SVGPathSegCurvetoQuadraticSmoothAbs, SVGPathSegArcRel, SVGPathSegArcAbs */\n/**\n* SVGPathSeg API polyfill\n* https://github.com/progers/pathseg\n*\n* This is a drop-in replacement for the `SVGPathSeg` and `SVGPathSegList` APIs\n* that were removed from SVG2 ({@link https://lists.w3.org/Archives/Public/www-svg/2015Jun/0044.html}),\n* including the latest spec changes which were implemented in Firefox 43 and\n* Chrome 46.\n*/\n/* eslint-disable no-shadow, class-methods-use-this, jsdoc/require-jsdoc */\n// Linting: We avoid `no-shadow` as ESLint thinks these are still available globals\n// Linting: We avoid `class-methods-use-this` as this is a polyfill that must\n// follow the conventions\n(() => {\nif (!('SVGPathSeg' in window)) {\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSeg\n class SVGPathSeg {\n constructor (type, typeAsLetter, owningPathSegList) {\n this.pathSegType = type;\n this.pathSegTypeAsLetter = typeAsLetter;\n this._owningPathSegList = owningPathSegList;\n }\n // Notify owning PathSegList on any changes so they can be synchronized back to the path element.\n _segmentChanged () {\n if (this._owningPathSegList) {\n this._owningPathSegList.segmentChanged(this);\n }\n }\n }\n SVGPathSeg.prototype.classname = 'SVGPathSeg';\n\n SVGPathSeg.PATHSEG_UNKNOWN = 0;\n SVGPathSeg.PATHSEG_CLOSEPATH = 1;\n SVGPathSeg.PATHSEG_MOVETO_ABS = 2;\n SVGPathSeg.PATHSEG_MOVETO_REL = 3;\n SVGPathSeg.PATHSEG_LINETO_ABS = 4;\n SVGPathSeg.PATHSEG_LINETO_REL = 5;\n SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS = 6;\n SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL = 7;\n SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS = 8;\n SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL = 9;\n SVGPathSeg.PATHSEG_ARC_ABS = 10;\n SVGPathSeg.PATHSEG_ARC_REL = 11;\n SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS = 12;\n SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL = 13;\n SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS = 14;\n SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL = 15;\n SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;\n SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;\n SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;\n SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;\n\n class SVGPathSegClosePath extends SVGPathSeg {\n constructor (owningPathSegList) {\n super(SVGPathSeg.PATHSEG_CLOSEPATH, 'z', owningPathSegList);\n }\n toString () { return '[object SVGPathSegClosePath]'; }\n _asPathString () { return this.pathSegTypeAsLetter; }\n clone () { return new SVGPathSegClosePath(undefined); }\n }\n\n class SVGPathSegMovetoAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_MOVETO_ABS, 'M', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegMovetoAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegMovetoAbs(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegMovetoAbs.prototype, {\n x: {\n get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true\n },\n y: {\n get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true\n }\n });\n\n class SVGPathSegMovetoRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_MOVETO_REL, 'm', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegMovetoRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegMovetoRel(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegMovetoRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegLinetoAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_LINETO_ABS, 'L', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegLinetoAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegLinetoAbs(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegLinetoAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegLinetoRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_LINETO_REL, 'l', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegLinetoRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegLinetoRel(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegLinetoRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoCubicAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x1, y1, x2, y2) {\n super(SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, 'C', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n this._x2 = x2;\n this._y2 = y2;\n }\n toString () { return '[object SVGPathSegCurvetoCubicAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoCubicAbs(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); }\n }\n Object.defineProperties(SVGPathSegCurvetoCubicAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x1: {get () { return this._x1; }, set (x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true},\n y1: {get () { return this._y1; }, set (y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true},\n x2: {get () { return this._x2; }, set (x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true},\n y2: {get () { return this._y2; }, set (y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoCubicRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x1, y1, x2, y2) {\n super(SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL, 'c', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n this._x2 = x2;\n this._y2 = y2;\n }\n toString () { return '[object SVGPathSegCurvetoCubicRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoCubicRel(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); }\n }\n Object.defineProperties(SVGPathSegCurvetoCubicRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x1: {get () { return this._x1; }, set (x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true},\n y1: {get () { return this._y1; }, set (y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true},\n x2: {get () { return this._x2; }, set (x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true},\n y2: {get () { return this._y2; }, set (y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x1, y1) {\n super(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS, 'Q', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n }\n toString () { return '[object SVGPathSegCurvetoQuadraticAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoQuadraticAbs(undefined, this._x, this._y, this._x1, this._y1); }\n }\n Object.defineProperties(SVGPathSegCurvetoQuadraticAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x1: {get () { return this._x1; }, set (x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true},\n y1: {get () { return this._y1; }, set (y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoQuadraticRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x1, y1) {\n super(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL, 'q', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n }\n toString () { return '[object SVGPathSegCurvetoQuadraticRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoQuadraticRel(undefined, this._x, this._y, this._x1, this._y1); }\n }\n Object.defineProperties(SVGPathSegCurvetoQuadraticRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x1: {get () { return this._x1; }, set (x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true},\n y1: {get () { return this._y1; }, set (y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegArcAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n super(SVGPathSeg.PATHSEG_ARC_ABS, 'A', owningPathSegList);\n this._x = x;\n this._y = y;\n this._r1 = r1;\n this._r2 = r2;\n this._angle = angle;\n this._largeArcFlag = largeArcFlag;\n this._sweepFlag = sweepFlag;\n }\n toString () { return '[object SVGPathSegArcAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._r1 + ' ' + this._r2 + ' ' + this._angle + ' ' + (this._largeArcFlag ? '1' : '0') + ' ' + (this._sweepFlag ? '1' : '0') + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegArcAbs(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); }\n }\n Object.defineProperties(SVGPathSegArcAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n r1: {get () { return this._r1; }, set (r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true},\n r2: {get () { return this._r2; }, set (r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true},\n angle: {get () { return this._angle; }, set (angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true},\n largeArcFlag: {get () { return this._largeArcFlag; }, set (largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true},\n sweepFlag: {get () { return this._sweepFlag; }, set (sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegArcRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n super(SVGPathSeg.PATHSEG_ARC_REL, 'a', owningPathSegList);\n this._x = x;\n this._y = y;\n this._r1 = r1;\n this._r2 = r2;\n this._angle = angle;\n this._largeArcFlag = largeArcFlag;\n this._sweepFlag = sweepFlag;\n }\n toString () { return '[object SVGPathSegArcRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._r1 + ' ' + this._r2 + ' ' + this._angle + ' ' + (this._largeArcFlag ? '1' : '0') + ' ' + (this._sweepFlag ? '1' : '0') + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegArcRel(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); }\n }\n Object.defineProperties(SVGPathSegArcRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n r1: {get () { return this._r1; }, set (r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true},\n r2: {get () { return this._r2; }, set (r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true},\n angle: {get () { return this._angle; }, set (angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true},\n largeArcFlag: {get () { return this._largeArcFlag; }, set (largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true},\n sweepFlag: {get () { return this._sweepFlag; }, set (sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegLinetoHorizontalAbs extends SVGPathSeg {\n constructor (owningPathSegList, x) {\n super(SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS, 'H', owningPathSegList);\n this._x = x;\n }\n toString () { return '[object SVGPathSegLinetoHorizontalAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x; }\n clone () { return new SVGPathSegLinetoHorizontalAbs(undefined, this._x); }\n }\n Object.defineProperty(SVGPathSegLinetoHorizontalAbs.prototype, 'x', {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true});\n\n class SVGPathSegLinetoHorizontalRel extends SVGPathSeg {\n constructor (owningPathSegList, x) {\n super(SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL, 'h', owningPathSegList);\n this._x = x;\n }\n toString () { return '[object SVGPathSegLinetoHorizontalRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x; }\n clone () { return new SVGPathSegLinetoHorizontalRel(undefined, this._x); }\n }\n Object.defineProperty(SVGPathSegLinetoHorizontalRel.prototype, 'x', {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true});\n\n class SVGPathSegLinetoVerticalAbs extends SVGPathSeg {\n constructor (owningPathSegList, y) {\n super(SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS, 'V', owningPathSegList);\n this._y = y;\n }\n toString () { return '[object SVGPathSegLinetoVerticalAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._y; }\n clone () { return new SVGPathSegLinetoVerticalAbs(undefined, this._y); }\n }\n Object.defineProperty(SVGPathSegLinetoVerticalAbs.prototype, 'y', {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true});\n\n class SVGPathSegLinetoVerticalRel extends SVGPathSeg {\n constructor (owningPathSegList, y) {\n super(SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL, 'v', owningPathSegList);\n this._y = y;\n }\n toString () { return '[object SVGPathSegLinetoVerticalRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._y; }\n clone () { return new SVGPathSegLinetoVerticalRel(undefined, this._y); }\n }\n Object.defineProperty(SVGPathSegLinetoVerticalRel.prototype, 'y', {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true});\n\n class SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x2, y2) {\n super(SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS, 'S', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x2 = x2;\n this._y2 = y2;\n }\n toString () { return '[object SVGPathSegCurvetoCubicSmoothAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoCubicSmoothAbs(undefined, this._x, this._y, this._x2, this._y2); }\n }\n Object.defineProperties(SVGPathSegCurvetoCubicSmoothAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x2: {get () { return this._x2; }, set (x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true},\n y2: {get () { return this._y2; }, set (y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x2, y2) {\n super(SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL, 's', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x2 = x2;\n this._y2 = y2;\n }\n toString () { return '[object SVGPathSegCurvetoCubicSmoothRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoCubicSmoothRel(undefined, this._x, this._y, this._x2, this._y2); }\n }\n Object.defineProperties(SVGPathSegCurvetoCubicSmoothRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x2: {get () { return this._x2; }, set (x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true},\n y2: {get () { return this._y2; }, set (y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS, 'T', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegCurvetoQuadraticSmoothAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoQuadraticSmoothAbs(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegCurvetoQuadraticSmoothAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL, 't', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegCurvetoQuadraticSmoothRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoQuadraticSmoothRel(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegCurvetoQuadraticSmoothRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n // Add createSVGPathSeg* functions to SVGPathElement.\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathElement.\n SVGPathElement.prototype.createSVGPathSegClosePath = function () { return new SVGPathSegClosePath(undefined); };\n SVGPathElement.prototype.createSVGPathSegMovetoAbs = function (x, y) { return new SVGPathSegMovetoAbs(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegMovetoRel = function (x, y) { return new SVGPathSegMovetoRel(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegLinetoAbs = function (x, y) { return new SVGPathSegLinetoAbs(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegLinetoRel = function (x, y) { return new SVGPathSegLinetoRel(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs = function (x, y, x1, y1, x2, y2) { return new SVGPathSegCurvetoCubicAbs(undefined, x, y, x1, y1, x2, y2); };\n SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel = function (x, y, x1, y1, x2, y2) { return new SVGPathSegCurvetoCubicRel(undefined, x, y, x1, y1, x2, y2); };\n SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs = function (x, y, x1, y1) { return new SVGPathSegCurvetoQuadraticAbs(undefined, x, y, x1, y1); };\n SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel = function (x, y, x1, y1) { return new SVGPathSegCurvetoQuadraticRel(undefined, x, y, x1, y1); };\n SVGPathElement.prototype.createSVGPathSegArcAbs = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new SVGPathSegArcAbs(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); };\n SVGPathElement.prototype.createSVGPathSegArcRel = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new SVGPathSegArcRel(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); };\n SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs = function (x) { return new SVGPathSegLinetoHorizontalAbs(undefined, x); };\n SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel = function (x) { return new SVGPathSegLinetoHorizontalRel(undefined, x); };\n SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs = function (y) { return new SVGPathSegLinetoVerticalAbs(undefined, y); };\n SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel = function (y) { return new SVGPathSegLinetoVerticalRel(undefined, y); };\n SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs = function (x, y, x2, y2) { return new SVGPathSegCurvetoCubicSmoothAbs(undefined, x, y, x2, y2); };\n SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel = function (x, y, x2, y2) { return new SVGPathSegCurvetoCubicSmoothRel(undefined, x, y, x2, y2); };\n SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs = function (x, y) { return new SVGPathSegCurvetoQuadraticSmoothAbs(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel = function (x, y) { return new SVGPathSegCurvetoQuadraticSmoothRel(undefined, x, y); };\n\n if (!('getPathSegAtLength' in SVGPathElement.prototype)) {\n // Add getPathSegAtLength to SVGPathElement.\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-__svg__SVGPathElement__getPathSegAtLength\n // This polyfill requires SVGPathElement.getTotalLength to implement the distance-along-a-path algorithm.\n SVGPathElement.prototype.getPathSegAtLength = function (distance) {\n if (distance === undefined || !isFinite(distance)) {\n throw new Error('Invalid arguments.');\n }\n\n const measurementElement = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n measurementElement.setAttribute('d', this.getAttribute('d'));\n let lastPathSegment = measurementElement.pathSegList.numberOfItems - 1;\n\n // If the path is empty, return 0.\n if (lastPathSegment <= 0) {\n return 0;\n }\n\n do {\n measurementElement.pathSegList.removeItem(lastPathSegment);\n if (distance > measurementElement.getTotalLength()) {\n break;\n }\n lastPathSegment--;\n } while (lastPathSegment > 0);\n return lastPathSegment;\n };\n }\n\n window.SVGPathSeg = SVGPathSeg;\n window.SVGPathSegClosePath = SVGPathSegClosePath;\n window.SVGPathSegMovetoAbs = SVGPathSegMovetoAbs;\n window.SVGPathSegMovetoRel = SVGPathSegMovetoRel;\n window.SVGPathSegLinetoAbs = SVGPathSegLinetoAbs;\n window.SVGPathSegLinetoRel = SVGPathSegLinetoRel;\n window.SVGPathSegCurvetoCubicAbs = SVGPathSegCurvetoCubicAbs;\n window.SVGPathSegCurvetoCubicRel = SVGPathSegCurvetoCubicRel;\n window.SVGPathSegCurvetoQuadraticAbs = SVGPathSegCurvetoQuadraticAbs;\n window.SVGPathSegCurvetoQuadraticRel = SVGPathSegCurvetoQuadraticRel;\n window.SVGPathSegArcAbs = SVGPathSegArcAbs;\n window.SVGPathSegArcRel = SVGPathSegArcRel;\n window.SVGPathSegLinetoHorizontalAbs = SVGPathSegLinetoHorizontalAbs;\n window.SVGPathSegLinetoHorizontalRel = SVGPathSegLinetoHorizontalRel;\n window.SVGPathSegLinetoVerticalAbs = SVGPathSegLinetoVerticalAbs;\n window.SVGPathSegLinetoVerticalRel = SVGPathSegLinetoVerticalRel;\n window.SVGPathSegCurvetoCubicSmoothAbs = SVGPathSegCurvetoCubicSmoothAbs;\n window.SVGPathSegCurvetoCubicSmoothRel = SVGPathSegCurvetoCubicSmoothRel;\n window.SVGPathSegCurvetoQuadraticSmoothAbs = SVGPathSegCurvetoQuadraticSmoothAbs;\n window.SVGPathSegCurvetoQuadraticSmoothRel = SVGPathSegCurvetoQuadraticSmoothRel;\n}\n\n// Checking for SVGPathSegList in window checks for the case of an implementation without the\n// SVGPathSegList API.\n// The second check for appendItem is specific to Firefox 59+ which removed only parts of the\n// SVGPathSegList API (e.g., appendItem). In this case we need to re-implement the entire API\n// so the polyfill data (i.e., _list) is used throughout.\nif (!('SVGPathSegList' in window) || !('appendItem' in window.SVGPathSegList.prototype)) {\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSegList\n class SVGPathSegList {\n constructor (pathElement) {\n this._pathElement = pathElement;\n this._list = this._parsePath(this._pathElement.getAttribute('d'));\n\n // Use a MutationObserver to catch changes to the path's \"d\" attribute.\n this._mutationObserverConfig = {attributes: true, attributeFilter: ['d']};\n this._pathElementMutationObserver = new MutationObserver(this._updateListFromPathMutations.bind(this));\n this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\n }\n // Process any pending mutations to the path element and update the list as needed.\n // This should be the first call of all public functions and is needed because\n // MutationObservers are not synchronous so we can have pending asynchronous mutations.\n _checkPathSynchronizedToList () {\n this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords());\n }\n\n _updateListFromPathMutations (mutationRecords) {\n if (!this._pathElement) {\n return;\n }\n let hasPathMutations = false;\n mutationRecords.forEach((record) => {\n if (record.attributeName === 'd') {\n hasPathMutations = true;\n }\n });\n if (hasPathMutations) {\n this._list = this._parsePath(this._pathElement.getAttribute('d'));\n }\n }\n\n // Serialize the list and update the path's 'd' attribute.\n _writeListToPath () {\n this._pathElementMutationObserver.disconnect();\n this._pathElement.setAttribute('d', SVGPathSegList._pathSegArrayAsString(this._list));\n this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\n }\n\n // When a path segment changes the list needs to be synchronized back to the path element.\n segmentChanged (pathSeg) {\n this._writeListToPath();\n }\n\n clear () {\n this._checkPathSynchronizedToList();\n\n this._list.forEach((pathSeg) => {\n pathSeg._owningPathSegList = null;\n });\n this._list = [];\n this._writeListToPath();\n }\n\n initialize (newItem) {\n this._checkPathSynchronizedToList();\n\n this._list = [newItem];\n newItem._owningPathSegList = this;\n this._writeListToPath();\n return newItem;\n }\n\n _checkValidIndex (index) {\n if (isNaN(index) || index < 0 || index >= this.numberOfItems) {\n throw new Error('INDEX_SIZE_ERR');\n }\n }\n\n getItem (index) {\n this._checkPathSynchronizedToList();\n\n this._checkValidIndex(index);\n return this._list[index];\n }\n\n insertItemBefore (newItem, index) {\n this._checkPathSynchronizedToList();\n\n // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.\n if (index > this.numberOfItems) {\n index = this.numberOfItems;\n }\n if (newItem._owningPathSegList) {\n // SVG2 spec says to make a copy.\n newItem = newItem.clone();\n }\n this._list.splice(index, 0, newItem);\n newItem._owningPathSegList = this;\n this._writeListToPath();\n return newItem;\n }\n\n replaceItem (newItem, index) {\n this._checkPathSynchronizedToList();\n\n if (newItem._owningPathSegList) {\n // SVG2 spec says to make a copy.\n newItem = newItem.clone();\n }\n this._checkValidIndex(index);\n this._list[index] = newItem;\n newItem._owningPathSegList = this;\n this._writeListToPath();\n return newItem;\n }\n\n removeItem (index) {\n this._checkPathSynchronizedToList();\n\n this._checkValidIndex(index);\n const item = this._list[index];\n this._list.splice(index, 1);\n this._writeListToPath();\n return item;\n }\n\n appendItem (newItem) {\n this._checkPathSynchronizedToList();\n\n if (newItem._owningPathSegList) {\n // SVG2 spec says to make a copy.\n newItem = newItem.clone();\n }\n this._list.push(newItem);\n newItem._owningPathSegList = this;\n // TODO: Optimize this to just append to the existing attribute.\n this._writeListToPath();\n return newItem;\n }\n\n // This closely follows SVGPathParser::parsePath from Source/core/svg/SVGPathParser.cpp.\n _parsePath (string) {\n if (!string || !string.length) {\n return [];\n }\n\n const owningPathSegList = this;\n\n class Builder {\n constructor () {\n this.pathSegList = [];\n }\n appendSegment (pathSeg) {\n this.pathSegList.push(pathSeg);\n }\n }\n\n class Source {\n constructor (string) {\n this._string = string;\n this._currentIndex = 0;\n this._endIndex = this._string.length;\n this._previousCommand = SVGPathSeg.PATHSEG_UNKNOWN;\n\n this._skipOptionalSpaces();\n }\n _isCurrentSpace () {\n const character = this._string[this._currentIndex];\n return character <= ' ' && (character === ' ' || character === '\\n' || character === '\\t' || character === '\\r' || character === '\\f');\n }\n\n _skipOptionalSpaces () {\n while (this._currentIndex < this._endIndex && this._isCurrentSpace()) {\n this._currentIndex++;\n }\n return this._currentIndex < this._endIndex;\n }\n\n _skipOptionalSpacesOrDelimiter () {\n if (this._currentIndex < this._endIndex && !this._isCurrentSpace() && this._string.charAt(this._currentIndex) !== ',') {\n return false;\n }\n if (this._skipOptionalSpaces()) {\n if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) === ',') {\n this._currentIndex++;\n this._skipOptionalSpaces();\n }\n }\n return this._currentIndex < this._endIndex;\n }\n\n hasMoreData () {\n return this._currentIndex < this._endIndex;\n }\n\n peekSegmentType () {\n const lookahead = this._string[this._currentIndex];\n return this._pathSegTypeFromChar(lookahead);\n }\n\n _pathSegTypeFromChar (lookahead) {\n switch (lookahead) {\n case 'Z':\n case 'z':\n return SVGPathSeg.PATHSEG_CLOSEPATH;\n case 'M':\n return SVGPathSeg.PATHSEG_MOVETO_ABS;\n case 'm':\n return SVGPathSeg.PATHSEG_MOVETO_REL;\n case 'L':\n return SVGPathSeg.PATHSEG_LINETO_ABS;\n case 'l':\n return SVGPathSeg.PATHSEG_LINETO_REL;\n case 'C':\n return SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS;\n case 'c':\n return SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL;\n case 'Q':\n return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS;\n case 'q':\n return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL;\n case 'A':\n return SVGPathSeg.PATHSEG_ARC_ABS;\n case 'a':\n return SVGPathSeg.PATHSEG_ARC_REL;\n case 'H':\n return SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS;\n case 'h':\n return SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL;\n case 'V':\n return SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS;\n case 'v':\n return SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL;\n case 'S':\n return SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS;\n case 's':\n return SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL;\n case 'T':\n return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS;\n case 't':\n return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL;\n default:\n return SVGPathSeg.PATHSEG_UNKNOWN;\n }\n }\n\n _nextCommandHelper (lookahead, previousCommand) {\n // Check for remaining coordinates in the current command.\n if ((lookahead === '+' || lookahead === '-' || lookahead === '.' || (lookahead >= '0' && lookahead <= '9')) && previousCommand !== SVGPathSeg.PATHSEG_CLOSEPATH) {\n if (previousCommand === SVGPathSeg.PATHSEG_MOVETO_ABS) {\n return SVGPathSeg.PATHSEG_LINETO_ABS;\n }\n if (previousCommand === SVGPathSeg.PATHSEG_MOVETO_REL) {\n return SVGPathSeg.PATHSEG_LINETO_REL;\n }\n return previousCommand;\n }\n return SVGPathSeg.PATHSEG_UNKNOWN;\n }\n\n initialCommandIsMoveTo () {\n // If the path is empty it is still valid, so return true.\n if (!this.hasMoreData()) {\n return true;\n }\n const command = this.peekSegmentType();\n // Path must start with moveTo.\n return command === SVGPathSeg.PATHSEG_MOVETO_ABS || command === SVGPathSeg.PATHSEG_MOVETO_REL;\n }\n\n // Parse a number from an SVG path. This very closely follows genericParseNumber(...) from Source/core/svg/SVGParserUtilities.cpp.\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-PathDataBNF\n _parseNumber () {\n let exponent = 0;\n let integer = 0;\n let frac = 1;\n let decimal = 0;\n let sign = 1;\n let expsign = 1;\n\n const startIndex = this._currentIndex;\n\n this._skipOptionalSpaces();\n\n // Read the sign.\n if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) === '+') {\n this._currentIndex++;\n } else if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) === '-') {\n this._currentIndex++;\n sign = -1;\n }\n\n if (this._currentIndex === this._endIndex || ((this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9') && this._string.charAt(this._currentIndex) !== '.')) {\n // The first character of a number must be one of [0-9+-.].\n return undefined;\n }\n\n // Read the integer part, build right-to-left.\n const startIntPartIndex = this._currentIndex;\n while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9') {\n this._currentIndex++; // Advance to first non-digit.\n }\n\n if (this._currentIndex !== startIntPartIndex) {\n let scanIntPartIndex = this._currentIndex - 1;\n let multiplier = 1;\n while (scanIntPartIndex >= startIntPartIndex) {\n integer += multiplier * (this._string.charAt(scanIntPartIndex--) - '0');\n multiplier *= 10;\n }\n }\n\n // Read the decimals.\n if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) === '.') {\n this._currentIndex++;\n\n // There must be a least one digit following the .\n if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9') {\n return undefined;\n }\n while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9') {\n frac *= 10;\n decimal += (this._string.charAt(this._currentIndex) - '0') / frac;\n this._currentIndex += 1;\n }\n }\n\n // Read the exponent part.\n if (this._currentIndex !== startIndex && this._currentIndex + 1 < this._endIndex && (this._string.charAt(this._currentIndex) === 'e' || this._string.charAt(this._currentIndex) === 'E') && (this._string.charAt(this._currentIndex + 1) !== 'x' && this._string.charAt(this._currentIndex + 1) !== 'm')) {\n this._currentIndex++;\n\n // Read the sign of the exponent.\n if (this._string.charAt(this._currentIndex) === '+') {\n this._currentIndex++;\n } else if (this._string.charAt(this._currentIndex) === '-') {\n this._currentIndex++;\n expsign = -1;\n }\n\n // There must be an exponent.\n if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9') {\n return undefined;\n }\n\n while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9') {\n exponent *= 10;\n exponent += (this._string.charAt(this._currentIndex) - '0');\n this._currentIndex++;\n }\n }\n\n let number = integer + decimal;\n number *= sign;\n\n if (exponent) {\n number *= 10 ** (expsign * exponent);\n }\n\n if (startIndex === this._currentIndex) {\n return undefined;\n }\n\n this._skipOptionalSpacesOrDelimiter();\n\n return number;\n }\n\n _parseArcFlag () {\n if (this._currentIndex >= this._endIndex) {\n return undefined;\n }\n let flag = false;\n const flagChar = this._string.charAt(this._currentIndex++);\n if (flagChar === '0') {\n flag = false;\n } else if (flagChar === '1') {\n flag = true;\n } else {\n return undefined;\n }\n\n this._skipOptionalSpacesOrDelimiter();\n return flag;\n }\n\n parseSegment () {\n const lookahead = this._string[this._currentIndex];\n let command = this._pathSegTypeFromChar(lookahead);\n if (command === SVGPathSeg.PATHSEG_UNKNOWN) {\n // Possibly an implicit command. Not allowed if this is the first command.\n if (this._previousCommand === SVGPathSeg.PATHSEG_UNKNOWN) {\n return null;\n }\n command = this._nextCommandHelper(lookahead, this._previousCommand);\n if (command === SVGPathSeg.PATHSEG_UNKNOWN) {\n return null;\n }\n } else {\n this._currentIndex++;\n }\n\n this._previousCommand = command;\n\n switch (command) {\n case SVGPathSeg.PATHSEG_MOVETO_REL:\n return new SVGPathSegMovetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_MOVETO_ABS:\n return new SVGPathSegMovetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_REL:\n return new SVGPathSegLinetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_ABS:\n return new SVGPathSegLinetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:\n return new SVGPathSegLinetoHorizontalRel(owningPathSegList, this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:\n return new SVGPathSegLinetoHorizontalAbs(owningPathSegList, this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:\n return new SVGPathSegLinetoVerticalRel(owningPathSegList, this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:\n return new SVGPathSegLinetoVerticalAbs(owningPathSegList, this._parseNumber());\n case SVGPathSeg.PATHSEG_CLOSEPATH:\n this._skipOptionalSpaces();\n return new SVGPathSegClosePath(owningPathSegList);\n case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoCubicRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\n } case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoCubicAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\n } case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL: {\n const points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoCubicSmoothRel(owningPathSegList, points.x, points.y, points.x2, points.y2);\n } case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: {\n const points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoCubicSmoothAbs(owningPathSegList, points.x, points.y, points.x2, points.y2);\n } case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoQuadraticRel(owningPathSegList, points.x, points.y, points.x1, points.y1);\n } case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoQuadraticAbs(owningPathSegList, points.x, points.y, points.x1, points.y1);\n } case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:\n return new SVGPathSegCurvetoQuadraticSmoothRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:\n return new SVGPathSegCurvetoQuadraticSmoothAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_ARC_REL: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegArcRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\n } case SVGPathSeg.PATHSEG_ARC_ABS: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegArcAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\n } default:\n throw new Error('Unknown path seg type.');\n }\n }\n }\n\n const builder = new Builder();\n const source = new Source(string);\n\n if (!source.initialCommandIsMoveTo()) {\n return [];\n }\n while (source.hasMoreData()) {\n const pathSeg = source.parseSegment();\n if (!pathSeg) {\n return [];\n }\n builder.appendSegment(pathSeg);\n }\n\n return builder.pathSegList;\n }\n\n // STATIC\n static _pathSegArrayAsString (pathSegArray) {\n let string = '';\n let first = true;\n pathSegArray.forEach((pathSeg) => {\n if (first) {\n first = false;\n string += pathSeg._asPathString();\n } else {\n string += ' ' + pathSeg._asPathString();\n }\n });\n return string;\n }\n }\n\n SVGPathSegList.prototype.classname = 'SVGPathSegList';\n\n Object.defineProperty(SVGPathSegList.prototype, 'numberOfItems', {\n get () {\n this._checkPathSynchronizedToList();\n return this._list.length;\n },\n enumerable: true\n });\n\n // Add the pathSegList accessors to SVGPathElement.\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGAnimatedPathData\n Object.defineProperties(SVGPathElement.prototype, {\n pathSegList: {\n get () {\n if (!this._pathSegList) {\n this._pathSegList = new SVGPathSegList(this);\n }\n return this._pathSegList;\n },\n enumerable: true\n },\n // TODO: The following are not implemented and simply return SVGPathElement.pathSegList.\n normalizedPathSegList: {get () { return this.pathSegList; }, enumerable: true},\n animatedPathSegList: {get () { return this.pathSegList; }, enumerable: true},\n animatedNormalizedPathSegList: {get () { return this.pathSegList; }, enumerable: true}\n });\n window.SVGPathSegList = SVGPathSegList;\n}\n})();\n","/**\n * @file ext-closepath.js\n *\n * @license MIT\n *\n * @copyright 2010 Jeff Schiller\n *\n */\nimport '../../../common/svgpathseg.js';\n\n// This extension adds a simple button to the contextual panel for paths\n// The button toggles whether the path is open or closed\nexport default {\n name: 'closepath',\n async init ({importLocale, $}) {\n const strings = await importLocale();\n let selElems;\n const updateButton = function (path) {\n const seglist = path.pathSegList,\n closed = seglist.getItem(seglist.numberOfItems - 1).pathSegType === 1,\n showbutton = closed ? '#tool_openpath' : '#tool_closepath',\n hidebutton = closed ? '#tool_closepath' : '#tool_openpath';\n $(hidebutton).hide();\n $(showbutton).show();\n };\n const showPanel = function (on) {\n $('#closepath_panel').toggle(on);\n if (on) {\n const path = selElems[0];\n if (path) { updateButton(path); }\n }\n };\n const toggleClosed = function () {\n const path = selElems[0];\n if (path) {\n const seglist = path.pathSegList,\n last = seglist.numberOfItems - 1;\n // is closed\n if (seglist.getItem(last).pathSegType === 1) {\n seglist.removeItem(last);\n } else {\n seglist.appendItem(path.createSVGPathSegClosePath());\n }\n updateButton(path);\n }\n };\n\n const buttons = [\n {\n id: 'tool_openpath',\n icon: 'openpath.png',\n type: 'context',\n panel: 'closepath_panel',\n events: {\n click () {\n toggleClosed();\n }\n }\n },\n {\n id: 'tool_closepath',\n icon: 'closepath.png',\n type: 'context',\n panel: 'closepath_panel',\n events: {\n click () {\n toggleClosed();\n }\n }\n }\n ];\n\n return {\n name: strings.name,\n svgicons: 'closepath_icons.svg',\n buttons: strings.buttons.map((button, i) => {\n return Object.assign(buttons[i], button);\n }),\n callback () {\n $('#closepath_panel').hide();\n },\n selectedChanged (opts) {\n selElems = opts.elems;\n let i = selElems.length;\n while (i--) {\n const elem = selElems[i];\n if (elem && elem.tagName === 'path') {\n if (opts.selectedElement && !opts.multiselected) {\n showPanel(true);\n } else {\n showPanel(false);\n }\n } else {\n showPanel(false);\n }\n }\n }\n };\n }\n};\n"],"names":["window","SVGPathSeg","type","typeAsLetter","owningPathSegList","pathSegType","pathSegTypeAsLetter","_owningPathSegList","this","segmentChanged","prototype","classname","PATHSEG_UNKNOWN","PATHSEG_CLOSEPATH","PATHSEG_MOVETO_ABS","PATHSEG_MOVETO_REL","PATHSEG_LINETO_ABS","PATHSEG_LINETO_REL","PATHSEG_CURVETO_CUBIC_ABS","PATHSEG_CURVETO_CUBIC_REL","PATHSEG_CURVETO_QUADRATIC_ABS","PATHSEG_CURVETO_QUADRATIC_REL","PATHSEG_ARC_ABS","PATHSEG_ARC_REL","PATHSEG_LINETO_HORIZONTAL_ABS","PATHSEG_LINETO_HORIZONTAL_REL","PATHSEG_LINETO_VERTICAL_ABS","PATHSEG_LINETO_VERTICAL_REL","PATHSEG_CURVETO_CUBIC_SMOOTH_ABS","PATHSEG_CURVETO_CUBIC_SMOOTH_REL","PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS","PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL","SVGPathSegClosePath","undefined","SVGPathSegMovetoAbs","x","y","_x","_y","Object","defineProperties","get","set","_segmentChanged","enumerable","SVGPathSegMovetoRel","SVGPathSegLinetoAbs","SVGPathSegLinetoRel","SVGPathSegCurvetoCubicAbs","x1","y1","x2","y2","_x1","_y1","_x2","_y2","SVGPathSegCurvetoCubicRel","SVGPathSegCurvetoQuadraticAbs","SVGPathSegCurvetoQuadraticRel","SVGPathSegArcAbs","r1","r2","angle","largeArcFlag","sweepFlag","_r1","_r2","_angle","_largeArcFlag","_sweepFlag","SVGPathSegArcRel","SVGPathSegLinetoHorizontalAbs","defineProperty","SVGPathSegLinetoHorizontalRel","SVGPathSegLinetoVerticalAbs","SVGPathSegLinetoVerticalRel","SVGPathSegCurvetoCubicSmoothAbs","SVGPathSegCurvetoCubicSmoothRel","SVGPathSegCurvetoQuadraticSmoothAbs","SVGPathSegCurvetoQuadraticSmoothRel","SVGPathElement","createSVGPathSegClosePath","createSVGPathSegMovetoAbs","createSVGPathSegMovetoRel","createSVGPathSegLinetoAbs","createSVGPathSegLinetoRel","createSVGPathSegCurvetoCubicAbs","createSVGPathSegCurvetoCubicRel","createSVGPathSegCurvetoQuadraticAbs","createSVGPathSegCurvetoQuadraticRel","createSVGPathSegArcAbs","createSVGPathSegArcRel","createSVGPathSegLinetoHorizontalAbs","createSVGPathSegLinetoHorizontalRel","createSVGPathSegLinetoVerticalAbs","createSVGPathSegLinetoVerticalRel","createSVGPathSegCurvetoCubicSmoothAbs","createSVGPathSegCurvetoCubicSmoothRel","createSVGPathSegCurvetoQuadraticSmoothAbs","createSVGPathSegCurvetoQuadraticSmoothRel","getPathSegAtLength","distance","isFinite","Error","measurementElement","document","createElementNS","setAttribute","getAttribute","lastPathSegment","pathSegList","numberOfItems","removeItem","getTotalLength","SVGPathSegList","pathElement","_pathElement","_list","_parsePath","_mutationObserverConfig","attributes","attributeFilter","_pathElementMutationObserver","MutationObserver","_updateListFromPathMutations","bind","observe","takeRecords","mutationRecords","hasPathMutations","forEach","record","attributeName","disconnect","_pathSegArrayAsString","pathSeg","_writeListToPath","_checkPathSynchronizedToList","newItem","index","isNaN","_checkValidIndex","clone","splice","item","push","string","length","Builder","Source","_string","_currentIndex","_endIndex","_previousCommand","_skipOptionalSpaces","character","_isCurrentSpace","charAt","lookahead","_pathSegTypeFromChar","previousCommand","hasMoreData","command","peekSegmentType","exponent","integer","frac","decimal","sign","expsign","startIndex","startIntPartIndex","scanIntPartIndex","multiplier","number","_skipOptionalSpacesOrDelimiter","flag","flagChar","_nextCommandHelper","_parseNumber","points","arcAngle","arcLarge","_parseArcFlag","arcSweep","builder","source","initialCommandIsMoveTo","parseSegment","appendSegment","pathSegArray","first","_asPathString","_pathSegList","normalizedPathSegList","animatedPathSegList","animatedNormalizedPathSegList","name","init","importLocale","$","strings","updateButton","path","seglist","closed","getItem","showbutton","hide","show","showPanel","on","toggle","selElems","toggleClosed","last","appendItem","buttons","id","icon","panel","events","click","svgicons","map","button","i","assign","callback","selectedChanged","opts","elems","elem","tagName","selectedElement","multiselected"],"mappings":"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"}