// various functions for interation with ui.py not large enough to warrant putting them in separate files function selected_gallery_index(){ var buttons = gradioApp().querySelectorAll('[style="display: block;"].tabitem .gallery-item') var button = gradioApp().querySelector('[style="display: block;"].tabitem .gallery-item.\\!ring-2') var result = -1 buttons.forEach(function(v, i){ if(v==button) { result = i } }) return result } function extract_image_from_gallery(gallery){ if(gallery.length == 1){ return gallery[0] } index = selected_gallery_index() if (index < 0 || index >= gallery.length){ return [null] } return gallery[index]; } function args_to_array(args){ res = [] for(var i=0;i uiElementIsVisible(el.closest('.gr-form')))?.[0]; if ( ! restraintsField ) { return; } if ( typeof prev_ui_states[currentTab] === 'undefined' ) { prev_ui_states[currentTab] = {}; } window.requestAnimationFrame(() => { const restraints = JSON.parse(restraintsField.value); // const scriptSelect = gradioApp().querySelector(`#${currentTab}_scripts select`); const methodRadios = gradioApp().querySelectorAll(`[name="radio-${currentTab}_sampling"]`); if( restraints?.methods?.length ) { prev_ui_states[currentTab].sampling_method = gradioApp().querySelector(`[name="radio-${currentTab}_sampling"]:checked`); methodRadios.forEach(radio => { const isAllowed = restraints.methods.includes(radio.value); const label = radio.closest('label'); radio.disabled = !isAllowed; radio.checked = isAllowed; label.classList[isAllowed ? 'remove' : 'add']('!cursor-not-allowed','disabled'); label.title = !isAllowed ? `The selected script does not work with this method` : ''; }); } else { // reset to previously selected method methodRadios.forEach(radio => { const label = radio.closest('label'); radio.disabled = false; radio.checked = radio === prev_ui_states[currentTab].sampling_method; label.classList.remove('!cursor-not-allowed','disabled'); label.title = ''; }); } }) }