From 7a5ae8b897548eef9efbf900b42936f24f911cea Mon Sep 17 00:00:00 2001 From: Ulrich-Matthias Schäfer Date: Fri, 9 Nov 2018 11:17:18 +0100 Subject: adds `List` which does bring back `SVG.Set` in an elegant way (#645) --- src/types/List.js | 38 ++++++++++++++++++++++++++++++++++++++ src/types/set.js | 18 ------------------ 2 files changed, 38 insertions(+), 18 deletions(-) create mode 100644 src/types/List.js delete mode 100644 src/types/set.js (limited to 'src/types') diff --git a/src/types/List.js b/src/types/List.js new file mode 100644 index 0000000..f3c0e1e --- /dev/null +++ b/src/types/List.js @@ -0,0 +1,38 @@ +import { extend } from '../utils/adopter.js' +import { subClassArray } from './ArrayPolyfill.js' + +const List = subClassArray('List', Array, function (arr) { + this.length = 0 + this.push(...arr) +}) + +export default List + +extend(List, { + each (cbOrName, ...args) { + if (typeof cbOrName === 'function') { + this.forEach((el) => { cbOrName.call(el, el) }) + } else { + this.forEach((el) => { + el[cbOrName](...args) + }) + } + + return this + }, + + toArray () { + return Array.prototype.concat.apply([], this) + } +}) + +List.extend = function (methods) { + methods = methods.reduce((obj, name) => { + obj[name] = function (...attrs) { + return this.each(name, ...attrs) + } + return obj + }, {}) + + extend(List, methods) +} diff --git a/src/types/set.js b/src/types/set.js deleted file mode 100644 index c755c2c..0000000 --- a/src/types/set.js +++ /dev/null @@ -1,18 +0,0 @@ -/* eslint no-unused-vars: "off" */ -class SVGSet extends Set { - // constructor (arr) { - // super(arr) - // } - - each (cbOrName, ...args) { - if (typeof cbOrName === 'function') { - this.forEach((el) => { cbOrName.call(el, el) }) - } else { - this.forEach((el) => { - el[cbOrName](...args) - }) - } - - return this - } -} -- cgit v1.2.3