Page Hotreloading

This commit is contained in:
kamkow1
2025-06-15 13:44:32 +02:00
parent bacc733fc3
commit 81460b1862
12 changed files with 140 additions and 8 deletions

47
etc/hotreload.js Normal file
View File

@ -0,0 +1,47 @@
let build_id = "";
async function fetch_build_id()
{
const response = await fetch("/build-id");
const json = await response.json();
return json.build_id;
}
(async function() {
build_id = await fetch_build_id();
})();
const asyncIntervals = [];
const runAsyncInterval = async (cb, interval, intervalIndex) => {
await cb();
if (asyncIntervals[intervalIndex]) {
setTimeout(() => runAsyncInterval(cb, interval, intervalIndex), interval);
}
};
const setAsyncInterval = (cb, interval) => {
if (cb && typeof cb === "function") {
const intervalIndex = asyncIntervals.length;
asyncIntervals.push(true);
runAsyncInterval(cb, interval, intervalIndex);
return intervalIndex;
} else {
throw new Error('Callback must be a function');
}
};
const clearAsyncInterval = (intervalIndex) => {
if (asyncIntervals[intervalIndex]) {
asyncIntervals[intervalIndex] = false;
}
};
setAsyncInterval(async function () {
let new_build_id = await fetch_build_id();
if (build_id !== new_build_id) {
location.reload(true);
}
}, 1000);