1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- function inputAccordionChecked(id, checked) {
- var accordion = gradioApp().getElementById(id);
- accordion.visibleCheckbox.checked = checked;
- accordion.onVisibleCheckboxChange();
- }
- function setupAccordion(accordion) {
- var labelWrap = accordion.querySelector('.label-wrap');
- var gradioCheckbox = gradioApp().querySelector('#' + accordion.id + "-checkbox input");
- var extra = gradioApp().querySelector('#' + accordion.id + "-extra");
- var span = labelWrap.querySelector('span');
- var linked = true;
- var isOpen = function() {
- return labelWrap.classList.contains('open');
- };
- var 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();
- }
- };
- var 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 (var accordion of gradioApp().querySelectorAll('.input-accordion')) {
- setupAccordion(accordion);
- }
- });
|