1/*! 2 * ihavecookies - jQuery plugin for displaying cookie/privacy message 3 * v0.3.2 4 * 5 * Copyright (c) 2018 Ketan Mistry (https://iamketan.com.au) 6 * Licensed under the MIT license: 7 * http://www.opensource.org/licenses/mit-license.php 8 * 9 */ 10if (!Object.assign) { 11 Object.defineProperty(Object, 'assign', { 12 enumerable: false, 13 configurable: true, 14 writable: true, 15 value: function (target) { 16 'use strict'; 17 if (target === undefined || target === null) { 18 throw new TypeError('Cannot convert first argument to object'); 19 } 20 21 var to = Object(target); 22 for (var i = 1; i < arguments.length; i++) { 23 var nextSource = arguments[i]; 24 if (nextSource === undefined || nextSource === null) { 25 continue; 26 } 27 nextSource = Object(nextSource); 28 29 var keysArray = Object.keys(Object(nextSource)); 30 for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) { 31 var nextKey = keysArray[nextIndex]; 32 var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); 33 if (desc !== undefined && desc.enumerable) { 34 to[nextKey] = nextSource[nextKey]; 35 } 36 } 37 } 38 return to; 39 } 40 }); 41} 42(function ($) { 43 44 /* 45 |-------------------------------------------------------------------------- 46 | Cookie Message 47 |-------------------------------------------------------------------------- 48 | 49 | Displays the cookie message on first visit or 30 days after their 50 | last visit. 51 | 52 | @param event - 'reinit' to reopen the cookie message 53 | 54 */ 55 $.fn.ihavecookies = function (options, event) { 56 57 var $element = $(this); 58 59 // Set defaults 60 var settings = $.extend({ 61 cookieTypes: [ 62 { 63 type: 'Site Preferences', 64 value: 'preferences', 65 description: 'These are cookies that are related to your site preferences, e.g. remembering your username, site colours, etc.' 66 }, 67 { 68 type: 'Analytics', 69 value: 'analytics', 70 description: 'Cookies related to site visits, browser types, etc.' 71 }, 72 { 73 type: 'Marketing', 74 value: 'marketing', 75 description: 'Cookies related to marketing, e.g. newsletters, social media, etc' 76 } 77 ], 78 title: 'Cookies & Privacy', 79 message: 'Cookies enable you to use shopping carts and to personalize your experience on our sites, tell us which parts of our websites people have visited, help us measure the effectiveness of ads and web searches, and give us insights into user behavior so we can improve our communications and products.', 80 link: '/privacy-policy', 81 delay: 2000, 82 expires: 30, 83 moreInfoLabel: 'More information', 84 acceptBtnLabel: 'Accept Cookies', 85 rejectBtnLabel: 'Reject Cookies', 86 advancedBtnLabel: 'Customise Cookies', 87 cookieTypesTitle: 'Select cookies to accept', 88 fixedCookieTypeLabel: 'Session', 89 fixedCookieTypeDesc: 'These are cookies that are essential for the website to work correctly.', 90 onAccept: function () { }, 91 uncheckBoxes: false 92 }, options); 93 94 var myCookie = getCookie('cookieControlv2'); 95 var myCookiePrefs = getCookie('cookieControlPrefsv2'); 96 97 98 if (!myCookie || !myCookiePrefs || event == 'reinit') { 99 reInitCookies(); 100 //delete Cookies 101 deleteCookies(["cookieControlv2"]); 102 103 // Set cookie 104 dropCookie(true, settings.expires); 105 106 // Remove all instances of the cookie message so it's not duplicated 107 $('#gdpr-cookie-message').remove(); 108 109 // Set the 'necessary' cookie type checkbox which can not be unchecked 110 var cookieTypes = '<li>
110<input type="checkbox" name="gdpr[]" value="necessary" checked="checked" disabled="disabled"> <label title="' + settings.fixedCookieTypeDesc + '">' + settings.fixedCookieTypeLabel + '</label></li>'; 111 112 // Generate list of cookie type checkboxes 113 preferences = JSON.parse(myCookiePrefs); 114 $.each(settings.cookieTypes, function (index, field) { 115 if (field.type !== '' && field.value !== '') { 116 var cookieTypeDescription = ''; 117 if (field.description !== false) { 118 cookieTypeDescription = ' title="' + field.description + '"'; 119 } 120 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>'; 121 } 122 }); 123 124 // Display cookie message on page 125 var cookieMessage = '<div id="gdpr-cookie-message" class="horizontal"><div class="flow wrap"><div class="text"><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></div><div class="gdpr-actions"><button id="gdpr-cookie-accept" type="button">' + settings.acceptBtnLabel + '</button><button id="gdpr-cookie-reject" type="button">' + settings.rejectBtnLabel + '</button><button id="gdpr-cookie-advanced" type="button">' + settings.advancedBtnLabel + '</button></div></div></div>'; 126 setTimeout(function () { 127 $($element).append(cookieMessage); 128 $('#gdpr-cookie-message').hide().fadeIn('slow', function () { 129 // If reinit'ing, open the advanced section of message 130 // and re-check all previously selected options. 131 if (event == 'reinit') { 132 $('#gdpr-cookie-advanced').trigger('click'); 133 $.each(preferences, function (index, field) { 134 $('input#gdpr-cookietype-' + field).prop('checked', true); 135 }); 136 } 137 }); 138 }, settings.delay); 139 140 // When accept button is clicked drop cookie 141 $('body').on('click', '#gdpr-cookie-accept', function () { 142 143 // Set cookie 144 dropCookie(true, settings.expires); 145 146 // If 'data-auto' is set to ON, tick all checkboxes because 147 // the user hasn't clicked the customise cookies button 148 $('input[name="gdpr[]"][data-auto="on"]').prop('checked', true); 149 150 // Save users cookie preferences (in a cookie!) 151 var prefs = []; 152 $.each($('input[name="gdpr[]"]').serializeArray(), function (i, field) { 153 prefs.push(field.value); 154 }); 155 setCookie('cookieControlPrefsv2', encodeURIComponent(JSON.stringify(prefs)), 365); 156 157 // Run callback function 158 //settings.onAccept.call(this); 159 // Run callback function only if not previously triggered 160 if (!settings.alreadyAccepted) { 161 settings.onAccept.call(this); 162 settings.alreadyAccepted = true; // Set a flag to prevent multiple calls 163 } 164 }); 165 166 // Toggle reject cookie 167 $('body').on('click', '#gdpr-cookie-reject', function () { 168 reInitCookies(); 169 170 //delete Cookies 171 deleteCookies(["cookieControlv2"]); 172 173 // Set cookie 174 dropCookie(true, settings.expires); 175 176 // Save users cookie preferences (in a cookie!) 177 var prefs = []; 178 179 setCookie('cookieControlPrefsv2', encodeURIComponent(JSON.stringify(prefs)), 365); 180 181 182 // Run callback function only if not previously triggered 183 if (!settings.alreadyAccepted) { 184 settings.onAccept.call(this); 185 settings.alreadyAccepted = true; // Set a flag to prevent multiple calls 186 } 187 188 189 }); 190 191 // Toggle advanced cookie options 192 $('body').on('click', '#gdpr-cookie-advanced', function () { 193 // Uncheck all checkboxes except for the disabled 'necessary' 194 // one and set 'data-auto' to OFF for all. The user can now 195 // select the cookies they want to accept.
196 $('#gdpr-cookie-accept').html(settings.acceptBtnLabel2); 197 $('input[name="gdpr[]"]:not(:disabled)').attr('data-auto', 'off').prop('checked', false); 198 $('#gdpr-cookie-types').slideDown('fast', function () { 199 $('#gdpr-cookie-advanced').prop('disabled', true); 200 }); 201 }); 202 203 } else { 204 var cookieVal = true; 205 if (myCookie == 'false') { 206 cookieVal = false; 207 } 208 dropCookie(cookieVal, settings.expires); 209 } 210 211 // Uncheck any checkboxes on page load 212 if (settings.uncheckBoxes === true) { 213 $('input[type="checkbox"].ihavecookies').prop('checked', false); 214 } 215 216 }; 217 218 // Method to get cookie value 219 $.fn.ihavecookies.cookie = function () { 220 var preferences = getCookie('cookieControlPrefsv2'); 221 return JSON.parse(preferences); 222 }; 223 224 // Method to check if user cookie preference exists 225 $.fn.ihavecookies.preference = function (cookieTypeValue) { 226 var control = getCookie('cookieControlv2'); 227 var preferences = getCookie('cookieControlPrefsv2'); 228 preferences = JSON.parse(preferences); 229 if (control === false) { 230 return false; 231 } 232 if (preferences === false || preferences.indexOf(cookieTypeValue) === -1) { 233 return false; 234 } 235 return true; 236 }; 237 238 239 240 /* 241 |-------------------------------------------------------------------------- 242 | Drop Cookie 243 |-------------------------------------------------------------------------- 244 | 245 | Function to drop the cookie with a boolean value of true. 246 | 247 */ 248 var dropCookie = function (value, expiryDays) { 249 setCookie('cookieControlv2', value, expiryDays); 250 $('#gdpr-cookie-message').fadeOut('fast', function () { 251 $(this).remove(); 252 }); 253 }; 254 255 256 /* 257 |-------------------------------------------------------------------------- 258 | Set Cookie 259 |-------------------------------------------------------------------------- 260 | 261 | Sets cookie with 'name' and value of 'value' for 'expiry_days'. 262 | 263 */ 264 var setCookie = function (name, value, expiry_days) { 265 var d = new Date(); 266 d.setTime(d.getTime() + (expiry_days * 24 * 60 * 60 * 1000)); 267 var expires = "expires=" + d.toUTCString(); 268 document.cookie = name + "=" + value + ";" + expires + ";path=/"; 269 return getCookie(name); 270 }; 271 272 /* 273 |-------------------------------------------------------------------------- 274 | Get Cookie 275 |-------------------------------------------------------------------------- 276 | 277 | Gets cookie called 'name'. 278 | 279 */ 280 var getCookie = function (name) { 281 var cookie_name = name + "="; 282 var decodedCookie = decodeURIComponent(document.cookie); 283 var ca = decodedCookie.split(';'); 284 for (var i = 0; i < ca.length; i++) { 285 var c = ca[i]; 286 while (c.charAt(0) == ' ') { 287 c = c.substring(1); 288 } 289 if (c.indexOf(cookie_name) === 0) { 290 return c.substring(cookie_name.length, c.length); 291 } 292 } 293 return false; 294 }; 295 296}(jQuery)); 297 298 299 300var lang = $("html").attr("lang"); 301var cookiesLangs = { 302 ca: { 303 title: 'Aquest lloc web utilitza cookies', 304 message: 'Utilitzem cookies pròpies i de tercers per millorar l\'experiència d\'usuari, analitzar el trà nsit, la vostra navegació al web i personalitzar el contingut. Podeu âAcceptar totes les cookiesâ, âConfigurar les cookiesâ que voleu acceptar o bé âRebutjar-les totesâ (excepte les cookies tècniques que són necessà ries). Consulteu la nostra <a href="cookies_link">polÃtica de cookies</a> per obtenir més informació.', 305 link: '/ca/politica-de-cookies/', 306 acceptBtnLabel: 'Accepta totes les cookies', 307 rejectBtnLabel: 'Rebutjar-les totes', 308 acceptBtnLabel2: 'Accepta les cookies', 309 advancedBtnLabel: 'Configurar les cookies', 310 moreInfoLabel: 'Més informació', 311 cookieTypesTitle: 'Selecciona les galetes que vols acceptar', 312 fixedCookieTypeLabel: 'Necessà ries', 313 fixedCookieTypeDesc: 'Aquestes galetes són essencials perqu
313è la web funcioni correctament.' 314 }, 315 es: { 316 title: 'Este sitio web utiliza cookies', 317 message: 'Utilizamos cookies propias y de terceros para mejorar la experiencia del usuario, analizar el tráfico, su navegación en el sitio web y personalizar el contenido. Puede "Aceptar todas las cookies", "Configurar las cookies" que desea aceptar o "Rechazar todas" (excepto las cookies técnicas que son necesarias). Consulte nuestra <a href="cookies_link">polÃtica de cookies</a> para obtener más información.', 318 link: '/es/politica-de-cookies/', 319 acceptBtnLabel: 'Aceptar todas las cookies', 320 rejectBtnLabel: 'Rechazar todas', 321 acceptBtnLabel2: 'Aceptar las cookies', 322 advancedBtnLabel: 'Configurar las cookies', 323 moreInfoLabel: 'Más información', 324 cookieTypesTitle: 'Selecciona las cookies que quieres aceptar', 325 fixedCookieTypeLabel: 'Necesarias', 326 fixedCookieTypeDesc: 'Estas cookies són esenciales para que la web funcione correctamente.' 327 }, 328 en: { 329 title: 'This website uses cookies', 330 message: 'We use our own and third-party cookies to improve the user experience, analyze traffic, your navigation on the website, and personalize content. You can "Accept all cookies," "Configure the cookies" you want to accept, or "Reject all" (except technical cookies which are necessary). Please refer to our <a href="cookies_link">cookie policy</a> for more information.', 331 link: '/en/politica-de-cookies/', 332 acceptBtnLabel: 'Accept all cookies', 333 rejectBtnLabel: 'Reject all', 334 acceptBtnLabel2: 'Accept cookies', 335 advancedBtnLabel: 'Configure cookies', 336 moreInfoLabel: 'More information', 337 cookieTypesTitle: 'Select the cookies you want to accept', 338 fixedCookieTypeLabel: 'Necessary', 339 fixedCookieTypeDesc: 'These cookies are essential for the website to function properly.' 340 }, 341 fr: { 342 title: 'Ce site web utilise des cookies', 343 message: 'Nous utilisons nos propres cookies et des cookies tiers pour améliorer l\'expérience utilisateur, analyser le trafic, votre navigation sur le site web et personnaliser le contenu. Vous pouvez "Accepter tous les cookies", "Configurer les cookies" que vous souhaitez accepter, ou "Rejeter tous" (à l\'exception des cookies techniques qui sont nécessaires). Veuillez consulter notre <a href="cookies_link">politique de cookies</a> pour plus d\'informations.', 344 link: '/fr/politica-de-cookies/', 345 acceptBtnLabel: 'Accepter tous les cookies', 346 rejectBtnLabel: 'Rejeter tous', 347 acceptBtnLabel2: 'Accepter les cookies', 348 advancedBtnLabel: 'Configurer les cookies', 349 moreInfoLabel: 'Plus d\'informations', 350 cookieTypesTitle: 'Sélectionnez les cookies que vous souhaitez accepter', 351 fixedCookieTypeLabel: 'Nécessaires', 352 fixedCookieTypeDesc: 'Ces cookies sont essentiels pour le bon fonctionnement du site web.' 353 }, 354} 355var cookiesLangsMarketing = { 356 ca: { 357 message: 'Utilitzem cookies pròpies i de tercers per millorar lâexperiència dâusuari, analitzar el trà nsit, la vostra navegació al web i personalitzar el contingut. Podeu âAcceptar totes les cookiesâ, âConfigurar les cookiesâ que voleu acceptar o bé âRebutjar-les totesâ (excepte les cookies tècniques que són necessà ries). Consulteu la nostra <a href="cookies_link">polÃtica de cookies</a> per obtenir més informació.', 358 }, 359 es: { 360 message: 'Utilizamos cookies propias y de terceros para mejorar la experiencia del usuario, analizar el tráfico, su navegación en el sitio web y personalizar el contenido. Puede "Aceptar todas las cookies", "Configurar las cookies" que desea aceptar o "Rechazar todas" (excepto las cookies técnicas que son necesarias). Consulte <a href="cookies_link">nuestra polÃtica de cookies</a> para obtener más información.', 361 }, 362 en: { 363 message: 'We use our own and third-party cookies to improve the user experience, analyze traffic, your navigation on the website, and personalize content. You can "Accept all cookies," "Configure the cookies" you want to accept, or "Reject all" (except technical cookies which are necessary). Please refer to our <a href="cookies_link">cookie policy</a> for more information.', 364 }, 365 fr: { 366 message: 'Nous utilisons nos propres cookies et des cookies tiers pour améliorer l\'expérience utilisateur, analyser le trafic, votre navigation sur le site web et personnaliser le contenu. Vous pouvez "Accepter tous les cookies", "Configurer les cookies" que vous souhaitez accepter, ou "Rejeter tous" (à l\'exception des cookies techniques qui sont nécessaires). Veuillez consulter notre <a href="cookies_link">politique de cookies</a> pour plus d\'informations.', 367 } 368} 369var cookiesTypes = { 370 ca: { 371 preferences: { 372 type: 'Personalització', 373 value: 'preferences', 374 description: 'Es tracta de cookies relacionades amb les preferències del vostre lloc, per ex. recordant l\'idioma, nom d\'usuari, etc.' 375 }, 376 analytics: { 377 type: 'Anà lisi', 378 value: 'analytics', 379 description: 'Cookies relacionades amb visites al lloc, tipus de navegadors, etc.' 380 }, 381 marketing: { 382 type: 'Mà rqueting', 383 value: 'marketing', 384 description: 'Cookies relacionades amb el mà rqueting, p. ex. butlletins, xarxes socials, etc.' 385 } 386 }, 387 es: { 388 preferences: { 389 type: 'Personalización', 390 value: 'preferences', 391 description: 'Estas son cookies que están relacionadas con las preferencias de su sitio, por ej. recordando el idioma, nombre de usuario, etc.' 392 }, 393 analytics: { 394 type: 'Análisis', 395 value: 'analytics', 396 description: 'Cookies relacionadas con visitas al sitio, tipos de navegador, etc.' 397 }, 398 marketing: { 399 type: 'Marketing', 400 value: 'marketing', 401 description: 'Cookies relacionadas con el marketing, p. Ej. boletines, redes sociales, etc.' 402 } 403 }, 404 en: { 405 preferences: { 406 type: 'Personalization', 407 value: 'preferences', 408 description: 'These are cookies that are related to your site preferences, e.g. remembering language, username, etc.' 409 }, 410 analytics: { 411 type: 'Analysis', 412 value: 'analytics', 413 description: 'Cookies related to site visits, browser types, etc.' 414 }, 415 marketing: { 416 type: 'Marketing', 417 value: 'marketing', 418 description: 'Cookies related to marketing, e.g. newsletters, social media, etc.' 419 } 420 }, 421 fr: { 422 preferences: { 423 type: 'Personnalisation', 424 value: 'préférences', 425 description: 'Il s\'agit de cookies liés à vos préférences sur le site, par exemple, la mémorisation de la langue, du nom d\'utilisateur, etc.' 426 }, 427 analytics: { 428 type: 'Analyse', 429 value: 'analytiques', 430 description: 'Cookies liés aux visites sur le site, aux types de navigateurs, etc.' 431 }, 432 marketing: { 433 type: 'Marketing', 434 value: 'marketing', 435 description: 'Cookies liés au marketing, par exemple, newsletters, réseaux sociaux, etc.' 436 } 437 } 438} 439 440function cookiesActivate(activarConsent = true) { 441 var shouldApplyConsent = false;
442 if ($.fn.ihavecookies.preference('preferences') === true) { 443 var date = new Date(new Date().setFullYear(new Date().getFullYear() + 1)); 444 document.cookie = "lang=" + lang + "; expires=" + date.toGMTString() + "; path=/"; 445 cookiesPersonalization(); 446 shouldApplyConsent = true; 447 } 448 if ($.fn.ihavecookies.preference('analytics') === true && typeof cookiesAnalytics === "function") { 449 cookiesAnalytics(); 450 shouldApplyConsent = true; 451 } 452 if ($.fn.ihavecookies.preference('marketing') === true && typeof cookiesMarketing === "function") { 453 cookiesMarketing(); 454 shouldApplyConsent = true; 455 } 456 457 if (activarConsent || shouldApplyConsent) { 458 applyConsent(); 459 } 460 461 462} 463function reInitCookies() { 464 465 updateConsent('ad_user_data', 'denied'); 466 updateConsent('ad_personalization', 'denied'); 467 updateConsent('ad_storage', 'denied'); 468 updateConsent('analytics_storage', 'denied'); 469 470 471 472 473 474} 475 476function deleteCookies(names) { 477 478 // Obté totes les cookies de la plana 479 var allCookies = document.cookie.split(';'); 480 for (var i = 0; i < allCookies.length; i++) { 481 var cookie = allCookies[i]; 482 var cookieName = cookie.split('=')[0].trim(); 483 484 // Esborrar les cookies menys la passada 485 if (names.some(function (name) { return cookieName.indexOf(name) === -1; }) && cookieName != "PHPSESSID") { 486 487 // Establecer la cookie para que expire inmediatamente 488 document.cookie = cookieName + '=; max-age=0; expires=-1; path=/;'; 489 document.cookie = cookieName + '=; max-age=0; expires=-1; path=/;domain=' + getDomainName(window.location.hostname); 490 document.cookie = cookieName + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=localhost'; 491 } 492 } 493} 494 495function getDomainName(hostName) { 496 return '.' + hostName.substring(hostName.lastIndexOf(".", hostName.lastIndexOf(".") - 1) + 1); 497} 498 499 500var options = Object.assign(cookiesLangs[lang], { 501 cookieTypes: [ 502 cookiesTypes[lang]['preferences'] 503 ], 504 delay: 300, 505 expires: 90, 506 onAccept: function () { 507 cookiesActivate(true); 508 }, 509 uncheckBoxes: true, 510}); 511 512if (typeof cookiesAnalytics === "function") { 513 options.cookieTypes.push(cookiesTypes[lang]['analytics']); 514} 515if (typeof cookiesMarketing === "function") { 516 options.cookieTypes.push(cookiesTypes[lang]['marketing']); 517 options = Object.assign(options, cookiesLangsMarketing[lang]); 518} 519options.message = options.message.replace('cookies_link', options.link); 520$(document).ready(function () { 521 $('body').ihavecookies(options); 522 cookiesActivate(false); 523 $('.ihavecookies_change').click(function (event) { 524 event.preventDefault(); 525 $('body').ihavecookies(options, 'reinit'); 526 }); 527});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.