Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
automatic1111
GitHub Repository: automatic1111/stable-diffusion-webui
Path: blob/master/javascript/inputAccordion.js
3055 views
1
function inputAccordionChecked(id, checked) {
2
var accordion = gradioApp().getElementById(id);
3
accordion.visibleCheckbox.checked = checked;
4
accordion.onVisibleCheckboxChange();
5
}
6
7
function setupAccordion(accordion) {
8
var labelWrap = accordion.querySelector('.label-wrap');
9
var gradioCheckbox = gradioApp().querySelector('#' + accordion.id + "-checkbox input");
10
var extra = gradioApp().querySelector('#' + accordion.id + "-extra");
11
var span = labelWrap.querySelector('span');
12
var linked = true;
13
14
var isOpen = function() {
15
return labelWrap.classList.contains('open');
16
};
17
18
var observerAccordionOpen = new MutationObserver(function(mutations) {
19
mutations.forEach(function(mutationRecord) {
20
accordion.classList.toggle('input-accordion-open', isOpen());
21
22
if (linked) {
23
accordion.visibleCheckbox.checked = isOpen();
24
accordion.onVisibleCheckboxChange();
25
}
26
});
27
});
28
observerAccordionOpen.observe(labelWrap, {attributes: true, attributeFilter: ['class']});
29
30
if (extra) {
31
labelWrap.insertBefore(extra, labelWrap.lastElementChild);
32
}
33
34
accordion.onChecked = function(checked) {
35
if (isOpen() != checked) {
36
labelWrap.click();
37
}
38
};
39
40
var visibleCheckbox = document.createElement('INPUT');
41
visibleCheckbox.type = 'checkbox';
42
visibleCheckbox.checked = isOpen();
43
visibleCheckbox.id = accordion.id + "-visible-checkbox";
44
visibleCheckbox.className = gradioCheckbox.className + " input-accordion-checkbox";
45
span.insertBefore(visibleCheckbox, span.firstChild);
46
47
accordion.visibleCheckbox = visibleCheckbox;
48
accordion.onVisibleCheckboxChange = function() {
49
if (linked && isOpen() != visibleCheckbox.checked) {
50
labelWrap.click();
51
}
52
53
gradioCheckbox.checked = visibleCheckbox.checked;
54
updateInput(gradioCheckbox);
55
};
56
57
visibleCheckbox.addEventListener('click', function(event) {
58
linked = false;
59
event.stopPropagation();
60
});
61
visibleCheckbox.addEventListener('input', accordion.onVisibleCheckboxChange);
62
}
63
64
onUiLoaded(function() {
65
for (var accordion of gradioApp().querySelectorAll('.input-accordion')) {
66
setupAccordion(accordion);
67
}
68
});
69
70