PageSourceSearch

https://www.gew-mv.de/_assets/d1866ace0c6d8fb3fccd206010bf8c94/_s/klaro/klaro-config.js?1790581559

js gew-mv.de collected 2026-09-28 08:36:29 UTC 23,355 bytes, 534 lines download raw bytes

1// By default, Klaro will load the config from  a global "klaroConfig" variable.
2// You can change this by specifying the "data-klaro-config" attribute on your
3// script take, e.g. like this:
4// <script src="klaro.js" data-klaro-config="myConfigVariableName" />
5var klaroConfigHV = {
6    // With the 0.7.0 release we introduce a 'version' paramter that will make
7    // if easier for us to keep configuration files backwards-compatible in the future.
8    version: 1,
9
10    // You can customize the ID of the DIV element that Klaro will create
11    // when starting up. If undefined, Klaro will use 'klaro'.
12    elementID: 'klaro',
13
14    // You can override CSS style variables here. For IE11, Klaro will
15    // dynamically inject the variables into the CSS. If you still consider
16    // supporting IE9-10 (which you probably shouldn't) you need to use Klaro
17    // with an external stylesheet as the dynamic replacement won't work there.
18    styling: {
19        theme: ['bottom'],
20    },
21
22    // Setting this to true will keep Klaro from automatically loading itself
23    // when the page is being loaded.
24    noAutoLoad: false,
25
26    // Setting this to true will render the descriptions of the consent
27    // modal and consent notice are HTML. Use with care.
28    htmlTexts: true,
29
30    // Setting 'embedded' to true will render the Klaro modal and notice without
31    // the modal background, allowing you to e.g. embed them into a specific element
32    // of your website, such as your privacy notice.
33    embedded: false,
34
35    // You can group services by their purpose in the modal. This is advisable
36    // if you have a large number of services. Users can then enable or disable
37    // entire groups of services instead of having to enable or disable every service.
38    groupByPurpose: true,
39
40    // How Klaro should store the user's preferences. It can be either 'cookie'
41    // (the default) or 'localStorage'.
42    storageMethod: 'cookie',
43
44    // You can customize the name of the cookie that Klaro uses for storing
45    // user consent decisions. If undefined, Klaro will use 'klaro'.
46    cookieName: 'klaro-consenter',
47
48    // You can also set a custom expiration time for the Klaro cookie.
49    // By default, it will expire after 120 days.
50    cookieExpiresAfterDays: 365,
51
52    // You can change to cookie domain for the consent manager itself.
53    // Use this if you want to get consent once for multiple matching domains.
54    // If undefined, Klaro will use the current domain.
55    //cookieDomain: '.github.com',
56
57    // Defines the default state for services (true=enabled by default).
58    default: false,
59
60    // If "mustConsent" is set to true, Klaro will directly display the consent
61    // manager modal and not allow the user to close it before having actively
62    // consented or declines the use of third-party services.
63    mustConsent: true,
64
65    // Show "accept all" to accept all services instead of "ok" that only accepts
66    // required and "default: true" services
67    acceptAll: true,
68
69    // replace "decline" with cookie manager modal
70    hideDeclineAll: false,
71
72    // hide "learnMore" link
73    hideLearnMore: false,
74
75    // show cookie notice as modal
76    noticeAsModal: false,
77
78    // You can also remove the 'Realized with Klaro!' text in the consent modal.
79    // Please don't do this! We provide Klaro as a free open source tool.
80    // Placing a link to our website helps us spread the word about it,
81    // which ultimately enables us to make Klaro! better for everyone.
82    // So please be fair and keep the link enabled. Thanks :)
83    //disablePoweredBy: true,
84
85    // you can specify an additional class (or classes) that will be added to the Klaro `div`
86    //additionalClass: 'my-klaro',
87
88    // You can define the UI language directly here. If undefined, Klaro will
89    // use the value given in the global "lang" variable. If that does
90    // not exist, it will use the value given in the "lang" attribute of your
91    // HTML tag. If that also doesn't exist, it will use 'en'.
92    lang: 'de',
93
94    // You can overwrite existing translations and add translations for your
95    // service descriptions and purposes. See `src/translations/` for a full
96    // list of translations that can be overwritten:
97    // https://github.com/KIProtect/klaro/tree/master/src/translations
98
99    // Example config that shows how to overwrite translations:
100    // https://github.com/KIProtect/klaro/blob/master/src/configs/i18n.js
101    translations: {
102        // translationsed defined under the 'zz' language code act as default
103        // translations.
104        zz: {
105            privacyPolicyUrl: '/datenschutz',
106        },
107        // If you erase the "consentModal" translations, Klaro will use the
108        // bundled translations.
109        de: {
110            acceptOnce: 'Akzeptieren',
111            ok: 'Akzeptieren',
112            contextualConsent: {
113                acceptOnce: 'Akzeptieren',
114            },
115            privacyPolicyUrl: '/datenschutz',
116            consentNotice: {
117                description: 'Unsere Webseite verwendet Cookies. Diese haben zwei Funktionen: Zum einen sind sie erforderlich für die grundlegende Funktionalität unserer Website. Zum anderen können wir mit Hilfe der Cookies unsere Inhalte für dich immer weiter verbessern. Hierzu werden pseudonymisierte Daten von Website-Besucherinnen und -Besuchern gesammelt und ausgewertet. Das Einverständnis in die Verwendung der Cookies kannst du natürlich jederzeit widerrufen. Weitere Informationen zu Cookies auf unserer Website findest du in unserer <a href="/datenschutz"><strong>Datenschutzerklärung</strong></a> und im <a href="/impressum"><strong>Impressum</strong></a>.',
118                learnMore: 'Cookies verwalten'
119            },
120            consentModal: {
121                title: 'Dienste, die wir nutzen möchten:',
122                description:
123                    ' '
124            },            
125            // matomo: {
126            //     description: 'Sammeln von Besucherstatistiken',
127            // },
128            googleFonts: {
129                description: 'Web-Schriftarten von Google gehostet',
130            },
131            purposes: {
132                analytics: {
133                    title: 'Besucher-Statistiken',
134                    description: 'Diese Dienste verarbeiten persönliche Daten, um eine Verhaltensstatistik zu ermitteln damit wir unsere Webseite noch besser für Sie optimieren können.',
135                },
136                services: {
137                    title: 'Services',
138                    description: 'Diese Dienste laden Daten aus externen Quellen und übermitteln ggf. persönliche Daten.'
139                },
140                external: {
141                    title: 'Externe Anbieter',
142                    description: 'Diese Dienste laden Daten aus externen Quellen und übermitteln ggf. persönliche Daten.',
143                },
144                security: 'Sicherheit',
145                livechat: 'Live Chat',
146                advertising: 'Anzeigen von Werbung',
147                styling: 'Styling'
148            },
149        },
150    },
151
152    // This is a list of third-party services that Klaro will manage for you.
153    services: [
154        {
155            name: 'PHP Session',
156            purposes: ['functional'],
157            // Setting this to true will exempt this service from the "Accept All"
158            // flow, i.e. clicking on "Accept All" will not enable this service.
159            // contextualConsentOnly: true,
160            default: true,
161            required: true,
162        },
163        {
164            name: 'Turnstile',
165            purposes: ['functional'],
166            // Setting this to true will exempt this service from the "Accept All"
167            // flow, i.e. clicking on "Accept All" will not enable this service.
168            // contextualConsentOnly: true,
169            default: true,
170            required: true,
171        },
172        {
173            name: 'youtube',
174            purposes: ['external'],
175            // Setting this to true will exempt this service from the "Accept All"
176            // flow, i.e. clicking on "Accept All" will not enable this service.
177            // contextualConsentOnly: true,
178            default: false,
179            callback: function(consent, service) {
180                if(consent) {
181                    $('.contentVideo').each(function(){		
182                        var ytscript = $(this).find('iframe');
183                        //var ytsrc = $(ytscript).data('src');
184                        //$(ytscript).attr('src', ytsrc);
185                        $(ytscript).show();
186                        $(this).find('.noncookie-warning').remove();
187                        $(this).find('.embed-container').css('padding-bottom','56.25%');
188                    });
189                }
190            }
191        },
192        {
193            name: 'canva',
194            purposes: ['external'],
195            // Setting this to true will exempt this service from the "Accept All"
196            // flow, i.e. clicking on "Accept All" will not enable this service.
197            // contextualConsentOnly: true,
198            default: false,
199            callback: function(consent, service) {
200                if(consent) {
201                    $('.contentVideo').each(function(){
202                   	 	$(this).find('.canva-embed').show();
203                        var canvascript = $(this).find('.canva-embed').next('script');
204                        var canvasrc = $(canvascript).data('src');
205                        $(canvascript).attr('src', canvasrc);	
206                        $(this).find('.noncookie-warning').remove();			
207                    });	
208                }
209            }
210        },
211        {
212            name: 'yumpu',
213            purposes: ['external'],
214            // Setting this to true will exempt this service from the "Accept All"
215            // flow, i.e. clicking on "Accept All" will not enable this service.
216            // contextualConsentOnly: true,
217            default: false,
218            callback: function(consent, service) {
219                if(consent) {
220                    $('.contentVideo').each(function(){
221                   	 	$(this).find('#ypembedcontainer').show();
222                        var iframe = $(this).find('#ypembedcontainer').next('iframe');
223                        var iframesrc = $(iframe).data('src');
224                        $(iframe).attr('src', iframesrc);	
225                        var script = $(this).find('#ypembedcontainer').next('script');
226                        var scriptsrc = $(script).data('src');
227                        $(script).attr('src', scriptsrc);	
228                        $(this).find('.noncookie-warning').remove();			
229                    });	
230                }
231            }
232        },
233        {
234            name: 'bbbank',
235            purposes: ['external'],
236            // Setting this to true will exempt this service from the "Accept All"
237            // flow, i.e. clicking on "Accept All" will not enable this service.
238            // contextualConsentOnly: true,
239            default: false,
240            callback: function(consent, service) {
241                if(consent) {
242                    $('.contentVideo').each(function(){
243                        $(this).find('.noncookie-warning').remove();
244                    });
245                }
246            }
247        },
248        {
249            name: 'datawrapper',
250            purposes: ['external'],
251            // Setting this to true will exempt this service from the "Accept All"
252            // flow, i.e. clicking on "Accept All" will not enable this service.
253            // contextualConsentOnly: true,
254            default: false,
255        },
256        {
257            name: 'rapidmail',
258            purposes: ['external'],
259            // Setting this to true will exempt this service from the "Accept All"
260            // flow, i.e. clicking on "Accept All" will not enable this service.
261            // contextualConsentOnly: true,
262            default: false,
263        },
264        {
265            name: 'disqus',
266            purposes: ['external'],
267            // Setting this to true will exempt this service from the "Accept All"
268            // flow, i.e. clicking on "Accept All" will not enable this service.
269            // contextualConsentOnly: true,
270            default: false,
271        },
272        {
273            name: 'instagram',
274            purposes: ['external'],
275            // Setting this to true will exempt this service from the "Accept All"
276            // flow, i.e. clicking on "Accept All" will not enable this service.
277            // contextualConsentOnly: true,
278            default: false,
279        },
280        {
281            name: 'openlayers',
282            purposes: ['external'],
283            // Setting this to true will exempt this service from the "Accept All"
284            // flow, i.e. clicking on "Accept All" will not enable this service.
285            // contextualConsentOnly: true,
286            default: false,
287        },
288        {
289            name: 'knightlab',
290            purposes: ['external'],
291            // Setting this to true will exempt this service from the "Accept All"
292            // flow, i.e. clicking on "Accept All" will not enable this service.
293            // contextualConsentOnly: true,
294            default: false,
295        },
296        {
297            name: 'soundcloud',
298            purposes: ['external'],
299            // Setting this to true will exempt this service from the "Accept All"
300            // flow, i.e. clicking on "Accept All" will not enable this service.
301            // contextualConsentOnly: true,
302            default: false,
303        },
304        {
305            name: 'facebook',
306            purposes: ['analytics'],
307            // Setting this to true will exempt this service from the "Accept All"
308            // flow, i.e. clicking on "Accept All" will not enable this service.
309            // contextualConsentOnly: true,
310            default: false,
311            cookies: [
312                '_fbp'
313            ],
314            /*
315            You can define an optional callback function that will be called each time the
316            consent state for the given service changes. The consent value will be passed as
317            the first parameter to the function (true=consented). The `service` c
317onfig will
318            be passed as the second parameter.
319            */
320            callback: function(consent, service) {
321                if(consent) {
322                    $('.contentVideo').each(function(){
323                        var fbscript = $(this).find('#fb-root').next('script');
324                        var fbsrc = $(fbscript).data('src');
325                        $(fbscript).attr('src', fbsrc);
326                        $(this).find('.noncookie-warning').remove();				
327                    });	
328                }
329            },
330        },
331        {
332            name: 'twitter',
333            purposes: ['external'],
334            // Setting this to true will exempt this service from the "Accept All"
335            // flow, i.e. clicking on "Accept All" will not enable this service.
336            // contextualConsentOnly: true,
337            default: false,
338            /*
339            You can define an optional callback function that will be called each time the
340            consent state for the given service changes. The consent value will be passed as
341            the first parameter to the function (true=consented). The `service` config will
342            be passed as the second parameter.
343            */
344            callback: function(consent, service) {
345                if(consent) {
346                    $('.contentVideo').each(function(){
347                        var tweetscript = $(this).find('.twitter-tweet').next('script');
348                        var timelinescript = $(this).find('.twitter-hashtag-button').next('script');
349                        var tweetsrc = $(tweetscript).data('src');
350                        var timelinesrc = $(timelinescript).data('src');
351                        $(tweetscript).attr('src', tweetsrc);
352                        $(timelinescript).attr('src', timelinesrc);
353                        $(this).find('.noncookie-warning').remove();				
354                    });	
355                }
356            },
357        },
358        {
359            name: 'googleTagManager',
360            purposes: ['marketing'],
361            translations: {
362                zzz: {
363                    title: 'Google Tag Manager'
364                },
365                de: {
366                    title: 'Google Tag Manager'
367                }
368            },
369            onAccept: `
370                // we notify the tag manager about all services that were accepted. You can define
371                // a custom event in GTM to load the service if consent was given.
372                for(let k of Object.keys(opts.consents)){
373                    if (opts.consents[k]){
374                        let eventName = 'klaro-'+k+'-accepted'
375                        dataLayer.push({'event': eventName})
376                    }
377                }
378                // if consent for Google Analytics was granted we enable analytics storage
379                if (opts.consents[opts.vars.googleAnalyticsName || 'googleAnalytics']){
380                    console.log("Google analytics usage was granted")
381                    gtag('consent', 'update', {'analytics_storage': 'granted'})
382                }
383                // if consent for Google Ads was granted we enable ad storage
384                if (opts.consents[opts.vars.adStorageName || 'google-ads']){
385                    console.log("Google ads usage was granted")
386                    gtag('consent', 'update', {'ad_storage': 'granted'})
387                }
388            `,
389            onInit: `
390                // initialization code here (will be executed only once per page-load)
391                window.dataLayer = window.dataLayer || [];
392                window.gtag = function(){dataLayer.push(arguments)}
393                gtag('consent', 'default', {'ad_storage': 'granted'})
394                gtag('set', 'ads_data_redaction', false)
395            `,
396            onDecline: `
397                // initialization code here (will be executed only once per page-load)
398                window.dataLayer = window.dataLayer || [];
399                window.gtag = function(){dataLayer.push(arguments)}
400                gtag('consent', 'default', {'ad_storage': 'denied', 'analytics_storage': 'denied'})
401                gtag('set', 'ads_data_redaction', true)
402            `,
403            vars: {
404                googleAnalytics: 'googleAnalytics'
405            }
406        },
407        {
408            // In GTM, you should define a custom event trigger named `klaro-google-analytics-accepted` which should trigger the Google Analytics integration.
409            name: 'googleAnalytics',
410            purposes: ['marketing'],
411            cookies: [
412                /^_ga(_.*)?/ // we delete the Google Analytics cookies if the user declines its use
413            ],
414            translations: {
415                zzz: {
416                    title: 'Google Analytics'
417                },
418                de: {
419                    title: 'Google Analytics'
420                }
421            },
422        },
423        {
424
425            /*
426            Each service must have a unique name. Klaro will look for HTML elements with a
427            matching 'data-name' attribute to identify elements that belong to this service.
428            */
429            name: 'matomo',
430
431            /*
432            If 'default' is set to 'true', the service will be enabled by default. This
433            overrides the global 'default' setting.
434            */
435            default: false,
436
437            /*
438            The purpose(s) of this service that will be listed on the consent notice. Do not
439            forget to add translations for all purposes you list here.
440            */
441            purposes: ['analytics'],
442
443            cookies: [
444                /*
445                you an either only provide a cookie name or regular expression (regex) or a list
446                consisting of a name or regex, a path and a cookie domain. Providing a path and
447                domain is necessary if you have services that set cookies for a path that is not
448                "/", or a domain that is not the current domain. If you do not set these values
449                properly, the cookie can't be deleted by Klaro, as there is no way to access the
450                path or domain of a cookie in JS. Notice that it is not possible to delete
451                cookies that were set on a third-party domain, or cookies that have the HTTPOnly
452                attribute: https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie#new-
453                cookie_domain
454                */
455
456                /*
457                This rule will match cookies that contain the string '_pk_'
458                */
459                /^_pk_.*$/,
460
461                /*
462                This rule will match all cookies named 'piwik_ignore' that are set on the path
463                '/' on the current domain
464                */
465                'piwik_ignore',
466            ],
467
468            /*
469            You can define an optional callback function that will be called each time the
470            consent state for the given service changes. The consent value will be passed as
471            the first parameter to the function (true=consented). The `service` config will
472            be passed as the second parameter.
473            */
474            callback: function(consent, service) {
475                console.log(
476                    'User consent for service ' + service.name + ': consent=' + consent
477                );
478            },
479
480            /*
481            If 'required' is set to 'true', Klaro will not allow this service to be disabled
482            by the user. Use this for services that are always required for your website to
483            function (e.g. shopping cart cookies).
484            */
485            required: false,
486
487            /*
488            If 'optOut' is set to 'true', Klaro will load this service even before the user
489            has given explicit consent. We strongly advise against this.
490            */
491            optOut: false,
492
493            /*
494            If 'onlyOnce' is set to 'true', the service will only be executed once
495            regardless how often the user toggles it on and off. This is relevant e.g. for
496            tracking scripts that would generate new page view events every time Klaro
497            disables and re-enables them due to a consent change by the user.
498            */
499            onlyOnce: true,
500        },
501    ]
502};
503
504
505var klaroConfigBW = klaroConfigHV;
506var klaroConfigTH = klaroConfigHV;
507var klaroConfigHB = klaroConfigHV;
508var klaroConfigBY = klaroConfigHV;
509var klaroConfigRLP = klaroConfigHV;
510var klaroConfigSN = klaroConfigHV;
511var klaroConfigMV = klaroConfigHV;
512var klaroConfigSH = klaroConfigHV;
513var klaroConfigNDS = klaroConfigHV;
514var klaroConfigBE = klaroConfigHV;
515var klaroConfigLSA = klaroConfigHV;
516var klaroConfigSAA = klaroConfigHV;
517
518// Hack damit keine Referenz erzeugt wird
519var klaroConfigMitgliederoffensive = JSON.parse(JSON.stringify(klaroConfigHV));
520
521klaroConfigMitgliederoffensive.services.push({
522    name: 'advertising',
523    purposes: ['marketing'],
524    cookies: [
525    ],
526    translations: {
527        zzz: {
528            title: 'Programmatic Advertising'
529        },
530        de: {
531            title: 'Programmatische Werbung'
532        }
533    },
534});

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.