import { updateTime } from './block_time.js'; import { updateWeather } from './block_weather.js'; const config = { polling: true } function init() { 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 } }; initHeaderControls(blocks) // Initial load // 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 reloadAll(blocks); setInterval(() => pollUpdates(blocks), 500); } function reloadAll(blocks) { Object.keys(blocks).forEach(key => { blocks[key].update(); blocks[key].lastUpdate = Date.now(); }); } function pollUpdates(blocks) { if (!config.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; } }); } function initHeaderControls(blocks) { document.getElementById("reload").addEventListener("click", () => reloadAll(blocks)); document.getElementById("pause").addEventListener("change", (e) => { config.polling = e.target.checked; }); } init()