69 lines
1.8 KiB
JavaScript
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);
|
|
});
|