-
Notifications
You must be signed in to change notification settings - Fork 0
/
creator.js
100 lines (89 loc) · 2.41 KB
/
creator.js
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
100
import Props from './Props.js'
const NS = "http://www.w3.org/2000/svg";
let runFunction = (parameters) => {
if (parameters[0] instanceof Function) {
parameters[0] = parameters[0]()
}
return parameters
}
let createElement = (parameters) => {
if (typeof parameters[0] === 'string') {
let svgFamily = [
'svg',
'circle',
'rect',
'line'
]
if(svgFamily.includes(parameters[0])){
parameters[0] = document.createElementNS(NS, parameters[0]);
} else {
parameters[0] = document.createElement(parameters[0]);
}
}
return parameters
}
let getNodeFinalle = (parameters) => {
if (parameters[0].nodeType) {
return parameters
}
throw 'Tag is not string or nodeElement'
}
let appendChild = (parameters) => {
if (parameters[1] && parameters[1].nodeType) {
parameters[0].appendChild(parameters[1])
}
return parameters
}
let getNodeFromProps = (parameters) => {
if (parameters[1] instanceof Props) {
parameters[0].appendChild(parameters[1].get())
}
return parameters
}
let splitArrayNodes = (parameters) => {
if (Array.isArray(parameters[1]) && parameters[1].every(n => n instanceof Node)) {
parameters[1].map(node => parameters[0].appendChild(node))
}
if (Array.isArray(parameters[1]) && parameters[1].every(node => node instanceof Props)) {
parameters[1].map(node => el.appendChild(node.get()))
}
return parameters
}
let innerText = (parameters) => {
if (typeof parameters[1] === 'string') {
parameters[0].innerText = parameters[1]
}
return parameters
}
let setAttribute = (parameters) => {
if (typeof parameters[2] === 'object') {
for (const key in parameters[2]) {
parameters[0].setAttribute(key, parameters[2][key])//todo missing validation
}
}
return parameters
}
let callback = (parameters) => {
if (typeof parameters[2] === 'function') {
parameters[2](parameters[0])
}
return parameters
}
let func = [
runFunction,
createElement,
getNodeFinalle,
appendChild,
getNodeFromProps,
splitArrayNodes,
innerText,
setAttribute,
callback
]
export let creator = function () {
return func.reduce(
(val, func) => func(val),
[arguments[0], arguments[1], arguments[2]]
)[0];
};
export default creator