41 lines
No EOL
1.3 KiB
JavaScript
41 lines
No EOL
1.3 KiB
JavaScript
let interval = null;
|
|
const timeout = 1000;
|
|
|
|
async function reloadTables() {
|
|
if (document.hidden) {
|
|
if (interval == null) return;
|
|
clearInterval(interval);
|
|
interval = null;
|
|
return;
|
|
}
|
|
|
|
interval ??= setInterval(reloadTables, timeout);
|
|
|
|
const last = document.getElementById('last-updated').innerText;
|
|
const res = await fetch(`/queue?last=${last}`);
|
|
const text = await res.text();
|
|
|
|
const newDocument = new DOMParser().parseFromString(text, "text/html");
|
|
const newLast = newDocument.getElementById('last-updated').innerText;
|
|
|
|
if (last !== newLast) {
|
|
document.getElementById('last-updated').innerText = newLast;
|
|
document.getElementById('recent-jobs').innerHTML = newDocument.getElementById('recent-jobs').innerHTML;
|
|
}
|
|
document.getElementById('queue-status').innerHTML = newDocument.getElementById('queue-status').innerHTML;
|
|
}
|
|
|
|
function docReady(fn) {
|
|
// see if DOM is already available
|
|
if (document.readyState === "complete" || document.readyState === "interactive") {
|
|
// call on next available tick
|
|
setTimeout(fn, 1);
|
|
} else {
|
|
document.addEventListener("DOMContentLoaded", fn);
|
|
}
|
|
}
|
|
|
|
docReady(async () => {
|
|
document.addEventListener("visibilitychange", reloadTables, false);
|
|
await reloadTables();
|
|
}); |