-
Notifications
You must be signed in to change notification settings - Fork 8
/
dom_utilities.js
146 lines (134 loc) · 3.75 KB
/
dom_utilities.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
143
144
145
146
//
///////////////// dom utilities //////////////
//
/**
* Hide the element
* @param {Element} el
*/
const hide = el => {
el.classList.add('hidden')
}
/**
* show the element
* @param {Element} el
*/
const show = el => {
el.classList.remove('hidden')
}
/**
* disable the element
* @param {Element} el
*/
const disable = el => {
el.classList.add('disabled')
el.setAttribute('disabled', '')
}
/**
* enable the element
* @param {Element} el
*/
const enable = el => {
el.classList.remove('disabled')
el.removeAttribute('disabled')
}
/**
* determine if an html element has a value attribute.
*
* @param {Element} el // IN : html element
* @returns {boolean} // RET: true if element has a value attribute
* false if element does not have a value attribute
*/
const has_value = el => {
return (el instanceof HTMLInputElement) ||
(el instanceof HTMLSelectElement) ||
(el instanceof HTMLMeterElement) ||
(el instanceof HTMLProgressElement) ||
(el instanceof HTMLButtonElement) ||
(el instanceof HTMLOptionElement) ||
(el instanceof HTMLLIElement);
}
/**
* Set the value attribute of an element if the
* element has one.
*
* NOTE: only certain kinds of elements have a value
* attribute. You can determine if the element
* has a value attribute by calling has_value().
*
* @param {Element} el
* @param {any} value
*/
const set_value = (el, value) => {
if ((el instanceof HTMLInputElement) ||
(el instanceof HTMLSelectElement) ||
(el instanceof HTMLMeterElement) ||
(el instanceof HTMLProgressElement) ||
(el instanceof HTMLButtonElement) ||
(el instanceof HTMLOptionElement) ||
(el instanceof HTMLLIElement)) {
el.value = value;
}
}
/**
* Get the value attribute of an element if the
* element has one.
*
* NOTE: only certain kinds of elements have a value
* attribute. You can determine if the element
* has a value attribute by calling has_value().
*
* @param {Element} el // IN : the element
* @returns {any | undefined} // RET: value if element has a value attribute
* or undefined if element does not have value attribute
*/
const get_value = (el) => {
if ((el instanceof HTMLInputElement) ||
(el instanceof HTMLSelectElement) ||
(el instanceof HTMLMeterElement) ||
(el instanceof HTMLProgressElement) ||
(el instanceof HTMLButtonElement) ||
(el instanceof HTMLOptionElement) ||
(el instanceof HTMLLIElement)) {
return el.value
}
return undefined
}
/**
* Determine if an html element has a checked attribute.
*
* @param {Element} el
* @returns {boolean}
*/
const has_checked = (el) => {
return (el instanceof HTMLInputElement && el.type == "checkbox")
}
/**
* Get the checked attribute of an html element.
*
* NOTE: only the input element of type 'checkbox' has
* a checked attribute.
*
* @param {Element} el // IN : the html element
* @returns {boolean | undefined} // RET: if element is a checkbox, then the checked state,
* // if element is NOT a checkbox, then undefined.
*/
const get_checked = (el) => {
if (el instanceof HTMLInputElement && el.type == "checkbox") {
return el.checked
}
return undefined
}
/**
* Set the checked attribute of an html element.
*
* NOTE: only the input element of type 'checkbox' has
* a checked attribute.
*
* @param {Element} el
* @param {boolean} checked
*/
const set_checked = (el, checked) => {
if (el instanceof HTMLInputElement && el.type == "checkbox") {
el.checked = checked
}
}