feat: live timer since rebuild
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
{% include "partials/footer.njk" %}
|
||||
</div>
|
||||
|
||||
<script type="module" src="/assets/js/build-timer.js"></script>
|
||||
{% block scripts %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
<span>RUNTIME: ELEVENTY 3.x STATIC</span>
|
||||
<span>•</span>
|
||||
<span>THEME: NATIVE TERMINAL DARK</span>
|
||||
<span>•</span>
|
||||
<time id="build-age" data-build-timestamp="{{ buildTimestamp }}" aria-live="polite">REBUILT: INITIALIZING</time>
|
||||
</div>
|
||||
|
||||
<div class="footer-right">
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
export const formatBuildAge = (buildTimestamp, nowTimestamp = new Date().toISOString()) => {
|
||||
const buildTime = Date.parse(buildTimestamp);
|
||||
const now = Date.parse(nowTimestamp);
|
||||
|
||||
if (!Number.isFinite(buildTime) || !Number.isFinite(now)) return "unknown";
|
||||
|
||||
const elapsedSeconds = Math.max(0, Math.floor((now - buildTime) / 1000));
|
||||
const days = Math.floor(elapsedSeconds / 86400);
|
||||
const hours = Math.floor((elapsedSeconds % 86400) / 3600);
|
||||
const minutes = Math.floor((elapsedSeconds % 3600) / 60);
|
||||
const seconds = elapsedSeconds % 60;
|
||||
|
||||
if (days > 0) return `${days}d ${hours}h ago`;
|
||||
if (hours > 0) return `${hours}h ${minutes}m ago`;
|
||||
if (minutes > 0) return `${minutes}m ${seconds}s ago`;
|
||||
return `${seconds}s ago`;
|
||||
};
|
||||
|
||||
if (typeof document !== "undefined") {
|
||||
const timer = document.getElementById("build-age");
|
||||
|
||||
if (timer) {
|
||||
const updateBuildAge = () => {
|
||||
timer.textContent = `REBUILT: ${formatBuildAge(timer.dataset.buildTimestamp)}`;
|
||||
};
|
||||
|
||||
updateBuildAge();
|
||||
window.setInterval(updateBuildAge, 1000);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user