1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
| (function($) {
$.fn.ihavecookies = function(options, event) {
var $element = $(this);
// Définir les valeurs par défaut
var settings = $.extend({
cookieTypes: [
{
type: 'Préférences',
value: 'preferences',
description: 'Cookies liés aux préférences de votre site, par ex. mémoriser votre nom d utilisateur, les couleurs du site, etc.'
},
{
type: 'Analytics',
value: 'analytics',
description: 'Cookies liés aux visites du site, aux types de navigateurs, etc.'
},
{
type: 'Marketing',
value: 'marketing',
description: 'Cookies liés au marketing, par ex. newsletters, réseaux sociaux, etc.'
}
],
title: 'Vous aimez les cookies ?',
message: 'Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site Web...',
link: '#cookies',
delay: 2000,
expires: 30,
moreInfoLabel: 'En savoir plus',
acceptBtnLabel: 'Accepter',
advancedBtnLabel: 'Personnaliser',
cookieTypesTitle: 'SÉLECTIONNEZ LES COOKIES QUE VOUS VOULEZ ACCEPTER',
fixedCookieTypeLabel:'Essentiel',
fixedCookieTypeDesc: 'Ceux-ci sont essentiels au bon fonctionnement du site Web.',
onAccept: function(){},
uncheckBoxes: false
}, options);
var myCookie = getCookie('cookieControl');
var myCookiePrefs = getCookie('cookieControlPrefs');
if (!myCookie || !myCookiePrefs || event == 'reinit') {
// Supprime toutes les instances du message cookie pour qu'il ne soit pas dupliqué
$('#gdpr-cookie-message').remove();
// Cochez la case du type de cookie 'nécessaire' qui ne peut pas être décochée
var cookieTypes = '<li><input type="checkbox" name="gdpr[]" value="necessary" checked="checked" disabled="disabled"> <label title="' + settings.fixedCookieTypeDesc + '">' + settings.fixedCookieTypeLabel + '</label></li>';
// Générer la liste des cases à cocher des types de cookies
preferences = JSON.parse(myCookiePrefs);
$.each(settings.cookieTypes, function(index, field) {
if (field.type !== '' && field.value !== '') {
var cookieTypeDescription = '';
if (field.description !== false) {
cookieTypeDescription = ' title="' + field.description + '"';
}
cookieTypes += '<li><input type="checkbox" id="gdpr-cookietype-' + field.value + '" name="gdpr[]" value="' + field.value + '" data-auto="on"> <label for="gdpr-cookietype-' + field.value + '"' + cookieTypeDescription + '>' + field.type + '</label></li>';
}
});
// Afficher le message de cookie sur la page
var cookieMessage = '<div id="gdpr-cookie-message"><h4>' + settings.title + '</h4><p>' + settings.message + ' <a href="' + settings.link + '">' + settings.moreInfoLabel + '</a><div id="gdpr-cookie-types" style="display:none;"><h5>' + settings.cookieTypesTitle + '</h5><ul>' + cookieTypes + '</ul></div><p><button class=button2 id="gdpr-cookie-accept" type="button">' + settings.acceptBtnLabel + '</button><button class=button2 id="gdpr-cookie-advanced" type="button">' + settings.advancedBtnLabel + '</button></p></div>';
setTimeout(function(){
$($element).append(cookieMessage);
$('#gdpr-cookie-message').hide().fadeIn('slow', function(){
// En cas de réinitialisation, ouvrez la section avancée du message
// et revérifiez toutes les options précédemment sélectionnées.
if (event == 'reinit') {
$('#gdpr-cookie-advanced').trigger('click');
$.each(preferences, function(index, field) {
$('input#gdpr-cookietype-' + field).prop('checked', true);
});
}
});
}, settings.delay);
// Lorsque vous cliquez sur le bouton d'acceptation, déposez le cookie
$('body').on('click','#gdpr-cookie-accept', function(){
// Set cookie
dropCookie(true, settings.expires);
// Si 'data-auto' est défini sur ON, cochez toutes les cases car
// l'utilisateur n'a pas cliqué sur le bouton de personnalisation des cookies
$('input[name="gdpr[]"][data-auto="on"]').prop('checked', true);
// Enregistrer les préférences de cookies des utilisateurs (dans un cookie!)
var prefs = [];
$.each($('input[name="gdpr[]"]').serializeArray(), function(i, field){
prefs.push(field.value);
});
setCookie('cookieControlPrefs', encodeURIComponent(JSON.stringify(prefs)), 365);
// Exécuter la fonction de rappel
settings.onAccept.call(this);
});
// Activer / désactiver les options de cookies avancées
$('body').on('click', '#gdpr-cookie-advanced', function(){
// Décochez toutes les cases à l'exception de la désactivée «nécessaire»
// one et définissez 'data-auto' sur OFF pour tous. L'utilisateur peut maintenant
// sélectionnez les cookies qu'ils souhaitent accepter.
$('input[name="gdpr[]"]:not(:disabled)').attr('data-auto', 'off').prop('checked', false);
$('#gdpr-cookie-types').slideDown('fast', function(){
$('#gdpr-cookie-advanced').prop('disabled', true);
});
});
} else {
var cookieVal = true;
if (myCookie == 'false') {
cookieVal = false;
}
dropCookie(cookieVal, settings.expires);
}
// Décochez toutes les cases au chargement de la page
if (settings.uncheckBoxes === true) {
$('input[type="checkbox"].ihavecookies').prop('checked', false);
}
};
// Méthode pour obtenir la valeur du cookie
$.fn.ihavecookies.cookie = function() {
var preferences = getCookie('cookieControlPrefs');
return JSON.parse(preferences);
};
// Méthode pour vérifier si la préférence de cookie de l'utilisateur existe
$.fn.ihavecookies.preference = function(cookieTypeValue) {
var control = getCookie('cookieControl');
var preferences = getCookie('cookieControlPrefs');
preferences = JSON.parse(preferences);
if (control === false) {
return false;
}
if (preferences === false || preferences.indexOf(cookieTypeValue) === -1) {
return false;
}
return true;
};
// Fonction pour déposer le cookie avec une valeur booléenne de true.
var dropCookie = function(value, expiryDays) {
setCookie('cookieControl', value, expiryDays);
$('#gdpr-cookie-message').fadeOut('fast', function() {
$(this).remove();
});
};
// Définit le cookie avec «nom» et la valeur «valeur» pour «jours_expiration».
var setCookie = function(name, value, expiry_days) {
var d = new Date();
d.setTime(d.getTime() + (expiry_days*24*60*60*1000));
var expires = "expires=" + d.toUTCString();
document.cookie = name + "=" + value + ";" + expires + ";path=/";
return getCookie(name);
};
// Obtient le cookie appelé «nom».
var getCookie = function(name) {
var cookie_name = name + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(cookie_name) === 0) {
return c.substring(cookie_name.length, c.length);
}
}
return false;
};
}(jQuery)); |