Enhance cookie consent management and UI improvements

This commit refines the cookie consent management system by introducing a new function for handling cookie preferences and updating the UI elements in `inc_footer.php` and `inc_header.php`. It ensures that analytics and marketing scripts are executed based on user consent, improving compliance with privacy regulations. Additionally, it enhances the cookie consent interface, providing users with clearer options for managing their cookie preferences, and updates related functions for better maintainability.
This commit is contained in:
2026-06-27 14:48:48 -04:00
parent 19679875df
commit ce7c430046
8 changed files with 673 additions and 66 deletions

142
js/cookie-consent.js Normal file
View File

@ -0,0 +1,142 @@
(function (window, $) {
'use strict';
var STORAGE_KEY = 'cookiesPreferences';
var LEGACY_ACCEPT = 'cookiesAccepted';
var LEGACY_REJECT = 'cookiesRejected';
function setCookie(name, value, days) {
var expires = '';
if (typeof days === 'number') {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = ';expires=' + date.toUTCString();
}
document.cookie = name + '=' + encodeURIComponent(value) + expires + ';path=/;SameSite=Lax';
}
function deleteCookie(name) {
document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/;SameSite=Lax';
}
function getCookie(name) {
var prefix = name + '=';
var parts = decodeURIComponent(document.cookie).split(';');
for (var i = 0; i < parts.length; i++) {
var part = parts[i];
while (part.charAt(0) === ' ') {
part = part.substring(1);
}
if (part.indexOf(prefix) === 0) {
return part.substring(prefix.length);
}
}
return '';
}
function readPreferences() {
var raw = getCookie(STORAGE_KEY);
if (raw) {
try {
var parsed = JSON.parse(raw);
if (parsed && typeof parsed === 'object') {
return {
analytics: !!parsed.analytics,
marketing: !!parsed.marketing,
set: true
};
}
} catch (e) {
}
}
if (getCookie(LEGACY_ACCEPT) === 'true') {
return { analytics: true, marketing: true, set: true };
}
if (getCookie(LEGACY_REJECT) === 'true') {
return { analytics: false, marketing: false, set: true };
}
return { analytics: false, marketing: false, set: false };
}
function writePreferences(prefs, reload) {
deleteCookie(LEGACY_ACCEPT);
deleteCookie(LEGACY_REJECT);
setCookie(STORAGE_KEY, JSON.stringify({
analytics: prefs.analytics ? 1 : 0,
marketing: prefs.marketing ? 1 : 0,
v: 1
}), 365);
if (reload !== false) {
window.location.reload();
}
}
function syncPanel(prefs) {
$('#cookiePrefAnalytics').prop('checked', !!prefs.analytics);
$('#cookiePrefMarketing').prop('checked', !!prefs.marketing);
}
function openBanner() {
$('#cookieConsent').stop(true, true).fadeIn(200);
}
function closeBanner() {
$('#cookieConsent').stop(true, true).fadeOut(200);
$('#cookiePreferencesPanel').addClass('d-none');
}
window.ms1CookieConsent = {
getPreferences: readPreferences,
openManager: function () {
syncPanel(readPreferences());
$('#cookiePreferencesPanel').removeClass('d-none');
openBanner();
}
};
$(function () {
var prefs = readPreferences();
syncPanel(prefs);
if (!prefs.set) {
openBanner();
}
$('#acceptCookies').on('click', function () {
writePreferences({ analytics: true, marketing: true });
});
$('#rejectCookies').on('click', function () {
writePreferences({ analytics: false, marketing: false });
});
$('#customizeCookies').on('click', function () {
$('#cookiePreferencesPanel').removeClass('d-none');
});
$('#saveCookiePreferences').on('click', function () {
writePreferences({
analytics: $('#cookiePrefAnalytics').is(':checked'),
marketing: $('#cookiePrefMarketing').is(':checked')
});
});
$('[data-cookie-manage]').on('click', function (event) {
event.preventDefault();
window.ms1CookieConsent.openManager();
});
});
}(window, jQuery));