window.state = window.state || {}; window.state.extensions = window.state.extensions || {}; state = window.state; state.extensions['multidiffusion'] = (function () { let containers = []; let store = null; function handleCheckboxes(container, name) { let checkboxes = container.querySelectorAll('input[type="checkbox"]'); checkboxes.forEach(function (checkbox, idx) { let id = `md-${name}-checkbox-${idx}`; let value = store.get(id); if (value) { state.utils.setValue(checkbox, value, 'change'); } checkbox.addEventListener('change', function () { store.set(id, this.checked); }); }); } function handleSliders(container, name) { let sliders = container.querySelectorAll('input[type="range"]'); sliders.forEach(function (slider, idx) { let id = `md-${name}-slider-${idx}`; let value = store.get(id); if (value) { state.utils.setValue(slider, value, 'change'); } slider.addEventListener('change', function () { store.set(id, this.value); }); }); } function handleTextboxes(container, name) { let textboxes = container.querySelectorAll('textarea'); textboxes.forEach(function (textbox, idx) { let id = `md-${name}-textbox-${idx}`; let value = store.get(id); if (value) { state.utils.setValue(textbox, value, 'change'); } textbox.addEventListener('change', function () { store.set(id, this.value); }); }); } function handleSelects(container, name) { let selects = container.querySelectorAll('.gradio-dropdown') selects.forEach(function (select, idx) { state.utils.handleSelect(select, `md-${name}-select-${idx}`, store); }); } function handleRadioButtons(container, name) { let fieldsets = container.querySelectorAll('fieldset'); fieldsets.forEach(function (fieldset, idx) { let radios = fieldset.querySelectorAll('input[type="radio"]'); let id = `md-${name}-fieldset-${idx}`; let value = store.get(id); if (value) { radios.forEach(function (radio) { state.utils.setValue(radio, value, 'change'); }); } radios.forEach(function (radio) { radio.addEventListener('change', function () { store.set(id, this.value); }); }); }); } function handleDropdowns(container, name) { let dropdowns = container.querySelectorAll('.gradio-accordion .label-wrap'); dropdowns.forEach(function (dropdown, idx) { let id = `md-${name}-dropdown-${idx}`; let value = store.get(id); if (value && value === 'true') { state.utils.triggerEvent(dropdown, 'click'); } dropdown.addEventListener('click', function () { let span = this.querySelector('.transition, .icon'); store.set(id, span.style.transform !== 'rotate(90deg)'); }); }); } function load() { setTimeout(function () { containers.forEach(({container, name}) => { handleCheckboxes(container, name); handleSliders(container, name); handleTextboxes(container, name); handleSelects(container, name); handleRadioButtons(container, name); handleDropdowns(container, name); }); }, 500); } function init() { let spanTags = gradioApp().getElementsByTagName("span"); for (var i = 0; i < spanTags.length; i++) { if (spanTags[i].textContent == 'Tiled Diffusion') { containers.push({container: spanTags[i].parentElement.parentElement,name: 'diffusion'}); } if (spanTags[i].textContent == 'Tiled VAE') { containers.push({container: spanTags[i].parentElement.parentElement,name: 'vae'}); break; } }; store = new state.Store('ext-multidiffusion'); if (! containers.length) { return; } load(); } return { init }; }());