48 lines
1.0 KiB
JavaScript
48 lines
1.0 KiB
JavaScript
import { registerMethods } from '../../utils/methods.js'
|
|
import { filter, map } from '../../utils/utils.js'
|
|
|
|
// Store data values on svg nodes
|
|
export function data(a, v, r) {
|
|
if (a == null) {
|
|
// get an object of attributes
|
|
return this.data(
|
|
map(
|
|
filter(
|
|
this.node.attributes,
|
|
(el) => el.nodeName.indexOf('data-') === 0
|
|
),
|
|
(el) => el.nodeName.slice(5)
|
|
)
|
|
)
|
|
} else if (a instanceof Array) {
|
|
const data = {}
|
|
for (const key of a) {
|
|
data[key] = this.data(key)
|
|
}
|
|
return data
|
|
} else if (typeof a === 'object') {
|
|
for (v in a) {
|
|
this.data(v, a[v])
|
|
}
|
|
} else if (arguments.length < 2) {
|
|
try {
|
|
return JSON.parse(this.attr('data-' + a))
|
|
} catch (e) {
|
|
return this.attr('data-' + a)
|
|
}
|
|
} else {
|
|
this.attr(
|
|
'data-' + a,
|
|
v === null
|
|
? null
|
|
: r === true || typeof v === 'string' || typeof v === 'number'
|
|
? v
|
|
: JSON.stringify(v)
|
|
)
|
|
}
|
|
|
|
return this
|
|
}
|
|
|
|
registerMethods('Dom', { data })
|