j1-template 2022.0.7 → 2022.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -35,6 +35,9 @@ regenerate: true
35
35
 
36
36
  {% comment %} Set config data
37
37
  -------------------------------------------------------------------------------- {% endcomment %}
38
+ {% assign cookie_defaults = modules.defaults.cookies.defaults %}
39
+ {% assign cookie_settings = modules.cookies.settings %}
40
+
38
41
  {% assign translator_defaults = modules.defaults.translator.defaults %}
39
42
  {% assign translator_settings = modules.translator.settings %}
40
43
  {% assign tracking_enabled = template_config.analytics.enabled %}
@@ -42,6 +45,7 @@ regenerate: true
42
45
  {% comment %} Set config options
43
46
  -------------------------------------------------------------------------------- {% endcomment %}
44
47
  {% assign translator_options = translator_defaults | merge: translator_settings %}
48
+ {% assign cookie_options = cookie_defaults | merge: cookie_settings %}
45
49
 
46
50
  {% assign production = false %}
47
51
  {% if environment == 'prod' or environment == 'production' %}
@@ -95,6 +99,7 @@ j1.adapter['translator'] = (function (j1, window) {
95
99
  var hostname;
96
100
  var domain;
97
101
  var cookie_domain;
102
+ var domain_enabled;
98
103
  var secure;
99
104
  var logText;
100
105
  var cookie_written;
@@ -111,10 +116,17 @@ j1.adapter['translator'] = (function (j1, window) {
111
116
 
112
117
  // ---------------------------------------------------------------------------
113
118
  // setCookie()
114
- // writes a flat cookie (not using an encoded JSON string)
119
+ // writes a FLAT cookie (not using an encoded JSON string)
115
120
  // ---------------------------------------------------------------------------
116
121
  function setCookie(options /*cName, cValue, expDays*/) {
117
- var defaults = {};
122
+ var date = new Date();
123
+ var timestamp_now = date.toISOString()
124
+ var url = new liteURL(window.location.href);
125
+ var baseUrl = url.origin;;
126
+ var hostname = url.hostname;
127
+ var domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
128
+ var domain_enabled = '{{cookie_options.domain}}';
129
+ var defaults = {};
118
130
  var settings;
119
131
  var document_cookie;
120
132
  var stringifiedAttributes = '';
@@ -123,7 +135,7 @@ j1.adapter['translator'] = (function (j1, window) {
123
135
  name: '',
124
136
  path: '/',
125
137
  expires: 0,
126
- domain: 'localhost',
138
+ domain: true,
127
139
  samesite: 'Lax',
128
140
  http_only: false,
129
141
  secure: false
@@ -137,6 +149,13 @@ j1.adapter['translator'] = (function (j1, window) {
137
149
  stringifiedAttributes += '; ' + 'expires=' + date.toUTCString();
138
150
  }
139
151
 
152
+ if (domain != hostname) {
153
+ settings.domain = domain_enabled ? '.' + domain : hostname;
154
+ } else {
155
+ settings.domain = hostname;
156
+ }
157
+ stringifiedAttributes += '; ' + 'domain=' + settings.domain;
158
+
140
159
  stringifiedAttributes += '; ' + 'SameSite=' + settings.samesite;
141
160
 
142
161
  if (settings.secure) {
@@ -168,7 +187,7 @@ j1.adapter['translator'] = (function (j1, window) {
168
187
  baseUrl = url.origin;
169
188
  hostname = url.hostname;
170
189
  domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
171
- cookie_domain = (domain.includes('.')) ? '.' + domain : domain;
190
+ domain_enabled = '{{cookie_options.domain}}';
172
191
  secure = (url.protocol.includes('https')) ? true : false;
173
192
  navigator_language = navigator.language || navigator.userLanguage; // userLanguage for MS IE compatibility
174
193
  translation_language = navigator_language.split('-')[0];
@@ -188,22 +207,8 @@ j1.adapter['translator'] = (function (j1, window) {
188
207
  'translationLanguage': translation_language,
189
208
  };
190
209
 
191
- // load|initialize user translate cookie
192
- if (j1.existsCookie(cookie_names.user_translate)) {
193
- user_translate = j1.readCookie(cookie_names.user_translate);
194
- } else {
195
- logger.debug('\n' + 'write to cookie : ' + cookie_names.user_translate);
196
- cookie_written = j1.writeCookie({
197
- name: cookie_names.user_translate,
198
- data: user_translate,
199
- secure: secure,
200
- expires: 365
201
- });
202
- }
203
-
204
210
  // initialize state flag
205
211
  _this.state = 'pending';
206
- // _this.settings.languageList = '/assets/data/ms_select.json';
207
212
 
208
213
  // -----------------------------------------------------------------------
209
214
  // Default module settings
@@ -228,7 +233,30 @@ j1.adapter['translator'] = (function (j1, window) {
228
233
  // initializer
229
234
  // -----------------------------------------------------------------------
230
235
  var dependencies_met_page_ready = setInterval (function (options) {
231
- user_consent = j1.readCookie(cookie_names.user_consent);
236
+ var expires = '{{cookie_options.expires}}';
237
+ var same_site = '{{cookie_options.same_site}}';
238
+ user_consent = j1.readCookie(cookie_names.user_consent);
239
+
240
+ // set domain used by cookies
241
+ if (domain != hostname) {
242
+ cookie_domain = domain_enabled ? '.' + domain : hostname;
243
+ } else {
244
+ cookie_domain = hostname;
245
+ }
246
+
247
+ // load|initialize user translate cookie
248
+ if (j1.existsCookie(cookie_names.user_translate)) {
249
+ user_translate = j1.readCookie(cookie_names.user_translate);
250
+ } else {
251
+ logger.debug('\n' + 'write to cookie : ' + cookie_names.user_translate);
252
+ cookie_written = j1.writeCookie({
253
+ name: cookie_names.user_translate,
254
+ data: user_translate,
255
+ samesite: 'Strict',
256
+ secure: secure,
257
+ expires: 365
258
+ });
259
+ }
232
260
 
233
261
  if ( j1.getState() === 'finished' ) {
234
262
  _this.setState('started');
@@ -256,15 +284,28 @@ j1.adapter['translator'] = (function (j1, window) {
256
284
  }
257
285
  }
258
286
 
259
- // update user_translate cookie
260
- user_translate.analysis = user_consent.analysis;
261
- user_translate.personalization = user_consent.personalization;
262
- cookie_written = j1.writeCookie({
263
- name: cookie_names.user_translate,
264
- data: user_translate,
265
- secure: secure,
266
- expires: 365
267
- });
287
+ // load|set user translate cookie
288
+ user_translate = j1.readCookie(cookie_names.user_translate);
289
+ if (!user_consent.analysis || !user_consent.personalization) {
290
+ // disable translation service
291
+ user_translate.translationEnabled = false;
292
+ cookie_written = j1.writeCookie({
293
+ name: cookie_names.user_translate,
294
+ data: user_translate,
295
+ secure: secure
296
+ });
297
+
298
+ // expire permanent cookie to session
299
+ j1.expireCookie({ name: cookie_names.user_translate });
300
+ } else {
301
+ logger.debug('\n' + 'write to cookie : ' + cookie_names.user_translate);
302
+ cookie_written = j1.writeCookie({
303
+ name: cookie_names.user_translate,
304
+ data: user_translate,
305
+ secure: secure,
306
+ expires: 365
307
+ });
308
+ }
268
309
 
269
310
  if (moduleOptions.dialogLanguage === 'auto') {
270
311
  moduleOptions.dialogLanguage = '{{contentLanguage}}';
@@ -272,7 +313,11 @@ j1.adapter['translator'] = (function (j1, window) {
272
313
 
273
314
  j1.translator = new Translator({
274
315
  contentURL: moduleOptions.contentURL, // dialog content (modals) for all supported languages
275
- cookieName: moduleOptions.cookieName, // the name of the User State Cookie (primary data)
316
+ cookieName: cookie_names.user_translate, // name of the translator cookie
317
+ cookieStorageDays: expires, // lifetime of a cookie [0..365], 0: session cookie
318
+ cookieSameSite: same_site, // restrict consent cookie
319
+ cookieDomain: cookie_domain, // set domain (hostname|domain)
320
+ cookieSecure: secure, // set
276
321
  cookieConsentName: moduleOptions.cookieConsentName, // the name of the Cookie Consent Cookie (secondary data)
277
322
  disableLanguageSelector: moduleOptions.disableLanguageSelector, // disable language dropdown for translation in dialog (modal)
278
323
  dialogContainerID: moduleOptions.dialogContainerID, // dest container, the dialog modal is loaded (dynamically)
@@ -286,7 +331,7 @@ j1.adapter['translator'] = (function (j1, window) {
286
331
  });
287
332
 
288
333
  // enable|disable translation (after callback)
289
- if (user_consent.analysis && user_consent.personalization && user_translate.translationEnabled) {
334
+ if (user_translate.analysis && user_translate.personalization && user_translate.translationEnabled) {
290
335
  if (moduleOptions.translatorName === 'google') {
291
336
  head.appendChild(script);
292
337
  if ($('google_translate_element')) {
@@ -302,12 +347,9 @@ j1.adapter['translator'] = (function (j1, window) {
302
347
  }
303
348
  }
304
349
 
305
- // Click events moved to Navigator (core)
306
- //
307
- // $('#quickLinksTranslateButton').click(function(e) {
308
- // logger.info('\n' + 'call default action');
309
- // j1.translator.showDialog();
310
- // });
350
+ // -------------------------------------------------------------------
351
+ // NOTE: Click events moved to Navigator (core)
352
+ // -------------------------------------------------------------------
311
353
 
312
354
  _this.setState('finished');
313
355
  logger.info('\n' + 'state: ' + _this.getState());
@@ -374,34 +416,37 @@ j1.adapter['translator'] = (function (j1, window) {
374
416
 
375
417
  // -------------------------------------------------------------------------
376
418
  // cbGoogle()
377
- // Called by the translator CORE module after the user made the
378
- // selection for a translation|language
419
+ // Called by the translator CORE module after the user has made
420
+ // the selection for a translation|language
379
421
  // -------------------------------------------------------------------------
380
422
  cbGoogle: function () {
381
423
  var logger = log4javascript.getLogger('j1.adapter.translator.cbGoogle');
382
424
  var cookie_names = j1.getCookieNames();
383
- var user_state = j1.readCookie(cookie_names.user_state);
384
425
  var user_consent = j1.readCookie(cookie_names.user_consent);
385
426
  var user_translate = j1.readCookie(cookie_names.user_translate);
386
427
  var msDropdown = document.getElementById('dropdownJSON').msDropdown;
428
+ var url = new liteURL(window.location.href);
429
+ var baseUrl = url.origin;;
430
+ var hostname = url.hostname;
431
+ var domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
432
+ var domain_enabled = '{{cookie_options.domain}}';
433
+ var same_site = '{{cookie_options.same_site}}';
434
+
387
435
  var selectedTranslationLanguage;
388
436
  var srcLang;
389
437
  var destLang;
390
438
  var transCode;
391
439
 
392
- selectedTranslationLanguage = msDropdown.value;
393
- logger.info('\n' + 'selected translation language: ' + selectedTranslationLanguage);
394
440
 
395
- // update cookie consent settings
396
- user_consent.analysis = user_translate.analysis;
397
- user_consent.personalization = user_translate.personalization;
441
+ // set domain used by cookies
442
+ if (domain != hostname) {
443
+ cookie_domain = domain_enabled ? '.' + domain : hostname;
444
+ } else {
445
+ cookie_domain = hostname;
446
+ }
398
447
 
399
- cookie_written = j1.writeCookie({
400
- name: cookie_names.user_consent,
401
- data: user_consent,
402
- secure: secure,
403
- expires: 365
404
- });
448
+ selectedTranslationLanguage = msDropdown.value;
449
+ logger.info('\n' + 'selected translation language: ' + selectedTranslationLanguage);
405
450
 
406
451
  // set content language
407
452
  if (moduleOptions.contentLanguage === 'auto') {
@@ -427,8 +472,17 @@ j1.adapter['translator'] = (function (j1, window) {
427
472
  Cookies.remove('googtrans', { domain: hostname });
428
473
  Cookies.remove('googtrans');
429
474
 
430
- // write the googtrans cookie w/o DOMAIN!
431
- Cookies.set('googtrans', transCode);
475
+ // -----------------------------------------------------------------------
476
+ // NOTE: googtrans cookie will be rewritten (by Google!?) for
477
+ // attributes 'SameSite' and potentially 'Domain'. This results
478
+ // for 'SameSite' in an empty field!
479
+ // -----------------------------------------------------------------------
480
+
481
+ // write the googtrans cookie (w/o DOMAIN?!)
482
+ Cookies.set('googtrans', transCode, {
483
+ Domain: cookie_domain,
484
+ sameSite: 'Lax'
485
+ });
432
486
 
433
487
  // reload current page (skip cache)
434
488
  location.reload(true);
@@ -38,7 +38,7 @@
38
38
 
39
39
  'use strict';
40
40
  function CookieConsent(props) {
41
- var logger = log4javascript.getLogger('j1.core.bsCookieConsent');
41
+ var logger = log4javascript.getLogger('j1.core.CookieConsent');
42
42
  var self = this;
43
43
  var detailedSettingsShown = false;
44
44
  var url = new liteURL(window.location.href);
@@ -56,14 +56,10 @@ function CookieConsent(props) {
56
56
  dialogLanguage: 'content', // language used for the consent dialog (modal)
57
57
  dialogLanguages: ['en','de'], // supported languages for the consent dialog (modal), defaults to first in array
58
58
  contentURL: '/assets/data/cookieconsent', // URL contain the consent dialogs (modals) for ALL supported languages
59
- cookieName: 'j1.user.translate', // name of the cookie, in which the configuration is stored
60
- cookieStorageDays: 365, // duration the configuration cookie is stored on the client
61
59
  postSelectionCallback: '', // callback function, called after the user has made his selection
62
60
  whitelisted: [], // pages NO consent modal dialog is issued
63
61
  xhrDataElement: 'consent-data', // src container for all language-specific consent dialogs (taken from contentURL)
64
- dialogContainerID: 'consent-modal', // dest container, the dialog modal is loaded (dynamically)
65
- cookieSameSite: 'Lax', // restrict the consent cookie to first-party (do NOT send cookie to other domains)
66
- cookieSecure: true
62
+ dialogContainerID: 'consent-modal' // dest container, the dialog modal is loaded (dynamically)
67
63
  };
68
64
 
69
65
  // merge property settings
@@ -87,7 +83,7 @@ function CookieConsent(props) {
87
83
  this.props.cookieSecure = cookieSecure;
88
84
 
89
85
  var Cookie = {
90
- set: function (name, value, days, cookieSameSite, cookieSecure) {
86
+ set: function (name, value, days, cookieSameSite, cookieDomain, cookieSecure) {
91
87
  var value_encoded = window.btoa(value);
92
88
  var expires = '; expires=Thu, 01 Jan 1970 00:00:00 UTC';
93
89
  if (days>0) {
@@ -96,9 +92,9 @@ function CookieConsent(props) {
96
92
  expires = "; expires=" + date.toUTCString();
97
93
  }
98
94
  if (cookieSecure) {
99
- document.cookie = name + "=" + (value_encoded || '') + expires + '; Path=/; cookieSameSite=' + cookieSameSite + '; ' + 'cookieSecure=' + cookieSecure + ';';
95
+ document.cookie = name + "=" + (value_encoded || '') + expires + '; Path=/; SameSite=' + cookieSameSite + '; ' + 'Domain=' + cookieDomain + '; ' + 'Secure=' + cookieSecure + ';';
100
96
  } else {
101
- document.cookie = name + "=" + (value_encoded || '') + expires + '; Path=/; cookieSameSite=' + cookieSameSite + ';';
97
+ document.cookie = name + "=" + (value_encoded || '') + expires + '; Path=/; SameSite=' + cookieSameSite + ';' + 'Domain=' + cookieDomain + '; ';
102
98
  }
103
99
  },
104
100
  get: function (name) {
@@ -319,20 +315,41 @@ function CookieConsent(props) {
319
315
  }
320
316
 
321
317
  function agreeAll() {
322
- Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions(true)), self.props.cookieStorageDays, self.props.cookieSameSite, cookieSecure);
318
+ Cookie.set(
319
+ self.props.cookieName,
320
+ JSON.stringify(gatherOptions(true)),
321
+ self.props.cookieStorageDays,
322
+ self.props.cookieSameSite,
323
+ self.props.cookieDomain,
324
+ cookieSecure
325
+ );
323
326
  self.$modal.modal('hide');
324
327
  }
325
328
 
326
329
  function doNotAgree() {
327
330
  // Remove consent cookie
328
- Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions(false)), 0, self.props.cookieSameSite, cookieSecure);
331
+ Cookie.set(
332
+ self.props.cookieName,
333
+ JSON.stringify(gatherOptions(false)),
334
+ 0,
335
+ self.props.cookieSameSite,
336
+ self.props.cookieDomain,
337
+ cookieSecure
338
+ );
329
339
  self.$modal.modal('hide');
330
340
  // redirect to error page: blocked site
331
341
  window.location.href = '/445.html';
332
342
  }
333
343
 
334
344
  function saveSettings() {
335
- Cookie.set(self.props.cookieName, JSON.stringify(gatherOptions()), self.props.cookieStorageDays, self.props.cookieSameSite, cookieSecure);
345
+ Cookie.set(
346
+ self.props.cookieName,
347
+ JSON.stringify(gatherOptions()),
348
+ self.props.cookieStorageDays,
349
+ self.props.cookieSameSite,
350
+ self.props.cookieDomain,
351
+ cookieSecure
352
+ );
336
353
  self.$modal.modal('hide');
337
354
  }
338
355
 
@@ -346,7 +363,6 @@ function CookieConsent(props) {
346
363
 
347
364
  // API functions
348
365
  // ---------------------------------------------------------------------------
349
-
350
366
  logger.info('\n' + 'initializing core module finished');
351
367
  logger.info('\n' + 'state: finished');
352
368
 
@@ -24,4 +24,4 @@
24
24
  # outside of J1 Template!
25
25
  # -----------------------------------------------------------------------------
26
26
  */
27
- "use strict";function CookieConsent(d){var v=log4javascript.getLogger("j1.core.bsCookieConsent");var p=this;var q=false;var e=new liteURL(window.location.href);var c=(e.protocol.includes("https"))?true:false;var j;var g;var t;v.info("\ninitializing core module: started");v.info("\nstate: started");this.props={autoShowDialog:true,dialogLanguage:"content",dialogLanguages:["en","de"],contentURL:"/assets/data/cookieconsent",cookieName:"j1.user.translate",cookieStorageDays:365,postSelectionCallback:"",whitelisted:[],xhrDataElement:"consent-data",dialogContainerID:"consent-modal",cookieSameSite:"Strict",cookieSecure:true};for(var f in d){this.props[f]=d[f]}if(this.props.dialogLanguage.indexOf("-")!==-1){this.props.dialogLanguage=this.props.dialogLanguage.split("-")[0]}if(!this.props.dialogLanguages.includes(this.props.dialogLanguage)){this.props.dialogLanguage=this.props.dialogLanguages[0]}this.props.xhrDataElement=this.props.xhrDataElement+"-"+this.props.dialogLanguage;this.props.cookieSecure=c;var h={set:function(z,B,D,A,x){var C=window.btoa(B);var w="; expires=Thu, 01 Jan 1970 00:00:00 UTC";if(D>0){var y=new Date();y.setTime(y.getTime()+(D*24*60*60*1000));w="; expires="+y.toUTCString()}if(x){document.cookie=z+"="+(C||"")+w+"; Path=/; cookieSameSite="+A+"; cookieSecure="+x+";"}else{document.cookie=z+"="+(C||"")+w+"; Path=/; cookieSameSite="+A+";"}},get:function(x){var A=x+"=";var w=document.cookie.split(";");for(var y=0;y<w.length;y++){var C=w[y];while(C.charAt(0)===" "){C=C.substring(1,C.length)}if(C.indexOf(A)===0){var B=C.substring(A.length,C.length);var z=window.atob(B);return z}}return undefined}};var n={documentReady:function(w){if(document.readyState!=="loading"){w()}else{document.addEventListener("DOMContentLoaded",w)}}};function u(){var w={};var x=false;var y=0;var z=arguments.length;if(Object.prototype.toString.call(arguments[0])==="[object Boolean]"){x=arguments[0];y++}var B=function(C){for(var D in C){if(Object.prototype.hasOwnProperty.call(C,D)){if(x&&Object.prototype.toString.call(C[D])==="[object Object]"){w[D]=u(true,w[D],C[D])}else{w[D]=C[D]}}}};for(;y<z;y++){var A=arguments[y];B(A)}return w}function i(B,y){var w=Array.prototype.slice.call(arguments,2);var A=B.split(".");var z=A.pop();for(var x=0;x<A.length;x++){y=y[A[x]]}return y[z].apply(y,w)}function m(w){n.documentReady(function(){p.modal=document.getElementById(p.props.dialogContainerID);if(!p.modal){v.info("\nload consent modal");p.modal=document.createElement("div");p.modal.id=p.props.dialogContainerID;p.modal.style.display="none";p.modal.setAttribute("class","modal fade");p.modal.setAttribute("tabindex","-1");p.modal.setAttribute("role","dialog");p.modal.setAttribute("aria-labelledby",p.props.dialogContainerID);document.body.append(p.modal);p.$modal=$(p.modal);p.$modal.on("hidden.bs.modal",function(){i(p.props.postSelectionCallback,window)});var x=p.props.contentURL+"/index.html";$.get(x).done(function(y){v.info("\nloading consent modal: successfully");p.modal.innerHTML=y;p.modal.innerHTML=$("#"+p.props.xhrDataElement).eq(0).html();p.modal.style.display="block";$(p.modal).modal({backdrop:"static",keyboard:false});p.$buttonDoNotAgree=$("#bccs-buttonDoNotAgree");p.$buttonAgree=$("#bccs-buttonAgree");p.$buttonSave=$("#bccs-buttonSave");p.$buttonAgreeAll=$("#bccs-buttonAgreeAll");v.info("\nload/initialze options from cookie");l();k();$("#bccs-options").on("hide.bs.collapse",function(){q=false;l()}).on("show.bs.collapse",function(){q=true;l()});v.info("\ninitialze event handler");p.$buttonDoNotAgree.click(function(){b()});p.$buttonAgree.click(function(){o()});p.$buttonSave.click(function(){$("#bccs-options").collapse("hide");s();k()});p.$buttonAgreeAll.click(function(){$("#bccs-options").collapse("hide");o();k()});p.$modal.modal("show")}).fail(function(){v.error("\nloading consent modal: failed");v.warn("\nprobably no `contentURL` set")})}else{p.$modal.modal("show")}}.bind(this))}function k(){var y=p.getSettings();if(y){for(var x in y){var w=p.$modal.find("#bccs-options .bccs-option[data-name='"+x+"'] input[type='checkbox']");w.prop("checked",y[x])}}}function l(){if(q){p.$buttonDoNotAgree.hide();p.$buttonAgree.hide();p.$buttonSave.show();p.$buttonAgreeAll.show()}else{p.$buttonDoNotAgree.show();p.$buttonAgree.show();p.$buttonSave.hide();p.$buttonAgreeAll.hide()}}function a(x){var w=p.$modal.find("#bccs-options .bccs-option");var z={};for(var A=0;A<w.length;A++){var C=w[A];var y=C.getAttribute("data-name");if(y==="necessary"){z[y]=true}else{if(x===undefined){var B=$(C).find("input[type='checkbox']");z[y]=B.prop("checked")}else{z[y]=!!x}}}return z}function o(){h.set(p.props.cookieName,JSON.stringify(a(true)),p.props.cookieStorageDays,p.props.cookieSameSite,c);p.$modal.modal("hide")}function b(){h.set(p.props.cookieName,JSON.stringify(a(false)),0,p.props.cookieSameSite,c);p.$modal.modal("hide");window.location.href="/445.html"}function s(){h.set(p.props.cookieName,JSON.stringify(a()),p.props.cookieStorageDays,p.props.cookieSameSite,c);p.$modal.modal("hide")}t=(this.props.whitelisted.indexOf(window.location.pathname)>-1);var r=h.get(this.props.cookieName);if((r===undefined||r==="false")&&this.props.autoShowDialog&&!t){m()}v.info("\ninitializing core module finished");v.info("\nstate: finished");this.showDialog=function(){t=(this.props.whitelisted.indexOf(window.location.pathname)>-1);if(!t){m()}};this.getSettings=function(x){var w=h.get(p.props.cookieName);if(w){var y=JSON.parse(h.get(p.props.cookieName));if(x===undefined){return y}else{if(y){return y[x]}else{return false}}}else{return undefined}}};
27
+ "use strict";function CookieConsent(d){var v=log4javascript.getLogger("j1.core.CookieConsent");var p=this;var q=false;var e=new liteURL(window.location.href);var c=(e.protocol.includes("https"))?true:false;var j;var g;var t;v.info("\ninitializing core module: started");v.info("\nstate: started");this.props={autoShowDialog:true,dialogLanguage:"content",dialogLanguages:["en","de"],contentURL:"/assets/data/cookieconsent",postSelectionCallback:"",whitelisted:[],xhrDataElement:"consent-data",dialogContainerID:"consent-modal"};for(var f in d){this.props[f]=d[f]}if(this.props.dialogLanguage.indexOf("-")!==-1){this.props.dialogLanguage=this.props.dialogLanguage.split("-")[0]}if(!this.props.dialogLanguages.includes(this.props.dialogLanguage)){this.props.dialogLanguage=this.props.dialogLanguages[0]}this.props.xhrDataElement=this.props.xhrDataElement+"-"+this.props.dialogLanguage;this.props.cookieSecure=c;var h={set:function(w,C,E,z,D,A){var B=window.btoa(C);var x="; expires=Thu, 01 Jan 1970 00:00:00 UTC";if(E>0){var y=new Date();y.setTime(y.getTime()+(E*24*60*60*1000));x="; expires="+y.toUTCString()}if(A){document.cookie=w+"="+(B||"")+x+"; Path=/; SameSite="+z+"; Domain="+D+"; Secure="+A+";"}else{document.cookie=w+"="+(B||"")+x+"; Path=/; SameSite="+z+";Domain="+D+"; "}},get:function(x){var A=x+"=";var w=document.cookie.split(";");for(var y=0;y<w.length;y++){var C=w[y];while(C.charAt(0)===" "){C=C.substring(1,C.length)}if(C.indexOf(A)===0){var B=C.substring(A.length,C.length);var z=window.atob(B);return z}}return undefined}};var n={documentReady:function(w){if(document.readyState!=="loading"){w()}else{document.addEventListener("DOMContentLoaded",w)}}};function u(){var w={};var x=false;var y=0;var z=arguments.length;if(Object.prototype.toString.call(arguments[0])==="[object Boolean]"){x=arguments[0];y++}var B=function(C){for(var D in C){if(Object.prototype.hasOwnProperty.call(C,D)){if(x&&Object.prototype.toString.call(C[D])==="[object Object]"){w[D]=u(true,w[D],C[D])}else{w[D]=C[D]}}}};for(;y<z;y++){var A=arguments[y];B(A)}return w}function i(B,y){var w=Array.prototype.slice.call(arguments,2);var A=B.split(".");var z=A.pop();for(var x=0;x<A.length;x++){y=y[A[x]]}return y[z].apply(y,w)}function m(w){n.documentReady(function(){p.modal=document.getElementById(p.props.dialogContainerID);if(!p.modal){v.info("\nload consent modal");p.modal=document.createElement("div");p.modal.id=p.props.dialogContainerID;p.modal.style.display="none";p.modal.setAttribute("class","modal fade");p.modal.setAttribute("tabindex","-1");p.modal.setAttribute("role","dialog");p.modal.setAttribute("aria-labelledby",p.props.dialogContainerID);document.body.append(p.modal);p.$modal=$(p.modal);p.$modal.on("hidden.bs.modal",function(){i(p.props.postSelectionCallback,window)});var x=p.props.contentURL+"/index.html";$.get(x).done(function(y){v.info("\nloading consent modal: successfully");p.modal.innerHTML=y;p.modal.innerHTML=$("#"+p.props.xhrDataElement).eq(0).html();p.modal.style.display="block";$(p.modal).modal({backdrop:"static",keyboard:false});p.$buttonDoNotAgree=$("#bccs-buttonDoNotAgree");p.$buttonAgree=$("#bccs-buttonAgree");p.$buttonSave=$("#bccs-buttonSave");p.$buttonAgreeAll=$("#bccs-buttonAgreeAll");v.info("\nload/initialze options from cookie");l();k();$("#bccs-options").on("hide.bs.collapse",function(){q=false;l()}).on("show.bs.collapse",function(){q=true;l()});v.info("\ninitialze event handler");p.$buttonDoNotAgree.click(function(){b()});p.$buttonAgree.click(function(){o()});p.$buttonSave.click(function(){$("#bccs-options").collapse("hide");s();k()});p.$buttonAgreeAll.click(function(){$("#bccs-options").collapse("hide");o();k()});p.$modal.modal("show")}).fail(function(){v.error("\nloading consent modal: failed");v.warn("\nprobably no `contentURL` set")})}else{p.$modal.modal("show")}}.bind(this))}function k(){var y=p.getSettings();if(y){for(var x in y){var w=p.$modal.find("#bccs-options .bccs-option[data-name='"+x+"'] input[type='checkbox']");w.prop("checked",y[x])}}}function l(){if(q){p.$buttonDoNotAgree.hide();p.$buttonAgree.hide();p.$buttonSave.show();p.$buttonAgreeAll.show()}else{p.$buttonDoNotAgree.show();p.$buttonAgree.show();p.$buttonSave.hide();p.$buttonAgreeAll.hide()}}function a(x){var w=p.$modal.find("#bccs-options .bccs-option");var z={};for(var A=0;A<w.length;A++){var C=w[A];var y=C.getAttribute("data-name");if(y==="necessary"){z[y]=true}else{if(x===undefined){var B=$(C).find("input[type='checkbox']");z[y]=B.prop("checked")}else{z[y]=!!x}}}return z}function o(){h.set(p.props.cookieName,JSON.stringify(a(true)),p.props.cookieStorageDays,p.props.cookieSameSite,p.props.cookieDomain,c);p.$modal.modal("hide")}function b(){h.set(p.props.cookieName,JSON.stringify(a(false)),0,p.props.cookieSameSite,p.props.cookieDomain,c);p.$modal.modal("hide");window.location.href="/445.html"}function s(){h.set(p.props.cookieName,JSON.stringify(a()),p.props.cookieStorageDays,p.props.cookieSameSite,p.props.cookieDomain,c);p.$modal.modal("hide")}t=(this.props.whitelisted.indexOf(window.location.pathname)>-1);var r=h.get(this.props.cookieName);if((r===undefined||r==="false")&&this.props.autoShowDialog&&!t){m()}v.info("\ninitializing core module finished");v.info("\nstate: finished");this.showDialog=function(){t=(this.props.whitelisted.indexOf(window.location.pathname)>-1);if(!t){m()}};this.getSettings=function(x){var w=h.get(p.props.cookieName);if(w){var y=JSON.parse(h.get(p.props.cookieName));if(x===undefined){return y}else{if(y){return y[x]}else{return false}}}else{return undefined}}};
@@ -37,6 +37,46 @@ function Translator(props) {
37
37
  var navigator_language;
38
38
  var translation_language;
39
39
 
40
+ // ---------------------------------------------------------------------------
41
+ // Cookie()
42
+ // manage cookies
43
+ // ---------------------------------------------------------------------------
44
+ var Cookie = {
45
+ set: function (name, value, days, cookieSameSite, cookieDomain, cookieSecure) {
46
+ var value_encoded = window.btoa(value);
47
+ var expires = '; expires=Thu, 01 Jan 1970 00:00:00 UTC';
48
+ if (days>0) {
49
+ var date = new Date();
50
+ date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
51
+ expires = "; expires=" + date.toUTCString();
52
+ }
53
+ if (cookieSecure) {
54
+ document.cookie = name + "=" + (value_encoded || '') + expires + '; Path=/; SameSite=' + cookieSameSite + '; ' + 'Domain=' + cookieDomain + '; ' + 'Secure=' + cookieSecure + ';';
55
+ } else {
56
+ document.cookie = name + "=" + (value_encoded || '') + expires + '; Path=/; SameSite=' + cookieSameSite + ';' + 'Domain=' + cookieDomain + '; ';
57
+ }
58
+ },
59
+ get: function (name) {
60
+ var nameEQ = name + '=';
61
+ var ca = document.cookie.split(';');
62
+ for (var i = 0; i < ca.length; i++) {
63
+ var c = ca[i];
64
+ while (c.charAt(0) === ' ') {
65
+ c = c.substring(1, c.length);
66
+ }
67
+ if (c.indexOf(nameEQ) === 0) {
68
+ var value_encoded = c.substring(nameEQ.length, c.length);
69
+ var value = window.atob(value_encoded);
70
+ return value;
71
+ }
72
+ }
73
+ return undefined;
74
+ }
75
+ };
76
+
77
+ logger.info('\n' + 'initializing core module: started');
78
+ logger.info('\n' + 'state: started');
79
+
40
80
  // ---------------------------------------------------------------------------
41
81
  // default property settings
42
82
  // ---------------------------------------------------------------------------
@@ -84,46 +124,33 @@ function Translator(props) {
84
124
  logger.info('\n' + 'initializing core module: started');
85
125
  logger.info('\n' + 'state: started');
86
126
 
87
- // ---------------------------------------------------------------------------
88
- // internal functions
89
- // ---------------------------------------------------------------------------
127
+ var translationDefaultSettings = {
128
+ "translatorName": "google",
129
+ "translationEnabled": false,
130
+ "translateAllPages": true,
131
+ "useLanguageFromBrowser": true,
132
+ "translationLanguage": "de",
133
+ "analysis": true,
134
+ "personalization": true
135
+ };
136
+
137
+ var translatorCookie = Cookie.get(self.props.cookieName);
138
+ if (!translatorCookie) {
139
+ logger.info('\n' + 'initializing translator cookie: ' + self.props.cookieName);
140
+ // enable and write all settings required for translation (translation cookie)
141
+ Cookie.set(
142
+ self.props.cookieName,
143
+ JSON.stringify(translationDefaultSettings),
144
+ self.props.cookieStorageDays,
145
+ self.props.cookieSameSite,
146
+ self.props.cookieDomain,
147
+ self.props.cookieSecure
148
+ );
149
+ }
90
150
 
91
151
  // ---------------------------------------------------------------------------
92
- // Cookie()
93
- // manage cookies
152
+ // internal functions
94
153
  // ---------------------------------------------------------------------------
95
- var Cookie = {
96
- set: function (name, value, days, samesite, secure) {
97
- var value_encoded = window.btoa(value);
98
- var expires = '';
99
- if (days) {
100
- var date = new Date();
101
- date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
102
- expires = '; expires=' + date.toUTCString();
103
- }
104
- if (secure) {
105
- document.cookie = name + '=' + (value_encoded || '') + expires + '; Path=/; SameSite=' + samesite + '; ' + 'secure=' + secure + ';';
106
- } else {
107
- document.cookie = name + '=' + (value_encoded || '') + expires + '; Path=/; SameSite=' + samesite + ';';
108
- }
109
- },
110
- get: function (name) {
111
- var nameEQ = name + '=';
112
- var ca = document.cookie.split(';');
113
- for (var i = 0; i < ca.length; i++) {
114
- var c = ca[i];
115
- while (c.charAt(0) === ' ') {
116
- c = c.substring(1, c.length);
117
- }
118
- if (c.indexOf(nameEQ) === 0) {
119
- var value_encoded = c.substring(nameEQ.length, c.length);
120
- var value = window.atob(value_encoded);
121
- return value;
122
- }
123
- }
124
- return undefined;
125
- }
126
- };
127
154
 
128
155
  // ---------------------------------------------------------------------------
129
156
  // global event handler
@@ -486,11 +513,15 @@ function Translator(props) {
486
513
  // On 'agreeAll', enable ALL settings required for translation
487
514
  // ---------------------------------------------------------------------------
488
515
  function agreeAll() {
489
- var translationSettings = gatherOptions(true);
490
- var consentSettings = {};
516
+ var consentSettings = JSON.parse(Cookie.get(self.props.cookieConsentName));
517
+ var translationSettings = {};
491
518
 
492
- // enable and write all settings required for translation (consent cookie)
493
- consentSettings = JSON.parse(Cookie.get(self.props.cookieConsentName));
519
+ // enable all settings required for translation
520
+ translationSettings.analysis = true;
521
+ translationSettings.personalization = true;
522
+ translationSettings.translationEnabled = true;
523
+
524
+ // overload user consent settings (consent cookie)
494
525
  consentSettings.analysis = translationSettings.analysis;
495
526
  consentSettings.personalization = translationSettings.personalization;
496
527
 
@@ -498,17 +529,19 @@ function Translator(props) {
498
529
  self.props.cookieConsentName,
499
530
  JSON.stringify(consentSettings),
500
531
  self.props.cookieStorageDays,
501
- self.props.sameSite,
502
- self.props.secure
532
+ self.props.cookieSameSite,
533
+ self.props.cookieDomain,
534
+ self.props.cookieSecure
503
535
  );
504
536
 
505
- // enable and write all settings required for translation (translation cookie)
537
+ // write all settings required for translation (translation cookie)
506
538
  Cookie.set(
507
539
  self.props.cookieName,
508
540
  JSON.stringify(translationSettings),
509
541
  self.props.cookieStorageDays,
510
- self.props.sameSite,
511
- self.props.secure
542
+ self.props.cookieSameSite,
543
+ self.props.cookieDomain,
544
+ self.props.cookieSecure
512
545
  );
513
546
 
514
547
  self.$modal.modal('hide');
@@ -519,15 +552,17 @@ function Translator(props) {
519
552
  // process current settings from checkboxes for button `doNotAgree`
520
553
  // ---------------------------------------------------------------------------
521
554
  function doNotAgree() {
522
- var settings = gatherOptions();
555
+ var translationSettings = gatherOptions();
523
556
 
524
- settings.translationEnabled = false;
557
+ // disable all settings required for translation (translation cookie)
558
+ translationSettings.translationEnabled = false;
525
559
  Cookie.set(
526
560
  self.props.cookieName,
527
- JSON.stringify(settings),
561
+ JSON.stringify(translationSettings),
528
562
  self.props.cookieStorageDays,
529
- self.props.sameSite,
530
- self.props.secure
563
+ self.props.cookieSameSite,
564
+ self.props.cookieDomain,
565
+ self.props.cookieSecure
531
566
  );
532
567
  self.$modal.modal('hide');
533
568
  }
@@ -537,29 +572,29 @@ function Translator(props) {
537
572
  // write current settings from checkboxes to cookie
538
573
  // ---------------------------------------------------------------------------
539
574
  function saveSettings() {
540
- var settings;
541
- var consentSettings = {};
575
+ var translationSettings = gatherOptions();
576
+ var consentSettings = JSON.parse(Cookie.get(self.props.cookieConsentName));
542
577
 
543
578
  // update all cookies required for (google-)translation
544
579
  //
545
- settings = gatherOptions();
546
- consentSettings = JSON.parse(Cookie.get(self.props.cookieConsentName));
547
- consentSettings.analysis = settings.analysis;
548
- consentSettings.personalization = settings.personalization;
580
+ consentSettings.analysis = translationSettings.analysis;
581
+ consentSettings.personalization = translationSettings.personalization;
549
582
 
550
583
  Cookie.set(
551
584
  self.props.cookieConsentName,
552
585
  JSON.stringify(consentSettings),
553
586
  self.props.cookieStorageDays,
554
- self.props.sameSite,
555
- self.props.secure
587
+ self.props.cookieSameSite,
588
+ self.props.cookieDomain,
589
+ self.props.cookieSecure
556
590
  );
557
591
  Cookie.set(
558
592
  self.props.cookieName,
559
- JSON.stringify(gatherOptions()),
593
+ JSON.stringify(translationSettings),
560
594
  self.props.cookieStorageDays,
561
- self.props.sameSite,
562
- self.props.secure
595
+ self.props.cookieSameSite,
596
+ self.props.cookieDomain,
597
+ self.props.cookieSecure
563
598
  );
564
599
  self.$modal.modal('hide');
565
600
  }