Nous utilisons un cookie analytique anonyme pour mesurer l'audience et, avec votre accord, des cookies marketing pour vous proposer des contenus adaptés. Conformément aux recommandations de la CNIL, aucun cookie non essentiel n'est déposé tant que vous n'avez pas fait de choix. Voir notre politique de confidentialité
Les cookies non essentiels restent bloqués tant que vous n'avez pas choisi.
.
window.rsHasConsent = function(category) {
try {
var raw = localStorage.getItem(STORAGE_KEY);
if (!raw) return false;
var c = JSON.parse(raw);
if (!c || c.v !== VERSION) return false;
return !!c[category];
} catch (e) { return false; }
};
window.rsLoadAnalytics = function() {
var slug = window.__rsAnalyticsSlug || '';
if (!slug) return;
var vid;
try {
vid = localStorage.getItem('polsia_vid');
if (!vid) {
vid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0;
return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
localStorage.setItem('polsia_vid', vid);
}
} catch (e) { return; }
new Image().src = 'https://polsia.com/api/beacon/pixel?s=' + encodeURIComponent(slug) + '&v=' + encodeURIComponent(vid);
document.dispatchEvent(new CustomEvent('rs:analytics-loaded'));
};
window.rsOpenCookieSettings = function() { openBanner(); };
var lastOpener = null;
function announce(msg) {
if (live) live.textContent = msg;
}
function persist(state) {
var payload = Object.assign({ analytics: false, marketing: false, ts: new Date().toISOString(), v: VERSION }, state);
try { localStorage.setItem(STORAGE_KEY, JSON.stringify(payload)); } catch (e) {}
document.dispatchEvent(new CustomEvent('rs:consent', { detail: payload }));
return payload;
}
function closeBanner() {
if (!banner) return;
banner.hidden = true;
banner.setAttribute('aria-hidden', 'true');
if (panel) {
panel.setAttribute('aria-hidden', 'true');
}
if (customizeBtn) customizeBtn.setAttribute('aria-expanded', 'false');
if (notice) notice.hidden = true;
if (lastOpener && typeof lastOpener.focus === 'function') {
try { lastOpener.focus(); } catch (e) {}
}
}
function openBanner(opener) {
if (!banner) return;
lastOpener = opener || null;
banner.hidden = false;
banner.setAttribute('aria-hidden', 'false');
if (notice) notice.hidden = false;
if (acceptBtn) acceptBtn.focus();
}
function acceptAll() {
persist({ analytics: true, marketing: true });
announce('Choix enregistré : tout accepter.');
if (analyticsToggle) analyticsToggle.checked = true;
if (marketingToggle) marketingToggle.checked = true;
closeBanner();
if (window.rsLoadAnalytics) window.rsLoadAnalytics();
}
function rejectAll() {
persist({ analytics: false, marketing: false });
announce('Choix enregistré : tout refuser.');
if (analyticsToggle) analyticsToggle.checked = false;
if (marketingToggle) marketingToggle.checked = false;
closeBanner();
}
function savePreferences() {
var aN = analyticsToggle ? analyticsToggle.checked : false;
var mN = marketingToggle ? marketingToggle.checked : false;
persist({ analytics: !!aN, marketing: !!mN });
announce('Choix enregistré.');
closeBanner();
if (aN && window.rsLoadAnalytics) window.rsLoadAnalytics();
}
function togglePanel() {
if (!panel || !customizeBtn) return;
var expanded = customizeBtn.getAttribute('aria-expanded') === 'true';
var next = !expanded;
customizeBtn.setAttribute('aria-expanded', next ? 'true' : 'false');
panel.setAttribute('aria-hidden', next ? 'false' : 'true');
if (next) {
panel.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
}
}
if (acceptBtn) acceptBtn.addEventListener('click', acceptAll);
if (rejectBtn) rejectBtn.addEventListener('click', rejectAll);
if (customizeBtn) customizeBtn.addEventListener('click', togglePanel);
if (saveBtn) saveBtn.addEventListener('click', savePreferences);
if (banner) {
document.addEventListener('keydown', function(e) {
if (!banner || banner.hidden) return;
if (e.key === 'Escape') {
e.preventDefault();
rejectAll();
}
});
}
// First-load: synchronous reveal BEFORE first paint so there is no flash.
// The partial ships with hidden=true; we remove it inline.
try {
var raw = localStorage.getItem(STORAGE_KEY);
var existing = raw ? JSON.parse(raw) : null;
if (!existing || existing.v !== VERSION) {
banner.hidden = false;
banner.setAttribute('aria-hidden', 'false');
if (notice) notice.hidden = false;
} else {
// Existing choice: still wire up so toggles reflect stored state if user reopens settings.
if (analyticsToggle) analyticsToggle.checked = !!existing.analytics;
if (marketingToggle) marketingToggle.checked = !!existing.marketing;
}
} catch (e) {
banner.hidden = false;
banner.setAttribute('aria-hidden', 'false');
if (notice) notice.hidden = false;
}
})();