From 84fe2d59461ddce65ba5cfb6a282f459da7a0bb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20=C5=A0trauch?= Date: Mon, 6 Oct 2025 14:39:18 +0200 Subject: [PATCH] History in widget --- calculator/index.html | 62 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 6 deletions(-) diff --git a/calculator/index.html b/calculator/index.html index 648b1dc..2d98d60 100644 --- a/calculator/index.html +++ b/calculator/index.html @@ -47,6 +47,13 @@ return `${year}-${month}-${day}`; } + function getHistoryDays() { + const urlParams = new URLSearchParams(window.location.search); + const history = parseInt(urlParams.get('history')) || 14; + // Limit history to maximum 365 days + return Math.min(Math.max(1, history), 365); + } + function getHourFromTimeString(timeStr) { return parseInt(timeStr.split(':')[0]); } @@ -74,6 +81,7 @@ const tomorrow = new Date(today); tomorrow.setDate(today.getDate() + 1); const tomorrowString = formatDate(tomorrow); + const historyDays = getHistoryDays(); // Check if tomorrow's data is available let tomorrowAvailable = false; @@ -85,18 +93,36 @@ } } catch (e) {} - let rowCount = tomorrowAvailable ? 15 : 14; + // Calculate total rows: history days + today + tomorrow (if available) + let rowCount = historyDays + 1; // history days + today + if (tomorrowAvailable) { + rowCount += 1; // + tomorrow + } + for (let offset = 0; offset < rowCount; offset++) { let date; let label; if (tomorrowAvailable && offset === 0) { + // Tomorrow is first row if available date = tomorrow; label = `ZĂ­tra (${tomorrowString})`; + } else if (tomorrowAvailable && offset === 1) { + // Today is second row if tomorrow is available + date = today; + const todayString = formatDate(today); + label = `Dnes (${todayString})`; + } else if (!tomorrowAvailable && offset === 0) { + // Today is first row if tomorrow is not available + date = today; + const todayString = formatDate(today); + label = `Dnes (${todayString})`; } else { + // Historical days date = new Date(today); - date.setDate(today.getDate() - (tomorrowAvailable ? offset - 1 : offset)); + const daysBack = tomorrowAvailable ? offset - 1 : offset; + date.setDate(today.getDate() - daysBack); const dateString = formatDate(date); - label = offset === (tomorrowAvailable ? 1 : 0) ? `Dnes (${dateString})` : dateString; + label = dateString; } const dateString = formatDate(date); @@ -287,18 +313,42 @@ } } catch (e) {} - let rowCount = tomorrowAvailable ? 15 : 14; + const historyDays = getHistoryDays(); + + // Calculate total rows: history days + today + tomorrow (if available) + let rowCount = historyDays + 1; // history days + today + if (tomorrowAvailable) { + rowCount += 1; // + tomorrow + } + for (let offset = 0; offset < rowCount; offset++) { let date; + let isToday = false; + if (tomorrowAvailable && offset === 0) { + // Tomorrow is first row if available date = tomorrow; + } else if (tomorrowAvailable && offset === 1) { + // Today is second row if tomorrow is available + date = today; + isToday = true; + } else if (!tomorrowAvailable && offset === 0) { + // Today is first row if tomorrow is not available + date = today; + isToday = true; } else { + // Historical days date = new Date(today); - date.setDate(today.getDate() - (tomorrowAvailable ? offset - 1 : offset)); + const daysBack = tomorrowAvailable ? offset - 1 : offset; + date.setDate(today.getDate() - daysBack); } + const dateString = formatDate(date); - loadData(dateString, (tomorrowAvailable ? offset === 1 : offset === 0)); + loadData(dateString, isToday); } + + // Update the chart after loading table data + await updateChart(); } window.onload = function() {