From 1b17a3d4a236dbaadb914fe91a12854fb908c4a3 Mon Sep 17 00:00:00 2001 From: Meleki Date: Sat, 21 Feb 2026 15:05:06 +0100 Subject: [PATCH] zoom-out fallback to default view, pct 3 decimal places --- wwwroot/app.js | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/wwwroot/app.js b/wwwroot/app.js index fb63ac1..c4ec65e 100644 --- a/wwwroot/app.js +++ b/wwwroot/app.js @@ -67,7 +67,7 @@ async function loadView() { $('range-label').textContent = `${fmtDate(viewFrom)} - ${fmtDate(viewTo)} (${entryMode ? 'Einträge' : ZOOM_LEVELS[zoomIndex].name})`; - $('btn-zoom-out').disabled = zoomStack.length === 0; + $('btn-zoom-out').disabled = zoomStack.length === 0 && zoomIndex === 0 && !entryMode; if (entryMode) { const [entries, summary] = await Promise.all([ @@ -337,12 +337,20 @@ function enterEntryMode(bucketStart, bucketEnd) { } function zoomOut() { - if (!zoomStack.length) return; - const prev = zoomStack.pop(); - viewFrom = prev.from; - viewTo = prev.to; - zoomIndex = prev.zoom; - entryMode = prev.entry; + if (zoomStack.length) { + const prev = zoomStack.pop(); + viewFrom = prev.from; + viewTo = prev.to; + zoomIndex = prev.zoom; + entryMode = prev.entry; + } else { + // Reset to default view + viewTo = new Date(); + viewFrom = new Date(viewTo); + viewFrom.setDate(viewFrom.getDate() - ZOOM_LEVELS[0].days); + zoomIndex = 0; + entryMode = false; + } loadView(); } @@ -473,5 +481,5 @@ function escAttr(s) { } function pct(cost) { - return (cost / WEEKLY_BUDGET * 100).toFixed(2) + '%'; + return (cost / WEEKLY_BUDGET * 100).toFixed(3) + '%'; }