PageSourceSearch

https://mainbogen-evangelisch.de/modules/custom/vk_klaro/js/klaro-accept-all-fix.js

js mainbogen-evangelisch.de collected 2026-10-09 21:47:09 UTC 6,322 bytes, 168 lines download raw bytes

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.