blob: 4cb6f26f33d36cc63b76677c8944a9ee050f3747 (
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
99
|
/* global createElement, capitalize */
/* eslint-disable new-cap */
// The main wrapping element
var SVG = this.SVG = function (element) {
if (SVG.supported) {
element = createElement(element)
return element
}
}
// Svg must be supported if we reached this stage
SVG.supported = true
// Default namespaces
SVG.ns = 'http://www.w3.org/2000/svg'
SVG.xmlns = 'http://www.w3.org/2000/xmlns/'
SVG.xlink = 'http://www.w3.org/1999/xlink'
SVG.svgjs = 'http://svgjs.com/svgjs'
// Element id sequence
SVG.did = 1000
// Get next named element id
SVG.eid = function (name) {
return 'Svgjs' + capitalize(name) + (SVG.did++)
}
// Method for element creation
SVG.create = function (name) {
// create element
return document.createElementNS(this.ns, name)
}
// Method for extending objects
SVG.extend = function (modules, methods) {
var key, i
modules = Array.isArray(modules) ? modules : [modules]
for (i = modules.length - 1; i >= 0; i--) {
if (modules[i]) {
for (key in methods) {
modules[i].prototype[key] = methods[key]
}
}
}
}
// Invent new element
SVG.invent = function (config) {
// Create element initializer
var initializer = typeof config.create === 'function' ? config.create
: function (node) {
this.constructor(node || SVG.create(config.create))
}
// Inherit prototype
if (config.inherit) {
initializer.prototype = new config.inherit()
}
// Extend with methods
if (config.extend) {
SVG.extend(initializer, config.extend)
}
// Attach construct method to parent
if (config.construct) { SVG.extend(config.parent || SVG.Container, config.construct) }
return initializer
}
// Adopt existing svg elements
SVG.adopt = function (node) {
// check for presence of node
if (!node) return null
// make sure a node isn't already adopted
if (node.instance instanceof SVG.Element) return node.instance
if (!(node instanceof window.SVGElement)) {
return new SVG.HtmlNode(node)
}
// initialize variables
var element
// adopt with element-specific settings
if (node.nodeName == 'svg')
element = new SVG.Doc(node)
else if (node.nodeName === 'linearGradient' || node.nodeName === 'radialGradient')
element = new SVG.Gradient(node)
} else if (SVG[capitalize(node.nodeName)]) {
element = new SVG[capitalize(node.nodeName)](node)
} else { element = new SVG.Parent(node) }
return element
}
|