blob: 81969bd927f692bda700e4532829902f465ebcaa (
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
|
import Base from './Base.js'
import * as elements from './elements.js'
import {capitalize} from './helpers.js'
import HtmlNode from './HtmlNode.js'
export function makeInstance (element) {
if (element instanceof Base) return element
if (typeof element === 'object') {
return adopt(element)
}
if (element == null) {
return new Doc()
}
if (typeof element === 'string' && element.charAt(0) !== '<') {
return adopt(document.querySelector(element))
}
var node = makeNode('svg')
node.innerHTML = element
element = adopt(node.firstElementChild)
return element
}
// Adopt existing svg elements
export function adopt (node) {
// check for presence of node
if (!node) return null
// make sure a node isn't already adopted
if (node.instance instanceof Element) return node.instance
if (!(node instanceof window.SVGElement)) {
return new HtmlNode(node)
}
// initialize variables
var element
// adopt with element-specific settings
if (node.nodeName === 'svg') {
element = new elements.Doc(node)
} else if (node.nodeName === 'linearGradient' || node.nodeName === 'radialGradient') {
element = new elements.Gradient(node)
} else if (elements[capitalize(node.nodeName)]) {
element = new elements[capitalize(node.nodeName)](node)
} else {
element = new elements.Bare(node)
}
return element
}
|