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 // it 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: 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', 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: 120, 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: '.theurer.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: true, 76 77 // hide "learnMore" link 78 hideLearnMore: false, 79 80 // show cookie notice as modal 81 noticeAsModal: false, 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: '/en/meta/privacy-policy/', 111 linkedin: { 112 description: 'Registers statistical data about the behavior of visitors on the website.', 113 }, 114 zopim: { 115 description: 'Provides a way to live chat with our staff.', 116 }, 117 googlemaps: { 118 title: 'Google Maps', 119 description: 'Display of locations on a map.', 120 }, 121 'google-tag-manager': { 122 title: 'Google Tag Manager', 123 description: 'We use the Google Tag Manager to easily manage website tags (e.g. for Google Analytics).' 124 }, 125 'google-ads': { 126 title: 'Google AdWords', 127 description: 'Management of advertising conversion.', 128 }, 129 'google-analytics': { 130 title: 'Google Analytics', 131 description: 'We use Google Analytics to analyze and improve the use of this website.' 132 }, 133 'sales-viewer': { 134 title: 'Sales Viewer', 135 description: 'We use Sales Viewer to analyze and improve the use of this website.' 136 }, 137 'lead-forensics': { 138 title: 'Lead Forensics', 139 description: 'We use Lead Forensics to analyze and improve the use of this website.' 140 }, 141 'lead-rebel': { 142 title: 'Lead Rebel', 143 description: 'We use Lead Rebel to analyze and improve the use of this website.' 144 }, 145 'leadinfo': { 146 title: 'Leadinfo', 147 description: 'We use Leadinfo to analyze and improve the use of this website.' 148 }, 149 }, 150 // If you erase the "consentModal" translations, Klaro will use the 151 // bundled translations. 152 de: { 153 privacyPolicyUrl: '/de/meta/datenschutzerklaerung/', 154 ok: 'Alle akzeptieren', 155 consentModal: { 156 title: 'Cookie-Einstellungen anpassen', 157 description: 'Hier können Sie eine eigenständige Konfiguration der zugelassenen Cookies vornehmen.', 158 }, 159 consentNotice: { 160 title: '', 161 description: '<strong>Zustimmung für optimale Nutzung</strong><br><br>Um Ihnen ein optimales Website-Erlebnis zu bieten, werden Cookies bzgl. {purposes} verwendet.<br><br>Ihre Einwilligungs-Einstellungen können durch Klicken auf "Cookie-Einstellungen ändern" angepasst werden. Sie können Ihre Zustimmung später jederzeit ändern oder zurückziehen.<br><br>Weitere Informationen erhalten Sie in unseren <a href="/de/meta/datenschutzerklaerung/">Datenschutzhinweisen</a>.', 162 learnMore: 'Cookie-Einstellungen ändern', 163 }, 164 contextualConsent: { 165 description: 'Möchten Sie von {title} bereitgestellte externe Inhalte laden?\r\nBeachten Sie dazu bitte unsere Datenschutzerklärung!', 166 }, 167 klaro: { 168 title: 'Klaro! Cookie Consent Manager', 169 description: 'Wir speichern Ihre persönlichen Cookie-Einstellungen.' 170 }, 171 linkedin: { 172 description: 'Registriert statistische Daten über das Verhalten der Besucher auf der Webseite.', 173 }, 174 zopim: { 175 description: 'Bietet eine Möglichkeit zum Livechat mit unseren Mitarbeitern.', 176 }, 177 googlemaps: { 178 title: 'Google Maps', 179 description: 'Darstellung von Standorten in einer Karte.', 180 }, 181 'google-tag-manager': { 182 title: 'Google Tag Manager', 183 description: 'Zur einfachen Verwaltung von Website-Tags (bspw. für Google-Analytics) nutzen wir den Google Tag Manager.' 184 }, 185 'google-ads': { 186 title: 'Google AdWords', 187 description: 'Verwaltung von Werbeanzeigen-Conversions.', 188 }, 189 'google-analytics': { 190 title: 'Google Analytics', 191 description: 'Wir nutzen Google Analytics, um die Nutzung dieser Website analysieren und verbessern zu können.' 192 }, 193 'sales-viewer': { 194 title: 'Sales Viewer', 195 description: 'Wir nutzen Sales Viewer, um die Nutzung dieser Website analysieren und verbessern zu können.' 196 }, 197 'lead-forensics': { 198 title: 'Lead Forensics', 199 description: 'Wir nutzen Lead Forensics, um die Nutzung dieser Website analysieren und verbessern zu können.' 200 }, 201 'lead-rebel': { 202 title: 'Lead Rebel', 203 description: 'Wir nutzen Lead Rebel, um die Nutzung dieser Website analysieren und verbessern zu können' 204 }, 205 'leadinfo': { 206 title: 'Leadinfo', 207 description: 'Wir nutzen Leadinfo, um die Nutzung dieser Website analysieren und verbessern zu können.' 208 }, 209 purposes: { 210 settings: 'Funktional notwendige Cookies', 211 analytics: 'Website Analyse & Marketing', 212 livechat: 'Live Chat', 213 externalmedia: 'Externe Medien', 214 }, 215 }, 216 en: { 217 ok: 'Accept all', 218 consentModal: {
219 title: 'Change cookie-settings', 220 description: 'Here you can set your own configuration of the permitted cookies.', 221 }, 222 consentNotice: { 223 description: '<strong>Consent for optimal use</strong><br><br>In order to offer you an optimal website experience, cookies are used for {purposes}.<br><br>Your consent settings can be adjusted by clicking on "Change cookie-settings". You can change or withdraw your consent at any time later.<br><br>Further information can be found in our <a href="/en/meta/privacy-policy/">data protection information</a>.', 224 learnMore: 'Change cookie-settings', 225 }, 226 contextualConsent: { 227 description: 'Do you want to load external content supplied by {title}?\r\nPlease note our privacy policy!', 228 }, 229 klaro: { 230 title: 'Klaro! Cookie Consent Manager', 231 description: 'We save your personal cookie settings.' 232 }, 233 linkedin: { 234 description: 'Registers statistical data about the behavior of visitors on the website.', 235 }, 236 zopim: { 237 description: 'Provides a way to live chat with our staff.', 238 }, 239 googlemaps: { 240 title: 'Google Maps', 241 description: 'Display of locations on a map.', 242 }, 243 'google-tag-manager': { 244 title: 'Google Tag Manager', 245 description: 'We use the Google Tag Manager to easily manage website tags (e.g. for Google Analytics).' 246 }, 247 'google-ads': { 248 title: 'Google AdWords', 249 description: 'Management of advertising conversion.', 250 }, 251 'google-analytics': { 252 title: 'Google Analytics', 253 description: 'We use Google Analytics to analyze and improve the use of this website.' 254 }, 255 'sales-viewer': { 256 title: 'Sales Viewer', 257 description: 'We use Sales Viewer to analyze and improve the use of this website.' 258 }, 259 'lead-forensics': { 260 title: 'Lead Forensics', 261 description: 'We use Lead Forensics to analyze and improve the use of this website.' 262 }, 263 'lead-rebel': { 264 title: 'Lead Rebel', 265 description: 'We use Lead Rebel to analyze and improve the use of this website.' 266 }, 267 'leadinfo': { 268 title: 'Leadinfo', 269 description: 'We use Leadinfo to analyze and improve the use of this website.' 270 }, 271 purposes: { 272 settings: 'Functionally necessary cookies', 273 analytics: 'Website analysis & marketing', 274 livechat: 'Livechat', 275 externalmedia: 'External media', 276 }, 277 }, 278 }, 279 280 // This is a list of third-party services that Klaro will manage for you. 281 services: [ 282 { 283 name: 'klaro', 284 purposes: ['settings'], 285 required: true, 286 }, 287 { 288 name: 'linkedin', 289 purposes: ['analytics'], 290 cookies: [ // we delete the cookies if the user declines its use 291 [/^ln_or(_.*)?/, '/', 'theurer.com'], 292 [/^ln_or(_.*)?/, '/', 'www.theurer.com'], 293 ], 294 }, 295 { 296 name: 'zopim', 297 purposes: ['livechat'], 298 cookies: [ // we delete the Facebook cookies if the user declines its use 299 [/^__zlcmid(_.*)?/, '/', 'theurer.com'], 300 [/^__zlcmid(_.*)?/, '/', 'www.theurer.com'], 301 ], 302 }, 303 { 304 name: 'googlemaps', 305 purposes: ['externalmedia'], 306 onAccept: ` 307 const sleep = async (milliseconds) => { 308 await new Promise(resolve => { 309 return setTimeout(resolve, milliseconds) 310 }); 311 }; 312 const loadMap = async () => { 313 for (let i = 0; i < 4; i++) { 314 await sleep(1000); 315 if (i === 2) { 316 const mapFile = document.getElementById("gmaps"); 317 if(mapFile !== null) { 318 mapFile.setAttribute("src", mapFile.getAttribute("data-src")); 319 } 320 const infoboxFile = document.getElementById("infobox"); 321 if(infoboxFile !== null) { 322 infoboxFile.setAttribute("src", infoboxFile.getAttribute("data-src")); 323 } 324 const mapDiv = document.getElementById("theurer-map"); 325 if(mapDiv !== null) { 326 mapDiv.style.display = 'block'; 327 } 328 } 329 } 330 init(); 331 } 332 if (opts.consents['googlemaps'] == true) { 333 console.log("Google Maps usage was granted"); 334 loadMap(); 335 } 336 `, 337 onDecline: ` 338 const mapDiv = document.getElementById("theurer-map"); 339 if(mapDiv !== null) { 340 mapDiv.style.display = 'none'; 341 } 342 `, 343 }, 344 { 345 name: 'google-tag-manager', 346 purposes: ['analytics'], 347 manages: ['google-analytics', 'google-ads', 'sales-viewer'], 348 onAccept: ` 349 // we notify the tag manager about all services that were accepted. You can define 350 // a custom event in GTM to load the service if consent was given. 351 for(let k of Object.keys(opts.consents)){ 352 if (opts.consents[k]){ 353 let eventName = 'klaro-'+k+'-accepted' 354 dataLayer.push({'event': eventName}) 355 } 356 } 357 // if consent for Google Analytics was granted we enable analytics storage 358 if (opts.consents[opts.vars.googleAnalyticsName || 'google-analytics']){ 359 console.log("Google Analytics usage was granted") 360 gtag('consent', 'update', {'analytics_storage': 'granted'}) 361 } 362 // if consent for Google Ads was granted we enable ad storage 363 if (opts.consents[opts.vars.adStorageName || 'google-ads']){ 364 console.log("GoogleAds usage was granted") 365 gtag('consent', 'update', {'ad_storage': 'granted'}) 366 } 367 // if consent for Sales Viewer was granted we enable salesviewer storage 368 if (opts.consents[opts.vars.salesviewerStorageName || 'sales-viewer']){ 369 console.log("Sales Viewer usage was granted") 370 gtag('consent', 'update', {'salesviewer_storage': 'granted'}) 371 } 372 `, 373 onInit: ` 374 // initialization code here (will be executed only once per page-load) 375 window.dataLayer = window.dataLayer || []; 376 window.gtag = function(){dataLayer.push(arguments)} 377 gtag('consent', 'default', {'ad_storage': 'denied', 'analytics_storage': 'denied', 'salesviewer_storage': 'denied'}) 378 gtag('set', 'ads_data_redaction', true) 379 `, 380 onDecline: ` 381 // initialization code here (will be executed only once per page-load) 382 window.dataLayer = window.dataLayer || []; 383 window.gtag = function(){dataLayer.push(arguments)} 384 gtag('consent', 'default', {'ad_storage': 'denied', 'analytics_storage': 'denied', 'salesviewer_storage': 'denied'}) 385 gtag('set', 'ads_data_redaction', true) 386 `, 387 vars: { 388 googleAnalytics: 'google-analytics', 389 googleAds: 'google-ads', 390 salesViewer: 'sales-viewer' 391 } 392 }, 393 { 394 // In GTM, you should define a custom event trigger named `klaro-google-ads-accepted` which should trigger the Google Analytics integration. 395 name: 'google-ads', 396 purposes: ['analytics'], 397 cookies: [ // we delete the cookies if the user declines its use 398 [/^_gcl_au(_.*)?/, '/', 'theurer.com'], 399 [/^_gcl_au(_.*)?/, '/', 'www.theurer.com'], 400 ], 401 }, 402 { 403 // In GTM, you should define a custom event trigger named `klaro-google-analytics-accepted` which should trigger the Google Analytics integration. 404 name: 'google-analytics', 405 purposes: ['analytics'], 406 cookies: [ // we delete the cookies if the user declines its use 407 [/^_ga(_.*)?/, '/', 'theurer.com'], 408 [/^_ga(_.*)?/, '/', 'www.theurer.com'], 409 [/^_gid(_.*)?/, '/', 'theurer.com'], 410 [/^_gid(_.*)?/, '/', 'www.theurer.com'], 411 ], 412 }, 413 { 414 // In GTM, you should define a custom event trigger named `klaro-sales-viewer-accepted` which should trigger the Sales Viewer integration. 415 name: 'sales-viewer', 416 purposes: ['analytics'] 417 }, 418 { 419 name: 'lead-forensics', 420 purposes: ['analytics'] 421 }, 422 { 423 name: 'lead-rebel', 424 purposes: ['analytics'] 425 }, 426 { 427 name: 'leadinfo', 428 purposes: ['analytics'] 429 }, 430 ], 431};
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.