initial commit
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
// The only JavaScript in the app: tick the live work timer and the visible POC reset countdown.
|
||||
// Everything else is plain HTML + htmx.
|
||||
(function () {
|
||||
var workInterval = null;
|
||||
var resetInterval = null;
|
||||
var reloadingForReset = false;
|
||||
|
||||
function pad(n) { return (n < 10 ? "0" : "") + n; }
|
||||
|
||||
function tickWorkTimer() {
|
||||
var el = document.getElementById("clock");
|
||||
if (!el || !el.dataset.start) {
|
||||
if (workInterval) { clearInterval(workInterval); workInterval = null; }
|
||||
return;
|
||||
}
|
||||
var start = new Date(el.dataset.start).getTime();
|
||||
var diff = Math.max(0, Math.floor((Date.now() - start) / 1000));
|
||||
var h = Math.floor(diff / 3600);
|
||||
var m = Math.floor((diff % 3600) / 60);
|
||||
var s = diff % 60;
|
||||
el.textContent = pad(h) + ":" + pad(m) + ":" + pad(s);
|
||||
}
|
||||
|
||||
function formatReset(seconds) {
|
||||
var m = Math.floor(seconds / 60);
|
||||
var s = seconds % 60;
|
||||
return pad(m) + ":" + pad(s);
|
||||
}
|
||||
|
||||
function tickResetCountdown() {
|
||||
var el = document.getElementById("reset-countdown");
|
||||
if (!el || !el.dataset.resetAt) {
|
||||
if (resetInterval) { clearInterval(resetInterval); resetInterval = null; }
|
||||
return;
|
||||
}
|
||||
|
||||
var resetAt = new Date(el.dataset.resetAt).getTime();
|
||||
var remaining = Math.ceil((resetAt - Date.now()) / 1000);
|
||||
if (remaining <= 0) {
|
||||
el.textContent = "resetting…";
|
||||
document.body.classList.add("reset-imminent");
|
||||
if (!reloadingForReset) {
|
||||
reloadingForReset = true;
|
||||
window.setTimeout(function () { window.location.reload(); }, 1500);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
el.textContent = formatReset(remaining);
|
||||
document.body.classList.toggle("reset-imminent", remaining <= 30);
|
||||
}
|
||||
|
||||
function restartWorkTimer() {
|
||||
if (workInterval) clearInterval(workInterval);
|
||||
tickWorkTimer();
|
||||
workInterval = setInterval(tickWorkTimer, 1000);
|
||||
}
|
||||
|
||||
function startResetCountdown() {
|
||||
if (resetInterval) clearInterval(resetInterval);
|
||||
tickResetCountdown();
|
||||
resetInterval = setInterval(tickResetCountdown, 1000);
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
restartWorkTimer();
|
||||
startResetCountdown();
|
||||
});
|
||||
|
||||
// Re-evaluate the work timer after htmx swaps the working area in/out.
|
||||
document.body.addEventListener("htmx:afterSettle", restartWorkTimer);
|
||||
})();
|
||||
Reference in New Issue
Block a user