mirror of
https://github.com/lllyasviel/stable-diffusion-webui-forge.git
synced 2026-07-21 21:01:24 +08:00
75 lines
2.3 KiB
JavaScript
75 lines
2.3 KiB
JavaScript
function inputAccordionChecked(id, checked) {
|
|
let accordion = gradioApp().getElementById(id);
|
|
accordion.visibleCheckbox.checked = checked;
|
|
accordion.onVisibleCheckboxChange();
|
|
}
|
|
|
|
function setupAccordion(accordion) {
|
|
let labelWrap = accordion.querySelector(".label-wrap");
|
|
let gradioCheckbox = gradioApp().querySelector(
|
|
"#" + accordion.id + "-checkbox input",
|
|
);
|
|
let extra = gradioApp().querySelector("#" + accordion.id + "-extra");
|
|
let span = labelWrap.querySelector("span");
|
|
let linked = true;
|
|
|
|
let isOpen = function () {
|
|
return labelWrap.classList.contains("open");
|
|
};
|
|
|
|
let observerAccordionOpen = new MutationObserver(function (mutations) {
|
|
mutations.forEach(function (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 = function (checked) {
|
|
if (isOpen() != checked) {
|
|
labelWrap.click();
|
|
}
|
|
};
|
|
|
|
let 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 = function () {
|
|
if (linked && isOpen() != visibleCheckbox.checked) {
|
|
labelWrap.click();
|
|
}
|
|
|
|
gradioCheckbox.checked = visibleCheckbox.checked;
|
|
updateInput(gradioCheckbox);
|
|
};
|
|
|
|
visibleCheckbox.addEventListener("click", function (event) {
|
|
linked = false;
|
|
event.stopPropagation();
|
|
});
|
|
visibleCheckbox.addEventListener("input", accordion.onVisibleCheckboxChange);
|
|
}
|
|
|
|
onUiLoaded(function () {
|
|
for (let accordion of gradioApp().querySelectorAll(".input-accordion")) {
|
|
setupAccordion(accordion);
|
|
}
|
|
});
|