(function () { var count = document.getElementById('online-count'); var status = document.getElementById('refresh-status'); var graphs = document.querySelectorAll('.js-live-graph'); var lightbox = document.getElementById('graph-lightbox'); var lightboxImage = document.getElementById('lightbox-image'); var openers = document.querySelectorAll('.js-graph-open'); var closeButtons = document.querySelectorAll('[data-lightbox-close]'); function refresh() { if (status) status.textContent = 'Odświeżanie…'; if (count) { fetch('/stats/live', {cache: 'no-store'}) .then(function (response) { if (!response.ok) throw new Error('stats'); return response.json(); }) .then(function (data) { if (typeof data.current === 'number') count.textContent = String(data.current); if (status) status.textContent = 'Dane aktualne'; }) .catch(function () { if (status) status.textContent = 'Nie udało się odświeżyć'; }); } var stamp = Date.now(); graphs.forEach(function (img) { var src = img.dataset.src; if (src) img.src = src + '?v=' + stamp; }); } function openLightbox(src) { if (!lightbox || !lightboxImage) return; lightboxImage.src = src + (src.indexOf('?') === -1 ? '?' : '&') + 'v=' + Date.now(); lightbox.hidden = false; lightbox.setAttribute('aria-hidden', 'false'); document.body.classList.add('lightbox-open'); } function closeLightbox() { if (!lightbox || !lightboxImage) return; lightbox.hidden = true; lightbox.setAttribute('aria-hidden', 'true'); lightboxImage.src = ''; document.body.classList.remove('lightbox-open'); } openers.forEach(function (button) { button.addEventListener('click', function () { var src = button.getAttribute('data-full'); if (src) openLightbox(src); }); }); closeButtons.forEach(function (button) { button.addEventListener('click', closeLightbox); }); document.addEventListener('keydown', function (event) { if (event.key === 'Escape' && lightbox && !lightbox.hidden) closeLightbox(); }); window.setInterval(refresh, 60000); })();