-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
92 lines (77 loc) · 2.65 KB
/
main.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
(() => {
const domDeg = document.getElementById('degree').querySelector('input[type=number]');
const domMin = document.getElementById('min');
const domMax = document.getElementById('max');
const domStyle = document.getElementById('style');
const domMinCheck = domMin.querySelector('input[type=checkbox]');
const domMaxCheck = domMax.querySelector('input[type=checkbox]');
const domMinValue = domMin.querySelector('input[type=number]');
const domMaxValue = domMax.querySelector('input[type=number]');
/**
* Returns knob element.
*/
function initKnob(dom) {
// displays knob degree
dom.addEventListener('change', function onChange() {
domDeg.value = this.degree; // or this.value
});
return dom;
}
let domKnob = initKnob(document.getElementById('knob'));
// changes knob degree
domDeg.addEventListener('input', function onInput() {
domKnob.degree = this.value; // or this.value
});
// toggles of limiting the minimum degree of knob
domMinCheck.addEventListener('change', function onChange(event) {
event.stopPropagation();
if (this.checked) {
domKnob.setAttribute('min', domMinValue.value);
} else {
domKnob.removeAttribute('min');
}
});
// changes the minimum degree of knob
domMinValue.addEventListener('input', function onInput() {
if (domMinCheck.checked) {
domKnob.setAttribute('min', this.value);
}
});
// toggles of limiting the maximum degree of knob
domMaxCheck.addEventListener('change', function onChange(event) {
event.stopPropagation();
if (this.checked) {
domKnob.setAttribute('max', domMaxValue.value);
} else {
domKnob.removeAttribute('max');
}
});
// changes the maximum degree of knob
domMaxValue.addEventListener('input', function onInput() {
if (domMaxCheck.checked) {
domKnob.setAttribute('max', this.value);
}
});
// changes the style of knob
domStyle.querySelectorAll('input[type=radio]')
.forEach((dom) => {
dom.addEventListener('change', function onChange() {
const domNewKnob = document.createElement(`knob-${this.value}`);
['id', 'min', 'max', 'size'].forEach((attrName) => {
const value = domKnob.getAttribute(attrName);
if (value !== null) {
domNewKnob.setAttribute(attrName, value);
}
});
domNewKnob.degree = domKnob.degree;
domKnob.replaceWith(domNewKnob);
domKnob = initKnob(domNewKnob);
});
});
// initializes pickuped style
domStyle.querySelector(`input[value=${
domKnob.nodeName
.replace(/^.+-/, '')
.toLowerCase()
}]`).setAttribute('checked', '');
})();