Files
2026-10-30 10:56:13 +01:00

68 lines
2.2 KiB
JavaScript

(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);
})();