mirror of
https://github.com/vladmandic/sdnext.git
synced 2026-01-27 15:02:48 +03:00
56 lines
2.2 KiB
JavaScript
56 lines
2.2 KiB
JavaScript
function inputAccordionChecked(id, checked) {
|
|
const accordion = gradioApp().getElementById(id);
|
|
accordion.visibleCheckbox.checked = checked;
|
|
accordion.onVisibleCheckboxChange();
|
|
}
|
|
|
|
function setupAccordion(accordion) {
|
|
const labelWrap = accordion.querySelector('.label-wrap');
|
|
const gradioCheckbox = gradioApp().querySelector(`#${accordion.id}-checkbox input`);
|
|
const extra = gradioApp().querySelector(`#${accordion.id}-extra`);
|
|
const span = labelWrap.querySelector('span');
|
|
let linked = true;
|
|
const isOpen = () => labelWrap.classList.contains('open');
|
|
const observerAccordionOpen = new MutationObserver((mutations) => {
|
|
mutations.forEach((mutationRecord) => {
|
|
accordion.classList.toggle('input-accordion-open', isOpen());
|
|
if (linked) {
|
|
accordion.visibleCheckbox.checked = isOpen();
|
|
accordion.onVisibleCheckboxChange();
|
|
}
|
|
});
|
|
});
|
|
observerAccordionOpen.observe(labelWrap, { attributes: true, attributeFilter: ['class'] });
|
|
if (extra) labelWrap.insertBefore(extra, labelWrap.lastElementChild);
|
|
accordion.onChecked = (checked) => {
|
|
if (isOpen() !== checked) labelWrap.click();
|
|
};
|
|
|
|
const visibleCheckbox = document.createElement('INPUT');
|
|
visibleCheckbox.type = 'checkbox';
|
|
visibleCheckbox.checked = isOpen();
|
|
visibleCheckbox.id = `${accordion.id}-visible-checkbox`;
|
|
visibleCheckbox.className = `${gradioCheckbox.className} input-accordion-checkbox`;
|
|
span.insertBefore(visibleCheckbox, span.firstChild);
|
|
accordion.visibleCheckbox = visibleCheckbox;
|
|
accordion.onVisibleCheckboxChange = () => {
|
|
if (linked && isOpen() !== visibleCheckbox.checked) labelWrap.click();
|
|
gradioCheckbox.checked = visibleCheckbox.checked;
|
|
updateInput(gradioCheckbox);
|
|
};
|
|
|
|
visibleCheckbox.addEventListener('click', (event) => {
|
|
linked = false;
|
|
event.stopPropagation();
|
|
});
|
|
visibleCheckbox.addEventListener('input', accordion.onVisibleCheckboxChange);
|
|
}
|
|
|
|
// onUiLoaded(() => {
|
|
// for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);
|
|
// });
|
|
|
|
function initAccordions() {
|
|
for (const accordion of gradioApp().querySelectorAll('.input-accordion')) setupAccordion(accordion);
|
|
}
|