Plugin Directory

Changeset 3417494


Ignore:
Timestamp:
12/11/2025 02:54:18 PM (7 weeks ago)
Author:
gripgrip
Message:

Committing 1.1.2

Location:
wpconsent-cookies-banner-privacy-suite/trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • wpconsent-cookies-banner-privacy-suite/trunk/build/frontend.asset.php

    r3399711 r3417494  
    1 <?php return array('dependencies' => array(), 'version' => '8f8c3a8d0fd6d1309dae');
     1<?php return array('dependencies' => array(), 'version' => '7c914cea7e8bb8e2ae45');
  • wpconsent-cookies-banner-privacy-suite/trunk/build/frontend.js

    r3399711 r3417494  
    1 (()=>{var e={799:()=>{window.WPConsent={displayChecks:[],checksPassed:!0,settingsHooks:[],settingsProcessed:!1,registerDisplayCheck:function(e){this.displayChecks.push(e),this.checksPassed=!1},registerSettingsHook:function(e){this.settingsHooks.push(e),this.settingsProcessed=!1},runDisplayChecks:function(){return 0===this.displayChecks.length?(this.checksPassed=!0,Promise.resolve()):Promise.all(this.displayChecks.map((e=>e()))).then((()=>(this.checksPassed=!0,Promise.resolve()))).catch((e=>(console.error("Error in WPConsent display check:",e),this.checksPassed=!0,Promise.resolve())))},runSettingsHooks:function(){return 0===this.settingsHooks.length?(this.settingsProcessed=!0,Promise.resolve()):Promise.all(this.settingsHooks.map((e=>e(window.wpconsent)))).then((()=>(this.settingsProcessed=!0,Promise.resolve()))).catch((e=>(console.error("Error in WPConsent settings hook:",e),this.settingsProcessed=!0,Promise.resolve())))},hooks:{beforeShowPreferences:[],afterShowPreferences:[],beforeHideBanner:[],afterHideBanner:[],beforeShowBanner:[],afterShowBanner:[],accordionToggled:[]},addHook:function(e,t){this.hooks[e]&&this.hooks[e].push(t)},runHooks:function(e,...t){this.hooks[e]&&this.hooks[e].length>0&&this.hooks[e].forEach((n=>{try{n(...t)}catch(t){console.error(`Error in WPConsent hook ${e}:`,t)}}))},acceptAll:function(){const e={};Array.isArray(wpconsent.slugs)&&wpconsent.slugs.forEach((t=>{e[t]=!0})),this.savePreferences(e),this.closePreferences()},checkGPC:function(){if(!wpconsent.respect_gpc||!0!==navigator.globalPrivacyControl)return;const e=this.getCookie("wpconsent_preferences");let t={};if(e)try{t=JSON.parse(e)}catch(e){console.error("WPConsent: Error parsing existing preferences:",e)}if(t.hasOwnProperty("respect_gpc"))return;const n={};wpconsent.slugs.forEach((e=>{const t=this.shadowRoot?.querySelector(`#wpconsent-preferences-modal input[type="checkbox"][id="cookie-service-${e}"]`);t&&t.disabled?n[e]=!0:n[e]=!1})),n.essential=!0,n.respect_gpc=!0,this.savePreferences(n,!0),this.checksPassed=!1},savePreferences:function(e,t=!1){const n=this.getCookie("wpconsent_preferences");let o=!1,s=null;if(n)try{s=JSON.parse(n)}catch(e){console.error("WPConsent: Error parsing existing preferences:",e)}(s&&JSON.stringify(s)!==JSON.stringify(e)||wpconsent.default_allow&&Object.values(e).some((e=>!1===e)))&&(this.clearCookies(),o=!0),wpconsent.respect_gpc&&!t&&s&&s.hasOwnProperty("respect_gpc")&&(e.respect_gpc=!1),this.setCookie("wpconsent_preferences",JSON.stringify(e),wpconsent.consent_duration),this.hideBanner(),this.closePreferences(),this.unlockScripts(e),this.unlockIframes(e),this.showFloatingButtonIfEnabled(),this.updateWordPressConsent(e),window.dispatchEvent(new CustomEvent("wpconsent_consent_saved",{detail:e})),n&&window.dispatchEvent(new CustomEvent("wpconsent_consent_updated",{detail:e})),o&&(Object.defineProperty(document,"cookie",{get:function(){return""},set:function(e){}}),window.location.reload())},showPreferences:function(){const e=this.shadowRoot?.querySelector("#wpconsent-preferences-modal");if(e){e.style.display="flex",this.setupFocusTrap(e),this.runHooks("afterShowPreferences");const t=this.shadowRoot?.querySelector("#wpconsent-preferences-title");t&&setTimeout((()=>{t.focus({preventScroll:!0}),this.lastFocusedElement=t}),100);const n=this.getCookie("wpconsent_preferences");if(n)try{const e=JSON.parse(n);this.shadowRoot.querySelectorAll('#wpconsent-preferences-modal input[type="checkbox"]').forEach((t=>{let n=null;n=t.id.startsWith("cookie-category-")?t.id.replace("cookie-category-",""):t.id.startsWith("cookie-service-")?t.id.replace("cookie-service-",""):t.value,n&&n in e&&(t.checked=e[n])}))}catch(e){console.error("Error parsing WPConsent preferences:",e)}}},closePreferences:function(){const e=this.shadowRoot?.querySelector("#wpconsent-preferences-modal");e&&(e.style.display="none",this.removeFocusTrap(),this.previouslyFocusedElement&&(this.previouslyFocusedElement.focus({preventScroll:!0}),this.previouslyFocusedElement=null))},showBanner:function(){if(!wpconsent.enable_consent_banner)return;const e=this.shadowRoot?.querySelector("#wpconsent-banner-holder");e&&(this.runHooks("beforeShowBanner"),e.classList.add("wpconsent-banner-visible"),this.updateButtonVisibility(wpconsent),this.setupFocusTrap(e),this.runHooks("afterShowBanner"))},hideBanner:function(){const e=this.shadowRoot?.querySelector("#wpconsent-banner-holder");e&&(this.runHooks("beforeHideBanner"),e.classList.remove("wpconsent-banner-visible"),this.removeFocusTrap(),this.previouslyFocusedElement&&(this.previouslyFocusedElement.focus({preventScroll:!0}),this.previouslyFocusedElement=null),this.runHooks("afterHideBanner"))},setCookie:function(e,t,n){let o="";if(n>0){const e=new Date;e.setTime(e.getTime()+24*n*60*60*1e3),o="expires="+e.toUTCString()+";"}const s=this.getCookieDomain();document.cookie=e+"="+t+";"+o+s+"path=/"},getCookieDomain:function(){return wpconsent.enable_shared_consent&&wpconsent.cookie_domain&&""!==wpconsent.cookie_domain?"domain="+(wpconsent.cookie_domain.startsWith(".")?wpconsent.cookie_domain:"."+wpconsent.cookie_domain)+";":""},getCookie:function(e){const t=`; ${document.cookie}`.split(`; ${e}=`);if(2===t.length)return t.pop().split(";").shift()},hasConsent:function(e){const t=this.getCookie("wpconsent_preferences");if(!t)return!1;try{const n=JSON.parse(t);return"essential"===e||!0===n[e]}catch(e){return console.error("Error parsing WPConsent preferences:",e),!1}},shouldUnlockContent:function(e,t,n){return"essential"===n||(wpconsent.manual_toggle_services?!(!t||void 0===e[t])&&e[t]:!0===e[n])},unlockScripts:function(e){document.querySelectorAll('script[type="text/plain"]').forEach((t=>{const n=t.getAttribute("data-wpconsent-category"),o=t.getAttribute("data-wpconsent-name");if(this.shouldUnlockContent(e,o,n)){const e=document.createElement("script");t.getAttributeNames().forEach((n=>{"type"!==n&&e.setAttribute(n,t.getAttribute(n))}));const n=t.getAttribute("data-wpconsent-src");n?e.src=n:e.text=t.text,t.parentNode.replaceChild(e,t)}})),document.dispatchEvent(new CustomEvent("wpconsent_consent_processed",{detail:e})),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"wpconsent_consent_processed",wpconsentPreferences:e})},unlockIframes:function(e){document.querySelectorAll("iframe[data-wpconsent-src]").forEach((t=>{const n=t.getAttribute("data-wpconsent-category"),o=t.getAttribute("data-wpconsent-name");if(this.shouldUnlockContent(e,o,n)){const e=t.getAttribute("data-wpconsent-src");e&&(t.src=e),t.removeAttribute("data-wpconsent-src"),t.removeAttribute("data-wpconsent-name"),t.removeAttribute("data-wpconsent-category")}})),document.querySelectorAll(".wpconsent-iframe-placeholder").forEach((t=>{const n=t.getAttribute("data-wpconsent-category"),o=t.getAttribute("data-wpconsent-name");if(this.shouldUnlockContent(e,o,n)){const e=t.querySelector(".wpconsent-iframe-thumbnail"),n=t.querySelector(".wpconsent-iframe-overlay-content");e&&e.remove(),n&&n.remove(),t.classList.remove("wpconsent-iframe-placeholder")}}))},init:function(){this.runSettingsHooks().then((()=>{this.initWordPress(),this.updateButtonVisibility(wpconsent);const e=document.getElementById("wpconsent-container"),t=document.getElementById("wpconsent-template");if(this.shadowRoot=e.shadowRoot,this.shadowRoot)this.runDisplayChecks().then((()=>{this.processBannerDisplay()}));else{this.shadowRoot=e.attachShadow({mode:"open"});const n=t.content.cloneNode(!0);this.shadowRoot.appendChild(n),t.remove(),this.initializeEventListeners(),this.initializeAccordions(),this.initializeKeyboardHandlers(),this.runDisplayChecks().then((()=>{this.loadExternalCSS(e).then((()=>{this.processBannerDisplay()}))}))}}))},processBannerDisplay:function(){const e=this.getCookie("wpconsent_preferences");if(e){let t={};try{if(t=JSON.parse(e),wpconsent.slugs&&Array.isArray(wpconsent.slugs)&&!wpconsent.slugs.every((e=>t.hasOwnProperty(e))))return this.setCookie("wpconsent_preferences","",-1),this.checkGPC(),void(this.checksPassed&&this.showBanner());this.unlockScripts(t),this.unlockIframes(t)}catch(e){console.error("Error parsing WPConsent preferences:",e)}this.showFloatingButtonIfEnabled()}else if(this.checkGPC(),this.checksPassed&&this.showBanner(),wpconsent.default_allow||!wpconsent.enable_script_blocking){const e={};wpconsent.slugs.forEach((t=>{e[t]=!0})),this.unlockScripts(e),this.unlockIframes(e)}window.dispatchEvent(new CustomEvent("wpconsent_banner_initialized"))},loadExternalCSS:function(e){return new Promise(((t,n)=>{try{const n=`${wpconsent.css_url}?ver=${wpconsent.css_version}`;fetch(n).then((e=>e.text())).then((n=>{const o=document.createElement("style");o.textContent=n,this.shadowRoot.appendChild(o),e.style.display="block",t()})).catch((e=>{console.error("Failed to load WPConsent styles:",e),t()}))}catch(e){console.error("Failed to load WPConsent styles:",e),t()}}))},initializeEventListeners:function(){this.shadowRoot.querySelectorAll(".wpconsent-accept-all").forEach((e=>e.addEventListener("click",(()=>this.acceptAll())))),this.shadowRoot.querySelectorAll(".wpconsent-cancel-cookies").forEach((e=>e.addEventListener("click",(()=>{const e={};wpconsent.slugs.forEach((t=>{const n=this.shadowRoot.querySelector(`#wpconsent-preferences-modal input[type="checkbox"][id="cookie-service-${t}"]`);n&&n.disabled?e[t]=!0:e[t]=!1})),e.essential=!0,this.savePreferences(e)})))),this.shadowRoot.querySelector("#wpconsent-banner-close")?.addEventListener("click",(()=>this.hideBanner())),this.shadowRoot.querySelector("#wpconsent-preferences-all")?.addEventListener("click",(()=>this.showPreferences()));const e=this.shadowRoot.querySelector("#wpconsent-consent-floating");e&&e.addEventListener("click",(()=>this.showPreferences())),this.initializeCheckboxListeners(),document.addEventListener("click",(e=>{const t=e.target.closest(".wpconsent-iframe-accept-button");if(t){const e=t.getAttribute("data-category"),n=t.closest(".wpconsent-iframe-placeholder"),o=n?.getAttribute("data-wpconsent-name");if(e){let t={};try{t=JSON.parse(this.getCookie("wpconsent_preferences")||"{}")}catch(e){console.error("Failed to parse wpconsent_preferences cookie:",e)}const n={...t,essential:!0,[e]:!0};o&&(n[o]=!0),this.savePreferences(n)}}})),this.shadowRoot.querySelector(".wpconsent-preferences-header-close")?.addEventListener("click",(()=>this.closePreferences())),this.shadowRoot.querySelector(".wpconsent-save-preferences")?.addEventListener("click",(()=>{const e=this.shadowRoot.querySelectorAll('#wpconsent-preferences-modal input[type="checkbox"]'),t=Array.from(e).filter((e=>e.checked)).map((e=>e.value)),n={};wpconsent.slugs.forEach((e=>{n[e]=t.includes(e)})),n.essential=!0,this.savePreferences(n)})),this.shadowRoot.querySelector(".wpconsent-close-preferences")?.addEventListener("click",(()=>this.closePreferences())),window.addEventListener("wpconsent_consent_saved",(function(e){const t=e.detail;WPConsent.localGtag("consent","update",{ad_storage:t.marketing?"granted":"denied",analytics_storage:t.statistics?"granted":"denied",ad_user_data:t.marketing?"granted":"denied",ad_personalization:t.marketing?"granted":"denied",security_storage:"granted",functionality_storage:"granted"})})),window.addEventListener("wpconsent_consent_saved",(function(e){if("function"!=typeof window.clarity)return;const t=e.detail;window.clarity("consentv2",{ad_Storage:t.marketing?"granted":"denied",analytics_Storage:t.statistics?"granted":"denied"})}))},localGtag:function(){window.dataLayer=window.dataLayer||[],function(){dataLayer.push(arguments)}.apply(window,arguments)},initializeCheckboxListeners:function(){this.shadowRoot.querySelectorAll('#wpconsent-preferences-modal input[type="checkbox"][id^="cookie-category-"]').forEach((e=>{e.addEventListener("change",(e=>{this.handleCategoryCheckboxChange(e.target)}))})),this.shadowRoot.querySelectorAll('#wpconsent-preferences-modal input[type="checkbox"][id^="cookie-service-"]').forEach((e=>{e.addEventListener("change",(e=>{this.handleServiceCheckboxChange(e.target)}))}))},handleCategoryCheckboxChange:function(e){const t=e.id.replace("cookie-category-","");this.shadowRoot.querySelectorAll('#wpconsent-preferences-modal input[type="checkbox"][id^="cookie-service-"]').forEach((n=>{n.closest(`.wpconsent-cookie-category-${t}`)&&(n.checked=e.checked)}))},handleServiceCheckboxChange:function(e){const t=e.closest(".wpconsent-cookie-category");if(!t)return;const n=t.querySelector('input[type="checkbox"][id^="cookie-category-"]');if(!n)return;const o=t.querySelectorAll('input[type="checkbox"][id^="cookie-service-"]');let s=!1;o.forEach((e=>{e.checked&&(s=!0)})),n.checked=s},initializeAccordions(){this.shadowRoot.querySelectorAll(".wpconsent-preferences-accordion-item").forEach((e=>{const t=e.querySelector(".wpconsent-preferences-accordion-header"),n=e.querySelector(".wpconsent-preferences-accordion-content");t&&n&&t.addEventListener("click",(t=>{t.target.closest(".wpconsent-preferences-checkbox-toggle")||this.toggleAccordion(e,n)}))}))},toggleAccordion(e,t){e.classList.contains("active");const n=e.parentElement,o=e.classList.contains("wpconsent-cookie-service"),s=e.classList.contains("wpconsent-cookie-category");s?n&&n.querySelectorAll(":scope > .wpconsent-preferences-accordion-item.wpconsent-cookie-category").forEach((t=>{if(t!==e){t.classList.remove("active");const e=t.querySelector(".wpconsent-preferences-accordion-toggle");e&&e.setAttribute("aria-expanded","false"),t.querySelectorAll(".wpconsent-cookie-service").forEach((e=>{e.classList.remove("active");const t=e.querySelector(".wpconsent-preferences-accordion-toggle");t&&t.setAttribute("aria-expanded","false"),this.runHooks("accordionToggled",{accordion:e,content:e.querySelector(".wpconsent-preferences-accordion-content"),isActive:!1,isService:!0,isCategory:!1})}))}})):o&&n&&n.querySelectorAll(":scope > .wpconsent-preferences-accordion-item.wpconsent-cookie-service").forEach((t=>{if(t!==e){t.classList.remove("active");const e=t.querySelector(".wpconsent-preferences-accordion-toggle");e&&e.setAttribute("aria-expanded","false"),this.runHooks("accordionToggled",{accordion:t,content:t.querySelector(".wpconsent-preferences-accordion-content"),isActive:!1,isService:!0,isCategory:!1})}})),e.classList.toggle("active");const c=e.querySelector(".wpconsent-preferences-accordion-toggle");if(c){const t=e.classList.contains("active");c.setAttribute("aria-expanded",t?"true":"false")}const r=e.classList.contains("active");this.runHooks("accordionToggled",{accordion:e,content:t,isActive:r,isService:o,isCategory:s})},initializeKeyboardHandlers:function(){document.addEventListener("keydown",(e=>{"Tab"===e.key?this.handleTabKey(e):"Escape"===e.key&&this.handleEscapeKey(e)}))},handleEscapeKey:function(e){const t=this.shadowRoot?.querySelector("#wpconsent-preferences-modal"),n=this.shadowRoot?.querySelector("#wpconsent-banner-holder");t&&"flex"===t.style.display?this.closePreferences():n&&n.classList.contains("wpconsent-banner-visible")&&this.hideBanner()},handleTabKey:function(e){const t=this.shadowRoot?.querySelector("#wpconsent-banner-holder"),n=this.shadowRoot?.querySelector("#wpconsent-preferences-modal"),o=t&&t.classList.contains("wpconsent-banner-visible"),s=n&&"flex"===n.style.display;if(!o&&!s)return;const c=s?n:t,r=this.getFocusableElements(c);if(0===r.length)return;e.preventDefault();const i=r[0],a=r[r.length-1];let l;this.lastFocusedElement&&r.includes(this.lastFocusedElement)?l=this.lastFocusedElement:(l=i,this.lastFocusedElement=l);const d=r.indexOf(l);let h;h=e.shiftKey?d<=0?a:r[d-1]:d>=r.length-1?i:r[d+1],h.focus({preventScroll:!0}),this.lastFocusedElement=h},setupFocusTrap:function(e){this.previouslyFocusedElement=document.activeElement,this.lastFocusedElement=null},removeFocusTrap:function(){this.lastFocusedElement=null},setInitialFocus:function(e){const t=this.getFocusableElements(e);t.length>0&&setTimeout((()=>{t[0].focus({preventScroll:!0}),this.lastFocusedElement=t[0]}),100)},getFocusableElements:function(e){return Array.from(e.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')).filter((t=>{let n=t;for(;n&&n!==e;){const e=window.getComputedStyle(n);if("none"===e.display||"hidden"===e.visibility||"0"===e.opacity||n.disabled||"true"===n.getAttribute("aria-hidden"))return!1;n=n.parentElement}return!0}))},isElementInContainer:function(e,t){return!(!e||!t)&&(t.shadowRoot?t.shadowRoot.contains(e):t.contains(e))},clearCookies:function(){for(var e=document.cookie.split("; "),t=0;t<e.length;t++)for(var n=window.location.hostname.split(".");n.length>0;){var o=encodeURIComponent(e[t].split(";")[0].split("=")[0])+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; domain="+n.join(".")+" ;path=",s=location.pathname.split("/");for(document.cookie=o+"/";s.length>0;)document.cookie=o+s.join("/"),s.pop();n.shift()}},initWordPress:function(){window.wp_consent_type=wpconsent.consent_type;let e=new CustomEvent("wp_consent_type_defined");document.dispatchEvent(e)},showFloatingButtonIfEnabled:function(){if(wpconsent.enable_consent_floating){const e=this.shadowRoot?.querySelector("#wpconsent-consent-floating");e&&(e.style.display="block")}},updateButtonVisibility:function(e){this.shadowRoot&&["accept","cancel","preferences"].forEach((t=>{const n=this.shadowRoot.querySelector(`#wpconsent-${t}-all`);n&&(e[`${t}_button_enabled`]?(n.classList.remove("wpconsent-button-disabled"),n.removeAttribute("data-disabled")):(n.classList.add("wpconsent-button-disabled"),n.setAttribute("data-disabled","true")))}))},updateWordPressConsent:function(e){"function"==typeof wp_set_consent&&(wp_set_consent("functional","allow"),wp_set_consent("preferences","allow"),wp_set_consent("statistics",e.statistics?"allow":"deny"),wp_set_consent("statistics-anonymous",e.statistics?"allow":"deny"),wp_set_consent("marketing",e.marketing?"allow":"deny"))}},document.addEventListener("DOMContentLoaded",(()=>WPConsent.init()))}},t={};function n(o){var s=t[o];if(void 0!==s)return s.exports;var c=t[o]={exports:{}};return e[o](c,c.exports,n),c.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";n(799)})()})();
     1(()=>{var e={799:()=>{window.WPConsent={displayChecks:[],checksPassed:!0,settingsHooks:[],settingsProcessed:!1,registerDisplayCheck:function(e){this.displayChecks.push(e),this.checksPassed=!1},registerSettingsHook:function(e){this.settingsHooks.push(e),this.settingsProcessed=!1},runDisplayChecks:function(){return 0===this.displayChecks.length?(this.checksPassed=!0,Promise.resolve()):Promise.all(this.displayChecks.map((e=>e()))).then((()=>(this.checksPassed=!0,Promise.resolve()))).catch((e=>(console.error("Error in WPConsent display check:",e),this.checksPassed=!0,Promise.resolve())))},runSettingsHooks:function(){return 0===this.settingsHooks.length?(this.settingsProcessed=!0,Promise.resolve()):Promise.all(this.settingsHooks.map((e=>e(window.wpconsent)))).then((()=>(this.settingsProcessed=!0,Promise.resolve()))).catch((e=>(console.error("Error in WPConsent settings hook:",e),this.settingsProcessed=!0,Promise.resolve())))},hooks:{beforeShowPreferences:[],afterShowPreferences:[],beforeHideBanner:[],afterHideBanner:[],beforeShowBanner:[],afterShowBanner:[],accordionToggled:[]},addHook:function(e,t){this.hooks[e]&&this.hooks[e].push(t)},runHooks:function(e,...t){this.hooks[e]&&this.hooks[e].length>0&&this.hooks[e].forEach((n=>{try{n(...t)}catch(t){console.error(`Error in WPConsent hook ${e}:`,t)}}))},acceptAll:function(){const e={};Array.isArray(wpconsent.slugs)&&wpconsent.slugs.forEach((t=>{e[t]=!0})),this.savePreferences(e),this.closePreferences()},checkGPC:function(){if(!wpconsent.respect_gpc||!0!==navigator.globalPrivacyControl)return;const e=this.getCookie("wpconsent_preferences");let t={};if(e)try{t=JSON.parse(e)}catch(e){console.error("WPConsent: Error parsing existing preferences:",e)}if(t.hasOwnProperty("respect_gpc"))return;const n={};wpconsent.slugs.forEach((e=>{const t=this.shadowRoot?.querySelector(`#wpconsent-preferences-modal input[type="checkbox"][id="cookie-service-${e}"]`);t&&t.disabled?n[e]=!0:n[e]=!1})),n.essential=!0,n.respect_gpc=!0,this.savePreferences(n,!0),this.checksPassed=!1},savePreferences:function(e,t=!1){const n=this.getCookie("wpconsent_preferences");let o=!1,s=null;if(n)try{s=JSON.parse(n)}catch(e){console.error("WPConsent: Error parsing existing preferences:",e)}(s&&JSON.stringify(s)!==JSON.stringify(e)||wpconsent.default_allow&&Object.values(e).some((e=>!1===e)))&&(this.clearCookies(),o=!0),wpconsent.respect_gpc&&!t&&s&&s.hasOwnProperty("respect_gpc")&&(e.respect_gpc=!1),this.setCookie("wpconsent_preferences",JSON.stringify(e),wpconsent.consent_duration),this.hideBanner(),this.closePreferences(),this.unlockScripts(e),this.unlockIframes(e),this.showFloatingButtonIfEnabled(),this.updateWordPressConsent(e),window.dispatchEvent(new CustomEvent("wpconsent_consent_saved",{detail:e})),n&&window.dispatchEvent(new CustomEvent("wpconsent_consent_updated",{detail:e})),o&&(Object.defineProperty(document,"cookie",{get:function(){return""},set:function(e){}}),window.location.reload())},showPreferences:function(){const e=this.shadowRoot?.querySelector("#wpconsent-preferences-modal");if(e){e.style.display="flex",this.setupFocusTrap(e),this.runHooks("afterShowPreferences");const t=this.shadowRoot?.querySelector("#wpconsent-preferences-title");t&&setTimeout((()=>{t.focus({preventScroll:!0}),this.lastFocusedElement=t}),100);const n=this.getCookie("wpconsent_preferences");if(n)try{const e=JSON.parse(n);this.shadowRoot.querySelectorAll('#wpconsent-preferences-modal input[type="checkbox"]').forEach((t=>{let n=null;n=t.id.startsWith("cookie-category-")?t.id.replace("cookie-category-",""):t.id.startsWith("cookie-service-")?t.id.replace("cookie-service-",""):t.value,n&&n in e&&(t.checked=e[n])}))}catch(e){console.error("Error parsing WPConsent preferences:",e)}}},closePreferences:function(){const e=this.shadowRoot?.querySelector("#wpconsent-preferences-modal");e&&(e.style.display="none",this.removeFocusTrap(),this.previouslyFocusedElement&&(this.previouslyFocusedElement.focus({preventScroll:!0}),this.previouslyFocusedElement=null))},showBanner:function(){if(!wpconsent.enable_consent_banner)return;const e=this.shadowRoot?.querySelector("#wpconsent-banner-holder");e&&(this.runHooks("beforeShowBanner"),e.classList.add("wpconsent-banner-visible"),this.updateButtonVisibility(wpconsent),this.setupFocusTrap(e),this.runHooks("afterShowBanner"))},hideBanner:function(){const e=this.shadowRoot?.querySelector("#wpconsent-banner-holder");e&&(this.runHooks("beforeHideBanner"),e.classList.remove("wpconsent-banner-visible"),this.removeFocusTrap(),this.previouslyFocusedElement&&(this.previouslyFocusedElement.focus({preventScroll:!0}),this.previouslyFocusedElement=null),this.runHooks("afterHideBanner"))},setCookie:function(e,t,n){let o="";if(n>0){const e=new Date;e.setTime(e.getTime()+24*n*60*60*1e3),o="expires="+e.toUTCString()+";"}const s=this.getCookieDomain();document.cookie=e+"="+t+";"+o+s+"path=/"},getCookieDomain:function(){return wpconsent.enable_shared_consent&&wpconsent.cookie_domain&&""!==wpconsent.cookie_domain?"domain="+(wpconsent.cookie_domain.startsWith(".")?wpconsent.cookie_domain:"."+wpconsent.cookie_domain)+";":""},getCookie:function(e){const t=`; ${document.cookie}`.split(`; ${e}=`);if(2===t.length)return t.pop().split(";").shift()},hasConsent:function(e){const t=this.getCookie("wpconsent_preferences");if(!t)return!1;try{const n=JSON.parse(t);return"essential"===e||!0===n[e]}catch(e){return console.error("Error parsing WPConsent preferences:",e),!1}},shouldUnlockContent:function(e,t,n){return"essential"===n||(wpconsent.manual_toggle_services?!(!t||void 0===e[t])&&e[t]:!0===e[n])},unlockScripts:function(e){document.querySelectorAll('script[type="text/plain"]').forEach((t=>{const n=t.getAttribute("data-wpconsent-category"),o=t.getAttribute("data-wpconsent-name");if(this.shouldUnlockContent(e,o,n)){const e=document.createElement("script");t.getAttributeNames().forEach((n=>{"type"!==n&&e.setAttribute(n,t.getAttribute(n))}));const n=t.getAttribute("data-wpconsent-src");n?e.src=n:e.text=t.text,t.parentNode.replaceChild(e,t)}})),document.dispatchEvent(new CustomEvent("wpconsent_consent_processed",{detail:e})),WPConsent.localGtag("set","developer_id.dMmRkYz",!0),WPConsent.localGtag("consent","update",{ad_storage:e.marketing?"granted":"denied",analytics_storage:e.statistics?"granted":"denied",ad_user_data:e.marketing?"granted":"denied",ad_personalization:e.marketing?"granted":"denied"}),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"wpconsent_consent_processed",wpconsentPreferences:e})},unlockIframes:function(e){document.querySelectorAll("iframe[data-wpconsent-src]").forEach((t=>{const n=t.getAttribute("data-wpconsent-category"),o=t.getAttribute("data-wpconsent-name");if(this.shouldUnlockContent(e,o,n)){const e=t.getAttribute("data-wpconsent-src");e&&(t.src=e),t.removeAttribute("data-wpconsent-src"),t.removeAttribute("data-wpconsent-name"),t.removeAttribute("data-wpconsent-category")}})),document.querySelectorAll(".wpconsent-iframe-placeholder").forEach((t=>{const n=t.getAttribute("data-wpconsent-category"),o=t.getAttribute("data-wpconsent-name");if(this.shouldUnlockContent(e,o,n)){const e=t.querySelector(".wpconsent-iframe-thumbnail"),n=t.querySelector(".wpconsent-iframe-overlay-content");e&&e.remove(),n&&n.remove(),t.classList.remove("wpconsent-iframe-placeholder")}}))},init:function(){this.runSettingsHooks().then((()=>{this.initWordPress(),this.updateButtonVisibility(wpconsent);const e=document.getElementById("wpconsent-container"),t=document.getElementById("wpconsent-template");if(this.shadowRoot=e.shadowRoot,this.shadowRoot)this.runDisplayChecks().then((()=>{this.processBannerDisplay()}));else{this.shadowRoot=e.attachShadow({mode:"open"});const n=t.content.cloneNode(!0);this.shadowRoot.appendChild(n),t.remove(),this.initializeEventListeners(),this.initializeAccordions(),this.initializeKeyboardHandlers(),this.runDisplayChecks().then((()=>{this.loadExternalCSS(e).then((()=>{this.processBannerDisplay()}))}))}}))},processBannerDisplay:function(){const e=this.getCookie("wpconsent_preferences");if(e){let t={};try{if(t=JSON.parse(e),wpconsent.slugs&&Array.isArray(wpconsent.slugs)&&!wpconsent.slugs.every((e=>t.hasOwnProperty(e))))return this.setCookie("wpconsent_preferences","",-1),this.checkGPC(),void(this.checksPassed&&this.showBanner());this.unlockScripts(t),this.unlockIframes(t)}catch(e){console.error("Error parsing WPConsent preferences:",e)}this.showFloatingButtonIfEnabled()}else if(this.checkGPC(),this.checksPassed&&this.showBanner(),wpconsent.default_allow||!wpconsent.enable_script_blocking){const e={};wpconsent.slugs.forEach((t=>{e[t]=!0})),this.unlockScripts(e),this.unlockIframes(e)}window.dispatchEvent(new CustomEvent("wpconsent_banner_initialized"))},loadExternalCSS:function(e){return new Promise(((t,n)=>{try{const n=`${wpconsent.css_url}?ver=${wpconsent.css_version}`;fetch(n).then((e=>e.text())).then((n=>{const o=document.createElement("style");o.textContent=n,this.shadowRoot.appendChild(o),e.style.display="block",t()})).catch((e=>{console.error("Failed to load WPConsent styles:",e),t()}))}catch(e){console.error("Failed to load WPConsent styles:",e),t()}}))},initializeEventListeners:function(){this.shadowRoot.querySelectorAll(".wpconsent-accept-all").forEach((e=>e.addEventListener("click",(()=>this.acceptAll())))),this.shadowRoot.querySelectorAll(".wpconsent-cancel-cookies").forEach((e=>e.addEventListener("click",(()=>{const e={};wpconsent.slugs.forEach((t=>{const n=this.shadowRoot.querySelector(`#wpconsent-preferences-modal input[type="checkbox"][id="cookie-service-${t}"]`);n&&n.disabled?e[t]=!0:e[t]=!1})),e.essential=!0,this.savePreferences(e)})))),this.shadowRoot.querySelector("#wpconsent-banner-close")?.addEventListener("click",(()=>this.hideBanner())),this.shadowRoot.querySelector("#wpconsent-preferences-all")?.addEventListener("click",(()=>this.showPreferences()));const e=this.shadowRoot.querySelector("#wpconsent-consent-floating");e&&e.addEventListener("click",(()=>this.showPreferences())),this.initializeCheckboxListeners(),document.addEventListener("click",(e=>{const t=e.target.closest(".wpconsent-iframe-accept-button");if(t){const e=t.getAttribute("data-category"),n=t.closest(".wpconsent-iframe-placeholder"),o=n?.getAttribute("data-wpconsent-name");if(e){let t={};try{t=JSON.parse(this.getCookie("wpconsent_preferences")||"{}")}catch(e){console.error("Failed to parse wpconsent_preferences cookie:",e)}const n={...t,essential:!0,[e]:!0};o&&(n[o]=!0),this.savePreferences(n)}}})),this.shadowRoot.querySelector(".wpconsent-preferences-header-close")?.addEventListener("click",(()=>this.closePreferences())),this.shadowRoot.querySelector(".wpconsent-save-preferences")?.addEventListener("click",(()=>{const e=this.shadowRoot.querySelectorAll('#wpconsent-preferences-modal input[type="checkbox"]'),t=Array.from(e).filter((e=>e.checked)).map((e=>e.value)),n={};wpconsent.slugs.forEach((e=>{n[e]=t.includes(e)})),n.essential=!0,this.savePreferences(n)})),this.shadowRoot.querySelector(".wpconsent-close-preferences")?.addEventListener("click",(()=>this.closePreferences())),window.addEventListener("wpconsent_consent_saved",(function(e){if("function"!=typeof window.clarity)return;const t=e.detail;window.clarity("consentv2",{ad_Storage:t.marketing?"granted":"denied",analytics_Storage:t.statistics?"granted":"denied"})}))},localGtag:function(){window.dataLayer=window.dataLayer||[],function(){dataLayer.push(arguments)}.apply(window,arguments)},initializeCheckboxListeners:function(){this.shadowRoot.querySelectorAll('#wpconsent-preferences-modal input[type="checkbox"][id^="cookie-category-"]').forEach((e=>{e.addEventListener("change",(e=>{this.handleCategoryCheckboxChange(e.target)}))})),this.shadowRoot.querySelectorAll('#wpconsent-preferences-modal input[type="checkbox"][id^="cookie-service-"]').forEach((e=>{e.addEventListener("change",(e=>{this.handleServiceCheckboxChange(e.target)}))}))},handleCategoryCheckboxChange:function(e){const t=e.id.replace("cookie-category-","");this.shadowRoot.querySelectorAll('#wpconsent-preferences-modal input[type="checkbox"][id^="cookie-service-"]').forEach((n=>{n.closest(`.wpconsent-cookie-category-${t}`)&&(n.checked=e.checked)}))},handleServiceCheckboxChange:function(e){const t=e.closest(".wpconsent-cookie-category");if(!t)return;const n=t.querySelector('input[type="checkbox"][id^="cookie-category-"]');if(!n)return;const o=t.querySelectorAll('input[type="checkbox"][id^="cookie-service-"]');let s=!1;o.forEach((e=>{e.checked&&(s=!0)})),n.checked=s},initializeAccordions(){this.shadowRoot.querySelectorAll(".wpconsent-preferences-accordion-item").forEach((e=>{const t=e.querySelector(".wpconsent-preferences-accordion-header"),n=e.querySelector(".wpconsent-preferences-accordion-content");t&&n&&t.addEventListener("click",(t=>{t.target.closest(".wpconsent-preferences-checkbox-toggle")||this.toggleAccordion(e,n)}))}))},toggleAccordion(e,t){e.classList.contains("active");const n=e.parentElement,o=e.classList.contains("wpconsent-cookie-service"),s=e.classList.contains("wpconsent-cookie-category");s?n&&n.querySelectorAll(":scope > .wpconsent-preferences-accordion-item.wpconsent-cookie-category").forEach((t=>{if(t!==e){t.classList.remove("active");const e=t.querySelector(".wpconsent-preferences-accordion-toggle");e&&e.setAttribute("aria-expanded","false"),t.querySelectorAll(".wpconsent-cookie-service").forEach((e=>{e.classList.remove("active");const t=e.querySelector(".wpconsent-preferences-accordion-toggle");t&&t.setAttribute("aria-expanded","false"),this.runHooks("accordionToggled",{accordion:e,content:e.querySelector(".wpconsent-preferences-accordion-content"),isActive:!1,isService:!0,isCategory:!1})}))}})):o&&n&&n.querySelectorAll(":scope > .wpconsent-preferences-accordion-item.wpconsent-cookie-service").forEach((t=>{if(t!==e){t.classList.remove("active");const e=t.querySelector(".wpconsent-preferences-accordion-toggle");e&&e.setAttribute("aria-expanded","false"),this.runHooks("accordionToggled",{accordion:t,content:t.querySelector(".wpconsent-preferences-accordion-content"),isActive:!1,isService:!0,isCategory:!1})}})),e.classList.toggle("active");const c=e.querySelector(".wpconsent-preferences-accordion-toggle");if(c){const t=e.classList.contains("active");c.setAttribute("aria-expanded",t?"true":"false")}const r=e.classList.contains("active");this.runHooks("accordionToggled",{accordion:e,content:t,isActive:r,isService:o,isCategory:s})},initializeKeyboardHandlers:function(){document.addEventListener("keydown",(e=>{"Tab"===e.key?this.handleTabKey(e):"Escape"===e.key&&this.handleEscapeKey(e)}))},handleEscapeKey:function(e){const t=this.shadowRoot?.querySelector("#wpconsent-preferences-modal"),n=this.shadowRoot?.querySelector("#wpconsent-banner-holder");t&&"flex"===t.style.display?this.closePreferences():n&&n.classList.contains("wpconsent-banner-visible")&&this.hideBanner()},handleTabKey:function(e){const t=this.shadowRoot?.querySelector("#wpconsent-banner-holder"),n=this.shadowRoot?.querySelector("#wpconsent-preferences-modal"),o=t&&t.classList.contains("wpconsent-banner-visible"),s=n&&"flex"===n.style.display;if(!o&&!s)return;const c=s?n:t,r=this.getFocusableElements(c);if(0===r.length)return;e.preventDefault();const i=r[0],a=r[r.length-1];let l;this.lastFocusedElement&&r.includes(this.lastFocusedElement)?l=this.lastFocusedElement:(l=i,this.lastFocusedElement=l);const d=r.indexOf(l);let h;h=e.shiftKey?d<=0?a:r[d-1]:d>=r.length-1?i:r[d+1],h.focus({preventScroll:!0}),this.lastFocusedElement=h},setupFocusTrap:function(e){this.previouslyFocusedElement=document.activeElement,this.lastFocusedElement=null},removeFocusTrap:function(){this.lastFocusedElement=null},setInitialFocus:function(e){const t=this.getFocusableElements(e);t.length>0&&setTimeout((()=>{t[0].focus({preventScroll:!0}),this.lastFocusedElement=t[0]}),100)},getFocusableElements:function(e){return Array.from(e.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')).filter((t=>{let n=t;for(;n&&n!==e;){const e=window.getComputedStyle(n);if("none"===e.display||"hidden"===e.visibility||"0"===e.opacity||n.disabled||"true"===n.getAttribute("aria-hidden"))return!1;n=n.parentElement}return!0}))},isElementInContainer:function(e,t){return!(!e||!t)&&(t.shadowRoot?t.shadowRoot.contains(e):t.contains(e))},clearCookies:function(){for(var e=document.cookie.split("; "),t=0;t<e.length;t++)for(var n=window.location.hostname.split(".");n.length>0;){var o=encodeURIComponent(e[t].split(";")[0].split("=")[0])+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; domain="+n.join(".")+" ;path=",s=location.pathname.split("/");for(document.cookie=o+"/";s.length>0;)document.cookie=o+s.join("/"),s.pop();n.shift()}},initWordPress:function(){window.wp_consent_type=wpconsent.consent_type;let e=new CustomEvent("wp_consent_type_defined");document.dispatchEvent(e)},showFloatingButtonIfEnabled:function(){if(wpconsent.enable_consent_floating){const e=this.shadowRoot?.querySelector("#wpconsent-consent-floating");e&&(e.style.display="block")}},updateButtonVisibility:function(e){this.shadowRoot&&["accept","cancel","preferences"].forEach((t=>{const n=this.shadowRoot.querySelector(`#wpconsent-${t}-all`);n&&(e[`${t}_button_enabled`]?(n.classList.remove("wpconsent-button-disabled"),n.removeAttribute("data-disabled")):(n.classList.add("wpconsent-button-disabled"),n.setAttribute("data-disabled","true")))}))},updateWordPressConsent:function(e){"function"==typeof wp_set_consent&&(wp_set_consent("functional","allow"),wp_set_consent("preferences","allow"),wp_set_consent("statistics",e.statistics?"allow":"deny"),wp_set_consent("statistics-anonymous",e.statistics?"allow":"deny"),wp_set_consent("marketing",e.marketing?"allow":"deny"))}},document.addEventListener("DOMContentLoaded",(()=>WPConsent.init()))}},t={};function n(o){var s=t[o];if(void 0!==s)return s.exports;var c=t[o]={exports:{}};return e[o](c,c.exports,n),c.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";n(799)})()})();
  • wpconsent-cookies-banner-privacy-suite/trunk/includes/admin/pages/class-wpconsent-admin-page-cookies.php

    r3399711 r3417494  
    10661066
    10671067    /**
     1068     * Get the display rules content for Lite (blurred preview).
     1069     *
     1070     * @return string
     1071     */
     1072    public function get_display_rules_content_lite() {
     1073        ob_start();
     1074        ?>
     1075        <div class="wpconsent-input-area-description">
     1076            <p><?php esc_html_e( 'Control where and to whom the cookie banner is displayed. Hide the banner for specific user roles or on certain pages.', 'wpconsent-cookies-banner-privacy-suite' ); ?></p>
     1077        </div>
     1078
     1079        <div class="wpconsent-metabox-form-row">
     1080            <div class="wpconsent-metabox-form-row-label">
     1081                <label>
     1082                    <?php esc_html_e( 'Logged-in', 'wpconsent-cookies-banner-privacy-suite' ); ?>
     1083                </label>
     1084            </div>
     1085            <div class="wpconsent-metabox-form-row-input">
     1086                <div class="wpconsent-toggle-switch">
     1087                    <input type="checkbox" disabled>
     1088                    <label></label>
     1089                </div>
     1090                <p><?php esc_html_e( 'Hide the banner for all logged-in users, regardless of their role.', 'wpconsent-cookies-banner-privacy-suite' ); ?></p>
     1091            </div>
     1092        </div>
     1093
     1094        <div class="wpconsent-metabox-form-row wpconsent-metabox-form-row-separator"></div>
     1095       
     1096        <div class="wpconsent-metabox-form-row">
     1097            <div class="wpconsent-metabox-form-row-label">
     1098                <label>
     1099                    <?php esc_html_e( 'User Roles', 'wpconsent-cookies-banner-privacy-suite' ); ?>
     1100                </label>
     1101            </div>
     1102            <div class="wpconsent-metabox-form-row-input">
     1103                <select class="wpconsent-choices" disabled multiple style="pointer-events: none;">
     1104                    <option><?php esc_html_e( 'Select user roles...', 'wpconsent-cookies-banner-privacy-suite' ); ?></option>
     1105                </select>
     1106                <p><?php esc_html_e( 'Select user roles that should not see the banner. Users with multiple roles will hide the banner if any selected role matches.', 'wpconsent-cookies-banner-privacy-suite' ); ?></p>
     1107            </div>
     1108        </div>
     1109
     1110        <div class="wpconsent-metabox-form-row wpconsent-metabox-form-row-separator"></div>
     1111
     1112        <div class="wpconsent-metabox-form-row">
     1113            <div class="wpconsent-metabox-form-row-label">
     1114                <label>
     1115                    <?php esc_html_e( 'Pages', 'wpconsent-cookies-banner-privacy-suite' ); ?>
     1116                </label>
     1117            </div>
     1118            <div class="wpconsent-metabox-form-row-input">
     1119                <select class="wpconsent-choices" disabled multiple style="pointer-events: none;">
     1120                    <option><?php esc_html_e( 'Start typing to select pages...', 'wpconsent-cookies-banner-privacy-suite' ); ?></option>
     1121                </select>
     1122                <p><?php esc_html_e( 'Select specific pages where the banner should be hidden. Useful for login pages, checkout pages, or admin-facing pages.', 'wpconsent-cookies-banner-privacy-suite' ); ?></p>
     1123            </div>
     1124        </div>
     1125        <?php
     1126        return ob_get_clean();
     1127    }
     1128
     1129    /**
    10681130     * Output a single language item in the language selector.
    10691131     *
     
    12921354            wp_nonce_field( 'wpconsent_save_settings', 'wpconsent_save_settings_nonce' );
    12931355            ?>
     1356
     1357            <!-- Custom Iframe/Scripts - Individual PRO metabox -->
    12941358            <div style="position: relative">
    12951359                <div class="wpconsent-blur-area">
     
    12981362                <?php
    12991363                echo self::get_upsell_box( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
    1300                         esc_html__( 'Custom Scripts/iFrames is a PRO feature', 'wpconsent-cookies-banner-privacy-suite' ),
    1301                         '<p>' . esc_html__( 'Upgrade to WPConsent PRO today and easily manage custom scripts and iframes. Take full control and block any scripts and iframes from loading until users give consent.', 'wpconsent-cookies-banner-privacy-suite' ) . '</p>',
    1302                         array(
    1303                                 'text' => esc_html__( 'Upgrade to PRO and Unlock Custom Scripts', 'wpconsent-cookies-banner-privacy-suite' ),
    1304                                 'url'  => esc_url( wpconsent_utm_url( 'https://wpconsent.com/lite/', 'advanced-page', 'main' ) ),
    1305                         ),
    1306                         array(
    1307                                 'text' => esc_html__( 'Learn more about all the features', 'wpconsent-cookies-banner-privacy-suite' ),
    1308                                 'url'  => esc_url( wpconsent_utm_url( 'https://wpconsent.com/lite/', 'advanced-page', 'features' ) ),
    1309                         )
     1364                    esc_html__( 'Custom Scripts/iFrames is a PRO feature', 'wpconsent-cookies-banner-privacy-suite' ),
     1365                    '<p>' . esc_html__( 'Upgrade to WPConsent PRO today and easily manage custom scripts and iframes. Take full control and block any scripts and iframes from loading until users give consent.', 'wpconsent-cookies-banner-privacy-suite' ) . '</p>',
     1366                    array(
     1367                        'text' => esc_html__( 'Upgrade to PRO and Unlock Custom Scripts', 'wpconsent-cookies-banner-privacy-suite' ),
     1368                        'url'  => esc_url( wpconsent_utm_url( 'https://wpconsent.com/lite/', 'advanced-page', 'main' ) ),
     1369                    ),
     1370                    array(
     1371                        'text' => esc_html__( 'Learn more about all the features', 'wpconsent-cookies-banner-privacy-suite' ),
     1372                        'url'  => esc_url( wpconsent_utm_url( 'https://wpconsent.com/lite/', 'advanced-page', 'features' ) ),
     1373                    )
    13101374                );
    13111375                ?>
    13121376            </div>
     1377
     1378            <!-- Hide Banner Rules - Individual PRO metabox -->
     1379            <div style="position: relative; margin-bottom: 20px;">
     1380                <div class="wpconsent-blur-area">
     1381                    <?php $this->metabox( __( 'Hide Banner Rules', 'wpconsent-cookies-banner-privacy-suite' ), $this->get_display_rules_content_lite() ); ?>
     1382                </div>
     1383                <?php
     1384                echo self::get_upsell_box( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
     1385                    esc_html__( 'Hide Banner Rules is a PRO feature', 'wpconsent-cookies-banner-privacy-suite' ),
     1386                    '<p>' . esc_html__( 'Control where and to whom the cookie banner is displayed. Hide the banner for specific user roles or on certain pages to improve user experience.', 'wpconsent-cookies-banner-privacy-suite' ) . '</p>',
     1387                    array(
     1388                        'text' => esc_html__( 'Upgrade to PRO and Unlock Hide Banner Rules', 'wpconsent-cookies-banner-privacy-suite' ),
     1389                        'url'  => esc_url( wpconsent_utm_url( 'https://wpconsent.com/lite/', 'advanced-page', 'hide-banner-rules' ) ),
     1390                    ),
     1391                    array(
     1392                        'text' => esc_html__( 'Learn more about all the features', 'wpconsent-cookies-banner-privacy-suite' ),
     1393                        'url'  => esc_url( wpconsent_utm_url( 'https://wpconsent.com/lite/', 'advanced-page', 'features' ) ),
     1394                    )
     1395                );
     1396                ?>
     1397            </div>
     1398
    13131399            <?php
     1400            // Advanced Settings - Available to Lite users (no blur)
    13141401            $this->metabox(
    1315                     __( 'Advanced Settings', 'wpconsent-cookies-banner-privacy-suite' ),
    1316                     $this->get_advanced_settings_content()
     1402                __( 'Advanced Settings', 'wpconsent-cookies-banner-privacy-suite' ),
     1403                $this->get_advanced_settings_content()
    13171404            );
    13181405            ?>
  • wpconsent-cookies-banner-privacy-suite/trunk/includes/class-wpconsent-banner.php

    r3399711 r3417494  
    3535
    3636    /**
     37     * Check if the banner should be hidden.
     38     *
     39     * @return bool
     40     */
     41    protected function should_hide_banner() {
     42        return false;
     43    }
     44
     45    /**
    3746     * Output the banner if enabled.
    3847     *
     
    5463        }
    5564
    56         // Filter to prevent the banner from being output.
    57         if ( apply_filters( 'wpconsent_banner_output', true ) === false ) {
     65        // Filter to control whether the banner should be output. Child classes can override should_hide_banner().
     66        $should_output = ! $this->should_hide_banner();
     67        if ( ! apply_filters( 'wpconsent_banner_output', $should_output ) ) {
    5868            return;
    5969        }
     
    372382            // Render categories in this group.
    373383            foreach ( $group['categories'] as $category_slug => $category ) {
     384                // Skip empty categories (no cookies and no services) unless it's the essential category.
     385                $category_cookies = isset( $all_cookies[ $category['id'] ] ) ? $all_cookies[ $category['id'] ] : array();
     386                $has_cookies      = ! empty( $category_cookies['cookies'] );
     387                $has_services     = ! empty( $category_cookies['services'] );
     388
     389                if ( 'essential' !== $category_slug && ! $has_cookies && ! $has_services ) {
     390                    continue;
     391                }
     392
    374393                $html .= $this->render_category_item( $category_slug, $category, $all_cookies, $default_allow );
    375394            }
  • wpconsent-cookies-banner-privacy-suite/trunk/includes/class-wpconsent-cookie-blocking.php

    r3399711 r3417494  
    7676     */
    7777    public function process_output( $buffer ) {
     78        // Check content type at output time since headers may have changed after buffer started.
     79        if ( ! $this->is_html_response( $buffer ) ) {
     80            return $buffer;
     81        }
     82
    7883        $scripts_by_category = $this->find_scripts_by_category( $buffer );
    7984
     
    247252
    248253    /**
     254     * Check if the response is HTML content that should be processed.
     255     *
     256     * This method performs runtime checks on the buffer content and headers
     257     * to determine if we should process it. This is needed because the initial
     258     * should_process() check happens when the buffer starts, but the content
     259     * type may change during the request (e.g., AJAX responses).
     260     *
     261     * @param string $buffer The output buffer content.
     262     *
     263     * @return bool Whether this appears to be HTML content.
     264     */
     265    private function is_html_response( $buffer ) {
     266        // Check content type header at output time.
     267        $headers_list = headers_list();
     268        foreach ( $headers_list as $header ) {
     269            if ( 0 === stripos( $header, 'Content-Type:' ) ) {
     270                // If JSON content type, skip processing.
     271                if ( false !== stripos( $header, 'application/json' ) ) {
     272                    return false;
     273                }
     274                // If explicitly HTML, we're good.
     275                if ( false !== stripos( $header, 'text/html' ) ) {
     276                    return true;
     277                }
     278            }
     279        }
     280
     281        // If no content type header, check the buffer content itself.
     282        $trimmed = ltrim( $buffer );
     283
     284        // Skip if buffer looks like JSON (starts with { or [).
     285        if ( '' !== $trimmed && ( '{' === $trimmed[0] || '[' === $trimmed[0] ) ) {
     286            return false;
     287        }
     288
     289        // Skip if buffer doesn't look like HTML (should start with <).
     290        if ( '' !== $trimmed && '<' !== $trimmed[0] ) {
     291            return false;
     292        }
     293
     294        return true;
     295    }
     296
     297    /**
    249298     * Get the Google Consent Mode.
    250299     *
  • wpconsent-cookies-banner-privacy-suite/trunk/includes/class-wpconsent-cookies.php

    r3399711 r3417494  
    641641        }
    642642
     643        // If SiteKit plugin has the consent mode enabled we don't need to add the default state script.
     644        if ( 'enabled' === apply_filters( 'googlesitekit_consent_mode_status', 'disabled' ) ) {
     645            return false;
     646        }
     647
    643648        // Check if we have a cached result.
    644649        $cached_result = get_transient( 'wpconsent_needs_google_consent' );
  • wpconsent-cookies-banner-privacy-suite/trunk/includes/compatibility/loader.php

    r3399711 r3417494  
    3737    }
    3838}
    39 add_action( 'plugins_loaded', 'wpconsent_load_compatibility_files' );
     39add_action( 'plugins_loaded', 'wpconsent_load_compatibility_files', 3 );
  • wpconsent-cookies-banner-privacy-suite/trunk/includes/frontend-scripts.php

    r3399711 r3417494  
    9292    }
    9393
    94     $default = intval( wpconsent()->settings->get_option( 'default_allow', 0 ) );
     94    $default_allow = intval( wpconsent()->settings->get_option( 'default_allow', 0 ) );
     95    $default_state = $default_allow ? 'granted' : 'denied';
    9596
    9697    // We need to load the Google consent script earlier than other tracking scripts for it to take effect correctly.
     
    99100        (function () {
    100101            window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}
    101            
    102             let preferences = {
    103                 marketing: {$default},
    104                 statistics: {$default},
    105             }
    106            
    107             // Get preferences directly from cookie
    108             const value = `; ` + document.cookie;
    109             const parts = value.split(`; wpconsent_preferences=`);
    110             if (parts.length === 2) {
    111                 try {
    112                     preferences = JSON.parse(parts.pop().split(';').shift());
    113                 } catch (e) {
    114                     console.error('Error parsing WPConsent preferences:', e);
    115                 }
    116             }
    117            
     102
     103            // Set the developer ID.
     104            gtag('set', 'developer_id.dMmRkYz', true);
     105
     106            // Set default consent state based on plugin settings.
    118107            gtag('consent', 'default', {
    119                 'ad_storage': preferences.marketing ? 'granted' : 'denied',
    120                 'analytics_storage': preferences.statistics ? 'granted' : 'denied',
    121                 'ad_user_data': preferences.marketing ? 'granted' : 'denied',
    122                 'ad_personalization': preferences.marketing ? 'granted' : 'denied',
     108                'ad_storage': '{$default_state}',
     109                'analytics_storage': '{$default_state}',
     110                'ad_user_data': '{$default_state}',
     111                'ad_personalization': '{$default_state}',
    123112                'security_storage': 'granted',
    124                 'functionality_storage': 'granted'
     113                'functionality_storage': 'granted',
     114                'wait_for_update': 500,
    125115            });
    126116        })();
  • wpconsent-cookies-banner-privacy-suite/trunk/includes/lite/admin/class-wpconsent-admin-page-loader-lite.php

    r3399711 r3417494  
    3636            esc_html__( 'Upgrade to Pro', 'wpconsent-cookies-banner-privacy-suite' ),
    3737            'manage_options',
    38             esc_url( wpconsent_utm_url( 'https://wpconsent.com/lite/', 'wpconsent-admin', 'admin-side-menu' ) )
     38            esc_url( wpconsent_utm_url( 'https://wpconsent.com/lite/', 'admin-side-menu', 'wpconsent-admin' ) )
    3939        );
    4040    }
  • wpconsent-cookies-banner-privacy-suite/trunk/languages/wpconsent-cookies-banner-privacy-suite.pot

    r3399711 r3417494  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: WPConsent 1.1.1\n"
     5"Project-Id-Version: WPConsent 1.1.2\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wpconsent-cookies-banner-privacy-suite\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
     
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2025-11-20T12:12:26+00:00\n"
     12"POT-Creation-Date: 2025-12-11T14:14:13+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.5.0\n"
     
    147147#: includes/admin/pages/class-wpconsent-admin-page-dashboard.php:94
    148148#: includes/admin/pages/class-wpconsent-admin-page-tools.php:861
    149 #: includes/class-wpconsent-banner.php:412
    150 #: includes/class-wpconsent-banner.php:419
     149#: includes/class-wpconsent-banner.php:431
     150#: includes/class-wpconsent-banner.php:438
    151151#: includes/class-wpconsent-strings.php:33
    152152msgid "Cookie Policy"
     
    294294
    295295#: includes/admin/admin-scripts.php:84
    296 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1491
     296#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1578
    297297msgid "Reset to Defaults"
    298298msgstr ""
     
    693693
    694694#: includes/admin/pages/class-wpconsent-admin-page-banner.php:523
    695 #: includes/class-wpconsent-banner.php:808
     695#: includes/class-wpconsent-banner.php:827
    696696msgid "Cookie Settings"
    697697msgstr ""
     
    868868#: includes/admin/pages/class-wpconsent-admin-page-consent-logs.php:78
    869869#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1059
    870 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1307
    871 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1573
     870#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1371
     871#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1392
     872#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1660
    872873#: includes/admin/pages/class-wpconsent-admin-page-do-not-track.php:77
    873874#: includes/admin/pages/class-wpconsent-admin-page-geolocation.php:51
     
    10071008
    10081009#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:218
    1009 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1321
    1010 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1885
     1010#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1408
     1011#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1972
    10111012#: includes/admin/pages/class-wpconsent-admin-page-do-not-track.php:507
    10121013msgid "Save Changes"
     
    12191220#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:654
    12201221#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:746
    1221 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1400
     1222#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1487
    12221223msgid "Actions"
    12231224msgstr ""
     
    12481249
    12491250#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:863
    1250 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1396
     1251#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1483
    12511252msgid "Service"
    12521253msgstr ""
     
    12991300msgstr ""
    13001301
    1301 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1101
     1302#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1076
     1303msgid "Control where and to whom the cookie banner is displayed. Hide the banner for specific user roles or on certain pages."
     1304msgstr ""
     1305
     1306#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1082
     1307msgid "Logged-in"
     1308msgstr ""
     1309
     1310#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1090
     1311msgid "Hide the banner for all logged-in users, regardless of their role."
     1312msgstr ""
     1313
     1314#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1099
     1315msgid "User Roles"
     1316msgstr ""
     1317
     1318#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1104
     1319msgid "Select user roles..."
     1320msgstr ""
     1321
     1322#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1106
     1323msgid "Select user roles that should not see the banner. Users with multiple roles will hide the banner if any selected role matches."
     1324msgstr ""
     1325
     1326#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1115
     1327msgid "Pages"
     1328msgstr ""
     1329
     1330#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1120
     1331msgid "Start typing to select pages..."
     1332msgstr ""
     1333
     1334#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1122
     1335msgid "Select specific pages where the banner should be hidden. Useful for login pages, checkout pages, or admin-facing pages."
     1336msgstr ""
     1337
     1338#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1163
    13021339msgid "Default"
    13031340msgstr ""
    13041341
    13051342#. Translators: %s is the current WordPress language name.
    1306 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1162
     1343#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1224
    13071344msgid "Select the languages you want to make available for your content. The default language (%s) will be used for the current settings until you configure translations."
    13081345msgstr ""
    13091346
    13101347#. Translators: %s is the icon for the language switcher.
    1311 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1171
     1348#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1233
    13121349msgid "Easily switch between languages using the globe icon (%s) in the header of any WPConsent admin page."
    13131350msgstr ""
    13141351
    1315 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1184
     1352#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1246
    13161353msgid "The \"Translate\" button appears for languages that are supported by our translation service. Click the button to start the automatic translation process for your consent banner content. Translation happens asynchronously in the background, and you will be notified when the process is complete."
    13171354msgstr ""
    13181355
    1319 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1193
     1356#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1255
    13201357msgid "Search languages..."
    13211358msgstr ""
    13221359
    1323 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1203
     1360#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1265
    13241361msgid "Selected Languages"
    13251362msgstr ""
    13261363
    1327 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1220
     1364#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1282
    13281365msgid "Available Languages"
    13291366msgstr ""
    13301367
    1331 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1235
     1368#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1297
    13321369msgid "Language Picker"
    13331370msgstr ""
    13341371
    1335 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1239
     1372#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1301
    13361373msgid "Show a language picker in the consent banner"
    13371374msgstr ""
    13381375
    1339 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1244
     1376#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1306
    13401377msgid "This will show a globe icon in the header of the consent banner, allowing users to switch between languages just for the banner/preferences panel even if you do not use a translation plugin. If you are using a translation plugin the banner should automatically display the content in the selected language, if available."
    13411378msgstr ""
    13421379
    1343 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1296
     1380#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1360
    13441381msgid "Custom Iframe/Scripts"
    13451382msgstr ""
    13461383
    1347 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1300
     1384#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1364
    13481385msgid "Custom Scripts/iFrames is a PRO feature"
    13491386msgstr ""
    13501387
    1351 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1301
     1388#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1365
    13521389#: includes/admin/pages/class-wpconsent-admin-page-tools.php:67
    13531390msgid "Upgrade to WPConsent PRO today and easily manage custom scripts and iframes. Take full control and block any scripts and iframes from loading until users give consent."
    13541391msgstr ""
    13551392
    1356 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1303
     1393#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1367
    13571394msgid "Upgrade to PRO and Unlock Custom Scripts"
    13581395msgstr ""
    13591396
    1360 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1315
     1397#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1381
     1398msgid "Hide Banner Rules"
     1399msgstr ""
     1400
     1401#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1385
     1402msgid "Hide Banner Rules is a PRO feature"
     1403msgstr ""
     1404
     1405#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1386
     1406msgid "Control where and to whom the cookie banner is displayed. Hide the banner for specific user roles or on certain pages to improve user experience."
     1407msgstr ""
     1408
     1409#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1388
     1410msgid "Upgrade to PRO and Unlock Hide Banner Rules"
     1411msgstr ""
     1412
     1413#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1402
    13611414msgid "Advanced Settings"
    13621415msgstr ""
    13631416
    1364 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1337
     1417#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1424
    13651418msgid "Add custom iframes or scripts that should be blocked until consent is given."
    13661419msgstr ""
    13671420
    1368 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1339
     1421#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1426
    13691422#: includes/cookie-policy-shortcode.php:71
    13701423msgid "Learn more"
    13711424msgstr ""
    13721425
    1373 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1370
    1374 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1376
     1426#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1457
     1427#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1463
    13751428msgid "Scripts"
    13761429msgstr ""
    13771430
    1378 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1371
     1431#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1458
    13791432msgid "Add scripts for analytics and statistics tracking."
    13801433msgstr ""
    13811434
    1382 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1377
     1435#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1464
    13831436msgid "Add scripts for marketing and advertising purposes."
    13841437msgstr ""
    13851438
    1386 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1397
     1439#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1484
    13871440msgid "Type"
    13881441msgstr ""
    13891442
    1390 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1398
     1443#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1485
    13911444msgid "Script"
    13921445msgstr ""
    13931446
    1394 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1399
     1447#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1486
    13951448msgid "Blocked Elements"
    13961449msgstr ""
    13971450
    1398 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1437
     1451#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1524
    13991452msgid "Add Custom iFrame/Script"
    14001453msgstr ""
    14011454
    1402 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1454
     1455#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1541
    14031456msgid "Clarity Consent Mode"
    14041457msgstr ""
    14051458
    14061459#. translators: %1$s is an opening link tag, %2$s is a closing link tag.
    1407 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1460
     1460#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1547
    14081461msgid "Use Microsoft Clarity without cookies until consent is given. %1$sLearn More%2$s"
    14091462msgstr ""
    14101463
    1411 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1464
     1464#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1551
    14121465msgid "Clarity Consent Mode will not be loaded if the banner is disabled."
    14131466msgstr ""
    14141467
    1415 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1469
     1468#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1556
    14161469msgid "Shared Consent"
    14171470msgstr ""
    14181471
    1419 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1473
     1472#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1560
    14201473msgid "Share cookie preferences across all subdomains. MUST be enabled on all subdomain sites using WPConsent."
    14211474msgstr ""
    14221475
    1423 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1474
     1476#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1561
    14241477msgid "Preferences set on example.com will automatically apply to blog.example.com, shop.example.com, and any other subdomain. All subdomain sites must have this setting enabled."
    14251478msgstr ""
    14261479
    1427 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1479
     1480#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1566
    14281481msgid "Respect Global Privacy Controls"
    14291482msgstr ""
    14301483
    1431 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1483
     1484#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1570
    14321485msgid "Automatically respect Global Privacy Control (GPC) signals from user browsers."
    14331486msgstr ""
    14341487
    1435 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1484
     1488#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1571
    14361489msgid "When enabled, users with GPC enabled in their browser will automatically have non-essential cookies declined and will not see the consent banner. This helps comply with privacy regulations by respecting user-set privacy preferences."
    14371490msgstr ""
    14381491
    1439 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1502
     1492#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1589
    14401493msgid "Remove all data"
    14411494msgstr ""
    14421495
    1443 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1506
     1496#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1593
    14441497msgid "Remove all data when uninstalling the plugin."
    14451498msgstr ""
    14461499
    1447 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1507
     1500#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1594
    14481501msgid "All cookie data and configuration will be unrecoverable."
    14491502msgstr ""
    14501503
    1451 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1524
     1504#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1611
    14521505msgid "Reset Content to Defaults"
    14531506msgstr ""
    14541507
    1455 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1528
     1508#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1615
    14561509msgid "This will reset all banner content and default categories/cookies (banner messages, preferences panel, button texts, categories, etc.) to the default English state. This action cannot be undone."
    14571510msgstr ""
    14581511
    1459 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1541
     1512#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1628
    14601513msgid "Allow Usage Tracking"
    14611514msgstr ""
    14621515
    1463 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1545
     1516#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1632
    14641517msgid "By allowing us to track usage data, we can better help you, as we will know which WordPress configurations, themes, and plugins we should test."
    14651518msgstr ""
    14661519
    1467 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1566
     1520#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1653
    14681521msgid "IAB TCF is a PRO feature"
    14691522msgstr ""
    14701523
    1471 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1567
     1524#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1654
    14721525msgid "Upgrade to WPConsent PRO today to enable IAB Transparency & Consent Framework v2.2 support. Manage vendor consents, publisher restrictions, and ensure compliance with the TCF specification."
    14731526msgstr ""
    14741527
    1475 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1569
     1528#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1656
    14761529msgid "Upgrade to PRO and Unlock IAB TCF"
    14771530msgstr ""
    14781531
    1479 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1629
     1532#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1716
    14801533msgid "Enable TCF on Frontend"
    14811534msgstr ""
    14821535
    1483 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1634
     1536#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1721
    14841537msgid "Enable this setting to load the IAB TCF (Transparency and Consent Framework) on the frontend of your website."
    14851538msgstr ""
    14861539
    1487 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1638
     1540#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1725
    14881541msgid "TCF Activation"
    14891542msgstr ""
    14901543
    1491 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1663
    1492 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1911
     1544#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1750
     1545#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1998
    14931546msgid "Allow Legitimate Interest (Default)"
    14941547msgstr ""
    14951548
    1496 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1664
    1497 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1912
     1549#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1751
     1550#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1999
    14981551msgid "Disallow Legitimate Interest for All Purposes"
    14991552msgstr ""
    15001553
    1501 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1665
    1502 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1913
     1554#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1752
     1555#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2000
    15031556msgid "Disallow Legitimate Interest for Specific Purposes"
    15041557msgstr ""
    15051558
    1506 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1669
    1507 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1917
     1559#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1756
     1560#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2004
    15081561msgid "Legitimate Interest"
    15091562msgstr ""
    15101563
    1511 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1674
    1512 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1922
     1564#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1761
     1565#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2009
    15131566msgid "Control whether vendors can use legitimate interest as a legal basis for data processing."
    15141567msgstr ""
    15151568
    1516 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1680
    1517 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1931
     1569#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1767
     1570#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2018
    15181571msgid "Select Purposes"
    15191572msgstr ""
    15201573
    15211574#. Translators: 1: Purpose ID, 2: Purpose Name.
    1522 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1691
    1523 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1942
     1575#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1778
     1576#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2029
    15241577msgid "Purpose %1$d: %2$s"
    15251578msgstr ""
    15261579
    1527 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1698
    1528 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1949
     1580#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1785
     1581#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2036
    15291582msgid "Select specific purposes for which legitimate interest should be disallowed globally."
    15301583msgstr ""
    15311584
    1532 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1707
    1533 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1958
     1585#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1794
     1586#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2045
    15341587msgid "Global Vendor Restrictions"
    15351588msgstr ""
    15361589
    1537 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1709
    1538 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1960
     1590#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1796
     1591#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2047
    15391592msgid "Apply restrictions to all vendors at once. These settings allow you to enforce stricter data policies across all selected vendors."
    15401593msgstr ""
    15411594
    1542 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1733
    1543 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1996
     1595#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1820
     1596#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2083
    15441597msgid "Declare which TCF purposes this website (as a first party) uses for its own data processing. These declarations are separate from vendor consents and communicate your website's data processing activities to vendors via the TC String."
    15451598msgstr ""
    15461599
    1547 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1741
    1548 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2004
     1600#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1828
     1601#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2091
    15491602msgid "Purposes (Consent)"
    15501603msgstr ""
    15511604
    1552 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1742
    1553 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2005
     1605#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1829
     1606#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2092
    15541607msgid "selected"
    15551608msgstr ""
    15561609
    1557 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1747
    1558 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2010
     1610#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1834
     1611#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2097
    15591612msgid "Select each purpose this website requests consent for."
    15601613msgstr ""
    15611614
    15621615#. Translators: Purpose ID.
    1563 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1761
    1564 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1815
    1565 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2024
    1566 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2075
     1616#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1848
     1617#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1902
     1618#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2111
     1619#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2162
    15671620msgid "Purpose %d"
    15681621msgstr ""
    15691622
    1570 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1779
    1571 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2038
     1623#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1866
     1624#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2125
    15721625msgid "Purposes (Legitimate Interest)"
    15731626msgstr ""
     
    15751628#. Translators: 1: number of selected purposes, 2: total number of available purposes.
    15761629#. translators: 1: number of selected purposes, 2: total number of available purposes
    1577 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1787
    1578 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2047
     1630#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1874
     1631#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2134
    15791632msgid "(%1$d/%2$d selected)"
    15801633msgstr ""
    15811634
    1582 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1797
    1583 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2057
     1635#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1884
     1636#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2144
    15841637msgid "Select each purpose this website claims legitimate interest for. Only certain purposes allow legitimate interest under TCF policy."
    15851638msgstr ""
    15861639
    1587 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1828
    1588 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2088
     1640#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1915
     1641#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2175
    15891642msgid "Publisher Data Processing Declarations"
    15901643msgstr ""
    15911644
    1592 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1830
    1593 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2090
     1645#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1917
     1646#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:2177
    15941647msgid "Declare which TCF purposes your website uses for its own data processing. These declarations are encoded in the TC String and communicated to vendors."
    15951648msgstr ""
    15961649
    1597 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1848
     1650#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1935
    15981651msgid "Search vendors by name or ID..."
    15991652msgstr ""
    16001653
    1601 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1852
     1654#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1939
    16021655msgid "Search"
    16031656msgstr ""
    16041657
    1605 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1855
     1658#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1942
    16061659msgid "Clear"
    16071660msgstr ""
    16081661
    1609 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1860
     1662#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1947
    16101663msgid "All Vendors"
    16111664msgstr ""
    16121665
    1613 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1861
     1666#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1948
    16141667msgid "Selected"
    16151668msgstr ""
    16161669
    1617 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1862
     1670#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1949
    16181671msgid "Not Selected"
    16191672msgstr ""
    16201673
    1621 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1865
     1674#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1952
    16221675msgid "Name A-Z"
    16231676msgstr ""
    16241677
    1625 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1866
     1678#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1953
    16261679msgid "Name Z-A"
    16271680msgstr ""
    16281681
    1629 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1867
     1682#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1954
    16301683msgid "ID Low-High"
    16311684msgstr ""
    16321685
    1633 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1868
     1686#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1955
    16341687msgid "ID High-Low"
    16351688msgstr ""
    16361689
    16371690#. Translators: %d is the total number of vendors.
    1638 #: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1877
     1691#: includes/admin/pages/class-wpconsent-admin-page-cookies.php:1964
    16391692msgid "Showing %d vendors"
    16401693msgstr ""
     
    26062659msgstr ""
    26072660
    2608 #: includes/class-wpconsent-banner.php:216
     2661#: includes/class-wpconsent-banner.php:226
    26092662msgid "Cookie Consent"
    26102663msgstr ""
    26112664
    2612 #: includes/class-wpconsent-banner.php:253
    2613 #: includes/class-wpconsent-banner.php:311
     2665#: includes/class-wpconsent-banner.php:263
     2666#: includes/class-wpconsent-banner.php:321
    26142667#: includes/class-wpconsent-strings.php:36
    26152668msgid "Close"
     
    26192672#. translators: %s: Category name
    26202673#. translators: %s: Service name
    2621 #: includes/class-wpconsent-banner.php:395
    2622 #: includes/class-wpconsent-banner.php:548
    2623 #: includes/class-wpconsent-banner.php:674
     2674#: includes/class-wpconsent-banner.php:414
     2675#: includes/class-wpconsent-banner.php:567
     2676#: includes/class-wpconsent-banner.php:693
    26242677msgid "Toggle %s"
    26252678msgstr ""
    26262679
    26272680#. translators: 1: Cookie policy URL, 2: Privacy policy URL
    2628 #: includes/class-wpconsent-banner.php:411
     2681#: includes/class-wpconsent-banner.php:430
    26292682msgid "You can find more information about our %1$s and %2$s."
    26302683msgstr ""
    26312684
    2632 #: includes/class-wpconsent-banner.php:413
     2685#: includes/class-wpconsent-banner.php:432
    26332686msgid "Privacy Policy"
    26342687msgstr ""
    26352688
    26362689#. translators: %s: Cookie policy URL
    2637 #: includes/class-wpconsent-banner.php:418
     2690#: includes/class-wpconsent-banner.php:437
    26382691msgid "You can find more information in our %s."
    26392692msgstr ""
    26402693
    26412694#. translators: %1$s: Service URL label, %2$s: Service URL
    2642 #: includes/class-wpconsent-banner.php:716
     2695#: includes/class-wpconsent-banner.php:735
    26432696msgid "%1$s: %2$s"
    26442697msgstr ""
    26452698
    2646 #: includes/class-wpconsent-banner.php:718
    2647 #: includes/class-wpconsent-banner.php:785
     2699#: includes/class-wpconsent-banner.php:737
     2700#: includes/class-wpconsent-banner.php:804
    26482701msgid "(opens in a new window)"
    26492702msgstr ""
    26502703
    26512704#. translators: %1$s and %2$s add a tag used for hiding the text on small screens and %3$s is the WPConsent logo svg
    2652 #: includes/class-wpconsent-banner.php:780
     2705#: includes/class-wpconsent-banner.php:799
    26532706msgid "%1$sPowered by%2$s %3$s"
    26542707msgstr ""
    26552708
    2656 #: includes/class-wpconsent-banner.php:803
     2709#: includes/class-wpconsent-banner.php:822
    26572710#: includes/class-wpconsent-cookies.php:371
    2658 #: includes/class-wpconsent-cookies.php:799
     2711#: includes/class-wpconsent-cookies.php:804
    26592712#: includes/class-wpconsent-strings.php:31
    26602713msgid "Cookie Preferences"
     
    26682721#. translators: %s: The category name (e.g., analytics, marketing)
    26692722#: includes/class-wpconsent-content-placeholder.php:195
    2670 #: includes/class-wpconsent-cookie-blocking.php:389
     2723#: includes/class-wpconsent-cookie-blocking.php:438
    26712724msgid "Click here to accept %s cookies and load this content"
    26722725msgstr ""
     
    26972750
    26982751#: includes/class-wpconsent-cookies.php:372
    2699 #: includes/class-wpconsent-cookies.php:800
     2752#: includes/class-wpconsent-cookies.php:805
    27002753msgid "This cookie is used to store the user's cookie consent preferences."
    27012754msgstr ""
  • wpconsent-cookies-banner-privacy-suite/trunk/readme.txt

    r3399711 r3417494  
    33Tags: consent, cookie, cookie notice, cookie consent, gdpr
    44Requires at least: 5.6
    5 Tested up to: 6.8
     5Tested up to: 6.9
    66Requires PHP: 7.0
    7 Stable tag: 1.1.1
     7Stable tag: 1.1.2
    88License: GPLv2 or later
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    136136
    137137== Changelog ==
     138
     139= 1.1.2 =
     140* Tweak: We adjusted our Google Consent Mode v2 implementation for better default consent handling.
     141* Tweak: We added an extra check in our script blocking functionality to avoid conflicts with other plugins that use output buffering in WP 6.9.
     142* Fix: Empty categories are no longer displayed in the preferences panel.
    138143
    139144= 1.1.1 =
  • wpconsent-cookies-banner-privacy-suite/trunk/src/frontend/banner.js

    r3399711 r3417494  
    446446        // Send a custom event on the document when consent is processed.
    447447        document.dispatchEvent( new CustomEvent( 'wpconsent_consent_processed', {detail: preferences} ) );
     448
     449        // Include our developer id.
     450        WPConsent.localGtag( 'set', 'developer_id.dMmRkYz', true );
     451
     452        // Update gtag consent state.
     453        WPConsent.localGtag(
     454            'consent',
     455            'update',
     456            {
     457                'ad_storage': preferences.marketing ? 'granted' : 'denied',
     458                'analytics_storage': preferences.statistics ? 'granted' : 'denied',
     459                'ad_user_data': preferences.marketing ? 'granted' : 'denied',
     460                'ad_personalization': preferences.marketing ? 'granted' : 'denied'
     461            }
     462        );
    448463
    449464        // Push event to GTM dataLayer for tag triggering.
     
    710725        } );
    711726        this.shadowRoot.querySelector( '.wpconsent-close-preferences' )?.addEventListener( 'click', () => this.closePreferences() );
    712 
    713         window.addEventListener( 'wpconsent_consent_saved', function ( event ) {
    714             // Passed detail is preferences.
    715             const preferences = event.detail;
    716             WPConsent.localGtag( 'consent', 'update', {
    717                 'ad_storage': preferences.marketing ? 'granted' : 'denied',
    718                 'analytics_storage': preferences.statistics ? 'granted' : 'denied',
    719                 'ad_user_data': preferences.marketing ? 'granted' : 'denied',
    720                 'ad_personalization': preferences.marketing ? 'granted' : 'denied',
    721                 'security_storage': 'granted',
    722                 'functionality_storage': 'granted'
    723             } );
    724         } );
    725727
    726728        window.addEventListener( 'wpconsent_consent_saved', function ( event ) {
  • wpconsent-cookies-banner-privacy-suite/trunk/wpconsent.php

    r3399711 r3417494  
    33 * Plugin Name: WPConsent
    44 * Description: Improve your WordPress website privacy compliance. Custom cookie banner, website scanner, automatic script blocking, and easy cookie configuration.
    5  * Version:     1.1.1
     5 * Version:     1.1.2
    66 * Author:      WPConsent
    77 * Author URI:  https://wpconsent.com
Note: See TracChangeset for help on using the changeset viewer.