| window.state = window.state || {}; |
| window.state.extensions = window.state.extensions || {}; |
| state = window.state; |
|
|
| state.extensions['dynamic prompting'] = (function () { |
|
|
| let container = null; |
| let store = null; |
|
|
| function handleCheckboxes() { |
| let checkboxes = container.querySelectorAll('input[type="checkbox"]'); |
| checkboxes.forEach(function (checkbox, idx) { |
| let id = `dp-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() { |
| let sliders = container.querySelectorAll('input[type="range"]'); |
| sliders.forEach(function (slider, idx) { |
| let id = `dp-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() { |
| let textboxes = container.querySelectorAll('textarea'); |
| textboxes.forEach(function (textbox, idx) { |
| let id = `dp-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() { |
| let selects = container.querySelectorAll('.gradio-dropdown') |
| selects.forEach(function (select, idx) { |
| state.utils.handleSelect(select, `dp-select-${idx}`, store); |
| }); |
| } |
|
|
| function handleRadioButtons() { |
| let fieldsets = container.querySelectorAll('fieldset'); |
| fieldsets.forEach(function (fieldset, idx) { |
| let radios = fieldset.querySelectorAll('input[type="radio"]'); |
| let id = `dp-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() { |
| let dropdowns = container.querySelectorAll('.gradio-accordion .label-wrap'); |
| dropdowns.forEach(function (dropdown, idx) { |
| let id = `dp-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 () { |
| handleCheckboxes(); |
| handleSliders(); |
| handleTextboxes(); |
| handleSelects(); |
| handleRadioButtons(); |
| handleDropdowns(); |
| }, 500); |
| } |
|
|
| function init() { |
|
|
| container = gradioApp().getElementById('sddp-dynamic-prompting'); |
| store = new state.Store('ext-dynamic-prompting'); |
|
|
| if (! container) { |
| return; |
| } |
|
|
| load(); |
| } |
|
|
| return { init }; |
| }()); |
|
|