PageSourceSearch

https://www.sovd-rlp-saarland.de/_assets/279cee4ecef4166e206be5912…/JavaScript/Frontend/Klaro/klaro.config.js

js sovd-rlp-saarland.de collected 2026-10-08 21:36:46 UTC 25,333 bytes, 595 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-config" attribute on your
3// script take, e.g. like this:
4// <script src="klaro.js" data-config="myConfigVariableName" />
5var klaroConfig = {
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: ['light', 'top', 'wide'],
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: false,
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',
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    // You can change to cookie path for the consent manager itself.
58    // Use this to restrict the cookie visibility to a specific path.
59    // If undefined, Klaro will use '/' as cookie path.
60    //cookiePath: '/',
61
62    // Defines the default state for services (true=enabled by default).
63    default: false,
64
65    // If "mustConsent" is set to true, Klaro will directly display the consent
66    // manager modal and not allow the user to close it before having actively
67    // consented or declines the use of third-party services.
68    mustConsent: false,
69
70    // Show "accept all" to accept all services instead of "ok" that only accepts
71    // required and "default: true" services
72    acceptAll: true,
73
74    // replace "decline" with cookie manager modal
75    hideDeclineAll: false,
76
77    // hide "learnMore" link
78    hideLearnMore: false,
79
80    // show cookie notice as modal
81    noticeAsModal: true,
82
83    // You can also remove the 'Realized with Klaro!' text in the consent modal.
84    // Please don't do this! We provide Klaro as a free open source tool.
85    // Placing a link to our website helps us spread the word about it,
86    // which ultimately enables us to make Klaro! better for everyone.
87    // So please be fair and keep the link enabled. Thanks :)
88    disablePoweredBy: true,
89
90    // you can specify an additional class (or classes) that will be added to the Klaro `div`
91    //additionalClass: 'my-klaro',
92
93    // You can define the UI language directly here. If undefined, Klaro will
94    // use the value given in the global "lang" variable. If that does
95    // not exist, it will use the value given in the "lang" attribute of your
96    // HTML tag. If that also doesn't exist, it will use 'en'.
97    //lang: 'en',
98
99    // You can overwrite existing translations and add translations for your
100    // service descriptions and purposes. See `src/translations/` for a full
101    // list of translations that can be overwritten:
102    // https://github.com/KIProtect/klaro/tree/master/src/translations
103
104    // Example config that shows how to overwrite translations:
105    // https://github.com/KIProtect/klaro/blob/master/src/configs/i18n.js
106    translations: {
107        // translationsed defined under the 'zz' language code act as default
108        // translations.
109        zz: {
110            privacyPolicyUrl: '/privacy',
111        },
112        // If you erase the "consentModal" translations, Klaro will use the
113        // bundled translations.
114        de: {
115            acceptAll: 'Alle annehmen',
116            acceptSelected: 'Ausgewählte annehmen',
117            decline: 'Alle ablehnen',
118            ok: 'Alle annehmen',
119            privacyPolicyUrl: '/datenschutz',
120            privacyPolicy: {
121                name: 'Datenschutzerklärung',
122                text: '{privacyPolicy} gern nutzen. Bis auf notwendige Dienste können Sie alles deaktivieren, dies kann jedoch zu einer eingeschränkten Funktionalität der Webseite führen.',
123            },
124            CookieConsent: {
125                description: 'Speichert Ihre Einwilligung zur Verwendung von Cookies.',
126            },
127            consentModal: {
128                title: 'Dienste, die wir gerne nutzen möchten',
129                description: 'Die nachfolgenden Dienste und Cookies möchten wir gemäß unserer ',
130            },
131            contextualConsent:{
132                description: 'Möchten Sie von {title} bereitgestellte externe Inhalte laden?'
133            },
134            consentNotice: {
135                changeDescription: 'Seit Ihrem letzten Besuch gab es Änderungen, bitte erneuern Sie Ihre Zustimmung.',
136                description: '<span class="h3 d-block">Cookie-Hinweis und Einstellungen</span> ' +
137                    'Wir verwenden Cookies und Dienste von Drittanbietern, um Ihnen einen optimalen Service zu bieten und auf Basis von Analysen unsere Webseiten weiter zu verbessern. Sie können selbst entscheiden, welche Cookies und Dienste wir verwenden dürfen. Natürlich haben Sie jederzeit die Möglichkeit, die bereits erteilte Einwilligung zu widerrufen.\n' +
138                    'Weitere Informationen, auch zur Datenverarbeitung durch Drittanbieter, finden Sie in unserer {privacyPolicy} und im <a href="/impressum">Impressum</a>.',
139                learnMore: 'Anpassen',
140            },
141            PHPSESSID: {
142                description: 'Dieses Cookie speichert Ihre aktuelle Sitzung mit Bezug auf PHP-Anwendungen und gewährleistet so, dass alle Funktionen der Seite, die auf der PHP-Programmiersprache basieren, vollständig angezeigt werden können.',
143            },
144            feTypo3User: {
145                description: 'Dieses Cookie wird für die unverwechselbare Identifizierung eines Anwenders gesetzt. Es bietet dem Anwender bessere Bedienerführung, z.B. Speicherung von Sucheinstellungen oder Formulardaten. Typischerweise wird dieses Cookie beim Schließen des Browsers gelöscht.',
146            },
147            googleTagManager: {
148                description: 'Der Google Tag Manager dient als Tool der Verwaltung und Steuerung von Cookies, Conversion-Pixel oder Tracking-Codes von Programmen wie z.B. Google Analytics.',
149            },
150            googleAnalytics: {
151                description: 'Analyse der Besucher auf unserer Webseite. Damit erhalten wir ein besseres Verständnis über unsere Besucher und können damit unser Produkt und unser Marketing besser darauf anpassen.',
152            },
153            googleMaps: {
154                description: 'Erlaubt das Einbinden von Karten die von Google gehostet werden.',
155            },
156            matomo: {
157                description: 'Sammeln von Besucherstatistiken',
158            },
159            twitter: {
160                description: 'Erlaubt das Daten an Twitter gesendet werden',
161            },
162            instagram: {
163                description: 'Erlaubt das Einbinden von Instagram Inhalten.',
164            },
165            youtube: {
166                description: 'Erlaubt das Einbinden von externen Youtube Videos.',
167            },
168            vimeo: {
169                description: 'Erlaubt das Einbinden von externen Vimeo Videos.',
170            },
171            podigee: {
172                description: 'Erlaubt das Einbinden von externen Podcasts die bei Podigee gehostet werden.',
173            },
174            webFonts: {
175                description: 'Erlaubt das Einbinden von Web-Schriftarten die von externen Drittanbieter gehostet werden.',
176            },
177            contradictTool: {
178                title: 'Codiac (Widerspruchs-Tool)',
179                description: 'Erlaubt das Einbinden eines Widerspruchs-Tools, welches extern gehostet wird.',
180            },
181            careLevelCalculator: {
182                title: 'Codiac (Pflegegradrechner)',
183                description: 'Erlaubt das Einbinden eines Pflegegradrechners, welches extern gehostet wird.',
184            },
185            purposes: {
186                required: 'Notwendig',
187                marketing: 'Marketing',
188                external: 'externe Dienste',
189                functional: 'Funktional',
190                analytics: 'Besucher-Statistiken',
191                security: 'Sicherheit',
192                livechat: 'Live Chat',
193                advertising: 'Anzeigen von Werbung',
194                styling: 'Darstellung',
195            },
196        },
197        en: {
198            CookieConsent: {
199                description: 'Saves your consent to the use of cookies.',
200            },
201            consentModal: {
202                description: 'Here you can see and customize the information that we collect about you.',
203            },
204            PHPSESSID: {
205                description: 'This cookie saves your current session with reference to PHP applications, thu
205s ensuring that all functions of the page based on the PHP programming language can be fully displayed.',
206            },
207            feTypo3User: {
208                description: 'This cookie is set for the unmistakable identification of a user. It provides the user with better user guidance, e.g. saving search settings or form data. Typically, this cookie is deleted when the browser is closed.',
209            },
210            googleTagManager: {
211                description: 'Analyse von Browsing-Verhalten zum Platzieren von Werbung',
212            },
213            googleAnalytics: {
214                description: 'Collecting of visitor statistics',
215            },
216            googleMaps: {
217                description: 'Maps by google',
218            },
219            matomo: {
220                description: 'Collecting of visitor statistics',
221            },
222            twitter: {
223                description: 'show twitter',
224            },
225            instagram: {
226                description: 'show instagram posts or reels',
227            },
228            youtube: {
229                description: 'show videos from youtube',
230            },
231            vimeo: {
232                description: 'show videos from vimeo',
233            },
234            podigee: {
235                description: 'Allows you to embed external podcasts hosted by Podigee.',
236            },
237            webFonts: {
238                description: 'Web-Fonts loading from extern server',
239            },
240            contradictTool: {
241                title: 'Codiac (Contradict-Tool)',
242                description: 'Allows the inclusion of an contradict tool, which is hosted externally.',
243            },
244            careLevelCalculator: {
245                title: 'Codiac (Care-level Calculator)',
246                description: 'Allows the integration of a care level calculator, which is hosted externally.',
247            },
248            purposes: {
249                required: 'Required',
250                functional: 'Functional',
251                external: 'external Services',
252                analytics: 'Analytics',
253                security: 'Security',
254                livechat: 'Livechat',
255                advertising: 'Advertising',
256                styling: 'Styling',
257            },
258        },
259    },
260
261    // This is a list of third-party services that Klaro will manage for you.
262    services: [
263        {
264            name: 'CookieConsent',
265            title: 'Cookie Consent',
266            required: true,
267            purposes: ['required'],
268            cookies: [
269                ['klaro', '/', 'localhost'],
270            ],
271        },
272
273        {
274            name: 'PHPSESSID',
275            title: 'PHPSESSID',
276            required: true,
277            purposes: ['required'],
278            cookies: [
279                ['PHPSESSID', '/', 'localhost'],
280            ],
281        },
282
283        // {
284        //     name: 'feTypo3User',
285        //     title: 'fe_typo3_user',
286        //     required: true,
287        //     purposes: ['required'],
288        //     cookies: [
289        //         ['fe_typo3_user', '/', 'localhost'],
290        //     ],
291        // },
292
293        // {
294        //     name: 'googleTagManager',
295        //     title: "Google Tag Manager",
296        //     required: true,
297        //     purposes: ['required'],
298        //     manages: ['googleAnalytics'],
299        //     onAccept: `
300        //         // we notify the tag manager about all services that were accepted. You can define
301        //         // a custom event in GTM to load the service if consent was given.
302        //         for(let k of Object.keys(opts.consents)){
303        //             if (opts.consents[k]){
304        //                 let eventName = 'klaro-'+k+'-accepted'
305        //                 dataLayer.push({'event': eventName})
306        //             }
307        //         }
308        //         // if consent for Google Analytics was granted we enable analytics storage
309        //         if (opts.consents[opts.vars.googleAnalyticsName || 'google-analytics']){
310        //             console.log("Google analytics usage was granted")
311        //             gtag('consent', 'update', {'analytics_storage': 'granted'})
312        //             console.info(opts);
313        //         }
314        //         // if consent for Google Ads was granted we enable ad storage
315        //         if (opts.consents[opts.vars.adStorageName || 'google-ads']){
316        //             console.log("Google ads usage was granted")
317        //             gtag('consent', 'update', {'ad_storage': 'granted'})
318        //         }
319        //     `,
320        //     onInit: `
321        //         // initialization code here (will be executed only once per page-load)
322        //         window.dataLayer = window.dataLayer || [];
323        //         window.gtag = function(){dataLayer.push(arguments)}
324        //         gtag('consent', 'default', {'ad_storage': 'denied', 'analytics_storage': 'denied'})
325        //         gtag('set', 'ads_data_redaction', true)
326        //     `,
327        //     onDecline: `
328        //         // initialization code here (will be executed only once per page-load)
329        //         window.dataLayer = window.dataLayer || [];
330        //         window.gtag = function(){dataLayer.push(arguments)}
331        //         gtag('consent', 'default', {'ad_storage': 'denied', 'analytics_storage': 'denied'})
332        //         gtag('set', 'ads_data_redaction', true)
333        //     `,
334        //     vars: {
335        //         googleAnalytics: 'googleAnalytics'
336        //     }
337        // },
338        //
339        // {
340        //     // In GTM, you should define a custom event trigger named `klaro-google-analytics-accepted` which should trigger the Google Analytics integration.
341        //     name: 'googleAnalytics',
342        //     title: 'Google Analytics',
343        //     purposes: ['analytics'],
344        //     cookies: [
345        //         // Domain must be right!
346        //         ['_gat', '/', 'localhost'],
347        //         ['_ga', '/', 'localhost'],
348        //         ['_gt', '/', 'localhost'],
349        //         ['_gid', '/', 'localhost'],
350        //         // ['^_g(_.*)?', '/', '.ddev.site'], // we delete the Google Analytics cookies if the user declines its use
351        //     ],
352        //     // callback: function(consent, service) {
353        //     //     // This is an example callback function.
354        //     //     // console.log(
355        //     //     //     'User consent for service ' + service.name + ': consent=' + consent
356        //     //     // );
357        //     // }
358        // },
359
360        {
361            name: 'googleTagManager',
362            title: 'Google Tag Manager',
363            purposes: ['marketing'],
364            onAccept: `
365                // we notify the tag manager about all services that were accepted. You can define
366                // a custom event in GTM to load the service if consent was given.
367                for(let k of Object.keys(opts.consents)){
368                    if (opts.consents[k]){
369                        let eventName = 'klaro-'+k+'-accepted'
370                        dataLayer.push({'event': eventName})
371                    }
372                }
373            `,
374            onInit: `
375                // initialization code here (will be executed only once per page-load)
376                window.dataLayer = window.dataLayer || [];
377                window.gtag = function(){dataLayer.push(arguments)}
378                gtag('consent', 'default', {'ad_storage': 'denied', 'analytics_storage': 'denied', 'ad_user_data': 'denied', 'ad_personalization': 'denied'})
379                gtag('set', 'ads_data_redaction', true)
380            `,
381        },
382        {
383            // In GTM, you should define a custom event trigger named `klaro-google-analytics-accepted` which should trigger the Google Analytics integration.
384            name: 'googleAnalytics',
385            cookies: [
386                /^_ga(_.*)?/ // we delete the Google Analytics cookies if the user declines its use
387            ],
388            purposes: ['marketing'],
389            onAccept: `
390                // we grant analytics storage
391                gtag('consent', 'update', {
392                    'analytics_storage': 'granted',
393                })
394            `,
395            onDecline: `
396                // we deny analytics storage
397                gtag('consent', 'update', {
398                    'analytics_storage': 'denied',
399                })
400            `,
401        },
402        {
403            name: 'googleAds',
404            cookies: [],
405            onAccept: `
406                // we grant ad storage and personalization
407                gtag('consent', 'update', {
408                    'ad_storage': 'granted',
409                    'ad_user_data': 'granted',
410                    'ad_personalization': 'granted'
411                })
412            `,
413            onDecline: `
414                // we decline ad storage and personalization
415                gtag('consent', 'update', {
416                    'ad_storage': 'denied',
417                    'ad_user_data': 'denied',
418                    'ad_personalization': 'denied'
419                })
420            `,
421            purposes: ['marketing'],
422        },
423
424        {
425            name: 'matomo',
426            title: 'Matomo',
427            default: false,
428            required: false,
429            optOut: false,
430            onlyOnce: true,
431            purposes: ['analytics'],
432            cookies: [
433                // you can also explicitly provide a path and a domain for
434                // a given cookie. This is necessary if you have services that
435                // set cookies for a path that is not "/" or a domain that
436                // is not the current domain. If you do not set these values
437                // properly, the cookie can't be deleted by Klaro
438                // (there is no way to access the path or domain of a cookie in JS)
439                // Notice that it is not possible to delete cookies that were set
440                // on a third-party domain! See the note at mdn:
441                // https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie#new-cookie_domain
442                [/^_pk_.*$/, '/', '.sovd.de'], //for the production version
443                [/^_pk_.*$/, '/', 'localhost'], //for the local version
444                'piwik_ignore',
445            ],
446            callback: function(consent, service) {
447                // console.log(
448                //     'User consent for service ' + service.name + ': consent=' + consent
449                // );
450                // To be used in conjunction with Matomo 'requireCookieConsent' Feature, Matomo 3.14.0 or newer
451                // For further Information see https://matomo.org/faq/new-to-piwik/how-can-i-still-track-a-visitor-without-cookies-even-if-they-decline-the-cookie-consent/
452                if(typeof _paq != "undefined") {
453                    if(consent==true){
454                        _paq.push(['rememberCookieConsentGiven']);
455                    } else {
456                        _paq.push(['forgetCookieConsentGiven']);
457                    }
458                }
459            },
460        },
461
462        {
463            name: 'googleMaps',
464            title: 'Google Karten',
465            default: false,
466            purposes: ['marketing'],
467        },
468
469        // {
470        //     name: 'webFonts',
471        //     title: 'Web-Schriften',
472        //     default: false,
473        //     purposes: ['styling'],
474        //     callback: function(consent, service) {
475        //         // This is an example callback function.
476        //         // console.log(
477        //         //     'User consent for service ' + service.name + ': consent=' + consent
478        //         // );
479        //         if(consent === true){
480        //             function addWebfont() {
481        //                 let link = document.createElement('link');
482        //                 link.rel = "stylesheet";
483        //                 link.type = "text/css";
484        //                 link.href = "https://fonts.googleapis.com/css2?family=Cookie&display=swap";
485        //                 link.id = "webFonts";
486        //
487        //                 document.head.appendChild(link);
488        //                 document.getElementById("webFonts").setAttribute("data-name", 'webFonts');
489        //             }
490        //             addWebfont();
491        //         } else {
492        //             return false;
493        //         }
494        //     },
495        // },
496
497        // {
498        //     name: 'twitterFollow',
499        //     title: 'Twitter Folgen Button',
500        //     default: false,
501        //     purposes: ['marketing'],
502        // },
503
504        // {
505        //     name: 'facebookShare',
506        //     title: 'Facebook Teilen Button',
507        //     default: false,
508        //     purposes: ['marketing'],cookies: [
509        //         ['fr', '/', '.facebook.com'],
510        //         ['dafr', '/', '.facebook.com'],
511        //     ],
512        // },
513
514        {
515            name: 'youtube',
516            title: 'Youtube Videos',
517            default: false,
518            purposes: ['marketing'],
519            contextualConsentOnly: true,
520            cookies: [
521                ['SID', '/', '.youtube.com'],
522                ['APISID', '/', '.youtube.com'],
523                ['SAPISID', '/', '.youtube.com'],
524            ],
525        },
526
527        {
528            name: 'instagram',
529            title: 'Instagram',
530            default: false,
531            purposes: ['marketing'],
532            contextualConsentOnly: true,
533            cookies: [
534
535            ],
536        },
537
538        {
539            name: 'vimeo',
540            title: 'Vimeo Videos',
541            default: false,
542            purposes: ['marketing'],
543            contextualConsentOnly: true,
544            cookies: [
545
546            ],
547        },
548
549        {
550            name: 'podigee',
551            title: 'Podigee Podcast',
552            default: false,
553            purposes: ['marketing'],
554            contextualConsentOnly: true,
555            // callback: function(consent, service) {
556            //     console.log(
557            //         'User consent for service ' + service.name + ': consent=' + consent
558            //     );
559            // },
560        },
561
562        {
563            name: 'contradictTool',
564            title: 'Widerspruchs-Tool',
565            default: false,
566            purposes: ['external'],
567            contextualConsentOnly: true,
568            cookies: [
569
570            ],
571            // callback: function(consent, service) {
572            //     console.log(
573            //         'User consent for service ' + service.name + ': consent=' + consent
574            //     );
575            // },
576        },
577
578        {
579            name: 'careLevelCalculator',
580            title: 'Pflegegradrechner',
581            default: false,
582            purposes: ['external'],
583            contextualConsentOnly: true,
584            cookies: [
585
586            ],
587            // callback: function(consent, service) {
588            //     console.log(
589            //         'User consent for service ' + service.name + ': consent=' + consent
590            //     );
591            // },
592        },
593
594    ],
595};

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.