j1-template 2022.0.11 → 2022.0.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/assets/themes/j1/adapter/js/advertising.js +65 -44
  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 +9 -9
  10. data/assets/themes/j1/adapter/js/comments.js +34 -14
  11. data/assets/themes/j1/adapter/js/cookieConsent.js +96 -85
  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 +177 -106
  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/core/css/vendor.css +6 -1
  30. data/assets/themes/j1/core/css/vendor.min.css +1 -1
  31. data/assets/themes/j1/core/js/template.js +4 -3
  32. data/assets/themes/j1/core/js/template.min.js +1 -1
  33. data/assets/themes/j1/core/js/template.min.js.map +1 -1
  34. data/assets/themes/j1/modules/advertising/js/google/adInitializer.js +14 -4
  35. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +11 -2
  36. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.min.js +1 -1
  37. data/lib/j1/version.rb +1 -1
  38. data/lib/starter_web/Gemfile +1 -1
  39. data/lib/starter_web/_config.yml +1 -1
  40. data/lib/starter_web/_data/layouts/home.ads.yml +262 -0
  41. data/lib/starter_web/_data/layouts/home.no-ads.yml +262 -0
  42. data/lib/starter_web/_data/layouts/home.yml +1 -1
  43. data/lib/starter_web/_data/modules/advertising.yml +1 -12
  44. data/lib/starter_web/_data/modules/analytics.yml +1 -1
  45. data/lib/starter_web/_data/modules/cookies.yml +5 -2
  46. data/lib/starter_web/_data/modules/defaults/advertising.yml +7 -8
  47. data/lib/starter_web/_data/modules/defaults/comments.yml +4 -4
  48. data/lib/starter_web/_data/modules/defaults/cookies.yml +106 -36
  49. data/lib/starter_web/_data/modules/defaults/themer.yml +3 -2
  50. data/lib/starter_web/_data/modules/themer.yml +2 -1
  51. data/lib/starter_web/_includes/attributes.asciidoc +1 -1
  52. data/lib/starter_web/_plugins/lunr_index.rb +1 -1
  53. data/lib/starter_web/collections/posts/public/featured/_posts/0000-00-00-welcome-to-j1.adoc.erb +1 -1
  54. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.adoc +1 -1
  55. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.ads.asciidoc +1 -1
  56. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.comments.asciidoc +1 -1
  57. data/lib/starter_web/collections/posts/public/featured/_posts/2021-02-01-site-generators.adoc +1 -1
  58. data/lib/starter_web/collections/posts/public/featured/_posts/2021-03-03-about-j1.adoc +1 -1
  59. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-01-post-wiki-series.adoc +1 -1
  60. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-02-post-wiki-series.adoc +1 -1
  61. data/lib/starter_web/collections/posts/public/series/_posts/2020-01-03-post-wiki-series.adoc +1 -1
  62. data/lib/starter_web/index.html +0 -3
  63. data/lib/starter_web/package.json +1 -1
  64. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/000_intro.adoc +1 -1
  65. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/100_converter.adoc +1 -1
  66. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/200_themes.adoc +1 -1
  67. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/documentation.adoc +1 -4
  68. data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/multi.adoc +1 -4
  69. data/lib/starter_web/pages/public/asciidoc_skeletons/simple-document/simple.adoc +1 -4
  70. data/lib/starter_web/pages/public/learn/roundtrip/400_asciidoc_extensions.adoc +7 -7
  71. data/lib/starter_web/pages/public/manuals/dropdown-help.adoc +23 -2
  72. data/lib/starter_web/pages/public/previewer/preview_bootstrap_theme.adoc +100 -166
  73. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  74. data/lib/starter_web/utilsrv/package.json +1 -1
  75. metadata +5 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a30d2f4bc51e2af06b5b10c812289a4f8161cead03377b80c39e0793737bbcd
4
- data.tar.gz: b32a2635e86fbd1fbcc1918a817c84470acbe4495666e853a89794a3f69038bd
3
+ metadata.gz: 9f685ac32a6f950d0d099e62f5f861f01d1d1cf713ee523c1c16cb0a1e674086
4
+ data.tar.gz: ab688c3240978c67613afefee7cd54801a6cff7e67257bcf5efdecd3efccbc72
5
5
  SHA512:
6
- metadata.gz: 9442e43055a99e22dba59f961763f74b3e4bdb7b6d6b83156b0b9670d6eb0a834d7d42eccc846b418698b949a9e904aaf48c048f140aaba8d606a73a0afaf9a7
7
- data.tar.gz: 2b49a58cf6149a1d20745bf88d8187318a7096ca7adc00648caec4a5eb0de6f60ed58ec602f1d8e60036be96041466a6eb556d6f864723e01d4330e8fe6459c9
6
+ metadata.gz: 04bbcb189149f9e78e68ef89004f74a43d69c34dd704e5ee1bd1fa492990c3b88512237adc162820fe428a389168be4dc47ce56195e71c31d7203782ed758fc0
7
+ data.tar.gz: 59b433b0ef503ba80329e59285de58a52a13b8e4f80872cd1ba3f771adb9a594265cefbc00bf442c1104c7ca4e91d6648dac3e17ac9a2f59c5c798b6e652e528
@@ -89,6 +89,8 @@ j1.adapter.advertising = (function (j1, window) {
89
89
  {% comment %} Set global variables
90
90
  -------------------------------------------------------------------------------- {% endcomment %}
91
91
  var environment = '{{environment}}';
92
+ var date = new Date();
93
+ var timestamp_now = date.toISOString();
92
94
  var gadScript = document.createElement('script');
93
95
  var adInitializerScript = document.createElement('script');
94
96
  var autoHideOnUnfilled = {{advertising_options.google.autoHideOnUnfilled}};
@@ -102,10 +104,9 @@ var baseUrl;
102
104
  var hostname;
103
105
  var cookie_names;
104
106
  var user_consent;
105
- var domain;
106
- var domainAttribute;
107
- var cookie_option_domain;
108
- var cookie_domain;
107
+ var advertisingProvider;
108
+ var providerID;
109
+ var validProviderID;
109
110
  var _this;
110
111
  var logger;
111
112
  var logText;
@@ -125,38 +126,47 @@ var logText;
125
126
  // [INFO ] [j1.adapter.advertising ] [ detected advertising provider (j1_config): {{advertising_provider}}} ]
126
127
  // [INFO ] [j1.adapter.advertising ] [ start processing load region head, layout: {{page.layout}} ]
127
128
 
129
+ // -----------------------------------------------------------------------
130
+ // Default module settings
131
+ // -----------------------------------------------------------------------
132
+ var settings = $.extend({
133
+ module_name: 'j1.adapter.advertising',
134
+ generated: '{{site.time}}'
135
+ }, options);
136
+
137
+ // -----------------------------------------------------------------------
138
+ // Global variable settings
139
+ // -----------------------------------------------------------------------
128
140
  cookie_names = j1.getCookieNames();
129
141
  user_consent = j1.readCookie(cookie_names.user_consent);
130
142
  url = new liteURL(window.location.href);
131
- baseUrl = url.origin;
132
143
  hostname = url.hostname;
133
- domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
134
- cookie_option_domain = '{{cookie_options.domain}}';
135
-
136
- // set domain used by cookies
137
- if (cookie_option_domain == 'auto') {
138
- domainAttribute = domain ;
139
- } else {
140
- domainAttribute = hostname;
141
- }
142
144
 
143
145
  {% case advertising_provider %}
144
146
  {% when "google" %}
145
147
  // [INFO ] [j1.adapter.advertising ] [ place provider: Google Adsense ]
148
+
146
149
  _this = j1.adapter.advertising;
147
150
  logger = log4javascript.getLogger('j1.adapter.advertising.google');
151
+
148
152
  // initialize state flag
149
153
  _this.setState('started');
150
154
  logger.info('\n' + 'state: ' + _this.getState());
151
155
  logger.info('\n' + 'module is being initialized');
152
- // default module settings
153
- var settings = $.extend({
154
- module_name: 'j1.adapter.advertising',
155
- generated: '2021-12-18 18:55:38 +0000'
156
- }, options);
157
156
 
158
157
  var dependencies_met_page_ready = setInterval(function() {
159
158
  if (j1.getState() == 'finished') {
159
+
160
+ providerID = '{{advertising_options.google.publisherID}}';
161
+ advertisingProvider = 'Google Adsense';
162
+ validProviderID = (providerID.includes('your')) ? false : true;
163
+ if (!validProviderID) {
164
+ logger.warn('\n' + 'invalid publisherID detected for Google Adsense (GAS): ' + providerID);
165
+ logger.info('\n' + 'skip initialization for provider: ' + advertisingProvider);
166
+ clearInterval(dependencies_met_page_ready);
167
+ return false;
168
+ }
169
+
160
170
  if (user_consent.personalization) {
161
171
  // place all ads configured for the page
162
172
  // NOTE: currently NOT implemented/used
@@ -165,22 +175,22 @@ var logText;
165
175
 
166
176
  // add gad api dynamically in the head section
167
177
  // -----------------------------------------------------------------
168
- logger.info('\n' + 'add gad api dynamically in section: head');
178
+ logger.info('\n' + 'add gas api in section: head');
169
179
  gadScript.async = true;
170
- gadScript.id = 'gad-api';
180
+ gadScript.id = 'gas-api';
171
181
  gadScript.src = '//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js';
172
182
  gadScript.setAttribute('data-ad-client', 'ca-pub-3885670015316130');
173
183
  document.head.appendChild(gadScript);
174
184
 
175
185
  // setup monitor for state changes on all ads configured
176
186
  // ---------------------------------------------------------------
177
- logger.info('\n' + 'setup monitoring');
187
+ logger.debug('\n' + 'setup monitoring');
178
188
  _this.monitor_ads();
179
189
 
180
190
  // run protection check
181
191
  // -------------------------------------------------------------------
182
192
  if (checkTrackingProtection) {
183
- logger.info('\n' + 'run checks for tracking protection');
193
+ logger.debug('\n' + 'run checks for tracking protection');
184
194
  _this.check_tracking_protection();
185
195
 
186
196
  var dependencies_met_tracking_check_ready = setInterval (function (options) {
@@ -217,22 +227,26 @@ var logText;
217
227
  }
218
228
  clearInterval(dependencies_met_page_ready);
219
229
  } else {
220
- var gaCookies = j1.findCookie('_ga');
230
+ // manage GAD cookies if no consent is given|rejected
231
+ // -----------------------------------------------------------------
232
+ var gasCookies = j1.findCookie('__ga');
221
233
  logger.warn('\n' + 'consent on cookies disabled for personalization');
222
234
  logger.warn('\n' + 'initialization of module advertising skipped');
223
235
 
224
- // jadams, 2021-12-19: remove cookies on invalid GAD config
225
- // or left cookies from previous session
226
- // -----------------------------------------------------------------
227
- j1.removeCookie({ name: '__gads' });
228
-
229
- // jadams, 2021-12-19: delete cookies in loop doesn't work
230
- // gaCookies.forEach(function (item) {
231
- // logger.warn('\n' + 'delete GAD cookie: ' + item);
232
- // // j1.removeCookie({ name: item, domain: domainAttribute });
233
- // // j1.removeCookie({ name: item });
234
- // });
236
+ // remove cookies on invalid GAS config or left from a previous
237
+ // session/page view if they exists
238
+ // ---------------------------------------------------------------------
239
+ gasCookies.forEach(function (item) {
240
+ // Remove cookies from Google Ads
241
+ if (hostname == 'localhost') {
242
+ j1.removeCookie({ name: item, domain: false, secure: false });
243
+ } else {
244
+ j1.removeCookie({ name: item, domain: '.' + hostname, secure: false });
245
+ }
246
+ });
235
247
 
248
+ // manage tracking protection
249
+ // -----------------------------------------------------------------
236
250
  if (checkTrackingProtection) {
237
251
  if (!user_consent.personalization) {
238
252
  logText = '\n' + 'consent on cookies disabled for personalization';
@@ -270,21 +284,28 @@ var logText;
270
284
 
271
285
  // -------------------------------------------------------------------------
272
286
  // monitor_ads()
273
- // monitor for state changes on the ad
287
+ // monitor for state changes on the ad placed in pages (if any)
288
+ //
289
+ // NOTE: Check visibility state of the adSlot to prevent multiple
290
+ // processing of the same slot
274
291
  // -------------------------------------------------------------------------
275
292
  monitor_ads: function () {
293
+ var logger = log4javascript.getLogger('j1.adapter.advertising.monitor.ads');
276
294
 
277
295
  $('.adsbygoogle').attrchange({
278
296
  trackValues: true,
279
297
  callback: function (event) {
280
298
  if (event.newValue === 'unfilled') {
281
- var elm = event.target.dataset;
282
- if (addBorderOnUnfilled) { $('.adsbygoogle').addClass('border--dotted'); }
283
- if (elm.adClient) {
284
- logger.warn('\n' + 'found ad state ' + event.newValue + ' for slot: ' + elm.adSlot);
285
- if (autoHideOnUnfilled) {
286
- logger.warn('\n' + ' hide ad for slot: ' + elm.adSlot);
287
- $('#' + elm.adSlot ).hide();
299
+ var elm = event.target.dataset;
300
+ var adSlotIsVisible = $('#' + elm.adSlot ).is(":visible");
301
+ if (adSlotIsVisible) {
302
+ if (addBorderOnUnfilled) { $('.adsbygoogle').addClass('border--dotted'); }
303
+ if (elm.adClient) {
304
+ logger.warn('\n' + 'found ad state ' + event.newValue + ' for slot: ' + elm.adSlot);
305
+ if (autoHideOnUnfilled) {
306
+ logger.warn('\n' + ' hide ad for slot: ' + elm.adSlot);
307
+ $('#' + elm.adSlot ).hide();
308
+ }
288
309
  }
289
310
  }
290
311
  }
@@ -305,7 +326,7 @@ var logText;
305
326
  // https://stackoverflow.com/questions/33959324/how-to-detect-if-a-user-is-using-tracking-protection-in-firefox-42
306
327
  // -------------------------------------------------------------------------
307
328
  check_tracking_protection: function () {
308
- var logger = log4javascript.getLogger('j1.adapter.advertising.tracking.monitor');
329
+ var logger = log4javascript.getLogger('j1.adapter.advertising.monitor.tracking');
309
330
 
310
331
  logText = '\n' + 'check for trackingprotection';
311
332
  logger.info(logText);
@@ -98,15 +98,6 @@ j1.adapter.algolia = (function (j1, window) {
98
98
  // -------------------------------------------------------------------------
99
99
  init: function (options) {
100
100
 
101
- // -----------------------------------------------------------------------
102
- // globals
103
- // -----------------------------------------------------------------------
104
- _this = j1.adapter.algolia;
105
- logger = log4javascript.getLogger('j1.adapter.algolia');
106
-
107
- // initialize state flag
108
- _this.state = 'pending';
109
-
110
101
  // -----------------------------------------------------------------------
111
102
  // Default module settings
112
103
  // -----------------------------------------------------------------------
@@ -115,6 +106,15 @@ j1.adapter.algolia = (function (j1, window) {
115
106
  generated: '{{site.time}}'
116
107
  }, options);
117
108
 
109
+ // -----------------------------------------------------------------------
110
+ // Global variable settings
111
+ // -----------------------------------------------------------------------
112
+ _this = j1.adapter.algolia;
113
+ logger = log4javascript.getLogger('j1.adapter.algolia');
114
+
115
+ // initialize state flag
116
+ _this.state = 'pending';
117
+
118
118
  _this.setState('started');
119
119
  logger.info('\n' + 'state: ' + _this.getState());
120
120
  logger.info('\n' + 'module is being initialized');
@@ -85,12 +85,17 @@ j1.adapter.analytics = (function (j1, window) {
85
85
 
86
86
  {% comment %} Set global variables
87
87
  -------------------------------------------------------------------------------- {% endcomment %}
88
- var environment = '{{environment}}';
89
- var gaScript = document.createElement('script');
90
- var trackingID = '{{analytics_options.google.trackingID}}';
91
- var optInOut = {{analytics_options.google.optInOut}};
92
- var anonymizeIP = {{analytics_options.google.anonymizeIP}};
93
- var cookie_names = j1.getCookieNames();
88
+ var url = new liteURL(window.location.href);
89
+ var hostname = url.hostname;
90
+ var environment = '{{environment}}';
91
+ var gaScript = document.createElement('script');
92
+ var providerID = '{{analytics_options.google.trackingID}}';
93
+ var validProviderID = (providerID.includes('your')) ? false : true;
94
+ var optInOut = {{analytics_options.google.optInOut}};
95
+ var anonymizeIP = {{analytics_options.google.anonymizeIP}};
96
+ var cookie_names = j1.getCookieNames();
97
+ var date = new Date();
98
+ var timestamp_now = date.toISOString();
94
99
  var gaCookies;
95
100
  var user_consent;
96
101
  var gaExists;
@@ -116,24 +121,37 @@ var logText;
116
121
  {% case analytics_provider %}
117
122
  {% when "google" %}
118
123
  // [INFO ] [j1.adapter.analytics ] [ place provider: Google Adsense ]
124
+
125
+ // -----------------------------------------------------------------------
126
+ // Default module settings
127
+ // -----------------------------------------------------------------------
128
+ var settings = $.extend({
129
+ module_name: 'j1.adapter.analytics',
130
+ generated: '{{site.time}}'
131
+ }, options);
132
+
133
+ // -----------------------------------------------------------------------
134
+ // Global variable settings
135
+ // -----------------------------------------------------------------------
119
136
  _this = j1.adapter.analytics;
120
137
  logger = log4javascript.getLogger('j1.adapter.analytics.google');
138
+
121
139
  // initialize state flag
122
140
  _this.setState('started');
123
141
  logger.info('\n' + 'state: ' + _this.getState());
124
142
  logger.info('\n' + 'module is being initialized');
125
- // default module settings
126
- var settings = $.extend({
127
- module_name: 'j1.adapter.analytics',
128
- generated: '2021-12-18 18:55:38 +0000'
129
- }, options);
130
143
 
131
- // remove all ga cookies left from a previous session/page view
132
- // -----------------------------------------------------------------------
144
+ // remove cookies on invalid GA config or left from a previous
145
+ // session/page view if they exists
146
+ // ---------------------------------------------------------------------
133
147
  gaCookies = j1.findCookie('_ga');
134
148
  gaCookies.forEach(function (item) {
135
- logger.warn('\n' + 'delete GA cookie: ' + item);
136
- j1.removeCookie({ name: item });
149
+ logger.warn('\n' + 'delete cookie created by Google Analytics: ' + item);
150
+ if (hostname == 'localhost') {
151
+ j1.removeCookie({ name: item, domain: false, secure: false });
152
+ } else {
153
+ j1.removeCookie({ name: item, domain: '.' + hostname, secure: false });
154
+ }
137
155
  });
138
156
 
139
157
  var dependencies_met_page_ready = setInterval(function() {
@@ -143,23 +161,27 @@ var logText;
143
161
  if (!gaExists) {
144
162
  // add ga api dynamically in the head section
145
163
  // -----------------------------------------------------------------
146
- logger.info('\n' + 'add ga api dynamically in section: head');
164
+ logger.info('\n' + 'Google Analytics API added in section: head');
147
165
  gaScript.async = true;
148
166
  gaScript.id = 'google-tag-manager';
149
- gaScript.src = '//www.googletagmanager.com/gtag/js?id={{analytics_options.google.trackingID}}';
167
+ gaScript.src = '//www.googletagmanager.com/gtag/js?id=' + providerID;
150
168
  document.head.appendChild(gaScript);
151
169
  }
152
170
 
153
171
  user_consent = j1.readCookie(cookie_names.user_consent);
154
172
  if (user_consent.analysis) {
155
- logger.info('\n' + 'user consent on analytics: ' + user_consent.analysis);
156
- logger.info('\n' + 'enable: GA');
157
- GTagOptIn.register(trackingID);
158
- GTagOptIn.optIn();
173
+ if (validProviderID) {
174
+ logger.info('\n' + 'user consent on analytics: ' + user_consent.analysis);
175
+ logger.info('\n' + 'enable Google Analytics on ID: ' + providerID);
176
+ GTagOptIn.register(providerID);
177
+ GTagOptIn.optIn();
178
+ } else {
179
+ logger.warn('\n' + 'invalid trackig id detected for Google Analytics: ' + providerID);
180
+ }
159
181
  } else {
160
182
  logger.info('\n' + 'user consent on analytics: ' + user_consent.analysis);
161
- logger.warn('\n' + 'disable: GA');
162
- GTagOptIn.register(trackingID);
183
+ logger.warn('\n' + 'disable Google Analytics on ID: ' + providerID);
184
+ GTagOptIn.register(providerID);
163
185
  GTagOptIn.optOut();
164
186
  }
165
187
  clearInterval(dependencies_met_page_ready);
@@ -174,7 +196,7 @@ var logText;
174
196
  var dependencies_met_page_ready = setInterval(function() {
175
197
  if (j1.getState() == 'finished') {
176
198
  logger = log4javascript.getLogger('j1.adapter.analytics.google');
177
- logger.info('\n' + 'ga: disabled');
199
+ logger.info('\n' + 'Google Analytics: disabled');
178
200
  clearInterval(dependencies_met_page_ready);
179
201
  }
180
202
  }, 25);
@@ -69,7 +69,15 @@ j1.adapter.asciidoctor = (function (j1, window) {
69
69
  init: function (options) {
70
70
 
71
71
  // -----------------------------------------------------------------------
72
- // globals
72
+ // Default module settings
73
+ // -----------------------------------------------------------------------
74
+ var settings = $.extend({
75
+ module_name: 'j1.adapter.rtable',
76
+ generated: '{{site.time}}'
77
+ }, options);
78
+
79
+ // -----------------------------------------------------------------------
80
+ // Global variable settings
73
81
  // -----------------------------------------------------------------------
74
82
  _this = j1.adapter.asciidoctor;
75
83
  logger = log4javascript.getLogger('j1.adapter.asciidoctor');
@@ -79,14 +87,6 @@ j1.adapter.asciidoctor = (function (j1, window) {
79
87
  logger.info('\n' + 'state: ' + _this.getState());
80
88
  logger.info('\n' + 'module is being initialized');
81
89
 
82
- // -----------------------------------------------------------------------
83
- // Default module settings
84
- // -----------------------------------------------------------------------
85
- var settings = $.extend({
86
- module_name: 'j1.adapter.rtable',
87
- generated: '{{site.time}}'
88
- }, options);
89
-
90
90
  // -----------------------------------------------------------------------
91
91
  // asciidoctor initializer
92
92
  // -----------------------------------------------------------------------
@@ -102,7 +102,15 @@ j1.adapter.attic = (function (j1, window) {
102
102
  init: function (options) {
103
103
 
104
104
  // -----------------------------------------------------------------------
105
- // globals
105
+ // Default module settings
106
+ // -----------------------------------------------------------------------
107
+ var settings = $.extend({
108
+ module_name: 'j1.adapter.attic',
109
+ generated: '{{site.time}}'
110
+ }, options);
111
+
112
+ // -----------------------------------------------------------------------
113
+ // Global variable settings
106
114
  // -----------------------------------------------------------------------
107
115
  _this = j1.adapter.attic;
108
116
  logger = log4javascript.getLogger('j1.adapter.attic');
@@ -69,7 +69,15 @@ j1.adapter.bmd = (function (j1, window) {
69
69
  init: function (options) {
70
70
 
71
71
  // -----------------------------------------------------------------------
72
- // globals
72
+ // Default module settings
73
+ // -----------------------------------------------------------------------
74
+ var settings = $.extend({
75
+ module_name: 'j1.adapter.bmd',
76
+ generated: '{{site.time}}'
77
+ }, options);
78
+
79
+ // -----------------------------------------------------------------------
80
+ // Global variable settings
73
81
  // -----------------------------------------------------------------------
74
82
  _this = j1.adapter.bmd;
75
83
  logger = log4javascript.getLogger('j1.adapter.bmd');
@@ -78,15 +86,6 @@ j1.adapter.bmd = (function (j1, window) {
78
86
  _this.setState('started');
79
87
  logger.info('\n' + 'state: ' + _this.getState());
80
88
  logger.info('\n' + 'module is being initialized');
81
-
82
- // -----------------------------------------------------------------------
83
- // Default module settings
84
- // -----------------------------------------------------------------------
85
- var settings = $.extend({
86
- module_name: 'j1.adapter.bmd',
87
- generated: '{{site.time}}'
88
- }, options);
89
-
90
89
  // -----------------------------------------------------------------------
91
90
  // BMD initializer
92
91
  // -----------------------------------------------------------------------
@@ -99,15 +99,6 @@ j1.adapter.carousel = (function (j1, window) {
99
99
  // -------------------------------------------------------------------------
100
100
  init: function (options) {
101
101
 
102
- // -----------------------------------------------------------------------
103
- // globals
104
- // -----------------------------------------------------------------------
105
- _this = j1.adapter.carousel;
106
- logger = log4javascript.getLogger('j1.adapter.carousel');
107
-
108
- // initialize state flag
109
- _this.state = 'pending';
110
-
111
102
  // -----------------------------------------------------------------------
112
103
  // Default module settings
113
104
  // -----------------------------------------------------------------------
@@ -116,6 +107,15 @@ j1.adapter.carousel = (function (j1, window) {
116
107
  generated: '{{site.time}}'
117
108
  }, options);
118
109
 
110
+ // -----------------------------------------------------------------------
111
+ // Global variable settings
112
+ // -----------------------------------------------------------------------
113
+ _this = j1.adapter.carousel;
114
+ logger = log4javascript.getLogger('j1.adapter.carousel');
115
+
116
+ // initialize state flag
117
+ _this.state = 'pending';
118
+
119
119
  {% comment %} Load module config from yml data
120
120
  -------------------------------------------------------------------------- {% endcomment %}
121
121
  // Load module DEFAULTS|CONFIG
@@ -89,20 +89,20 @@ j1.adapter.clipboard = (function (j1, window) {
89
89
  init: function (options) {
90
90
 
91
91
  // -----------------------------------------------------------------------
92
- // globals
93
- // -----------------------------------------------------------------------
94
- _this = j1.adapter.clipboard;
95
- language = '{{site.language}}';
96
- logger = log4javascript.getLogger('j1.adapter.clipboard');
97
-
98
- // -----------------------------------------------------------------------
99
- // defaults
92
+ // Default module settings
100
93
  // -----------------------------------------------------------------------
101
94
  var settings = $.extend({
102
95
  module_name: 'j1.adapter.clipboard',
103
96
  generated: '{{site.time}}'
104
97
  }, options);
105
98
 
99
+ // -----------------------------------------------------------------------
100
+ // Global variable settings
101
+ // -----------------------------------------------------------------------
102
+ _this = j1.adapter.clipboard;
103
+ language = '{{site.language}}';
104
+ logger = log4javascript.getLogger('j1.adapter.clipboard');
105
+
106
106
  // initialize state flag
107
107
  _this.state = 'started';
108
108
  logText = '\n' + 'initialization: started';
@@ -159,7 +159,7 @@ j1.adapter.clipboard = (function (j1, window) {
159
159
  if ( isNoClip.length == 0) {
160
160
  var btnHtml = '';
161
161
 
162
- btnHtml = '<div class="j1-clipboard"><span class="btn-clipboard j1-tooltip" data-bs-toggle="tooltip" data-placement="left" title="' + btnTitle +'">' + btnText + '</span></div>';
162
+ btnHtml = '<div class="j1-clipboard"><span class="btn-clipboard" data-bs-toggle="tooltip" data-bs-placement="left" title="' + btnTitle +'">' + btnText + '</span></div>';
163
163
 
164
164
  $(this).before(btnHtml);
165
165
  $('.btn-clipboard').tooltip();
@@ -118,11 +118,14 @@ j1.adapter.comments = (function (j1, window) {
118
118
  {% comment %} Set global variables
119
119
  -------------------------------------------------------------------------------- {% endcomment %}
120
120
  var environment = '{{environment}}';
121
+ var date = new Date();
122
+ var timestamp_now = date.toISOString();
121
123
  var comments_provider = '{{comments_provider}}';
122
124
  var dqApiScript = document.createElement('script');
123
125
  var hvApiScript = document.createElement('script');
124
126
  var hvCallbackScript = document.createElement('script');
125
- var siteID = '{{site_id}}';
127
+ var providerID = '{{site_id}}';
128
+ var validProviderID = (providerID.includes('your')) ? false : true;
126
129
  var comments_headline = '{{comments_headline}}';
127
130
  var cookie_names = j1.getCookieNames();
128
131
  var user_consent;
@@ -145,13 +148,18 @@ var logText;
145
148
  // [INFO ] [j1.adapter.comments ] [ detected comments provider (j1_config): {{comments_provider}}} ]
146
149
  // [INFO ] [j1.adapter.comments ] [ start processing load region head, layout: {{page.layout}} ]
147
150
 
148
- // default module settings
149
- // ----------------------------------------------------------------------
151
+ // -----------------------------------------------------------------------
152
+ // Default module settings
153
+ // -----------------------------------------------------------------------
150
154
  var settings = $.extend({
151
155
  module_name: 'j1.adapter.comments',
152
- generated: '2021-12-18 18:55:38 +0000'
156
+ generated: '{{site.time}}'
153
157
  }, options);
154
158
 
159
+ // -----------------------------------------------------------------------
160
+ // Global variable settings
161
+ // -----------------------------------------------------------------------
162
+
155
163
  {% if site_id %}
156
164
 
157
165
  _this = j1.adapter.comments;
@@ -160,9 +168,17 @@ var logText;
160
168
  {% case comments_provider %}
161
169
  {% when "hyvor" %}
162
170
  // [INFO ] [j1.adapter.comments ] [ place provider: Hyvor Talk ]
171
+
163
172
  var dependencies_met_page_ready = setInterval(function() {
164
173
  if (j1.getState() == 'finished') {
165
174
 
175
+ if (!validProviderID) {
176
+ logger.warn('\n' + 'invalid site id detected for Hyvor Talk: ' + providerID);
177
+ logger.info('\n' + 'skip initialization for provider: ' + comments_provider);
178
+ clearInterval(dependencies_met_page_ready);
179
+ return false;
180
+ }
181
+
166
182
  // initialize state flag, issue init message
167
183
  // -------------------------------------------------------------------
168
184
  _this.setState('started');
@@ -177,7 +193,7 @@ var logText;
177
193
  // -----------------------------------------------------------------
178
194
  $('#main-content').append('<h2 id="leave-a-comment" class="mt-4">{{comments_headline}}</h2>');
179
195
  logger.info('\n' + 'user consent on comments: ' + user_consent.personalization);
180
- logger.info('\n' + 'enable comments provider' + ' {{comments_provider}} on siteID: ' + siteID);
196
+ logger.info('\n' + 'enable comments provider' + ' {{comments_provider}} on siteID: ' + providerID);
181
197
 
182
198
  // add Hyvor Talk Web API
183
199
  // NOTE: don't change the script id
@@ -191,7 +207,7 @@ var logText;
191
207
  // -----------------------------------------------------------------
192
208
  hvCallbackScript.id = 'hyvor-callback';
193
209
  hvCallbackScript.text = '\n';
194
- hvCallbackScript.text += 'var HYVOR_TALK_WEBSITE = ' + siteID + '\n';
210
+ hvCallbackScript.text += 'var HYVOR_TALK_WEBSITE = ' + providerID + '\n';
195
211
  hvCallbackScript.text += 'var HYVOR_TALK_CONFIG = {' + '\n';
196
212
  hvCallbackScript.text += ' url: false,' + '\n';
197
213
  hvCallbackScript.text += ' id: false' + '\n';
@@ -215,7 +231,7 @@ var logText;
215
231
  // disable Hyvor Talk
216
232
  // -----------------------------------------------------------------
217
233
  logger.info('\n' + 'user consent on comments: ' + user_consent.personalization);
218
- logger.warn('\n' + 'disable comments provider' + ' {{comments_provider}} on siteID: ' + siteID);
234
+ logger.warn('\n' + 'disable Hyvor Talk on site id: ' + providerID);
219
235
 
220
236
  // remove Hyvor Talk resources
221
237
  // -----------------------------------------------------------------
@@ -233,6 +249,13 @@ var logText;
233
249
  var dependencies_met_page_ready = setInterval(function() {
234
250
  if (j1.getState() == 'finished') {
235
251
 
252
+ if (!validProviderID) {
253
+ logger.warn('\n' + 'invalid short name detected for Disqus: ' + providerID);
254
+ logger.info('\n' + 'skip initialization for provider: ' + comments_provider);
255
+ clearInterval(dependencies_met_page_ready);
256
+ return;
257
+ }
258
+
236
259
  // initialize state flag, issue init message
237
260
  // -------------------------------------------------------------------
238
261
  _this.setState('started');
@@ -245,7 +268,7 @@ var logText;
245
268
  if (user_consent.personalization) {
246
269
  $('#main-content').append('<h2 id="leave-a-comment" class="mt-4">{{comments_headline}}</h2>');
247
270
  logger.info('\n' + 'user consent on comments: ' + user_consent.personalization);
248
- logger.info('\n' + 'enable comments provider' + ' {{comments_provider}} on siteID: ' + siteID);
271
+ logger.info('\n' + 'enable comments provider' + ' {{comments_provider}} on short name: ' + providerID);
249
272
 
250
273
  // old Disqus Web API init
251
274
  // -----------------------------------------------------------------
@@ -276,12 +299,9 @@ var logText;
276
299
 
277
300
  // add|initialize Disqus Web API
278
301
  // -----------------------------------------------------------------
279
- var d = new Date();
280
- var currDate = d.toString().slice(0, 33); // extract the data part
281
-
282
302
  dqApiScript.id = 'dq-web-api';
283
- dqApiScript.src = '//' + siteID + '.disqus.com/embed.js";'
284
- dqApiScript.setAttribute("data-timestamp", '"' + currDate + '"');
303
+ dqApiScript.src = '//' + providerID + '.disqus.com/embed.js";'
304
+ dqApiScript.setAttribute("data-timestamp", '"' + timestamp_now + '"');
285
305
  document.head.appendChild(dqApiScript);
286
306
 
287
307
  // add Disqus comment container
@@ -289,7 +309,7 @@ var logText;
289
309
  $('#main-content').append('<div id="disqus_thread"></div>');
290
310
  } else {
291
311
  logger.info('\n' + 'user consent on comments: ' + user_consent.personalization);
292
- logger.warn('\n' + 'disable comments provider' + ' {{comments_provider}} on siteID: ' + siteID);
312
+ logger.warn('\n' + 'disable comments provider' + ' {{comments_provider}} on short name: ' + providerID);
293
313
  $('#leave-a-comment').remove();
294
314
  $('#dq-web-api').remove();
295
315
  $('#hdisqus_thread').remove();