Commit bc53ecf2 authored by Aarni Koskela's avatar Aarni Koskela

Add onAfterUiUpdate callback

parent 54696dce
...@@ -50,13 +50,14 @@ module.exports = { ...@@ -50,13 +50,14 @@ module.exports = {
globals: { globals: {
//script.js //script.js
gradioApp: "readonly", gradioApp: "readonly",
executeCallbacks: "readonly",
onAfterUiUpdate: "readonly",
onOptionsChanged: "readonly",
onUiLoaded: "readonly", onUiLoaded: "readonly",
onUiUpdate: "readonly", onUiUpdate: "readonly",
onOptionsChanged: "readonly",
uiCurrentTab: "writable", uiCurrentTab: "writable",
uiElementIsVisible: "readonly",
uiElementInSight: "readonly", uiElementInSight: "readonly",
executeCallbacks: "readonly", uiElementIsVisible: "readonly",
//ui.js //ui.js
opts: "writable", opts: "writable",
all_gallery_buttons: "readonly", all_gallery_buttons: "readonly",
......
...@@ -19,9 +19,11 @@ function get_uiCurrentTabContent() { ...@@ -19,9 +19,11 @@ function get_uiCurrentTabContent() {
} }
var uiUpdateCallbacks = []; var uiUpdateCallbacks = [];
var uiAfterUpdateCallbacks = [];
var uiLoadedCallbacks = []; var uiLoadedCallbacks = [];
var uiTabChangeCallbacks = []; var uiTabChangeCallbacks = [];
var optionsChangedCallbacks = []; var optionsChangedCallbacks = [];
var uiAfterUpdateTimeout = null;
var uiCurrentTab = null; var uiCurrentTab = null;
/** /**
...@@ -32,6 +34,18 @@ function onUiUpdate(callback) { ...@@ -32,6 +34,18 @@ function onUiUpdate(callback) {
uiUpdateCallbacks.push(callback); uiUpdateCallbacks.push(callback);
} }
/**
* Register callback to be called soon after UI updates.
* The callback receives no arguments.
*
* This is preferred over `onUiUpdate` if you don't need
* access to the MutationRecords, as your function will
* not be called quite as often.
*/
function onAfterUiUpdate(callback) {
uiAfterUpdateCallbacks.push(callback);
}
/** /**
* Register callback to be called when the UI is loaded. * Register callback to be called when the UI is loaded.
* The callback receives no arguments. * The callback receives no arguments.
...@@ -66,6 +80,18 @@ function executeCallbacks(queue, arg) { ...@@ -66,6 +80,18 @@ function executeCallbacks(queue, arg) {
} }
} }
} }
/**
* Schedule the execution of the callbacks registered with onAfterUiUpdate.
* The callbacks are executed after a short while, unless another call to this function
* is made before that time. IOW, the callbacks are executed only once, even
* when there are multiple mutations observed.
*/
function scheduleAfterUiUpdateCallbacks() {
clearTimeout(uiAfterUpdateTimeout);
uiAfterUpdateTimeout = setTimeout(function() {
executeCallbacks(uiAfterUpdateCallbacks);
}, 200);
} }
var executedOnLoaded = false; var executedOnLoaded = false;
...@@ -78,6 +104,7 @@ document.addEventListener("DOMContentLoaded", function() { ...@@ -78,6 +104,7 @@ document.addEventListener("DOMContentLoaded", function() {
} }
executeCallbacks(uiUpdateCallbacks, m); executeCallbacks(uiUpdateCallbacks, m);
scheduleAfterUiUpdateCallbacks();
const newTab = get_uiCurrentTab(); const newTab = get_uiCurrentTab();
if (newTab && (newTab !== uiCurrentTab)) { if (newTab && (newTab !== uiCurrentTab)) {
uiCurrentTab = newTab; uiCurrentTab = newTab;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment