forked from okineadev/ddos-separ
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dom.js
142 lines (125 loc) · 5.28 KB
/
dom.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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
(() => {
let D = document;
/**`document.querySelector`*/
const sl = q => D.querySelector(q);
/**`document.querySelectorAll`*/
const sla = q => D.querySelectorAll(q);
class Selector {
/**
* @param {function|string} s
* @param {?object|string} d
*/
constructor(s, d) {
if (s && (d || !d)) {
// Якщо це функція-ініціалізатор документа
if (s && !d && typeof s === 'function') {
D.addEventListener('DOMContentLoaded', s, {
once: true
})
} else {
let e;
// Якщо селектор це стрічка
if (typeof s === 'string') {
const mt = s.match(/<(\w+)>/);
// Якщо я хочу створити елемент
if (mt) {
this.selector = mt[1];
e = D.createElement(mt[1]);
if (d && typeof d === 'object') {
for (let k in d)
e.setAttribute(k, d[k])
}
} else {
// Якщо я хочу побачити всі елементи з селектора
if (d && d === 'all') {
e = sla(s)
} else if (!d)
e = sl(s)
}
} else if (s instanceof Document) {
e = D
} else if (typeof s === 'object') {
e = s
};
// Якщо все ок
if (e) {
this[0] = e;
/**
* Прикріпити до
* @param {Document|Element|Selector} e
*/
this.appendTo = e => {
if (e instanceof (Document || Element)) {
e.appendChild(this[0])
} else if (e instanceof Selector) {
e[0].appendChild(this[0])
}
};
/**
* Встановити текст
* @param {string} t **Текст**
*/
this.text = t => {
if (!t) return this[0].textContent;
this[0].textContent = t;
return this
};
/**
* Задати стиль
* @param {object} c **Стиль**
*/
this.css = s => {
for (let i in s) this[0].style.setProperty(i, s[i]);
return this
};
/**
* Видалити стиль
* @param {object} s **Стиль**
*/
this.removeCss = s => {
for (let i in s) this[0].style.removeProperty(i, s[i]);
return this
};
/**
* Встановити внутрішній **HTML** код
* @param {string} c **Код**
*/
this.innerHtml = c => {
this[0].innerHTML = c;
return this
};
/**
* Прослуховувач подій
* @param {string} e **Подія**
* @param {function} f **Функція**
* @param {?object} c **Конфіг**
*/
this.on = (e, f, c) => this[0].addEventListener(e, f, c);
/**
* @param {function} f **Функція**
* @param {?object} c **Конфіг**
*/
this.click = (f, с) => this.on('click', f, с);
/**
* Подвійний клік
* @param {function} f **Функція**
* @param {?object} c **Конфіг**
*/
this.dblclick = (f, c) => this.on('dblclick', f, c);
/**Видалити елемент*/
this.remove = () => {
try {
this[0].remove()
} catch {}
}
}
}
}
}
};
/**
* @param {function|string} s
* @param {?object|string} с
*/
window.$ = (s, с) => new Selector(s, с)
})()