// Simple header releases rotator: cycles visible .active items to show multiple releases
try {
const containerRotator = document.querySelector('.site-topbar__tagline .gnp-releases-compact');
if (containerRotator) {
const items = Array.from(containerRotator.querySelectorAll('.gnp-releases-compact__item'));
if (items.length) {
// Read mode/step/interval from wrapper's data attributes (defaults applied)
const wrapper = containerRotator.closest('.site-topbar__tagline');
const mode = (wrapper && wrapper.dataset && wrapper.dataset.gnpRotatorMode) ? wrapper.dataset.gnpRotatorMode : 'group';
const step = wrapper && wrapper.dataset && wrapper.dataset.gnpRotatorStep ? Math.max(1, parseInt(wrapper.dataset.gnpRotatorStep, 10) || 1) : 1;
const intervalMs = wrapper && wrapper.dataset && wrapper.dataset.gnpRotatorInterval ? Math.max(250, parseInt(wrapper.dataset.gnpRotatorInterval, 10) || 4000) : 4000;const getVisibleCount = () => {
if (mode === 'single') return 1;
if (window.matchMedia('(max-width:480px)').matches) return 1;
if (window.matchMedia('(max-width:768px)').matches) return 2;
return 3; // desktop: show 3 at once
};let visible = getVisibleCount();
let start = 0;const show = () => {
items.forEach(i => i.classList.remove('active'));
for (let i = 0; i < Math.min(visible, items.length); i++) {
const idx = (start + i) % items.length;
items[idx].classList.add('active');start = (start + step) % items.length;
show();
}, intervalMs);window.addEventListener('resize', function(){
const v = getVisibleCount();
if (v !== visible) {
visible = v;
start = 0;
show();
}
});
}
}
} catch (e) {
console.warn('GNP releases rotator failed', e);
}// Carousel
const carousel = document.getElementById('gnp-releases-carousel');
if (carousel) {
// initialize carousel if needed (left intentionally blank)
}// Attach search and menu handlers (always)
const container = document.querySelector('[data-search-container]');
const toggle = container ? container.querySelector('[data-search-toggle]') : null;
const close = container ? container.querySelector('[data-search-close]') : null;
const input = container ? container.querySelector('input[type="search"]') : null;// Search toggle (desktop button)
toggle && toggle.addEventListener('click', function(e) {
e.preventDefault();
container.classList.toggle('active');
if (container.classList.contains('active')) setTimeout(() => input && input.focus(), 120);
});// Close button inside search
close && close.addEventListener('click', function(e) {
e.preventDefault();
container.classList.remove('active');
});// Close search when clicking outside (but allow logo to open on mobile)
document.addEventListener('click', function(e) {
if (!container || !container.classList.contains('active')) return;
if (!container.contains(e.target) && !e.target.closest('.site-branding')) {
container.classList.remove('active');
}
});// NOTE: logo keeps its navigation behaviour. Mobile search is opened via the loupe button.// mobile menu toggle is handled below (single handler) to avoid duplicate toggles// Theme toggle flottant
const themeToggle = document.querySelector('[data-theme-toggle]');
if(themeToggle){
themeToggle.addEventListener('click',()=>{
document.body.classList.toggle('dark-theme');
document.querySelector('.theme-toggle__icon--dark').classList.toggle('active');
document.querySelector('.theme-toggle__icon--light').classList.toggle('active');
});
}// Menu toggle (burger) — simply toggle the is-open class; CSS handles display via media queries
const menuToggle = document.querySelector('.menu-toggle');
const primaryNav = document.querySelector('.primary-navigation');
if (menuToggle && primaryNav) {
menuToggle.addEventListener('click', function(e){
e.stopPropagation();
const opened = primaryNav.classList.toggle('is-open');
menuToggle.setAttribute('aria-expanded', opened ? 'true' : 'false');
});// Close the menu when clicking outside
document.addEventListener('click', function(ev){
if (!primaryNav.contains(ev.target) && !menuToggle.contains(ev.target)) {
primaryNav.classList.remove('is-open');
menuToggle.setAttribute('aria-expanded', 'false');
}
});// Close menu when a link is clicked
primaryNav.querySelectorAll('a').forEach(function(a){
a.addEventListener('click', function(){
primaryNav.classList.remove('is-open');
menuToggle.setAttribute('aria-expanded', 'false');
});
});
}});
De votre côté, êtes-vous fans de ce genre de compilation? Ou pas du tout?N’hésitez pas à nous en faire part dans les commentaires sur GeekNPlay, mais aussi sur les réseaux sociaux Facebook, Threads ou encore sur X (anciennement Twitter).