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.