summaryrefslogtreecommitdiffstats
path: root/src/SVGArray.js
blob: 592794547c28de16f81852c5081b9e85194e2afa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/* global arrayClone */
import {delimiter} from './regex.js'
import {subClassArray} from './ArrayPolyfill.js'
import {extend2} from './tools.js'

const SVGArray = subClassArray('SVGArray', Array, function (...args) {
  this.init(...args)
})

export default SVGArray

extend2(SVGArray, {
  init (...args) {
    //this.splice(0, this.length)
    this.length = 0
    this.push(...this.parse(...args))
  },

  toArray () {
    // const ret = []
    // ret.push(...this)
    // return ret
    return Array.prototype.concat.apply([], this)
  },

  toString () {
    return this.join(' ')
  },

  // Flattens the array if needed
  valueOf () {
    const ret = []
    ret.push(...this)
    return ret
    // return this.toArray()
  },

  // Parse whitespace separated string
  parse (array = []) {
    //array = array.valueOf()

    // If already is an array, no need to parse it
    if (array instanceof Array) return array

    return array.trim().split(delimiter).map(parseFloat)
  },

  clone () {
    return new this.constructor(this)
  },

  toSet () {
    return new Set(this)
  },
})

// export default class SVGArray extends BaseArray {
//   constructor (...args) {
//     super()
//     this.init(...args)
//   }
//
//   init (array, fallback = []) {
//     //this.splice(0, this.length)
//     this.length = 0
//     this.push(...this.parse(array || fallback))
//   }
//
//   toArray () {
//     return [].concat(this)
//   }
//
//   toString () {
//     return this.join(' ')
//   }
//
//   valueOf () {
//     return this.toArray()
//   }
//
//   // Parse whitespace separated string
//   parse (array) {
//     array = array.valueOf()
//
//     // if already is an array, no need to parse it
//     if (Array.isArray(array)) return array
//
//     return array.trim().split(delimiter).map(parseFloat)
//   }
//
//   clone () {
//     return new this.constructor(this)
//   }
//
//   toSet () {
//     return new Set(this)
//   }
// }