/* Stadionzeitung-Swipe-Viewer: rüstet den gestapelten No-JS-Fallback ([data-stadionzeitung-viewer]) auf einen horizontalen Swiper um. Kein eigener Touch-Gesten-Code — natives CSS-Scroll-Snap (components.css) macht das Swipen butterweich, JS liefert nur Zähler, Pfeiltasten und die Vor-/Zurück-Buttons obendrauf. Ohne JS bleiben alle Seiten normal gestapelt. */ (function () { 'use strict'; function initViewer(root) { var track = root.querySelector('[data-viewer-track]'); var pages = Array.prototype.slice.call(root.querySelectorAll('[data-viewer-page]')); var controls = root.querySelector('[data-viewer-controls]'); var counter = root.querySelector('[data-viewer-current]'); var prevBtn = root.querySelector('[data-viewer-prev]'); var nextBtn = root.querySelector('[data-viewer-next]'); var fullBtn = root.querySelector('[data-viewer-full]'); if (!track || pages.length <= 1) { return; } var reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches; var index = 0; var ticking = false; function updateUI() { if (counter) { counter.textContent = String(index + 1); } if (prevBtn) { prevBtn.disabled = index === 0; } if (nextBtn) { nextBtn.disabled = index === pages.length - 1; } } function scrollToIndex(i) { index = Math.max(0, Math.min(pages.length - 1, i)); track.scrollTo({ left: index * track.clientWidth, behavior: reduce ? 'auto' : 'smooth' }); updateUI(); } track.addEventListener('scroll', function () { if (ticking) { return; } ticking = true; requestAnimationFrame(function () { index = Math.round(track.scrollLeft / track.clientWidth); updateUI(); ticking = false; }); }, { passive: true }); window.addEventListener('resize', function () { // Re-snap ohne Animation, z. B. nach Rotation am Handy — sonst // steht der Track auf einer krummen Zwischenposition. track.scrollTo({ left: index * track.clientWidth, behavior: 'auto' }); }); if (prevBtn) { prevBtn.addEventListener('click', function () { scrollToIndex(index - 1); }); } if (nextBtn) { nextBtn.addEventListener('click', function () { scrollToIndex(index + 1); }); } /* Vollbild-Lesemodus. Bewusst NICHT die Fullscreen-API: iOS Safari unterstützt requestFullscreen() nur auf