j1-template 2022.0.12 → 2022.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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