Path: blob/master/javascript/inputAccordion.js
3055 views
function inputAccordionChecked(id, checked) {1var accordion = gradioApp().getElementById(id);2accordion.visibleCheckbox.checked = checked;3accordion.onVisibleCheckboxChange();4}56function setupAccordion(accordion) {7var labelWrap = accordion.querySelector('.label-wrap');8var gradioCheckbox = gradioApp().querySelector('#' + accordion.id + "-checkbox input");9var extra = gradioApp().querySelector('#' + accordion.id + "-extra");10var span = labelWrap.querySelector('span');11var linked = true;1213var isOpen = function() {14return labelWrap.classList.contains('open');15};1617var observerAccordionOpen = new MutationObserver(function(mutations) {18mutations.forEach(function(mutationRecord) {19accordion.classList.toggle('input-accordion-open', isOpen());2021if (linked) {22accordion.visibleCheckbox.checked = isOpen();23accordion.onVisibleCheckboxChange();24}25});26});27observerAccordionOpen.observe(labelWrap, {attributes: true, attributeFilter: ['class']});2829if (extra) {30labelWrap.insertBefore(extra, labelWrap.lastElementChild);31}3233accordion.onChecked = function(checked) {34if (isOpen() != checked) {35labelWrap.click();36}37};3839var visibleCheckbox = document.createElement('INPUT');40visibleCheckbox.type = 'checkbox';41visibleCheckbox.checked = isOpen();42visibleCheckbox.id = accordion.id + "-visible-checkbox";43visibleCheckbox.className = gradioCheckbox.className + " input-accordion-checkbox";44span.insertBefore(visibleCheckbox, span.firstChild);4546accordion.visibleCheckbox = visibleCheckbox;47accordion.onVisibleCheckboxChange = function() {48if (linked && isOpen() != visibleCheckbox.checked) {49labelWrap.click();50}5152gradioCheckbox.checked = visibleCheckbox.checked;53updateInput(gradioCheckbox);54};5556visibleCheckbox.addEventListener('click', function(event) {57linked = false;58event.stopPropagation();59});60visibleCheckbox.addEventListener('input', accordion.onVisibleCheckboxChange);61}6263onUiLoaded(function() {64for (var accordion of gradioApp().querySelectorAll('.input-accordion')) {65setupAccordion(accordion);66}67});686970