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.