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 */ 10(function($) { 11 12 /* 13 |-------------------------------------------------------------------------- 14 | Cookie Message 15 |-------------------------------------------------------------------------- 16 | 17 | Displays the cookie message on first visit or 30 days after their 18 | last visit. 19 | 20 | @param event - 'reinit' to reopen the cookie message 21 | 22 */ 23 $.fn.ihavecookies = function(options, event) { 24 25 var $element = $(this); 26 27 // Set defaults 28 var settings = $.extend({ 29 cookieTypes: [ 30 /*{ 31 type: 'Preferenzas del sitio', 32 value: 'preferences', 33 description: 'Estas son cookies que están relacionadas coas preferenzas do sitio.' 34 },*/ 35 { 36 type: 'Analíticas', 37 value: 'analytics', 38 description: 'Cookies related to site visits, browser types, etc.' 39 }, 40 /*{ 41 type: 'Marketing', 42 value: 'marketing', 43 description: 'Cookies related to marketing, e.g. newsletters, social media, etc' 44 }*/ 45 ], 46 title: 'Cookies & Privacy', 47 message: 'Nesta web gardamos datos pesoais con cookies propias e de terceiros, para xestionar o funcionamento e a seguridade da páxina, e con fins analíticos. Pode configurar a suas preferencias premendo no botón "Axustar preferencias". Se desexa obter mais información pode consultar a nosa ', 48 link: '/privacy-policy', 49 delay: 2000, 50 expires: 30, 51 moreInfoLabel: 'Política de cookies', 52 editPreferences: 'Xestionar preferencias das cookies', 53 acceptBtnLabel: 'Acepto cookies', 54 acceptBtnLabelNecessary: 'Rexeitar', 55 advancedBtnLabel: 'Configuración de cookies', 56 cookieTypesTitle: 'Seleccionar cookies para aceptar', 57 fixedCookieTypeLabel:'Necesaria', 58 fixedCookieTypeDesc: 'Son cookies imprescindibles para que o sitio web funcione correctamente.', 59 onAccept: function(){}, 60 uncheckBoxes: false 61 }, options); 62 63 var myCookie = getCookie('cookieControl'); 64 var myCookiePrefs = getCookie('cookieControlPrefs'); 65 if (!myCookie || !myCookiePrefs || event == 'reinit') { 66 // Remove all instances of the cookie message so it's not duplicated 67 $('#gdpr-cookie-message').remove(); 68 69 // Set the 'necessary' cookie type checkbox which can not be unchecked 70 var cookieTypes = '<li><input type="checkbox" name="gdpr[]" id="necessary-cookies" value="necessary" checked="checked" disabled="disabled"> <label title="' + settings.fixedCookieTypeDesc + '">' + settings.fixedCookieTypeLabel + '</label></li>'; 71 72 // Generate list of cookie type checkboxes 73 preferences = JSON.parse(myCookiePrefs); 74 $.each(settings.cookieTypes, function(index, field) { 75 if (field.type !== '' && field.value !== '') { 76 var cookieTypeDescription = ''; 77 if (field.description !== false) { 78 cookieTypeDescription = ' title="' + field.description + '"'; 79 } 80 cookieTypes += '<li><input type="checkbox" checked="checked" id="gdpr-cookietype-' + field.value + '" name="gdpr[]" value="' + field.value + '" data-auto="on"> <label for="gdpr-cookietype-' + field.value + '"' + cookieTypeDescription + '>' + field.type + '</label></li>'; 81 } 82 }); 83 84 // Display cookie message on page 85 var cookieMessage = '<div id="gdpr-cookie-message"><h4>' + settings.title + '</h4><p>' + settings.message + ' <div id="gdpr-cookie-types" style="display:none;"><h5>' + settings.cookieTypesTitle + '</h5><ul>' + cookieTypes + '</ul></div><p><button id="gdpr-cookie-accept-necessary" type="button">' + settings.acceptBtnLabelNecessary + '</button><button id="gdpr-cookie-accept" type="button">' + settings.acceptBtnLabel + '</button><button id="gdpr-cookie-advanced" type="button">' + settings.advancedBtnLabel + '</button></p></div>'; 86 87 //econdo la gestión de preferencias 88 $("#capa-gestionar-preferencias").hide(); 89 90 setTimeout(function(){ 91 $($element).append(cookieMessage); 92 $('#gdpr-cookie-message').hide().fadeIn('slow', function(){ 93 // If reinit'ing, open the advanced section of message 94 // and re-check all previously selected options. 95 if (event == 'reinit') { 96 $('#gdpr-cookie-advanced').trigger('click'); 97 $.each(preferences, function(index, field) { 98 $('input#gdpr-cookietype-' + field).prop('checked', true); 99 }); 100 } 101 }); 102 }, settings.delay); 103 104 // When accept button is clicked drop cookie 105 $('body').on('click','#gdpr-cookie-accept', function(){ 106 // Set cookie 107 dropCookie(true, settings.expires); 108 109 //marco todas para aceptarlas 110 $('input[name="gdpr[]"]').prop('checked', true); 111 112 // Save users cookie preferences (in a cookie!) 113 var prefs = []; 114 $.each($('input[name="gdpr[]"]').serializeArray(), function(i, field){ 115 prefs.push(field.value); 116 });
117 setCookie('cookieControlPrefs', encodeURIComponent(JSON.stringify(prefs)), 365); 118 119 // Run callback function 120 settings.onAccept.call(this); 121 122 //recargo al aceptar para que no se pierda la estadística 123 location.reload(); 124 }); 125 126 // Solo aceptar necesarias 127 $('body').on('click','#gdpr-cookie-accept-necessary', function(){ 128 // Set cookie 129 dropCookie(true, settings.expires); 130 131 132 //marco solo necesarias 133 $('input[name="gdpr[]"][id="necessary-cookies"]').prop('checked', true); 134 135 // Save users cookie preferences (in a cookie!) 136 var prefs = []; 137 138 //solo el valor de las necesarias 139 prefs.push("necessary"); 140 141 setCookie('cookieControlPrefs', encodeURIComponent(JSON.stringify(prefs)), 365); 142 143 // Run callback function 144 settings.onAccept.call(this); 145 146 //recargo al aceptar para que no se pierda la estadística 147 location.reload(); 148 }); 149 // Toggle advanced cookie options 150 $('body').on('click', '#gdpr-cookie-advanced', function(){ 151 // Uncheck all checkboxes except for the disabled 'necessary' 152 // one and set 'data-auto' to OFF for all. The user can now 153 // select the cookies they want to accept. 154 $('input[name="gdpr[]"]:not(:disabled)').attr('data-auto', 'off').prop('checked', false); 155 $('#gdpr-cookie-types').slideDown('fast', function(){ 156 $('#gdpr-cookie-advanced').prop('disabled', true); 157 }); 158 }); 159 160 } else { 161 162 $('body').on('click','#ihavecookiesBtnReopen', function(){ 163 console.log("click"); 164 $('body').ihavecookies(options, 'reinit'); 165 }); 166 167 var cookieMessageEdit = '<div id="capa-gestionar-preferencias"><a href="javascript:;" id="ihavecookiesBtnReopen">'+settings.editPreferences+'</a></div>'; 168 setTimeout(function(){ 169 $($element).append(cookieMessageEdit); 170 $('#gdpr-cookie-message').hide().fadeIn('slow', function(){ 171 // If reinit'ing, open the advanced section of message 172 // and re-check all previously selected options. 173 if (event == 'reinit') { 174 $('#gdpr-cookie-advanced').trigger('click'); 175 $.each(preferences, function(index, field) { 176 $('input#gdpr-cookietype-' + field).prop('checked', true); 177 }); 178 } 179 }); 180 }, settings.delay); 181 182 var cookieVal = true; 183 if (myCookie == 'false') { 184 cookieVal = false; 185 } 186 dropCookie(cookieVal, settings.expires); 187 } 188 189 // Uncheck any checkboxes on page load 190 if (settings.uncheckBoxes === true) { 191 $('input[type="checkbox"].ihavecookies').prop('checked', true); 192 } 193 194 }; 195 196 // Method to get cookie value 197 $.fn.ihavecookies.cookie = function() { 198 var preferences = getCookie('cookieControlPrefs'); 199 return JSON.parse(preferences); 200 }; 201 202 // Method to check if user cookie preference exists 203 $.fn.ihavecookies.preference = function(cookieTypeValue) { 204 var control = getCookie('cookieControl'); 205 var preferences = getCookie('cookieControlPrefs'); 206 preferences = JSON.parse(preferences); 207 if (control === false) { 208 return false; 209 } 210 if (preferences === false || preferences.indexOf(cookieTypeValue) === -1) { 211 return false; 212 } 213 return true; 214 }; 215 216 /* 217 |-------------------------------------------------------------------------- 218 | Drop Cookie 219 |-------------------------------------------------------------------------- 220 | 221 | Function to drop the cookie with a boolean value of true. 222 | 223 */ 224 var dropCookie = function(value, expiryDays) {
225 setCookie('cookieControl', value, expiryDays); 226 $('#gdpr-cookie-message').fadeOut('fast', function() { 227 $(this).remove(); 228 }); 229 }; 230 231 /* 232 |-------------------------------------------------------------------------- 233 | Set Cookie 234 |-------------------------------------------------------------------------- 235 | 236 | Sets cookie with 'name' and value of 'value' for 'expiry_days'. 237 | 238 */ 239 var setCookie = function(name, value, expiry_days) { 240 var d = new Date(); 241 d.setTime(d.getTime() + (expiry_days*24*60*60*1000)); 242 var expires = "expires=" + d.toUTCString(); 243 document.cookie = name + "=" + value + ";" + expires + ";path=/"; 244 return getCookie(name); 245 }; 246 247 /* 248 |-------------------------------------------------------------------------- 249 | Get Cookie 250 |-------------------------------------------------------------------------- 251 | 252 | Gets cookie called 'name'. 253 | 254 */ 255 var getCookie = function(name) { 256 var cookie_name = name + "="; 257 var decodedCookie = decodeURIComponent(document.cookie); 258 var ca = decodedCookie.split(';'); 259 for (var i = 0; i < ca.length; i++) { 260 var c = ca[i]; 261 while (c.charAt(0) == ' ') { 262 c = c.substring(1); 263 } 264 if (c.indexOf(cookie_name) === 0) { 265 return c.substring(cookie_name.length, c.length); 266 } 267 } 268 return false; 269 }; 270 271}(jQuery));
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.