aboutsummaryrefslogtreecommitdiff
path: root/script.js
diff options
context:
space:
mode:
authorAarni Koskela <akx@iki.fi>2023-05-25 09:05:06 +0300
committerAarni Koskela <akx@iki.fi>2023-05-25 09:09:01 +0300
commitbc53ecf298478ecd9d01a78ece50fea06a609d6a (patch)
tree1ecc98756a997f688fceb0625bab44f2c8d48f58 /script.js
parent54696dce056ece694bbca3f6c0252532fdd05bbd (diff)
Add onAfterUiUpdate callback
Diffstat (limited to 'script.js')
-rw-r--r--script.js27
1 files changed, 27 insertions, 0 deletions
diff --git a/script.js b/script.js
index 46310f35..de9d7e22 100644
--- a/script.js
+++ b/script.js
@@ -19,9 +19,11 @@ function get_uiCurrentTabContent() {
}
var uiUpdateCallbacks = [];
+var uiAfterUpdateCallbacks = [];
var uiLoadedCallbacks = [];
var uiTabChangeCallbacks = [];
var optionsChangedCallbacks = [];
+var uiAfterUpdateTimeout = null;
var uiCurrentTab = null;
/**
@@ -33,6 +35,18 @@ function onUiUpdate(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.
* The callback receives no arguments.
*/
@@ -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;
@@ -78,6 +104,7 @@ document.addEventListener("DOMContentLoaded", function() {
}
executeCallbacks(uiUpdateCallbacks, m);
+ scheduleAfterUiUpdateCallbacks();
const newTab = get_uiCurrentTab();
if (newTab && (newTab !== uiCurrentTab)) {
uiCurrentTab = newTab;