PageSourceSearch

https://www.theurer.com/_assets/68b8f5e111d832572c42b6a0b45f6a81/Vendor/klaro/config.1751634907.js

js theurer.com collected 2026-10-07 04:28:40 UTC 18,083 bytes, 431 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  // 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.