From 96f27ee71da905730c4e5fd58b5f9ed1da59179f Mon Sep 17 00:00:00 2001 From: Tomo Yanagi Date: Tue, 10 Jul 2018 02:37:15 +0900 Subject: [PATCH] add length property to window.SVGPathSegList (#27) * add length property to window.SVGPathSegList. its built in Firefox implements not in W3C specification. * Update pathseg.js adopt suggested comment. * add Qunit Test for PathSegList.length --- pathseg.js | 9 +++++++++ tests/tests.js | 24 ++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/pathseg.js b/pathseg.js index 3947934..3f2e774 100644 --- a/pathseg.js +++ b/pathseg.js @@ -387,6 +387,15 @@ enumerable: true }); + // The length property was not specified but was in Firefox 58. + Object.defineProperty(window.SVGPathSegList.prototype, "length", { + get: function() { + this._checkPathSynchronizedToList(); + return this._list.length; + }, + enumerable: true + }); + // Add the pathSegList accessors to window.SVGPathElement. // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGAnimatedPathData Object.defineProperty(window.SVGPathElement.prototype, "pathSegList", { diff --git a/tests/tests.js b/tests/tests.js index 1b86217..f0e0b1c 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -891,3 +891,27 @@ QUnit.test("Test getPathSegAtLength with non-trivial paths", function(assert) { assert.equal(path.getPathSegAtLength(100), "1"); assert.equal(path.getPathSegAtLength(101), "3"); }); + +QUnit.test("Test PathSegList.length", function(assert) { + var path = document.createElementNS("http://www.w3.org/2000/svg", "path"); + + // Empty path. + path.setAttribute("d", ""); + assert.equal(path.pathSegList.length, path.pathSegList.numberOfItems); + assert.equal(path.pathSegList.length, 0); + + // Path with one segment. + path.setAttribute("d", "M1 1"); + assert.equal(path.pathSegList.length, path.pathSegList.numberOfItems); + assert.equal(path.pathSegList.length, 1); + + // Path with one close segment. + path.setAttribute("d", "z"); + assert.equal(path.pathSegList.length, path.pathSegList.numberOfItems); + assert.equal(path.pathSegList.length, 0); + + // Path with two segments and a close. + path.setAttribute("d", "M1 1 L2 2Z"); + assert.equal(path.pathSegList.length, path.pathSegList.numberOfItems); + assert.equal(path.pathSegList.length, 3); +}); \ No newline at end of file