From 3e223523ced2a19347d0b42b662129947152dc49 Mon Sep 17 00:00:00 2001 From: Khachatur Avanesian Date: Sun, 15 Oct 2023 10:48:50 +0300 Subject: [PATCH] Update script.js --- script.js | 128 ++++++++++++++++++++++++++---------------------------- 1 file changed, 61 insertions(+), 67 deletions(-) diff --git a/script.js b/script.js index 8af9773fd..0f63ee933 100644 --- a/script.js +++ b/script.js @@ -1,45 +1,43 @@ function gradioApp() { - const elems = document.getElementsByTagName('gradio-app') - const elem = elems.length == 0 ? document : elems[0] + const elems = document.getElementsByTagName('gradio-app'); + const elem = elems.length == 0 ? document : elems[0]; if (elem !== document) { - elem.getElementById = function (id) { - return document.getElementById(id) - } + elem.getElementById = function(id) { + return document.getElementById(id); + }; } - return elem.shadowRoot ? elem.shadowRoot : elem + return elem.shadowRoot ? elem.shadowRoot : elem; } /** * Get the currently selected top-level UI tab button (e.g. the button that says "Extras"). */ function get_uiCurrentTab() { - return gradioApp().querySelector('#tabs > .tab-nav > button.selected') + return gradioApp().querySelector('#tabs > .tab-nav > button.selected'); } /** * Get the first currently visible top-level UI tab content (e.g. the div hosting the "txt2img" UI). */ function get_uiCurrentTabContent() { - return gradioApp().querySelector( - '#tabs > .tabitem[id^=tab_]:not([style*="display: none"])' - ) + return gradioApp().querySelector('#tabs > .tabitem[id^=tab_]:not([style*="display: none"])'); } -var uiUpdateCallbacks = [] -var uiAfterUpdateCallbacks = [] -var uiLoadedCallbacks = [] -var uiTabChangeCallbacks = [] -var optionsChangedCallbacks = [] -var uiAfterUpdateTimeout = null -var uiCurrentTab = null +var uiUpdateCallbacks = []; +var uiAfterUpdateCallbacks = []; +var uiLoadedCallbacks = []; +var uiTabChangeCallbacks = []; +var optionsChangedCallbacks = []; +var uiAfterUpdateTimeout = null; +var uiCurrentTab = null; /** * Register callback to be called at each UI update. * The callback receives an array of MutationRecords as an argument. */ function onUiUpdate(callback) { - uiUpdateCallbacks.push(callback) + uiUpdateCallbacks.push(callback); } /** @@ -51,7 +49,7 @@ function onUiUpdate(callback) { * not be called quite as often. */ function onAfterUiUpdate(callback) { - uiAfterUpdateCallbacks.push(callback) + uiAfterUpdateCallbacks.push(callback); } /** @@ -59,7 +57,7 @@ function onAfterUiUpdate(callback) { * The callback receives no arguments. */ function onUiLoaded(callback) { - uiLoadedCallbacks.push(callback) + uiLoadedCallbacks.push(callback); } /** @@ -67,7 +65,7 @@ function onUiLoaded(callback) { * The callback receives no arguments. */ function onUiTabChange(callback) { - uiTabChangeCallbacks.push(callback) + uiTabChangeCallbacks.push(callback); } /** @@ -76,15 +74,15 @@ function onUiTabChange(callback) { * @param callback */ function onOptionsChanged(callback) { - optionsChangedCallbacks.push(callback) + optionsChangedCallbacks.push(callback); } function executeCallbacks(queue, arg) { for (const callback of queue) { try { - callback(arg) + callback(arg); } catch (e) { - console.error('error running callback', callback, ':', e) + console.error("error running callback", callback, ":", e); } } } @@ -96,78 +94,74 @@ function executeCallbacks(queue, arg) { * when there are multiple mutations observed. */ function scheduleAfterUiUpdateCallbacks() { - clearTimeout(uiAfterUpdateTimeout) - uiAfterUpdateTimeout = setTimeout(function () { - executeCallbacks(uiAfterUpdateCallbacks) - }, 200) + clearTimeout(uiAfterUpdateTimeout); + uiAfterUpdateTimeout = setTimeout(function() { + executeCallbacks(uiAfterUpdateCallbacks); + }, 200); } -var executedOnLoaded = false +var executedOnLoaded = false; -document.addEventListener('DOMContentLoaded', function () { - var mutationObserver = new MutationObserver(function (m) { +document.addEventListener("DOMContentLoaded", function() { + var mutationObserver = new MutationObserver(function(m) { if (!executedOnLoaded && gradioApp().querySelector('#txt2img_prompt')) { - executedOnLoaded = true - executeCallbacks(uiLoadedCallbacks) + executedOnLoaded = true; + executeCallbacks(uiLoadedCallbacks); } - executeCallbacks(uiUpdateCallbacks, m) - scheduleAfterUiUpdateCallbacks() - const newTab = get_uiCurrentTab() - if (newTab && newTab !== uiCurrentTab) { - uiCurrentTab = newTab - executeCallbacks(uiTabChangeCallbacks) + executeCallbacks(uiUpdateCallbacks, m); + scheduleAfterUiUpdateCallbacks(); + const newTab = get_uiCurrentTab(); + if (newTab && (newTab !== uiCurrentTab)) { + uiCurrentTab = newTab; + executeCallbacks(uiTabChangeCallbacks); } - }) - mutationObserver.observe(gradioApp(), {childList: true, subtree: true}) -}) + }); + mutationObserver.observe(gradioApp(), {childList: true, subtree: true}); +}); /** * Add a ctrl+enter as a shortcut to start a generation */ -document.addEventListener('keydown', function (e) { - const isEnter = e.key === 'Enter' || e.keyCode === 13 - const isModifierKey = e.metaKey || e.ctrlKey || e.altKey +document.addEventListener('keydown', function(e) { + const isEnter = e.key === 'Enter' || e.keyCode === 13; + const isModifierKey = e.metaKey || e.ctrlKey || e.altKey; - const interruptButton = get_uiCurrentTabContent().querySelector( - 'button[id$=_interrupt]' - ) - const generateButton = get_uiCurrentTabContent().querySelector( - 'button[id$=_generate]' - ) + const interruptButton = get_uiCurrentTabContent().querySelector('button[id$=_interrupt]'); + const generateButton = get_uiCurrentTabContent().querySelector('button[id$=_generate]'); if (isEnter && isModifierKey) { if (interruptButton.style.display === 'block') { - interruptButton.click() - setTimeout(function () { - generateButton.click() - }, 500) + interruptButton.click(); + setTimeout(function() { + generateButton.click(); + }, 500); } else { - generateButton.click() + generateButton.click(); } - e.preventDefault() + e.preventDefault(); } -}) +}); /** * checks that a UI element is not in another hidden element or tab content */ function uiElementIsVisible(el) { if (el === document) { - return true + return true; } - const computedStyle = getComputedStyle(el) - const isVisible = computedStyle.display !== 'none' + const computedStyle = getComputedStyle(el); + const isVisible = computedStyle.display !== 'none'; - if (!isVisible) return false - return uiElementIsVisible(el.parentNode) + if (!isVisible) return false; + return uiElementIsVisible(el.parentNode); } function uiElementInSight(el) { - const clRect = el.getBoundingClientRect() - const windowHeight = window.innerHeight - const isOnScreen = clRect.bottom > 0 && clRect.top < windowHeight + const clRect = el.getBoundingClientRect(); + const windowHeight = window.innerHeight; + const isOnScreen = clRect.bottom > 0 && clRect.top < windowHeight; - return isOnScreen + return isOnScreen; }