1/** 2 * Fix: "Alle akzeptieren" (.cm-btn-accept-all) soll wirklich alle Dienste aktivieren 3 * und dann speichern (Cookie), analog zu "Alle Dienste umschalten" + "Auswahl akzeptieren". 4 */ 5(function (Drupal) { 6 'use strict'; 7 8 Drupal.behaviors.vkKlaroAcceptAllFix = { 9 attach: function () { 10 // Nur einmal global installieren (auch bei AJAX/Behaviors-Reattach). 11 if (window.__vkKlaroAcceptAllFixInstalled) return; 12 window.__vkKlaroAcceptAllFixInstalled = true; 13 14 document.addEventListener( 15 'click', 16 function (e) { 17 var acceptAllSelector = '.cm-btn-accept-all,[data-action="acceptAll"],[data-action="accept-all"],[data-type="acceptAll"],[data-type="accept-all"]'; 18 var btn = e.target && e.target.closest ? e.target.closest(acceptAllSelector) : null; 19 if (!btn) return; 20 21 var findManager = function () { 22 var found = null; 23 if (window.klaro) { 24 if (typeof window.klaro.getManager === 'function') { 25 found = window.klaro.getManager(); 26 } else if (window.klaro.manager) { 27 found = window.klaro.manager; 28 } 29 } 30 if (!found && window.klaroManager) { 31 found = window.klaroManager; 32 } 33 return found; 34 }; 35 36 var buildAllConsents = function () { 37 var services = null; 38 if (window.klaroConfig && window.klaroConfig.services) { 39 services = window.klaroConfig.services; 40 } else if (window.drupalSettings && window.drupalSettings.klaro && window.drupalSettings.klaro.config) { 41 services = window.drupalSettings.klaro.config.services; 42 } 43 if (!services || !services.length) return null; 44 var consents = {}; 45 for (var i = 0; i < services.length; i += 1) { 46 var svc = services[i]; 47 if (!svc || !svc.name) continue; 48 consents[svc.name] = true; 49 } 50 return consents; 51 }; 52 53 var applyAcceptAll = function (manager) { 54 var getConsents = function () { 55 if (manager.consents) return manager.consents; 56 if (typeof manager.getConsents === 'function') { 57 return manager.getConsents(); 58 } 59 return null; 60 }; 61 62 var saveAndApply = function (consents) { 63 if (consents && typeof consents === 'object') { 64 manager.consents = consents; 65 } 66 if (typeof manager.saveAndApplyConsents === 'function') { 67 if (manager.saveAndApplyConsents.length >= 1) { 68 manager.saveAndApplyConsents(consents || getConsents()); 69 } else { 70 manager.saveAndApplyConsents(); 71 } 72 return true; 73 } 74 if (typeof manager.saveConsents === 'function' && typeof manager.applyConsents === 'function') { 75 var toSave = consents || getConsents(); 76 manager.saveConsents(toSave); 77 manager.applyConsents(toSave); 78 return true; 79 } 80 if (typeof manager.save === 'function' && typeof manager.applyConsents === 'function') { 81 var toSaveAlt = consents || getConsents(); 82 manager.save(toSaveAlt); 83 manager.applyConsents(toSaveAlt); 84 return true; 85 } 86 return false; 87 }; 88 89 // Beste Variante: akzeptiere alles direkt (falls API verfügbar) 90 if (typeof manager.acceptAll === 'function') { 91 manager.acceptAll(); 92 return true; 93 } 94 95 // Explizit alle Services auf true setzen und speichern 96 var explicitConsents = buildAllConsents(); 97 if (explicitConsents && saveAndApply(explicitConsents)) { 98 return true; 99 } 100
101 // Wie "Alle Dienste umschalten": alles aktivieren ⦠102 if (typeof manager.changeAll === 'function') { 103 var changeResult = manager.changeAll(true); 104 if (changeResult && typeof changeResult.then === 'function') { 105 changeResult.then(function (consentsFromChange) { 106 if (saveAndApply(consentsFromChange)) return; 107 }); 108 } else { 109 if (saveAndApply(changeResult)) return true; 110 } 111 } else if (saveAndApply()) { 112 return true; 113 } 114 return false; 115 }; 116 117 var tryApply = function (manager) { 118 if (applyAcceptAll(manager)) { 119 setTimeout(function () { 120 applyAcceptAll(manager); 121 }, 300); 122 return; 123 } 124 // Fallback: wenn saveAndApplyConsents nicht existiert, nutze den "Auswahl akzeptieren"-Button 125 var acceptBtn = document.querySelector('.cm-btn-accept'); 126 if (acceptBtn) acceptBtn.click(); 127 }; 128 129 // Originalhandler laufen lassen, dann unsere Korrektur anwenden 130 var manager = findManager(); 131 if (manager && manager.then && typeof manager.then === 'function') { 132 manager.then(function (m) { 133 setTimeout(function () { tryApply(m); }, 0); 134 }); 135 return; 136 } 137 138 if (manager) { 139 setTimeout(function () { tryApply(manager); }, 0); 140 return; 141 } 142 143 var tries = 0; 144 var retry = setInterval(function () { 145 tries += 1; 146 var m = findManager(); 147 if (m && m.then && typeof m.then === 'function') { 148 m.then(function (resolved) { 149 clearInterval(retry); 150 setTimeout(function () { tryApply(resolved); }, 0); 151 }); 152 return; 153 } 154 if (m) { 155 clearInterval(retry); 156 setTimeout(function () { tryApply(m); }, 0); 157 return; 158 } 159 if (tries >= 10) { 160 clearInterval(retry); 161 } 162 }, 150); 163 }, 164 true // capture: vor Klaros eigenem Click-Handler 165 ); 166 }, 167 }; 168})(Drupal);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.