PluginProbe
CookieAdmin – Cookie Consent Banner / 1.2.5
CookieAdmin – Cookie Consent Banner v1.2.5
1.2.5 1.2.4 1.2.3 1.2.2 1.2.1 1.2.0 1.1.9 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
← All changes | assets/js/consent.js +49 -19 1.1.7 → 1.2.5 View file →
@@ -203,14 +203,23 @@
203 203
204 204 function cookieadmin_set_cookie(name, value, days = 365, domain = "") {
205 205 if (!name || !value) return false;
206 206
207 + if((cookieadmin_policy.is_pro != 0) && (cookieadmin_pro_vars !== 'undefined')){
208 + if(cookieadmin_pro_vars.shared_subdomain_consent && cookieadmin_pro_vars.base_domain){
209 + // Delete the cookie if exist with the subdomin
210 + // Previously, cookie was set without specifying domain name, we'll not specify domain while deleting.
211 + document.cookie = `cookieadmin_consent=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=${cookieadmin_policy.base_path};`;
212 + domain = cookieadmin_pro_vars.base_domain;
213 + }
214 + }
215 +
207 216 var date = new Date();
208 217 date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); // default 1 year
209 218
210 219 var cookieString = `${encodeURIComponent(name)}=${JSON.stringify(value)};`;
211 220 cookieString += ` expires=${date.toUTCString()};`;
212 - cookieString += ` path=${cookieadmin_policy.base_path};`;
221 + cookieString += ` path=${!domain ? cookieadmin_policy.base_path : '/'};`;
213 222 cookieString += ` SameSite=Lax;`;
214 223 if(cookieadmin_policy.is_ssl || window.location.protocol === 'https:'){
215 224 cookieString += ` Secure;`;
216 225 }
@@ -224,8 +233,13 @@
224 233 return true;
225 234 }
226 235
227 236 //Populates modal with consent if selected & adds found cookies
237 +// Only < and > are escaped: stored values pass sanitize_text_field, which can keep entities like &lt; that must still render
238 +function cookieadmin_esc(str){
239 + return String(str).replace(/</g, '&lt;').replace(/>/g, '&gt;');
240 +}
241 +
228 242 function cookieadmin_populate_preference(){
229 243
230 244 consent = cookieadmin_is_consent.action;
231 245
@@ -275,9 +289,10 @@
275 289
276 290 if(!card_container){
277 291 continue;
278 292 }
279 - card_container.innerHTML = (card_container.innerHTML == 'None') ? '' : card_container.innerHTML;
293 +
294 + card_container.querySelector(".cookieadmin-nocookie-cat").style.display = 'none';
280 295
281 296 var cookieadmin_exp = cookieadmin_policy.lang.session;
282 297
283 298 if(
@@ -295,9 +310,13 @@
295 310 }
296 311 }
297 312 }
298 313
299 - card_container.innerHTML += '<div class="cookieadmin-cookie-card"> <div class="cookieadmin-cookie-header"> <strong class="cookieadmin-cookie-name">'+ c_info.replace(/_+$/, "") +'</strong> <span class="cookieadmin-cookie-duration"><b>'+ cookieadmin_policy.lang.duration +':</b> '+ cookieadmin_exp +'</span> </div> <p class="cookieadmin-cookie-description">'+ cookieadmin_allcookies[c_info].description +'</p> <div class="cookieadmin-cookie-tags"> ' + (cookieadmin_allcookies[c_info].platform ? '<span class="cookieadmin-tag">' + cookieadmin_allcookies[c_info].platform + '</span>' : "") + ' </div> </div>';
314 + var cookieadmin_desc = cookieadmin_allcookies[c_info].description;
315 + var cookieadmin_platform = cookieadmin_allcookies[c_info].platform;
316 +
317 + // Empty description/platform rows are skipped so the card has no blank gap or "null" text
318 + card_container.insertAdjacentHTML('beforeend', '<div class="cookieadmin-cookie-card"><div class="cookieadmin-cookie-header"><strong class="cookieadmin-cookie-name">'+ cookieadmin_esc(c_info.replace(/_+$/, "")) +'</strong> <span class="cookieadmin-cookie-duration"><b>'+ cookieadmin_policy.lang.duration +':</b> '+ cookieadmin_exp +'</span></div>' + (cookieadmin_desc ? '<p class="cookieadmin-cookie-description">'+ cookieadmin_esc(cookieadmin_desc) +'</p>' : '') + (cookieadmin_platform ? '<div class="cookieadmin-cookie-tags"><span class="cookieadmin-tag">' + cookieadmin_esc(cookieadmin_platform) + '</span></div>' : '') + '</div>');
300 319 cookieadmin_shown.push(c_info);
301 320 }
302 321 }
303 322
@@ -475,11 +494,8 @@
475 494 /*if(cookieadmin_policy.layout == "footer"){
476 495
477 496 }*/
478 497
479 - if(cookieadmin_policy.cookieadmin_modal == "side"){
480 - document.getElementsByClassName("cookieadmin_modal_footer")[0].style.flexDirection = "column";
481 - }
482 498
483 499 // Remove modal close Button
484 500 if(cookieadmin_policy.cookieadmin_layout == "popup"){
485 501 document.getElementsByClassName("cookieadmin_close_pref")[0].style.display = "none";
@@ -484,8 +500,19 @@
484 500 if(cookieadmin_policy.cookieadmin_layout == "popup"){
485 501 document.getElementsByClassName("cookieadmin_close_pref")[0].style.display = "none";
486 502 }
487 503
504 + var cookieadmin_modal_opener = null;
505 +
506 + // Focus goes back to the reconsent/Customize button that opened the modal.
507 + // focus() on a hidden opener is a no-op, which is fine.
508 + function cookieadmin_return_focus(){
509 + if(cookieadmin_modal_opener){
510 + cookieadmin_modal_opener.focus();
511 + cookieadmin_modal_opener = null;
512 + }
513 + }
514 +
488 515 //show preference modal
489 516 cookieadmin_show_modal_elemnts = document.querySelectorAll(".cookieadmin_re_consent, .cookieadmin_customize_btn");
490 517 cookieadmin_show_modal_elemnts.forEach(function(e){
491 518
@@ -513,13 +540,10 @@
513 540 if(cookieadmin_policy["cookieadmin_modal"] == "side"){
514 541 document.getElementsByClassName("cookieadmin_cookie_modal")[0].style.display = "grid";
515 542 }
516 543
517 - if(e.target.className == "cookieadmin_re_consent"){
518 - document.getElementsByClassName("cookieadmin_close_pref")[0].id = "cookieadmin_re_consent";
519 - }else{
520 - document.getElementsByClassName("cookieadmin_close_pref")[0].id = "cookieadmin_law_container";
521 - }
544 + // Remember what opened the modal so focus can go back to it on close
545 + cookieadmin_modal_opener = e.currentTarget;
522 546 });
523 547 });
524 548
525 549 //Save preference
@@ -564,8 +588,9 @@
564 588 return;
565 589 }
566 590
567 591 cookieadmin_toggle_overlay();
592 + cookieadmin_return_focus();
568 593
569 594 cookieadmin_set_consent(prefer, days);
570 595 });
571 596
@@ -590,29 +615,28 @@
590 615 }
591 616
592 617 if(e.id.includes("modal")){
593 618 cookieadmin_toggle_overlay();
619 + cookieadmin_return_focus();
594 620 }
595 621
596 622 var prefer2 = e.classList.contains("cookieadmin_reject_btn") ? {reject: "true"} : {accept: "true"};
597 -
623 +
598 624 cookieadmin_set_consent(prefer2, days);
599 625 });
600 626 });
601 627
602 - document.querySelectorAll(".cookieadmin_show_pref_cookies").forEach(function(e){
628 + document.querySelectorAll(".cookieadmin_header .cookieadmin_show_pref_cookies").forEach(function(e){
603 629 e.addEventListener("click", function(el){
604 630
605 - var tgt = el.target.id;
631 + var tgt = el.currentTarget.id;
606 632 tgt = tgt.replace(/-container$/, "");
607 633
608 - if(el.target.classList.contains("dwn")){
609 - el.target.innerHTML = "&#9658;";
610 - el.target.classList.remove("dwn");
634 + if(el.currentTarget.classList.contains("dwn")){
635 + el.currentTarget.classList.remove("dwn");
611 636 document.querySelector("."+tgt).style.display = "none";
612 637 }else{
613 - el.target.innerHTML = "&#9660;";
614 - el.target.classList.add("dwn");
638 + el.currentTarget.classList.add("dwn");
615 639 document.querySelector("."+tgt).style.display = "block";
616 640 }
617 641 });
618 642 });
@@ -630,8 +654,10 @@
630 654 if(cookieadmin_re_consent){
631 655 cookieadmin_re_consent.style.display = "block";
632 656 }
633 657 }
658 +
659 + cookieadmin_return_focus();
634 660 });
635 661
636 662 });
637 663
@@ -663,8 +689,12 @@
663 689 cookieadmin_set_cookie('cookieadmin_consent', cookieadmin_consent, days);
664 690
665 691 if (typeof cookieadmin_update_gcm === "function") {
666 692 cookieadmin_update_gcm(1);
693 + }
694 +
695 + if (typeof cookieadmin_pro_update_clarity_cookie === "function") {
696 + cookieadmin_pro_update_clarity_cookie();
667 697 }
668 698
669 699 if(!!cookieadmin_policy.reload_on_consent){
670 700 location.reload();