Files
2026-07-09 14:36:47 +02:00

69 lines
1.8 KiB
JavaScript

function dayNowMinute() {
const now = new Date();
return now.getHours() * 60 + now.getMinutes() + now.getSeconds() / 60;
}
function dayUpdateNowLine() {
document.querySelectorAll('[data-live-now-line]').forEach(line => {
line.style.left = `calc(${dayNowMinute()} * var(--minute-width))`;
});
}
function dayUpdateProgrammeStates() {
const now = Math.floor(Date.now() / 1000);
document.querySelectorAll('[data-live-programme]').forEach(programme => {
const start = Number(programme.dataset.liveStart);
const stop = Number(programme.dataset.liveStop);
const isCurrent = now >= start && now < stop;
programme.classList.toggle('is-current', isCurrent);
programme.classList.toggle('is-past', now >= stop);
const badge = programme.querySelector('[data-live-badge]');
if (badge) {
badge.hidden = !isCurrent;
}
});
}
function daySetupZoomMemory() {
const wrap = document.querySelector('.timeline-wrap');
const buttons = document.querySelectorAll('.timeline-zoom button');
if (!wrap || !buttons.length) return;
const savedZoom = localStorage.getItem('tvguide.timelineZoom');
if (savedZoom) {
wrap.style.setProperty('--minute-width', `${savedZoom}px`);
buttons.forEach(button => {
button.classList.toggle('active', button.dataset.zoom === savedZoom);
});
}
buttons.forEach(button => {
button.addEventListener('click', () => {
const zoom = button.dataset.zoom;
wrap.style.setProperty('--minute-width', `${zoom}px`);
localStorage.setItem('tvguide.timelineZoom', zoom);
buttons.forEach(b => b.classList.remove('active'));
button.classList.add('active');
});
});
}
function dayTick() {
dayUpdateNowLine();
dayUpdateProgrammeStates();
}
document.addEventListener('DOMContentLoaded', () => {
daySetupZoomMemory();
dayTick();
setInterval(dayTick, 1000);
});