delta-v / static /loading.js
KrishMalik's picture
Deploy main 49c5f9f: site-wide loading bars (PR 104)
22cfde9 verified
Raw History Blame Contribute Delete
787 Bytes
// Track visible work by page so unrelated preloads cannot hold the bar open.
const DeltaLoading = (() => {
const bar = document.getElementById("site-loading");
const pending = new Set();
function refresh() {
const page = document.body.dataset.page;
bar.hidden = !Array.from(pending).some(pages => !pages.length || pages.includes(page));
}
function start(...pages) {
pending.add(pages);
refresh();
return () => {
pending.delete(pages);
refresh();
};
}
function track(promise, ...pages) {
const finish = start(...pages);
return Promise.resolve(promise).finally(finish);
}
if (document.readyState !== "complete") {
window.addEventListener("load", start(), { once: true });
}
return { refresh, start, track };
})();