1(function() { 2 3 "use strict"; 4 5 var opts; 6 7 var Cookiesck = function (options) { 8 //set default options 9 var defaults = { 10 lifetime: '' 11 ,layout: '' 12 ,reload: '' 13 }; 14 15 if (!(this instanceof Cookiesck)) return new Cookiesck(options); 16 17 opts = Object.assign(defaults, options); 18 19 initHtml(); 20 initInterface(); 21 initEvents(); 22 initIframes(); 23 } 24 25 function initHtml() { 26 // remove the banner from the page if exists 27 let banner = document.getElementById('cookiesck'); 28 if (banner) banner.remove(); 29 30 // create the banner in the page 31 banner = document.createElement('div'); 32 banner.id = 'cookiesck'; 33 banner.setAttribute('data-layout', opts.layout); 34 banner.innerHTML = createBannerHtml(); 35 document.body.appendChild(banner); 36 37 // create the overlay 38 let overlay = document.createElement('div'); 39 overlay.id = 'cookiesck_overlay'; 40 document.body.appendChild(overlay); 41 42 // create the overlay 43 let options = document.createElement('div'); 44 options.id = 'cookiesck_options'; 45 options.innerHTML = '<div class="inner">' + COOKIESCK.TEXT.OPTIONS + '</div>'; 46 document.body.appendChild(options); 47 } 48 49 function createBannerHtml() { 50 let html = '<div class="inner">' 51 + '<span id="cookiesck_text">' + COOKIESCK.TEXT.INFO + '</span>' 52 + '<span id="cookiesck_buttons">' 53 + '<a class="cookiesck_button" id="cookiesck_accept">' + COOKIESCK.TEXT.ACCEPT_ALL + '</a>' 54 + '<a class="cookiesck_button" id="cookiesck_decline">' + COOKIESCK.TEXT.DECLINE_ALL + '</a>' 55 + '<a class="cookiesck_button" id="cookiesck_settings">' + COOKIESCK.TEXT.SETTINGS + '</a>' 56 + '<div style="clear:both;"></div>' 57 + '</div>' 58 59 + '</div>'; 60 61 return html; 62 } 63 64 function initInterface() { 65 let cookie = readCookie('cookiesck'); 66 document.getElementById('cookiesck').style.display = 'none'; 67 document.getElementById('cookiesck_overlay').style.display = 'none'; 68 // cookies not set, display the bar 69 if(cookie == null) { 70 document.getElementById('cookiesck').style.display = 'block'; 71 document.getElementById('cookiesck_overlay').style.display = 'block'; 72 } 73 74 COOKIESCK.VALUE = decodeURIComponent(cookie); 75 debug('COOKIESCK.VALUE : ' + COOKIESCK.VALUE); 76 77 var cookieArray = toObject(); 78 let interfac = document.getElementById('cookiesck_interface'); 79 let platforms = interfac.querySelectorAll('.cookiesck-platform'); 80 debug('platforms :'); 81 debug(platforms); 82 platforms.forEach(function(platform) { 83 let platformName = platform.getAttribute('data-platform'); 84 let buttons = platform.querySelectorAll('.cookiesck_button'); 85 86 buttons.forEach(function(button) { 87 button.onclick = function() { 88 if (this.classList.contains('cookiesck-accept')) { 89 doAction(this, 'accept'); 90 } else { 91 doAction(this, 'decline'); 92 } 93 interfac.querySelectorAll('.cookiesck-main-buttons .cookiesck_button').forEach(function(btn) { btn.classList.remove('cookiesck-active'); }); 94 } 95 }); 96 97 // set active button 98 if (cookieArray[platformName]) { 99 if (cookieArray[platformName] == 1) { 100 platform.querySelector('.cookiesck-accept').classList.add('cookiesck-active'); 101 } else { 102 platform.querySelector('.cookiesck-decline').classList.add('cookiesck-active'); 103 } 104 } 105 }); 106 107 if (COOKIESCK.VALUE === 'yes') { 108 interfac.querySelectorAll('.cookiesck-accept').forEach(function(btn) { btn.classList.add('cookiesck-active'); }); 109 } else if (COOKIESCK.VALUE === 'no' || COOKIESCK.VALUE === 'null') { 110 interfac.querySelectorAll('.cookiesck-decline').forEach(function(btn) { btn.classList.add('cookiesck-active'); }); 111 } 112 113 // force essential to be active 114 if (interfac.querySelector('[data-category="essential"]')) { 115 interfac.querySelectorAll('[data-category="essential"] .cookiesck-accept').forEach(function(btn) { btn.classList.add('cookiesck-active'); }); 116 } 117 118 // close the interface 119 interfac.querySelector('.cookiesck-main-close').onclick = function() { 120 interfac.style.display = 'none'; 121 document.getElementById('cookiesck_options').style.display = 'block'; 122 document.getElementById('cookiesck_overlay').style.display = 'none'; 123 } 124 } 125 126 function initEvents() { 127 let acceptButtons = document.querySelectorAll('#cookiesck_accept,.cookiesck-main-buttons .cookiesck-accept'); 128 acceptButtons.forEach(function(acceptButton) { 129 acceptButton.onclick = function() { 130 debug('acceptButton.onclick'); 131 if (this.classList.contains('cookiesck-accept')) { acceptAll(); }
132 setCookie("cookiesck","yes",'.$lifetime.'); 133 doAjax(location.href, 'set_cookieck=1'); 134 document.getElementById('cookiesck').classList.add('cookiesck-hide'); 135 document.getElementById('cookiesck').style.display = 'none'; 136 document.getElementById('cookiesck_options').style.display = 'block'; 137 document.getElementById('cookiesck_overlay').style.display = 'none'; 138 loadIframes(); 139 if (opts.reload === '1') location.reload(); 140 } 141 }); 142 let declineButtons = document.querySelectorAll('#cookiesck_decline, .cookiesck-main-buttons .cookiesck-decline'); 143 declineButtons.forEach(function(declineButton) { 144 declineButton.onclick = function() { 145 debug('declineButton.onclick'); 146 if (this.classList.contains('cookiesck-decline')) { declineAll(); } 147 setCookie("cookiesck","no",'.$lifetime.'); 148 doAjax(location.href, 'set_cookieck=0'); 149 document.getElementById('cookiesck').classList.add('cookiesck-hide'); 150 document.getElementById('cookiesck').style.display = 'none'; 151 document.getElementById('cookiesck_options').style.display = 'block'; 152 document.getElementById('cookiesck_overlay').style.display = 'none'; 153 } 154 }); 155 document.getElementById('cookiesck_settings').onclick = function(){ 156 document.getElementById('cookiesck_interface').style.display = 'block'; 157 document.getElementById('cookiesck').style.display = 'none'; 158 } 159 // add management button to update the decision 160 document.getElementById('cookiesck_options').onclick = function(){ 161 document.getElementById('cookiesck_interface').style.display = 'block'; 162 document.getElementById('cookiesck_overlay').style.display = 'block'; 163 } 164 } 165 166 function initIframes() { 167 let iframes = document.querySelectorAll('.cookiesck-iframe-wrap'); 168 debug('iframes : '); 169 debug(iframes); 170 iframes.forEach(function(iframe) { 171 iframe.onclick = function() { 172 if (! confirm(COOKIESCK.TEXT.CONFIRM_IFRAMES)) return; 173 this.outerHTML = this.outerHTML.replace('data-cookiesck-src', 'src'); 174 loadIframes(); 175 setCookie('cookiesckiframes', '1', COOKIESCK.LIFETIME); 176 } 177 }); 178 } 179 180 function setCookie(c_name,value,exdays) { 181 debug('setCookie : {name : ' + c_name + ', value : ' + value + ', exdays : ' + exdays); 182 var exdate=new Date(); 183 exdate.setDate(exdate.getDate() + exdays); 184 var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString()) + "; path=/"; 185 document.cookie=c_name + "=" + c_value; 186 } 187 188 function readCookie(name) { 189 debug('readCookie : ' + name); 190 var nameEQ = name + "="; 191 var cooks = document.cookie.split(';'); 192 for(var i=0;i < cooks.length;i++) { 193 var c = cooks[i]; 194 while (c.charAt(0)==' ') c = c.substring(1,c.length); 195 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 196 } 197 return null; 198 } 199 200 function removeCookie(name) { 201 debug('removeCookie : ' + name); 202 let cookie = name + "=; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/"; 203 document.cookie = cookie; 204 } 205 206 function toObject() { 207 let list = new Object(); 208 let rows = COOKIESCK.VALUE.split('|ck|'); 209 for (var i=0; i < rows.length; i++) { 210 let cols = rows[i].split('|val|'); 211 list[cols[0]] = cols[1]; 212 } 213 return list; 214 } 215 216 function doAction(btn, action) { 217 btn.parentNode.querySelectorAll('.cookiesck_button').forEach(function(button) { 218 button.classList.remove('cookiesck-active'); 219 }); 220 btn.classList.add('cookiesck-active'); 221 updateCookieValue(); 222 if (opts.reload === '1') location.reload(); 223 } 224 225 function updateCookieValue() { 226 debug('updateCookieValue'); 227 let interfac = document.getElementById('cookiesck_interface'); 228 let list = new Array(); 229 let platforms = interfac.querySelectorAll('.cookiesck-platform'); 230 platforms.forEach(function(platform) { 231 let selection = platform.querySelector('.cookiesck_button.cookiesck-active'); 232 let name = platform.getAttribute('data-platform'); 233 if (selection && selection.classList.contains('cookiesck-accept')) { 234 list.push(name + '|val|1'); 235 // trigger event 236 let event = new CustomEvent('cookieckstate', { "detail": {"name": name, "state": "1"} }); 237 document.dispatchEvent(event); 238 debug('cookieckstate : {name : ' + name + ', state : 1'); 239 } else { 240 list.push(name + '|val|0'); 241 // trigger event 242 let event = new CustomEvent('cookieckstate', { "detail": {"name": name, "state": "0"} }); 243 document.dispatchEvent(event); 244 debug('cookieckstate : {name : ' + name + ', state : 0'); 245 } 246 }); 247 COOKIESCK.VALUE = list.join('|ck|'); 248 setCookie('cookiesck', COOKIESCK.VALUE, opts.lifetime); 249 } 250 251 function acceptAll() { 252 let interfac = document.getElementById('cookiesck_interface'); 253 interfac.querySelectorAll('.cookiesck-active').forEach(function(btn
253) { btn.classList.remove('cookiesck-active'); }); 254 interfac.querySelectorAll('.cookiesck-accept').forEach(function(btn) { btn.classList.add('cookiesck-active'); }); 255 loadIframes(); 256 // trigger event 257 let event = new CustomEvent('cookieckstate', { "detail": {"name": "all", "state": "1"} }); 258 document.dispatchEvent(event); 259 } 260 261 function declineAll() { 262 let interfac = document.getElementById('cookiesck_interface'); 263 interfac.querySelectorAll('.cookiesck-active').forEach(function(btn) { btn.classList.remove('cookiesck-active'); }); 264 interfac.querySelectorAll('.cookiesck-decline').forEach(function(btn) { btn.classList.add('cookiesck-active'); }); 265 // force essential to be active 266 if (interfac.querySelector('[data-category="essential"]')) { 267 interfac.querySelectorAll('[data-category="essential"] .cookiesck-accept').forEach(function(btn) { btn.classList.add('cookiesck-active'); }); 268 } 269 // trigger event 270 let event = new CustomEvent('cookieckstate', { "detail": {"name": "all", "state": "0"} }); 271 document.dispatchEvent(event); 272 } 273 274 function loadIframes() { 275 let iframes = document.querySelectorAll('.cookiesck-iframe-wrap'); 276 iframes.forEach(function(iframetoenable) { 277 iframetoenable.closest('.cookiesck-iframe-wrap').className = 'cookiesck-iframe-wrap-allowed'; 278 iframetoenable.outerHTML = iframetoenable.outerHTML.replace('data-cookiesck-src', 'src'); 279 }); 280 } 281 282 function doAjax(url, vars) { 283 // ancien code de compatibilité, aujourdâhui inutile 284 if (window.XMLHttpRequest) { // Mozilla, Safari, IE7+... 285 var httpRequest = new XMLHttpRequest(); 286 } 287 else if (window.ActiveXObject) { // IE 6 et antérieurs 288 var httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 289 } 290 httpRequest.onreadystatechange = function() { 291 // instructions de traitement de la réponse 292 }; 293 httpRequest.open('POST', url, true); 294 httpRequest.send(vars); 295 } 296 297 function debug(str) { 298 if (COOKIESCK.DEBUG === '1') { 299 console.log(str); 300 } 301 } 302 303 window.Cookiesck = Cookiesck; 304 window.ckInitCookiesckIframes = initIframes; 305})(); 306 307// initialize the setter and getter for the cookies 308if (! document.__defineGetter__) { 309 Object.defineProperty(document, 'cookie',{ 310 get: function g(){ return ''; }, 311 set: function h(){ return true;} 312 }); 313} else { 314 var oldSetter = document.__lookupSetter__('cookie'); 315 var oldGetter = document.__lookupGetter__('cookie'); 316 if (oldSetter) { 317 Object.defineProperty(document, 'cookie', { 318 get: function g(){ return oldGetter.call(document); }, 319 set: function h(v){ 320 let name = v.split('=')[0]; 321 322 if(v.match(/cookiesck\=/) || COOKIESCK.VALUE === 'yes' || COOKIESCK.ALLOWED.indexOf(name) != -1 || ckCookiesSearchNameIn(name, COOKIESCK.ALLOWED)) { 323 oldSetter.call(document, v); 324 if (COOKIESCK.DEBUG === '1') { 325 console.log('set cookie :'); 326 console.log(name); 327 } 328 } else { 329 let cookie = name + "=; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/;"; 330 oldSetter.call(document, cookie); 331 if (COOKIESCK.DEBUG === '1') { 332 console.log('set cookie blocked for :'); 333 console.log(name); 334 } 335 } 336 return true; 337 } 338 }); 339 } 340} 341 342function ckCookiesSearchNameIn(name, list) { 343 for (var i=0; i<list.length; i++) { 344 if (name.substr(0, list[i].length) == list[i]) return true; 345 } 346 return false; 347} 348 349// example of how to get the event 350//document.addEventListener("cookieckstate", function(e) { 351// console.log(e.detail) 352// console.log(e.detail.name); 353// console.log(e.detail.state); 354//});
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.