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.
143 lines
4.0 KiB
JavaScript
143 lines
4.0 KiB
JavaScript
(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));
|