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: 'Preferencias del sitio', 32 value: 'preferences', 33 description: 'Estas son cookies que están relacionadas con las preferencias de su sitio, colores del 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: 'En esta web recabamos datos personales con cookies propias y de terceros, para gestionar el funcionamiento y la seguridad de la página, y con fines analíticos. Puede configurar sus preferencias a través del botón de Ajustar preferencias. Si desea obtener más información puede consultar nuestra ', 48 link: '/privacy-policy', 49 delay: 2000, 50 expires: 30, 51 moreInfoLabel: 'Política de cookies', 52 editPreferences: 'Gestionar preferencias de las cookies', 53 acceptBtnLabel: 'Acepto cookies', 54 acceptBtnLabelNecessary: 'Rechazar', 55 advancedBtnLabel: 'Ajustar preferencias', 56 cookieTypesTitle: 'Seleccionar cookies para aceptar', 57 fixedCookieTypeLabel:'Necesaria', 58 fixedCookieTypeDesc: 'Son cookies imprescindibles para que el 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[]" value="necessary" checked="checked" id="necessary-cookies" 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 // If 'data-auto' is set to ON, tick all checkboxes because 110 // the user hasn't clicked the customise cookies button 111 $('input[name="gdpr[]"]').prop('checked', true); 112 113 // Save users cookie preferences (in a cookie!) 114 var prefs = []; 115 $.each($('input[name="gdpr[]"]').serializeArray(), function(i, field){ 116 prefs.push(field.value); 117 });
118 setCookie('cookieControlPrefs', encodeURIComponent(JSON.stringify(prefs)), 365); 119 120 // Run callback function 121 settings.onAccept.call(this); 122 123 //recargo al aceptar para que no se pierda la estadística 124 location.reload(); 125 }); 126 127 // Solo aceptar necesarias 128 $('body').on('click','#gdpr-cookie-accept-necessary', function(){ 129 // Set cookie 130 dropCookie(true, settings.expires); 131 132 133 //marco solo necesarias 134 $('input[name="gdpr[]"][id="necessary-cookies"]').prop('checked', true); 135 136 // Save users cookie preferences (in a cookie!) 137 var prefs = []; 138 139 //solo el valor de las necesarias 140 prefs.push("necessary"); 141 142 setCookie('cookieControlPrefs', encodeURIComponent(JSON.stringify(prefs)), 365); 143 144 // Run callback function 145 settings.onAccept.call(this); 146 147 //recargo al aceptar para que no se pierda la estadística 148 location.reload(); 149 }); 150 151 152 153 // Toggle advanced cookie options 154 $('body').on('click', '#gdpr-cookie-advanced', function(){ 155 // Uncheck all checkboxes except for the disabled 'necessary' 156 // one and set 'data-auto' to OFF for all. The user can now 157 // select the cookies they want to accept. 158 $('input[name="gdpr[]"]:not(:disabled)').attr('data-auto', 'off').prop('checked', false); 159 $('#gdpr-cookie-types').slideDown('fast', function(){ 160 $('#gdpr-cookie-advanced').prop('disabled', true); 161 }); 162 }); 163 164 } else { 165 166 $('body').on('click','#ihavecookiesBtnReopen', function(){ 167 console.log("click"); 168 $('body').ihavecookies(options, 'reinit'); 169 }); 170 171 var cookieMessageEdit = '<div id="capa-gestionar-preferencias"><a href="javascript:;" id="ihavecookiesBtnReopen">'+settings.editPreferences+'</a></div>'; 172 setTimeout(function(){ 173 $($element).append(cookieMessageEdit); 174 $('#gdpr-cookie-message').hide().fadeIn('slow', function(){ 175 // If reinit'ing, open the advanced section of message 176 // and re-check all previously selected options. 177 if (event == 'reinit') { 178 $('#gdpr-cookie-advanced').trigger('click'); 179 $.each(preferences, function(index, field) { 180 $('input#gdpr-cookietype-' + field).prop('checked', true); 181 }); 182 } 183 }); 184 }, settings.delay); 185 186 var cookieVal = true; 187 if (myCookie == 'false') { 188 cookieVal = false; 189 } 190 dropCookie(cookieVal, settings.expires); 191 } 192 193 // Uncheck any checkboxes on page load 194 if (settings.uncheckBoxes === true) { 195 $('input[type="checkbox"].ihavecookies').prop('checked', true); 196 } 197 198 }; 199 200 // Method to get cookie value 201 $.fn.ihavecookies.cookie = function() { 202 var preferences = getCookie('cookieControlPrefs'); 203 return JSON.parse(preferences); 204 }; 205 206 // Method to check if user cookie preference exists 207 $.fn.ihavecookies.preference = function(cookieTypeValue) { 208 var control = getCookie('cookieControl'); 209 var preferences = getCookie('cookieControlPrefs'); 210 preferences = JSON.parse(preferences); 211 if (control === false) { 212 return false; 213 } 214 if (preferences === false || preferences.indexOf(cookieTypeValue) === -1) { 215 return false; 216 } 217 return true; 218 }; 219 220 /* 221 |-------------------------------------------------------------------------- 222 | Drop Cookie 223 |-------------------------------------------------------------------------- 224 | 225 | Function to drop the cookie with a boolean value of true. 226 | 227 */ 228 var dropCookie = function(value, expiryDays) {
229 setCookie('cookieControl', value, expiryDays); 230 $('#gdpr-cookie-message').fadeOut('fast', function() { 231 $(this).remove(); 232 }); 233 }; 234 235 /* 236 |-------------------------------------------------------------------------- 237 | Set Cookie 238 |-------------------------------------------------------------------------- 239 | 240 | Sets cookie with 'name' and value of 'value' for 'expiry_days'. 241 | 242 */ 243 var setCookie = function(name, value, expiry_days) { 244 var d = new Date(); 245 d.setTime(d.getTime() + (expiry_days*24*60*60*1000)); 246 var expires = "expires=" + d.toUTCString(); 247 document.cookie = name + "=" + value + ";" + expires + ";path=/"; 248 return getCookie(name); 249 }; 250 251 /* 252 |-------------------------------------------------------------------------- 253 | Get Cookie 254 |-------------------------------------------------------------------------- 255 | 256 | Gets cookie called 'name'. 257 | 258 */ 259 var getCookie = function(name) { 260 var cookie_name = name + "="; 261 var decodedCookie = decodeURIComponent(document.cookie); 262 var ca = decodedCookie.split(';'); 263 for (var i = 0; i < ca.length; i++) { 264 var c = ca[i]; 265 while (c.charAt(0) == ' ') { 266 c = c.substring(1); 267 } 268 if (c.indexOf(cookie_name) === 0) { 269 return c.substring(cookie_name.length, c.length); 270 } 271 } 272 return false; 273 }; 274 275}(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.