import { initTimeVisualizer } from './timeVisualizer.js'; let polling = true const blocks = { time: { interval: 30 * 1000, lastUpdate: 0, update: updateTime }, // 30s weather: { interval: 30 * 60000, lastUpdate: 0, update: updateWeather } // 30min // Add more: { interval: X, lastUpdate: 0, update: updateFunction } }; let lastPoll = 0; function updateTime() { fetch("/time") .then(res => res.json()) .then(data => { document.getElementById("weatherSummary").innerText = data.time; }); } function updateWeather() { const city = document.getElementById("city").value; fetch(`/weather?city=${encodeURIComponent(city)}`) .then(res => res.json()) .then(data => { if (!data) { document.getElementById("weather-summary").innerText = `Error, "${city}" city not found`; return } document.getElementById("weather-summary").innerText = data.summary; document.getElementById("weather-icon").src = data.icon_url; }); } function pollUpdates() { if (!polling) return; const now = Date.now(); Object.keys(blocks).forEach(key => { const block = blocks[key]; if (now - block.lastUpdate >= block.interval) { block.update(); block.lastUpdate = now; } }); lastPoll = now; } function reloadAll() { Object.keys(blocks).forEach(key => { blocks[key].update(); blocks[key].lastUpdate = Date.now(); }); } // Header controls document.getElementById("reload").addEventListener("click", reloadAll); document.getElementById("pause").addEventListener("change", (e) => { polling = e.target.checked; }); // Initial load reloadAll(); // Poll every 500ms to check intervals (fast enough for 1s updates, light on CPU) // maybe the 1s updates should be special case, but for now let's keep it simple setInterval(pollUpdates, 500); // timeVisualizer initTimeVisualizer('timeVisualizer');