inputAccordion.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. var observerAccordionOpen = new MutationObserver(function(mutations) {
  2. mutations.forEach(function(mutationRecord) {
  3. var elem = mutationRecord.target;
  4. var open = elem.classList.contains('open');
  5. var accordion = elem.parentNode;
  6. accordion.classList.toggle('input-accordion-open', open);
  7. var checkbox = gradioApp().querySelector('#' + accordion.id + "-checkbox input");
  8. checkbox.checked = open;
  9. updateInput(checkbox);
  10. var extra = gradioApp().querySelector('#' + accordion.id + "-extra");
  11. if (extra) {
  12. extra.style.display = open ? "" : "none";
  13. }
  14. });
  15. });
  16. function inputAccordionChecked(id, checked) {
  17. var label = gradioApp().querySelector('#' + id + " .label-wrap");
  18. if (label.classList.contains('open') != checked) {
  19. label.click();
  20. }
  21. }
  22. onUiLoaded(function() {
  23. for (var accordion of gradioApp().querySelectorAll('.input-accordion')) {
  24. var labelWrap = accordion.querySelector('.label-wrap');
  25. observerAccordionOpen.observe(labelWrap, {attributes: true, attributeFilter: ['class']});
  26. var extra = gradioApp().querySelector('#' + accordion.id + "-extra");
  27. if (extra) {
  28. labelWrap.insertBefore(extra, labelWrap.lastElementChild);
  29. }
  30. }
  31. });