j1-template 2022.0.12 → 2022.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/assets/themes/j1/adapter/js/advertising.js +61 -32
  3. data/assets/themes/j1/adapter/js/algolia.js +9 -9
  4. data/assets/themes/j1/adapter/js/analytics.js +46 -24
  5. data/assets/themes/j1/adapter/js/asciidoctor.js +9 -9
  6. data/assets/themes/j1/adapter/js/attic.js +9 -1
  7. data/assets/themes/j1/adapter/js/bmd.js +9 -10
  8. data/assets/themes/j1/adapter/js/carousel.js +9 -9
  9. data/assets/themes/j1/adapter/js/clipboard.js +8 -8
  10. data/assets/themes/j1/adapter/js/comments.js +31 -10
  11. data/assets/themes/j1/adapter/js/cookieConsent.js +70 -78
  12. data/assets/themes/j1/adapter/js/fab.js +10 -10
  13. data/assets/themes/j1/adapter/js/framer.js +59 -58
  14. data/assets/themes/j1/adapter/js/j1.js +139 -92
  15. data/assets/themes/j1/adapter/js/justifiedGallery.js +11 -10
  16. data/assets/themes/j1/adapter/js/justifiedGalleryCustomizer.js +9 -9
  17. data/assets/themes/j1/adapter/js/lightbox.js +11 -4
  18. data/assets/themes/j1/adapter/js/logger.js +10 -3
  19. data/assets/themes/j1/adapter/js/mmenu.js +9 -9
  20. data/assets/themes/j1/adapter/js/navigator.js +9 -9
  21. data/assets/themes/j1/adapter/js/quicksearch.js +9 -9
  22. data/assets/themes/j1/adapter/js/rouge.js +9 -9
  23. data/assets/themes/j1/adapter/js/rtable.js +9 -9
  24. data/assets/themes/j1/adapter/js/rtextResizer.js +9 -9
  25. data/assets/themes/j1/adapter/js/scroller.js +12 -7
  26. data/assets/themes/j1/adapter/js/themer.js +11 -2
  27. data/assets/themes/j1/adapter/js/toccer.js +9 -9
  28. data/assets/themes/j1/adapter/js/translator.js +13 -16
  29. data/assets/themes/j1/modules/advertising/js/google/adInitializer.js +14 -4
  30. data/lib/j1/version.rb +1 -1
  31. data/lib/starter_web/Gemfile +1 -1
  32. data/lib/starter_web/_config.yml +1 -1
  33. data/lib/starter_web/_data/layouts/home.ads.yml +262 -0
  34. data/lib/starter_web/_data/layouts/home.no-ads.yml +262 -0
  35. data/lib/starter_web/_data/layouts/home.yml +1 -1
  36. data/lib/starter_web/_data/modules/advertising.yml +1 -2
  37. data/lib/starter_web/_data/modules/analytics.yml +1 -1
  38. data/lib/starter_web/_data/modules/cookies.yml +0 -2
  39. data/lib/starter_web/_data/modules/defaults/advertising.yml +0 -1
  40. data/lib/starter_web/_data/modules/defaults/comments.yml +4 -4
  41. data/lib/starter_web/_data/modules/defaults/cookies.yml +104 -36
  42. data/lib/starter_web/_includes/attributes.asciidoc +1 -1
  43. data/lib/starter_web/_plugins/lunr_index.rb +1 -1
  44. data/lib/starter_web/collections/posts/public/featured/_posts/0000-00-00-welcome-to-j1.adoc.erb +1 -1
  45. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.adoc +1 -1
  46. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.ads.asciidoc +1 -1
  47. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.comments.asciidoc +1 -1
  48. data/lib/starter_web/collections/posts/public/featured/_posts/2021-02-01-site-generators.adoc +1 -1
  49. data/lib/starter_web/collections/posts/public/featured/_posts/2021-03-03-about-j1.adoc +1 -1
  50. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-01-post-wiki-series.adoc +1 -1
  51. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-02-post-wiki-series.adoc +1 -1
  52. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-03-post-wiki-series.adoc +1 -1
  53. data/lib/starter_web/index.html +0 -3
  54. data/lib/starter_web/package.json +1 -1
  55. data/lib/starter_web/pages/public/manuals/dropdown-help.adoc +23 -2
  56. data/lib/starter_web/pages/public/previewer/preview_bootstrap_theme.adoc +100 -166
  57. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  58. data/lib/starter_web/utilsrv/package.json +1 -1
  59. metadata +4 -2
@@ -37,18 +37,21 @@ regenerate: true
37
37
  -------------------------------------------------------------------------------- {% endcomment %}
38
38
  {% assign cookie_defaults = modules.defaults.cookies.defaults %}
39
39
  {% assign cookie_settings = modules.cookies.settings %}
40
-
41
40
  {% assign consent_defaults = modules.defaults.cookieconsent.defaults %}
42
41
  {% assign consent_settings = modules.cookieconsent.settings %}
43
- {% assign tracking_enabled = template_config.analytics.enabled %}
44
- {% assign tracking_id = template_config.analytics.google.tracking_id %}
45
-
46
- {% assign comment_provider = site.data.j1_config.comments.provider %}
42
+ {% assign analytics_defaults = modules.defaults.analytics.defaults %}
43
+ {% assign analytics_settings = modules.analytics.settings %}
47
44
 
48
45
  {% comment %} Set config options
49
46
  -------------------------------------------------------------------------------- {% endcomment %}
50
47
  {% assign consent_options = consent_defaults | merge: consent_settings %}
51
48
  {% assign cookie_options = cookie_defaults | merge: cookie_settings %}
49
+ {% assign analytics_options = analytics_defaults | merge: analytics_settings %}
50
+
51
+ {% comment %} Set variables
52
+ -------------------------------------------------------------------------------- {% endcomment %}
53
+ {% assign tracking_enabled = analytics_options.enabled %}
54
+ {% assign tracking_id = analytics_options.google.trackingID %}
52
55
 
53
56
  {% assign production = false %}
54
57
  {% if environment == 'prod' or environment == 'production' %}
@@ -80,13 +83,12 @@ regenerate: true
80
83
  // -----------------------------------------------------------------------------
81
84
  'use strict';
82
85
  j1.adapter.cookieConsent = (function (j1, window) {
83
-
84
- var environment = '{{environment}}';
85
- var tracking_enabled = ('{{tracking_enabled}}' === 'true') ? true: false;
86
- var tracking_id = '{{tracking_id}}';
87
- var tracking_id_valid = (tracking_id.includes('tracking-id')) ? false : true;
88
- var comment_provider = '{{comment_provider}}';
89
- var moduleOptions = {};
86
+ var environment = '{{environment}}';
87
+ var tracking_enabled = ('{{tracking_enabled}}' === 'true') ? true: false;
88
+ var tracking_id = '{{tracking_id}}';
89
+ var tracking_id_valid = (tracking_id.includes('tracking-id')) ? false : true;
90
+ var expireCookiesOnRequiredOnly = ('{{cookie_options.expireCookiesOnRequiredOnly}}' === 'true') ? true: false;
91
+ var moduleOptions = {};
90
92
  var _this;
91
93
  var $modal;
92
94
  var cookie_names;
@@ -123,7 +125,15 @@ j1.adapter.cookieConsent = (function (j1, window) {
123
125
  init: function (options) {
124
126
 
125
127
  // -----------------------------------------------------------------------
126
- // globals
128
+ // Default module settings
129
+ // -----------------------------------------------------------------------
130
+ var settings = $.extend({
131
+ module_name: 'j1.adapter.cookieConsent',
132
+ generated: '{{site.time}}'
133
+ }, options);
134
+
135
+ // -----------------------------------------------------------------------
136
+ // Global variable settings
127
137
  // -----------------------------------------------------------------------
128
138
  _this = j1.adapter.cookieConsent;
129
139
  logger = log4javascript.getLogger('j1.adapter.cookieConsent');
@@ -140,14 +150,6 @@ j1.adapter.cookieConsent = (function (j1, window) {
140
150
  // initialize state flag
141
151
  _this.state = 'pending';
142
152
 
143
- // -----------------------------------------------------------------------
144
- // Default module settings
145
- // -----------------------------------------------------------------------
146
- var settings = $.extend({
147
- module_name: 'j1.adapter.cookieConsent',
148
- generated: '{{site.time}}'
149
- }, options);
150
-
151
153
  {% comment %} Load module config from yml data
152
154
  -------------------------------------------------------------------------- {% endcomment %}
153
155
  // Load module DEFAULTS|CONFIG
@@ -278,14 +280,17 @@ j1.adapter.cookieConsent = (function (j1, window) {
278
280
  // made his selection
279
281
  // -------------------------------------------------------------------------
280
282
  cbCookie: function () {
281
- var gaCookies = j1.findCookie('_ga');
282
- var j1Cookies = j1.findCookie('j1');
283
- var cookie_names = j1.getCookieNames();
284
- var user_state = j1.readCookie(cookie_names.user_state);
285
- var user_consent = j1.readCookie(cookie_names.user_consent);
286
- var user_translate = j1.readCookie(cookie_names.user_translate);
287
- var json = JSON.stringify(user_consent);
288
- var user_agent = platform.ua;
283
+ var url = new liteURL(window.location.href);
284
+ var hostname = url.hostname;
285
+ var gaCookies = j1.findCookie('_ga');
286
+ var gasCookies = j1.findCookie('__ga');
287
+ var j1Cookies = j1.findCookie('j1');
288
+ var cookie_names = j1.getCookieNames();
289
+ var user_state = j1.readCookie(cookie_names.user_state);
290
+ var user_consent = j1.readCookie(cookie_names.user_consent);
291
+ var user_translate = j1.readCookie(cookie_names.user_translate);
292
+ var json = JSON.stringify(user_consent);
293
+ var user_agent = platform.ua;
289
294
  var cookie_written;
290
295
 
291
296
  logger.info('\n' + 'entered post selection callback from CookieConsent');
@@ -296,46 +301,15 @@ j1.adapter.cookieConsent = (function (j1, window) {
296
301
  $('#quickLinksCookieButton').css('display', 'block');
297
302
  }
298
303
 
299
- // jadams, 2021-11-29: disabled additional logs to verify the existance
300
- // of J1 and GA cookies (testing only)
301
- //
302
- // logger.debug('\n' + 'j1 cookies found:' + j1Cookies.length);
303
- // j1Cookies.forEach(item => console.log('j1.core.switcher: ' + item));
304
- // logger.debug('\n' + 'ga cookies found:' + gaCookies.length);
305
- // gaCookies.forEach(item => console.log('j1.core.switcher: ' + item));
306
- //
307
- // if (user_agent.includes('iPad')) {
308
- // logger.warn('\n' + 'product detected : ' + platform.product);
309
- // logger.warn('\n' + 'skip deleting (unwanted) cookies for this platform');
310
- // }
311
-
312
304
  // Manage Google Analytics OptIn/Out
313
305
  // See: https://github.com/luciomartinez/gtag-opt-in/wiki
314
306
  if (tracking_enabled && tracking_id_valid) {
315
- // jadams, 2021-12-20: GA OptIn|Out handling moved to (new)
316
- // analytics adapter (adapter/js/analytics.js)
307
+ // Managing cookie life-time
317
308
  // ---------------------------------------------------------------------
318
- // GTagOptIn.register(tracking_id);
319
- // if (user_consent.analysis) {
320
- // logger.info('\n' + 'enable: GA');
321
- // GTagOptIn.optIn();
322
- // } else {
323
- // logger.warn('\n' + 'disable: GA');
324
- // GTagOptIn.optOut();
325
- //
326
- // if (!user_agent.includes('iPad')) {
327
- // gaCookies.forEach(function (item) {
328
- // logger.warn('\n' + 'delete GA cookie: ' + item);
329
- // j1.removeCookie({ name: item, domain: cookie_domain });
330
- // });
331
- // }
332
- // }
333
-
334
- // Managing cookie life-time. If cookie settings allows only
335
- // "required" cookies, all "persistent" cookies (Comments|Ads|Translation)
336
- // get expired to "session" for better GDPR compliance. The GDPR
337
- // regulations|privacy does NOT require any consent on using cookies
338
- // for session-only cookies.
309
+ // If cookie settings allows only "required" cookies, all "persistent"
310
+ // cookies (Comments|Ads|Translation) get expired to "session" for
311
+ // better GDPR compliance. The GDPR regulations does NOT require
312
+ // any consent on session-only cookies.
339
313
  //
340
314
  if (!user_consent.analysis || !user_consent.personalization) {
341
315
 
@@ -362,15 +336,32 @@ j1.adapter.cookieConsent = (function (j1, window) {
362
336
  location.reload(true);
363
337
  }
364
338
  } else {
365
- // jadams, 2021-08-10: remove cookies on invalid GA config or left
366
- // cookies from previous session/page view if they exists
339
+ // Failsafe: Make (really) sure the all GA|GAS cookies removed
340
+ // left from a previous session/page view for better privacy compliance
341
+ // ---------------------------------------------------------------------
342
+
343
+ // remove cookies on invalid GA config or left from a previous
344
+ // session/page view if they exists
367
345
  // ---------------------------------------------------------------------
368
346
  gaCookies.forEach(function (item) {
369
- // Skip cookies from Google Ads
370
- var gad = item.includes('gad');
371
- if (!gad) {
372
- logger.warn('\n' + 'delete GA cookie: ' + item);
373
- j1.removeCookie({ name: item, domain: cookie_domain });
347
+ logger.warn('\n' + 'delete GA cookie: ' + item);
348
+ if (hostname == 'localhost') {
349
+ j1.removeCookie({ name: item, domain: false, secure: false });
350
+ } else {
351
+ j1.removeCookie({ name: item, domain: '.' + hostname, secure: false });
352
+ }
353
+ });
354
+
355
+ // remove cookies on invalid GAS config or left from a previous
356
+ // session/page view if they exists
357
+ // ---------------------------------------------------------------------
358
+ gasCookies.forEach(function (item) {
359
+ // Remove cookies from Google Ads
360
+ logger.warn('\n' + 'delete GAS cookie: ' + item);
361
+ if (hostname == 'localhost') {
362
+ j1.removeCookie({ name: item, domain: false, secure: false });
363
+ } else {
364
+ j1.removeCookie({ name: item, domain: '.' + hostname, secure: false });
374
365
  }
375
366
  });
376
367
 
@@ -379,7 +370,7 @@ j1.adapter.cookieConsent = (function (j1, window) {
379
370
  // get expired to "session" for better GDPR compliance. The GDPR
380
371
  // regulations|privacy does NOT require any consent on using cookies
381
372
  // for session-only cookies.
382
- //
373
+ // ---------------------------------------------------------------------
383
374
  if (!user_consent.analysis || !user_consent.personalization) {
384
375
  // overload cookie consent settings
385
376
  user_translate.analysis = user_consent.analysis;
@@ -393,11 +384,12 @@ j1.adapter.cookieConsent = (function (j1, window) {
393
384
  secure: secure
394
385
  });
395
386
 
396
- // expire permanent cookies to session
397
- // -------------------------------------------------------------------
398
- j1.expireCookie({ name: cookie_names.user_state });
399
- j1.expireCookie({ name: cookie_names.user_consent });
400
- j1.expireCookie({ name: cookie_names.user_translate });
387
+ if (expireCookiesOnRequiredOnly) {
388
+ // expire permanent cookies to session
389
+ j1.expireCookie({ name: cookie_names.user_state });
390
+ j1.expireCookie({ name: cookie_names.user_consent });
391
+ j1.expireCookie({ name: cookie_names.user_translate });
392
+ }
401
393
  }
402
394
 
403
395
  if (moduleOptions.reloadPageOnChange) {
@@ -81,7 +81,7 @@ regenerate: true
81
81
  j1.adapter.fab = (function (j1, window) {
82
82
 
83
83
  // ---------------------------------------------------------------------------
84
- // globals
84
+ // Global variable settings
85
85
  // ---------------------------------------------------------------------------
86
86
  var isMobile = j1.core.isMobile();
87
87
  var environment = '{{environment}}';
@@ -116,7 +116,15 @@ j1.adapter.fab = (function (j1, window) {
116
116
  init: function (options) {
117
117
 
118
118
  // -----------------------------------------------------------------------
119
- // globals
119
+ // Default module settings
120
+ // -----------------------------------------------------------------------
121
+ var settings = $.extend({
122
+ module_name: 'j1.adapter.fab',
123
+ generated: '{{site.time}}'
124
+ }, options);
125
+
126
+ // -----------------------------------------------------------------------
127
+ // Global variable settings
120
128
  // -----------------------------------------------------------------------
121
129
  _this = j1.adapter.fab;
122
130
  logger = log4javascript.getLogger('j1.adapter.fab');
@@ -132,14 +140,6 @@ j1.adapter.fab = (function (j1, window) {
132
140
  // create settings object from frontmatterOptions
133
141
  var frontmatterOptions = options != null ? $.extend({}, options) : {};
134
142
 
135
- // -----------------------------------------------------------------------
136
- // defaults
137
- // -----------------------------------------------------------------------
138
- var settings = $.extend({
139
- module_name: 'j1.adapter.fab',
140
- generated: '{{site.time}}'
141
- }, options);
142
-
143
143
  // -----------------------------------------------------------------------
144
144
  // options loader
145
145
  // -----------------------------------------------------------------------
@@ -104,64 +104,65 @@ j1.adapter.framer = (function (j1, window) {
104
104
 
105
105
  var dependencies_met_page_finished = setInterval (function () {
106
106
  if (j1.getState() === 'finished') {
107
- // -----------------------------------------------------------------------
108
- // globals
109
- // -----------------------------------------------------------------------
110
- _this = j1.adapter.framer;
111
- logger = log4javascript.getLogger('j1.adapter.framer');
112
-
113
- // initialize state flag
114
- _this.setState('started');
115
- logger.info('\n' + 'state: ' + _this.getState());
116
- logger.info('\n' + 'module is being initialized');
117
-
118
- // -----------------------------------------------------------------------
119
- // Default module settings
120
- // -----------------------------------------------------------------------
121
- var settings = $.extend({
122
- module_name: 'j1.adapter.example',
123
- generated: '{{site.time}}'
124
- }, options);
125
-
126
- {% comment %} Load module config from yml data
127
- -------------------------------------------------------------------------- {% endcomment %}
128
- // Load module DEFAULTS|CONFIG
129
- /* eslint-disable */
130
- moduleOptions = $.extend({}, {{framer_options | replace: '=>', ':' | replace: 'nil', '""'}});
131
- /* eslint-enable */
132
-
133
- if (typeof settings !== 'undefined') {
134
- moduleOptions = j1.mergeData(moduleOptions, settings);
135
- }
136
-
137
- iFrameResize({
138
- log: moduleOptions.log,
139
- autoResize: moduleOptions.autoResize,
140
- bodyBackground: moduleOptions.bodyBackground,
141
- bodyMargin: moduleOptions.bodyMargin,
142
- checkOrigin: moduleOptions.checkOrigin,
143
- inPageLinks: moduleOptions.inPageLinks,
144
- interval: moduleOptions.interval,
145
- heightCalculationMethod: moduleOptions.heightCalculationMethod,
146
- maxHeight: moduleOptions.maxHeight,
147
- minWidth: moduleOptions.minWidth,
148
- maxWidth: moduleOptions.maxWidth,
149
- minHeight: moduleOptions.minHeight,
150
- resizeFrom: moduleOptions.resizeFrom,
151
- scrolling: moduleOptions.scrolling,
152
- sizeHeight: moduleOptions.sizeHeight,
153
- sizeWidth: moduleOptions.sizeWidth,
154
- tolerance: moduleOptions.tolerance,
155
- widthCalculationMethod: moduleOptions.widthCalculationMethod,
156
- targetOrigin: moduleOptions.checkOrigin
157
- });
158
-
159
- _this.setState('finished');
160
- logger.info('\n' + 'state: ' + _this.getState());
161
- logger.info('\n' + 'initializing module finished');
162
-
163
- clearInterval(dependencies_met_page_finished);
164
- return true;
107
+
108
+ // -----------------------------------------------------------------------
109
+ // Default module settings
110
+ // -----------------------------------------------------------------------
111
+ var settings = $.extend({
112
+ module_name: 'j1.adapter.example',
113
+ generated: '{{site.time}}'
114
+ }, options);
115
+
116
+ // -----------------------------------------------------------------------
117
+ // Global variable settings
118
+ // -----------------------------------------------------------------------
119
+ _this = j1.adapter.framer;
120
+ logger = log4javascript.getLogger('j1.adapter.framer');
121
+
122
+ // initialize state flag
123
+ _this.setState('started');
124
+ logger.info('\n' + 'state: ' + _this.getState());
125
+ logger.info('\n' + 'module is being initialized');
126
+
127
+ {% comment %} Load module config from yml data
128
+ -------------------------------------------------------------------------- {% endcomment %}
129
+ // Load module DEFAULTS|CONFIG
130
+ /* eslint-disable */
131
+ moduleOptions = $.extend({}, {{framer_options | replace: '=>', ':' | replace: 'nil', '""'}});
132
+ /* eslint-enable */
133
+
134
+ if (typeof settings !== 'undefined') {
135
+ moduleOptions = j1.mergeData(moduleOptions, settings);
136
+ }
137
+
138
+ iFrameResize({
139
+ log: moduleOptions.log,
140
+ autoResize: moduleOptions.autoResize,
141
+ bodyBackground: moduleOptions.bodyBackground,
142
+ bodyMargin: moduleOptions.bodyMargin,
143
+ checkOrigin: moduleOptions.checkOrigin,
144
+ inPageLinks: moduleOptions.inPageLinks,
145
+ interval: moduleOptions.interval,
146
+ heightCalculationMethod: moduleOptions.heightCalculationMethod,
147
+ maxHeight: moduleOptions.maxHeight,
148
+ minWidth: moduleOptions.minWidth,
149
+ maxWidth: moduleOptions.maxWidth,
150
+ minHeight: moduleOptions.minHeight,
151
+ resizeFrom: moduleOptions.resizeFrom,
152
+ scrolling: moduleOptions.scrolling,
153
+ sizeHeight: moduleOptions.sizeHeight,
154
+ sizeWidth: moduleOptions.sizeWidth,
155
+ tolerance: moduleOptions.tolerance,
156
+ widthCalculationMethod: moduleOptions.widthCalculationMethod,
157
+ targetOrigin: moduleOptions.checkOrigin
158
+ });
159
+
160
+ _this.setState('finished');
161
+ logger.info('\n' + 'state: ' + _this.getState());
162
+ logger.info('\n' + 'initializing module finished');
163
+
164
+ clearInterval(dependencies_met_page_finished);
165
+ return true;
165
166
  }
166
167
  }, 25);
167
168
  }, // END init