/** * Cookie Consent Handler * * Handles cookie consent acceptance for GDPR compliance. * Sets a cookie that expires in 1 year when the user accepts. */ // Track if click listener has been added to prevent duplicates let clickListenerAdded = false; export function initCookieConsent() { // Check if consent cookie already exists if (hasConsentCookie()) { hideBanner(); } // Only add click listener once (on initial page load) if (!clickListenerAdded) { document.addEventListener('click', (event) => { if (event.target.matches('[data-cookie-consent="accept"]') || event.target.closest('[data-cookie-consent="accept"]')) { acceptCookies(); } }); clickListenerAdded = true; } } function hasConsentCookie() { return document.cookie.split('; ').some(cookie => cookie.startsWith('cookie_consent=accepted')); } function hideBanner() { const banner = document.getElementById('cookie-consent-banner'); if (banner) { banner.style.display = 'none'; } } function acceptCookies() { // Set cookie that expires in 1 year const expiryDate = new Date(); expiryDate.setFullYear(expiryDate.getFullYear() + 1); // Only add Secure flag in production (requires HTTPS) const isProduction = window.location.protocol === 'https:'; const secureFlag = isProduction ? '; Secure' : ''; document.cookie = `cookie_consent=accepted; expires=${expiryDate.toUTCString()}; path=/; SameSite=Lax${secureFlag}`; // Hide the banner with animation const banner = document.getElementById('cookie-consent-banner'); if (banner) { banner.classList.add('opacity-0', 'translate-y-4'); setTimeout(() => { banner.remove(); }, 200); } }