j1-template 2021.1.5 → 2021.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/assets/data/themes.json +6 -6
  3. data/assets/themes/j1/adapter/js/cookieConsent.js +54 -28
  4. data/assets/themes/j1/adapter/js/j1.js +119 -150
  5. data/assets/themes/j1/adapter/js/themer.js +37 -29
  6. data/assets/themes/j1/adapter/js/toccer.js +4 -45
  7. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +286 -286
  8. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.min.js +3 -3
  9. data/assets/themes/j1/modules/fam/css/{uno → theme/uno}/fam.css +0 -0
  10. data/assets/themes/j1/modules/fam/css/theme/uno/fam.min.css +15 -0
  11. data/assets/themes/j1/modules/fam/js/fam.js +1 -6
  12. data/assets/themes/j1/modules/mmenuLight/css/{mmenu.css → mmenu-light.css} +0 -0
  13. data/assets/themes/j1/modules/mmenuLight/css/{mmenu.min.css → mmenu-light.min.css} +0 -0
  14. data/assets/themes/j1/modules/mmenuLight/css/theme/{uno.css → uno/mmenu.css} +0 -0
  15. data/assets/themes/j1/modules/mmenuLight/css/theme/{uno.min.css → uno/mmenu.min.css} +0 -0
  16. data/assets/themes/j1/modules/rtable/css/theme/{uno.css → uno/rtable.css} +0 -0
  17. data/assets/themes/j1/modules/rtable/css/theme/{uno.min.css → uno/rtable.min.css} +0 -0
  18. data/assets/themes/j1/modules/themeSwitcher/js/switcher.js +33 -47
  19. data/assets/themes/j1/modules/themeSwitcher/js/switcher.min.js +410 -2
  20. data/lib/j1/version.rb +1 -1
  21. data/lib/j1_app/j1_auth_manager/auth_manager.rb +2 -3
  22. data/lib/starter_web/Gemfile +1 -1
  23. data/lib/starter_web/_config.yml +1 -1
  24. data/lib/starter_web/_data/j1_config.yml +20 -17
  25. data/lib/starter_web/_data/modules/defaults/themer.yml +2 -1
  26. data/lib/starter_web/_data/private.default.yml +119 -0
  27. data/lib/starter_web/_data/resources.yml +6 -7
  28. data/lib/starter_web/_includes/attributes.asciidoc +1 -1
  29. data/lib/starter_web/_plugins/lunr_index.rb +1 -1
  30. data/lib/starter_web/dot.gitignore +1 -1
  31. data/lib/starter_web/package.json +1 -1
  32. data/lib/starter_web/pages/public/blog/navigator/archive.html +3 -2
  33. data/lib/starter_web/pages/public/blog/navigator/archive/categoryview.html +3 -2
  34. data/lib/starter_web/pages/public/blog/navigator/archive/dateview.html +3 -2
  35. data/lib/starter_web/pages/public/blog/navigator/archive/tagview.html +3 -2
  36. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  37. data/lib/starter_web/utilsrv/package.json +1 -1
  38. metadata +11 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0e93fb15ef56819b92a0d748c7e809c7381ac50e69868be5777ce21f01acf066
4
- data.tar.gz: 2b710cb4d00181ee1b027fd6ea406a3e2c293a27cae544c3e72d5de055c43833
3
+ metadata.gz: a5ceecb6b421d85c3db86a44fba73d25650012ace9626b1a53ff082d16a61e9e
4
+ data.tar.gz: 7093783266335d7524f406c452bff71b8a9979f0b9d172c7025c01f9559ffc36
5
5
  SHA512:
6
- metadata.gz: 88e8c900a10010e9bc600663c22fb7b0f0b292ea71e3bc700022519c3929cdec359b5af9d07bdfafd970fafd70933548fcc819e808a34acfe0b97ddd9ee8485a
7
- data.tar.gz: 4edee51b60f67d1066729ef1fce3e1106cd957e9f06fbfbcfbd232aa7bcedb7d173af6955a516f76b52724f22f4d194227826b59083cfe15c752c0ea86f6a624
6
+ metadata.gz: a63666eeb929986759194324a01d601aec108c9f5f1716326668786779d84db989d97adfe02c40ef065faf54fb13743f900dca24e6934c4988e0c8110802ba3f
7
+ data.tar.gz: f702196b47569beb2d080ddcc75db8c4d4e7a3512a03d6bd291937d5a88167e7343dff4ac2a984978d269c42685b6766cb08ebca40aa74c0cbd35b3e63aa4183
@@ -47,18 +47,18 @@ regenerate: true
47
47
  {
48
48
  "themes":
49
49
  [
50
- {"name": "Uno (light)", "css": "{{asset_path}}/core/css/themes/uno-light/bootstrap.css"},
51
- {"name": "Uno (dark)", "css": "{{asset_path}}/core/css/themes/uno-dark/bootstrap.css"},
52
- {"name": "Bootstrap", "css": "{{asset_path}}/core/css/themes/bootstrap/bootstrap.css"}
50
+ {"name": "Uno light", "css": "{{asset_path}}/core/css/themes/uno-light/bootstrap.css"},
51
+ {"name": "Uno dark", "css": "{{asset_path}}/core/css/themes/uno-dark/bootstrap.css"},
52
+ {"name": "Bootstrap", "css": "{{asset_path}}/core/css/themes/bootstrap/bootstrap.css"}
53
53
  ]
54
54
  }
55
55
  {% else %}
56
56
  {
57
57
  "themes":
58
58
  [
59
- {"name": "Uno (light)", "css": "{{asset_path}}/core/css/themes/uno-light/bootstrap.min.css"},
60
- {"name": "Uno (dark)", "css": "{{asset_path}}/core/css/themes/uno-dark/bootstrap.min.css"},
61
- {"name": "Bootstrap", "css": "{{asset_path}}/core/css/themes/bootstrap/bootstrap.min.css"}
59
+ {"name": "Uno light", "css": "{{asset_path}}/core/css/themes/uno-light/bootstrap.min.css"},
60
+ {"name": "Uno dark", "css": "{{asset_path}}/core/css/themes/uno-dark/bootstrap.min.css"},
61
+ {"name": "Bootstrap", "css": "{{asset_path}}/core/css/themes/bootstrap/bootstrap.min.css"}
62
62
  ]
63
63
  }
64
64
  {% endif %}
@@ -34,6 +34,7 @@ regenerate: true
34
34
  -------------------------------------------------------------------------------- {% endcomment %}
35
35
  {% assign consent_defaults = modules.defaults.cookieconsent.defaults %}
36
36
  {% assign consent_settings = modules.cookieconsent.settings %}
37
+ {% assign tracking_enabled = site.data.j1_config.analytics.enabled %}
37
38
  {% assign tracking_id = site.data.j1_config.analytics.google.tracking_id %}
38
39
 
39
40
  {% comment %} Set config options
@@ -78,13 +79,20 @@ regenerate: true
78
79
  --------------------------------------------------------------- {% endcomment %}
79
80
  j1.adapter['cookieConsent'] = (function (j1, window) {
80
81
 
81
- var environment = '{{environment}}';
82
- var moduleOptions = {};
82
+ var environment = '{{environment}}';
83
+ var tracking_enabled = ('{{tracking_enabled}}' === 'true') ? true: false;
84
+ var tracking_id = '{{tracking_id}}';
85
+ var tracking_id_valid = (tracking_id.includes('tracking-id')) ? false : true;
86
+ var moduleOptions = {};
83
87
  var _this;
84
88
  var $modal;
85
89
  var user_cookie;
86
90
  var logger;
87
91
  var logText;
92
+
93
+ // NOTE: RegEx for tracking_id: ^(G|UA|YT|MO)-[a-zA-Z0-9-]+$
94
+ // See: https://stackoverflow.com/questions/20411767/how-to-validate-google-analytics-tracking-id-using-a-javascript-function/20412153
95
+
88
96
  // ---------------------------------------------------------------------------
89
97
  // Helper functions
90
98
  // ---------------------------------------------------------------------------
@@ -202,52 +210,70 @@ j1.adapter['cookieConsent'] = (function (j1, window) {
202
210
 
203
211
  // -------------------------------------------------------------------------
204
212
  // cbCookie()
205
- // Callback function called by CookieConsent module after the user has
206
- // made his selection
207
- // -------------------------------------------------------------------------
208
- // TODO:
209
- // If ONLY required setting selected, make j1.user.consent
210
- // a SESSION cookie!!!
213
+ // Called by CookieConsent module after the user has
214
+ // made his selection (callback)
211
215
  // -------------------------------------------------------------------------
212
216
  cbCookie: function () {
213
217
  var gaCookies = j1.findCookie('_ga');
214
- var user_cookie = j1.readCookie('j1.user.consent');
215
- var json = JSON.stringify(user_cookie);
218
+ var user_state = j1.readCookie('j1.user.state');
219
+ var user_consent = j1.readCookie('j1.user.consent');
220
+ var json = JSON.stringify(user_consent);
216
221
 
217
222
  logger.info('Entered post selection callback from CookieConsent');
218
223
  logger.info('Current values from CookieConsent: ' + json);
219
224
 
225
+ // NOTE: Warning needs to be moved to another module
226
+ // because page is reloaded after selection
227
+ //
228
+ if (tracking_enabled && !tracking_id_valid) {
229
+ logger.warn('tracking enabled, but invalid tracking id found: ' + tracking_id);
230
+ }
231
+
232
+ // for debugging
220
233
  // gaCookies.forEach(item => console.log('cookieConsent: ' + item));
221
234
 
222
235
  // Manage Google Analytics OptIn/Out
223
236
  // See: https://github.com/luciomartinez/gtag-opt-in/wiki
224
- //
225
- GTagOptIn.register('{{tracking_id}}');
226
- if (user_cookie.analyses) {
227
- logger.info('Enable: GA');
228
- GTagOptIn.optIn();
229
- } else {
230
- logger.warn('Disable: GA');
231
- GTagOptIn.optOut();
232
- var gaCookies = j1.findCookie('_ga');
233
- gaCookies.forEach(function (item) {
234
- logger.warn('Delete GA cookie: ' + item);
235
- j1.removeCookie({
236
- name: item,
237
- path: '/'
237
+ if (tracking_enabled && tracking_id_valid) {
238
+ GTagOptIn.register(tracking_id);
239
+ if (user_consent.analyses) {
240
+ logger.info('Enable: GA');
241
+ GTagOptIn.optIn();
242
+ } else {
243
+ logger.warn('Disable: GA');
244
+ GTagOptIn.optOut();
245
+ var gaCookies = j1.findCookie('_ga');
246
+ gaCookies.forEach(function (item) {
247
+ logger.warn('Delete GA cookie: ' + item);
248
+ j1.removeCookie({
249
+ name: item,
250
+ path: '/'
251
+ });
238
252
  });
239
- });
253
+ }
240
254
  }
241
255
 
256
+
242
257
  // enable cookie button if not visible
243
- //
244
258
  if ($('#quickLinksCookieButton').css('display') === 'none') {
245
259
  $('#quickLinksCookieButton').css('display', 'block');
246
260
  }
247
261
 
262
+ if (!user_consent.analyses || !user_consent.personalization) {
263
+ // expire consent|state cookies to session
264
+ j1.writeCookie({
265
+ name: 'j1.user.state',
266
+ data: user_state,
267
+ samesite: 'Strict'
268
+ });
269
+ j1.writeCookie({
270
+ name: 'j1.user.consent',
271
+ data: user_consent,
272
+ samesite: 'Strict'
273
+ });
274
+ }
275
+
248
276
  // reload page after selection
249
- //
250
- // $('#no_flicker').css('display', 'none');
251
277
  location.reload();
252
278
 
253
279
  } // END cbCookie
@@ -93,7 +93,6 @@ regenerate: true
93
93
  # For details, see https://jekyll.one
94
94
  # -----------------------------------------------------------------------------
95
95
  # TODO:
96
- # MANAGE themeExtensionCss is to be checked
97
96
  #
98
97
  # -----------------------------------------------------------------------------
99
98
  # Adapter generated: {{site.time}}
@@ -114,14 +113,14 @@ var j1 = (function () {
114
113
  // ---------------------------------------------------------------------------
115
114
  // globals
116
115
  // ---------------------------------------------------------------------------
117
- var rePager = new RegExp('navigator|dateview|tagview|archive');
118
- var environment = '{{environment}}';
119
- var moduleOptions = {};
120
- var j1_runtime_data = {};
116
+ var rePager = new RegExp('navigator|dateview|tagview|archive');
117
+ var environment = '{{environment}}';
118
+ var moduleOptions = {};
119
+ var j1_runtime_data = {};
121
120
 
122
121
  // Status information
123
- var state = 'not_started';
124
- var mode = 'not_detected';
122
+ var state = 'not_started';
123
+ var mode = 'not_detected';
125
124
 
126
125
  var current_user_data;
127
126
  var current_page;
@@ -131,17 +130,17 @@ var j1 = (function () {
131
130
  var app_detected;
132
131
  var user_session_detected;
133
132
 
134
- // Connector settings
135
- var translation_enabled = {{template_config.translation.enabled}};
133
+ // Translatior settings (currently NOT supported)
134
+ // var translation_enabled = {{template_config.translation.enabled}};
136
135
 
137
136
  // Theme information
138
137
  var themeName;
139
138
  var themeCss;
140
- var themeExtensionCss = environment === 'production'
141
- ? '/assets/themes/j1/core/css/themes/theme-extensions.min.css'
142
- : '/assets/themes/j1/core/css/themes/theme-extensions.css';
139
+ var cssExtension = (environment === 'production')
140
+ ? '.min.css'
141
+ : '.css';
143
142
 
144
- // Pathes of J1 data files
143
+ // Pathes of J1 data files
145
144
  var colors_data_path = '{{template_config.colors_data_path}}';
146
145
  var font_size_data_path = '{{template_config.font_size_data_path}}';
147
146
  var runtime_data_path = '{{template_config.runtime_data_path}}';
@@ -158,19 +157,11 @@ var j1 = (function () {
158
157
  var baseUrl;
159
158
  var referrer;
160
159
 
161
- // var default_theme_css = environment === 'production' ? '/assets/themes/j1/core/css/themes/uno-light/bootstrap.min.css' : '/assets/themes/j1/core/css/themes/uno-light/bootstrap.css';
162
- // // TODO: check what property is used default_theme|default_theme_name ?
163
- // var default_theme_display_name = 'Uno (light)';
164
- // var default_theme_name = 'uno-light';
165
- // var default_theme_author = 'J1 Team';
166
- // var default_theme_link = 'https://jekyll.one/';
167
- // var default_white_listed_pages = [];
168
-
169
160
  var cookie_names = {
170
161
  'app_session': '{{template_config.cookies.app_session}}',
171
162
  'user_session': '{{template_config.cookies.user_session}}',
172
163
  'user_state': '{{template_config.cookies.user_state}}',
173
- 'user_consent': 'j1.user.consent'
164
+ 'user_consent': '{{template_config.cookies.user_consent}}'
174
165
  };
175
166
 
176
167
  // user SESSION cookie (initial values)
@@ -192,39 +183,24 @@ var j1 = (function () {
192
183
  'last_pager': '/pages/public/blog/navigator/'
193
184
  };
194
185
 
195
- // user STATE cookie (initial values)
196
- // var user_state = {
197
- // 'theme_css': "",
198
- // 'theme_name': "",
199
- // 'theme_author': "",
200
- // 'theme_version': '{{site.version}}',
201
- // 'cookies_accepted': 'pending',
202
- // 'whitelistedPages': default_white_listed_pages,
203
- // 'deleteOnDecline': false,
204
- // 'showConsentOnPending': false,
205
- // 'stopScrolling': true,
206
- // 'session_active': false,
207
- // 'last_session_ts': '',
208
- // 'cc_authenticated': false
209
- // };
210
-
211
186
  var user_state = {
212
- 'theme_css': "",
213
- 'theme_name': "",
214
- 'theme_author': "",
187
+ 'theme_css': '',
188
+ 'theme_name': '',
189
+ 'theme_author': '',
215
190
  'theme_version': '{{site.version}}',
216
- 'stopScrolling': true,
217
191
  'session_active': false,
218
192
  'last_session_ts': ''
219
193
  };
220
194
 
195
+ var user_consent;
196
+
221
197
  // ---------------------------------------------------------------------------
222
198
  // helper functions
223
199
  // ---------------------------------------------------------------------------
224
200
 
201
+ // See: https://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string
202
+ //
225
203
  function executeFunctionByName(functionName, context /*, args */) {
226
- // See: https://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string
227
- //
228
204
  var args = Array.prototype.slice.call(arguments, 2);
229
205
  var namespaces = functionName.split('.');
230
206
  var func = namespaces.pop();
@@ -241,7 +217,6 @@ var j1 = (function () {
241
217
 
242
218
  // -------------------------------------------------------------------------
243
219
  // init()
244
- // initializer
245
220
  // -------------------------------------------------------------------------
246
221
  init: function (options) {
247
222
 
@@ -251,15 +226,9 @@ var j1 = (function () {
251
226
  var logger = log4javascript.getLogger('j1.init');
252
227
  var url = new liteURL(window.location.href);
253
228
  var baseUrl = url.origin;
254
- // moment not used anymore
255
- // var epoch = Math.floor(Date.now()/1000);
256
- // var timestamp_now = moment.unix(epoch).format('YYYY-MM-DD HH:mm:ss');
257
229
  var date = new Date();
258
230
  var timestamp_now = date.toISOString();
259
231
  var curr_state = 'started';
260
- // var date = new Date();
261
- // var my_timestamp = date.toISOString();
262
-
263
232
 
264
233
  // -----------------------------------------------------------------------
265
234
  // options loader
@@ -280,51 +249,58 @@ var j1 = (function () {
280
249
  j1['xhrDOMState'] = {};
281
250
 
282
251
  // -----------------------------------------------------------------------
283
- // session ON_CLOSE event
284
- // wrapup if ALL browser windows get closed. Update user STATE
285
- // cookie on window CLOSE.
252
+ // update cookies if browser window get closed
286
253
  // see: https://stackoverflow.com/questions/3888902/detect-browser-or-tab-closing
287
254
  // -----------------------------------------------------------------------
288
255
  window.addEventListener('beforeunload', function (event) {
289
256
  var cookie_names = j1.getCookieNames();
290
- var cookie_user_state_name = cookie_names.user_state;
291
- var cookie_user_session_name = cookie_names.user_session;
292
- // moment not used anymore
293
- // var epoch = Math.floor(Date.now()/1000);
294
- // var timestamp_now = moment.unix(epoch).format('YYYY-MM-DD HH:mm:ss');
295
257
  var date = new Date();
296
258
  var timestamp_now = date.toISOString();
297
- var user_state = j1.readCookie(cookie_user_state_name);
259
+ var user_state = j1.readCookie(cookie_names.user_state);
260
+ var user_consent = j1.readCookie(cookie_names.user_consent);
298
261
  var ep_status;
299
262
  var url;
300
263
  var baseUrl;
301
264
 
302
- // update cookie only, if (already) exists
303
- //
304
- if (user_state) {
305
- user_state.session_active = false;
306
- user_state.last_session_ts = timestamp_now;
265
+ user_state.session_active = false;
266
+ user_state.last_session_ts = timestamp_now;
307
267
 
268
+ if (!user_consent.analyses || !user_consent.personalization) {
269
+ // expire consent|state cookies to session
270
+ j1.writeCookie({
271
+ name: cookie_names.user_consent,
272
+ data: user_state,
273
+ samesite: 'Strict'
274
+ });
275
+ j1.writeCookie({
276
+ name: cookie_names.user_state,
277
+ data: user_state,
278
+ samesite: 'Strict'
279
+ });
280
+ } else {
308
281
  j1.writeCookie({
309
- name: cookie_user_state_name,
310
- data: user_state,
311
- expires: 365
282
+ name: cookie_names.user_state,
283
+ data: user_state,
284
+ samesite: 'Strict',
285
+ expires: 365
312
286
  });
313
287
  }
314
288
 
315
- });
289
+ }); // END beforeunload
316
290
 
317
291
  // -----------------------------------------------------------------------
318
- // initialize|load (existing) user cookies
292
+ // initialize|load user cookies
319
293
  // -----------------------------------------------------------------------
320
294
  user_session.created = timestamp_now;
321
295
  user_session.timestamp = timestamp_now;
322
296
 
297
+ user_consent = j1.readCookie(cookie_names.user_consent);
323
298
  user_session = j1.existsCookie(cookie_names.user_session)
324
299
  ? j1.readCookie(cookie_names.user_session)
325
300
  : j1.writeCookie({
326
301
  name: cookie_names.user_session,
327
302
  data: user_session,
303
+ samesite: 'Strict'
328
304
  });
329
305
 
330
306
  user_state = j1.existsCookie(cookie_names.user_state)
@@ -332,27 +308,38 @@ var j1 = (function () {
332
308
  : j1.writeCookie({
333
309
  name: cookie_names.user_state,
334
310
  data: user_state,
311
+ samesite: 'Strict',
335
312
  expires: 365
336
313
  });
337
314
 
338
315
  user_state.session_active = true;
339
- j1.writeCookie({
340
- name: cookie_names.user_state,
341
- data: user_state,
342
- expires: 365
343
- });
316
+
317
+ if (!user_consent.analyses || !user_consent.personalization) {
318
+ // expire consent|state cookies to session
319
+ j1.writeCookie({
320
+ name: cookie_names.user_state,
321
+ data: user_state,
322
+ samesite: 'Strict'
323
+ });
324
+ } else {
325
+ j1.writeCookie({
326
+ name: cookie_names.user_state,
327
+ data: user_state,
328
+ samesite: 'Strict',
329
+ expires: 365
330
+ });
331
+ }
344
332
 
345
333
  // detect middleware (mode 'app') and update user session cookie
346
334
  // -----------------------------------------------------------------------
347
- // if (user_session.mode === 'na' || user_session.mode === 'app') {
348
335
  if (user_session.mode === 'app') {
349
336
  var url = new liteURL(window.location.href);
350
337
  var ep_status = baseUrl + '/status' + '?page=' + window.location.pathname;
351
338
  var detectTimeout = 50;
352
339
 
353
- baseUrl = url.origin;
340
+ baseUrl = url.origin;
354
341
 
355
- // see: https://stackoverflow.com/questions/3709597/wait-until-all-jquery-ajax-requests-are-done
342
+ // See: https://stackoverflow.com/questions/3709597/wait-until-all-jquery-ajax-requests-are-done
356
343
  $.when (
357
344
  $.ajax(ep_status)
358
345
  )
@@ -369,14 +356,12 @@ var j1 = (function () {
369
356
  logger.info('update user session cookie');
370
357
  j1.writeCookie({
371
358
  name: cookie_names.user_session,
372
- data: user_session
359
+ data: user_session,
360
+ samesite: 'Strict'
373
361
  });
374
362
  j1.setState(curr_state);
375
363
  logger.info('state: ' + j1.getState());
376
364
 
377
-
378
-
379
-
380
365
  var dependencies_met_page_displayed = setInterval (function () {
381
366
  if (j1.getState() == 'finished') {
382
367
  if (j1.authEnabled()) {
@@ -411,8 +396,9 @@ var j1 = (function () {
411
396
 
412
397
  logger.info(logText);
413
398
  j1.writeCookie({
414
- name: cookie_names.user_session,
415
- data: user_session
399
+ name: cookie_names.user_session,
400
+ data: user_session,
401
+ samesite: 'Strict'
416
402
  });
417
403
  j1.setState(curr_state);
418
404
  logger.info('state: ' + j1.getState());
@@ -424,10 +410,6 @@ var j1 = (function () {
424
410
  logger.info('page is being initialized');
425
411
  }
426
412
 
427
- // jadams: for testing only
428
- // display page
429
- // $('#no_flicker').css('display', 'block');
430
-
431
413
  state = 'started';
432
414
  logger.info('state: ' + state);
433
415
  logger.info('page is being initialized');
@@ -443,7 +425,6 @@ var j1 = (function () {
443
425
  // process|update user state cookie
444
426
  themeName = user_session.theme_name;
445
427
  themeCss = user_session.theme_css;
446
- themeExtensionCss = user_session.theme_extension_css;
447
428
 
448
429
  // save last page access
449
430
  // see: https://stackoverflow.com/questions/3528324/how-to-get-the-previous-url-in-javascript
@@ -468,18 +449,15 @@ var j1 = (function () {
468
449
  last_pager = user_session.last_pager;
469
450
  }
470
451
 
471
- // jadams: for testing only
472
- // display page
473
- //$('#no_flicker').css('display', 'block');
474
-
475
452
  logger.info('update user session cookie');
476
453
  j1.writeCookie({
477
- name: cookie_names.user_session,
478
- data: user_session
454
+ name: cookie_names.user_session,
455
+ data: user_session,
456
+ samesite: 'Strict'
479
457
  });
480
458
 
459
+ // NOTE: asynchronous calls should be rewitten to xhrData
481
460
  // initialize page resources for blocks
482
- // (asynchronous, should be rewitten to xhrData)
483
461
  j1.initBanner(settings);
484
462
  j1.initPanel(settings);
485
463
  j1.initFooter(settings);
@@ -490,8 +468,9 @@ var j1 = (function () {
490
468
 
491
469
  user_session.timestamp = timestamp_now;
492
470
  j1.writeCookie({
493
- name: cookie_names.user_session,
494
- data: user_session
471
+ name: cookie_names.user_session,
472
+ data: user_session,
473
+ samesite: 'Strict'
495
474
  });
496
475
 
497
476
  // -----------------------------------------------------------------------
@@ -599,7 +578,6 @@ var j1 = (function () {
599
578
  if (selector.length) {
600
579
  logText = 'loading banner on id: ' +banner[i];
601
580
  logger.info(logText);
602
- // var banner_data_path = '{{banner_data_path}} ' + id + ' > *';
603
581
  var banner_data_path = '{{banner_data_path}} ' + id;
604
582
  selector.load(banner_data_path, cb_load_closure(id));
605
583
  }
@@ -703,7 +681,6 @@ var j1 = (function () {
703
681
  if ( selector.length ) {
704
682
  logText = 'loading panel on id: ' +panel[i];
705
683
  logger.info(logText);
706
- // var panel_data_path = '{{panel_data_path}} ' + id + ' > *';
707
684
  var panel_data_path = '{{panel_data_path}} ' + id;
708
685
  selector.load(panel_data_path, cb_load_closure(id));
709
686
  }
@@ -737,12 +714,6 @@ var j1 = (function () {
737
714
  j1.setXhrDataState(footer_id, statusTxt);
738
715
  j1.setXhrDomState(footer_id, statusTxt);
739
716
  logger.info('XHR data loaded in the DOM: ' + footer_id);
740
-
741
- // jadams, 2020-07-21: intermediate state DISABLED
742
- // state = 'footer_loaded';
743
- // logger.info('set state for module ' + mod + ': ' + state);
744
- // executeFunctionByName(mod + '.setState', window, state);
745
-
746
717
  logText = 'initialization finished';
747
718
  logger.info(logText);
748
719
  }
@@ -764,7 +735,6 @@ var j1 = (function () {
764
735
  var id = '#' + '{{footer_id}}';
765
736
  var selector = $(id);
766
737
  if ( selector.length ) {
767
- // var footer_data_path = '{{footer_data_path}} ' + id + ' > *';
768
738
  var footer_data_path = '{{footer_data_path}} ' + id;
769
739
  selector.load(footer_data_path, cb_load_closure(id));
770
740
  } else {
@@ -820,7 +790,8 @@ var j1 = (function () {
820
790
  user_session.current_page = current_url.pathname;
821
791
  j1.writeCookie({
822
792
  name: cookie_names.user_session,
823
- data: user_session
793
+ data: user_session,
794
+ samesite: 'Strict'
824
795
  });
825
796
 
826
797
  providerPermissions = user_session.provider_permissions;
@@ -863,14 +834,14 @@ var j1 = (function () {
863
834
  $('#quickLinksCookieButton').css('display', 'none');
864
835
  }
865
836
 
866
- // show|hide translator icon
867
- if (translation_enabled) {
868
- logger.info('translator detected: google');
869
- logger.info('initialize language selector');
870
- $('.goog-te-combo').addClass('form-control');
871
- }
837
+ // show|hide translator icon (currently NOT supported)
838
+ // if (translation_enabled) {
839
+ // logger.info('translator detected: google');
840
+ // logger.info('initialize language selector');
841
+ // $('.goog-te-combo').addClass('form-control');
842
+ // }
872
843
 
873
- // show cc icon
844
+ // show cc icon (currently NOT supported)
874
845
  // $('#quickLinksControlCenterButton').css('display', 'block');
875
846
 
876
847
  if (j1.authEnabled()) {
@@ -934,17 +905,21 @@ var j1 = (function () {
934
905
  user_session.current_page = current_url.pathname;
935
906
  j1.writeCookie({
936
907
  name: cookie_names.user_session,
937
- data: user_session
908
+ data: user_session,
909
+ samesite: 'Strict'
938
910
  });
939
911
 
940
- // show|hide translator icon
941
- if (translation_enabled) {
942
- logger.info('translator detected: google');
943
- logger.info('initialize language selector');
944
- $('.goog-te-combo').addClass('form-control');
945
- }
912
+ // show|hide translator icon (currently NOT supported)
913
+ // if (translation_enabled) {
914
+ // logger.info('translator detected: google');
915
+ // logger.info('initialize language selector');
916
+ // $('.goog-te-combo').addClass('form-control');
917
+ // }
918
+
919
+ // show cc icon (currently NOT supported)
920
+ // $('#quickLinksControlCenterButton').css('display', 'block');
946
921
 
947
- // show|hide cookie icon (should MOVED to Cookiebar ???)
922
+ // show|hide cookie icon
948
923
  if (j1.existsCookie(cookie_names.user_consent)) {
949
924
  // Display cookie icon
950
925
  logText = 'show cookie icon';
@@ -958,7 +933,7 @@ var j1 = (function () {
958
933
  }
959
934
 
960
935
  // If the page requested contains an anchor element,
961
- // do a smooth scroll to
936
+ // do a smooth scroll
962
937
  j1.scrollTo();
963
938
 
964
939
  if (user_session.previous_page !== user_session.current_page) {
@@ -1051,7 +1026,6 @@ var j1 = (function () {
1051
1026
  var toccerScrollOffset = {{toccer_options.scrollSmoothOffset}};
1052
1027
 
1053
1028
  // calculate offset for correct (smooth) scroll position
1054
- //
1055
1029
  var $pagehead = $('.attic');
1056
1030
  var $navbar = $('nav.navbar');
1057
1031
  var $adblock = $('#adblock');
@@ -1069,7 +1043,6 @@ var j1 = (function () {
1069
1043
  var scrollOffset = navbarType == 'fixed' ? -1*(n + a + l) : -1*(h + n + a + l);
1070
1044
 
1071
1045
  // static offset, to be checked why this is needed
1072
- //
1073
1046
  scrollOffset = scrollOffset + toccerScrollOffset;
1074
1047
 
1075
1048
  if (anchor_id && anchor_id !== '#') {
@@ -1149,11 +1122,6 @@ var j1 = (function () {
1149
1122
  return function (responseTxt, statusTxt, xhr) {
1150
1123
  var logger = log4javascript.getLogger('j1.adapter.xhrData');
1151
1124
  if ( statusTxt === 'success' ) {
1152
- // jadams, 2020-07-21: intermediate state should DISABLED
1153
- // if (state) {
1154
- // logger.info('set state for ' +mod+ ' to: ' + state);
1155
- // executeFunctionByName(mod + '.setState', window, state);
1156
- // }
1157
1125
  j1.setXhrDataState(id, statusTxt);
1158
1126
  j1.setXhrDomState(id, 'pending');
1159
1127
 
@@ -1295,21 +1263,17 @@ var j1 = (function () {
1295
1263
  // context/HTTPS).
1296
1264
  // -------------------------------------------------------------------------
1297
1265
  //
1298
- writeCookie: function (options /*name, data, [path, expires, SameSite, secure]*/) {
1266
+ writeCookie: function (options /*name, data, [path, expires, samesite, http_only, secure]*/) {
1299
1267
  var defaults = {
1300
1268
  data: {},
1301
1269
  name: '',
1302
- expires: 0,
1303
1270
  path: '/',
1304
- // SameSite: 'Strict',
1305
- // SameSite: 'Lax',
1271
+ expires: 0,
1272
+ samesite: 'Lax',
1306
1273
  http_only: false,
1307
1274
  secure: false
1308
1275
  };
1309
1276
  var settings = $.extend(defaults, options);
1310
- // moment not used anymore
1311
- // var epoch = Math.floor(Date.now()/1000);
1312
- // var timestamp_now = moment.unix(epoch).format('YYYY-MM-DD HH:mm:ss');
1313
1277
  var date = new Date();
1314
1278
  var timestamp_now = date.toISOString();
1315
1279
  var cookie_data = {};
@@ -1326,25 +1290,26 @@ var j1 = (function () {
1326
1290
  if (settings.expires > 0) {
1327
1291
  Cookies.set(settings.name, data_encoded, {
1328
1292
  expires: settings.expires,
1329
- SameSite: settings.SameSite
1293
+ SameSite: settings.samesite
1330
1294
  });
1331
1295
  } else {
1332
1296
  Cookies.set(settings.name, data_encoded, {
1333
- SameSite: settings.SameSite
1297
+ SameSite: settings.samesite
1334
1298
  });
1335
1299
  }
1336
1300
  } else {
1337
1301
  cookie_data = settings.data;
1338
1302
  data_json = JSON.stringify(settings.data);
1339
1303
  data_encoded = window.btoa(data_json);
1304
+
1340
1305
  if (settings.expires > 0) {
1341
1306
  Cookies.set(settings.name, data_encoded, {
1342
1307
  expires: settings.expires,
1343
- SameSite: settings.SameSite
1308
+ SameSite: settings.samesite
1344
1309
  });
1345
1310
  } else {
1346
1311
  Cookies.set(settings.name, data_encoded, {
1347
- SameSite: settings.SameSite
1312
+ SameSite: settings.samesite
1348
1313
  });
1349
1314
  }
1350
1315
  }
@@ -1705,12 +1670,6 @@ var j1 = (function () {
1705
1670
  // -----------------------------------------------------------------------
1706
1671
  $('head').append('<style>.g-bg-primary { background-color: ' +bg_primary+ ' !important; }</style>');
1707
1672
 
1708
- // Set color of timeline bullet
1709
- // -----------------------------------------------------------------------
1710
- // $('head').append('<style>.tmicon { background: ' +bg_primary+ ' !important; }</style>');
1711
- // $('head').append('<style>.timeline-panel:after { border-left-color: ' +bg_primary+ ' !important; }</style>');
1712
- // $('head').append('<style>.timeline-panel:after { border-right-color: ' +bg_primary+ ' !important; }</style>');
1713
-
1714
1673
  // mdi icons
1715
1674
  // -----------------------------------------------------------------------
1716
1675
  $('head').append('<style>.iconify-md-bg-primary { color: ' +bg_primary+ ' !important; }</style>');
@@ -1851,7 +1810,7 @@ var j1 = (function () {
1851
1810
  for ( var i = 0; i < length; i++ ) {
1852
1811
  result += characters.charAt(Math.floor(Math.random() * charactersLength));
1853
1812
  }
1854
- return result;
1813
+ return result;
1855
1814
  }, // END generateId
1856
1815
 
1857
1816
  // -------------------------------------------------------------------------
@@ -1898,10 +1857,20 @@ var j1 = (function () {
1898
1857
  }; // END j1 (return)
1899
1858
  }) (j1, window);
1900
1859
 
1901
- {% endcapture %}
1860
+ {% comment %} NOTE: Unexpected token: punc (;) errors if compressed
1861
+ --------------------------------------------------------------------------------
1902
1862
  {% if production %}
1903
1863
  {{ cache | minifyJS }}
1904
1864
  {% else %}
1905
1865
  {{ cache | strip_empty_lines }}
1906
1866
  {% endif %}
1907
1867
  {% assign cache = nil %}
1868
+ -------------------------------------------------------------------------------- {% endcomment %}
1869
+
1870
+ {% endcapture %}
1871
+ {% if production %}
1872
+ {{ cache | strip_empty_lines }}
1873
+ {% else %}
1874
+ {{ cache | strip_empty_lines }}
1875
+ {% endif %}
1876
+ {% assign cache = nil %}