j1-template 2022.0.2 → 2022.0.3

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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/modules/connectors/analytic/google-analytics.html +3 -13
  3. data/_includes/themes/j1/modules/connectors/comment/hyvor.html +4 -5
  4. data/_includes/themes/j1/procedures/global/create_bs_button.proc +4 -4
  5. data/assets/data/private.json +1 -5
  6. data/assets/themes/j1/adapter/js/cookieConsent.js +12 -9
  7. data/assets/themes/j1/adapter/js/j1.js +17 -17
  8. data/assets/themes/j1/adapter/js/translator.js +4 -2
  9. data/assets/themes/j1/core/js/template.js +59 -0
  10. data/assets/themes/j1/core/js/template.min.js +5 -5
  11. data/assets/themes/j1/core/js/template.min.js.map +1 -1
  12. data/assets/themes/j1/modules/cryptoJS/js/aes.js +35 -0
  13. data/assets/themes/j1/modules/cryptoJS/js/aes.min.js +35 -0
  14. data/assets/themes/j1/modules/cryptoJS/js/hmac-md5.js +21 -0
  15. data/assets/themes/j1/modules/cryptoJS/js/hmac-ripemd160.js +31 -0
  16. data/assets/themes/j1/modules/cryptoJS/js/hmac-sha1.js +17 -0
  17. data/assets/themes/j1/modules/cryptoJS/js/hmac-sha224.js +19 -0
  18. data/assets/themes/j1/modules/cryptoJS/js/hmac-sha256.js +18 -0
  19. data/assets/themes/j1/modules/cryptoJS/js/hmac-sha3.js +21 -0
  20. data/assets/themes/j1/modules/cryptoJS/js/hmac-sha384.js +27 -0
  21. data/assets/themes/j1/modules/cryptoJS/js/hmac-sha512.js +25 -0
  22. data/assets/themes/j1/modules/cryptoJS/js/md5.js +19 -0
  23. data/assets/themes/j1/modules/cryptoJS/js/pbkdf2.js +19 -0
  24. data/assets/themes/j1/modules/cryptoJS/js/rabbit-legacy.js +36 -0
  25. data/assets/themes/j1/modules/cryptoJS/js/rabbit.js +36 -0
  26. data/assets/themes/j1/modules/cryptoJS/js/rc4.js +33 -0
  27. data/assets/themes/j1/modules/cryptoJS/js/ripemd160.js +29 -0
  28. data/assets/themes/j1/modules/cryptoJS/js/sha1.js +15 -0
  29. data/assets/themes/j1/modules/cryptoJS/js/sha224.js +17 -0
  30. data/assets/themes/j1/modules/cryptoJS/js/sha256.js +16 -0
  31. data/assets/themes/j1/modules/cryptoJS/js/sha3.js +19 -0
  32. data/assets/themes/j1/modules/cryptoJS/js/sha384.js +25 -0
  33. data/assets/themes/j1/modules/cryptoJS/js/sha512.js +23 -0
  34. data/assets/themes/j1/modules/cryptoJS/js/tripledes.js +51 -0
  35. data/assets/themes/j1/modules/deeplAPI/js/deeplAPI.2.js +460 -0
  36. data/assets/themes/j1/modules/deeplAPI/js/deeplAPI.js +379 -353
  37. data/assets/themes/j1/modules/deeplAPI/js/deeplAPI.min.js +1 -1
  38. data/assets/themes/j1/modules/gtag-opt-in/js/gtag-opt-in.js +93 -1
  39. data/assets/themes/j1/modules/scroller/js/scroller.js +6 -6
  40. data/assets/themes/j1/modules/scroller/js/scroller.min.js +1 -1
  41. data/exe/j1 +6 -7
  42. data/lib/j1/commands/generate.rb +15 -16
  43. data/lib/j1/version.rb +1 -1
  44. data/lib/starter_web/Gemfile +7 -1
  45. data/lib/starter_web/_config.yml +1 -1
  46. data/lib/starter_web/_data/_defaults/private.yml +3 -2
  47. data/lib/starter_web/_data/builder/defaults/_blog_navigator.yml +396 -0
  48. data/lib/starter_web/_data/builder/defaults/blog_navigator.yml +48 -42
  49. data/lib/starter_web/_data/modules/translator.yml +3 -3
  50. data/lib/starter_web/_data/private.yml +3 -2
  51. data/lib/starter_web/_data/resources.yml +27 -2
  52. data/lib/starter_web/_includes/attributes.asciidoc +1 -1
  53. data/lib/starter_web/_plugins/encodeBase64.rb +46 -0
  54. data/lib/starter_web/_plugins/encryptAES.rb +53 -0
  55. data/lib/starter_web/_plugins/filters.rb +2 -1
  56. data/lib/starter_web/_plugins/lunr_index.rb +1 -1
  57. data/lib/starter_web/_plugins/minifyJSON.rb +2 -2
  58. data/lib/starter_web/package.json +1 -1
  59. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/documentation.adoc +1 -1
  60. data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/multi.adoc +1 -1
  61. data/lib/starter_web/pages/public/asciidoc_skeletons/simple-document/simple.adoc +1 -1
  62. data/lib/starter_web/pages/public/blog/navigator/archive/categoryview.html +0 -21
  63. data/lib/starter_web/pages/public/blog/navigator/archive/dateview.html +1 -1
  64. data/lib/starter_web/pages/public/blog/navigator/archive/tagview.html +1 -0
  65. data/lib/starter_web/pages/public/blog/navigator/archive.html +1 -1
  66. data/lib/starter_web/pages/public/learn/quickstart.adoc +1 -1
  67. data/lib/starter_web/pages/public/learn/where_to_go.adoc +1 -1
  68. data/lib/starter_web/pages/public/legal/de/100_copyright.adoc +1 -1
  69. data/lib/starter_web/pages/public/legal/de/100_impress.adoc +1 -1
  70. data/lib/starter_web/pages/public/legal/de/300_privacy.adoc +1 -1
  71. data/lib/starter_web/pages/public/legal/de/400_comment_policy.adoc +1 -1
  72. data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +1 -1
  73. data/lib/starter_web/pages/public/legal/en/200_impress.adoc +1 -1
  74. data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +1 -1
  75. data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +1 -1
  76. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  77. data/lib/starter_web/utilsrv/package.json +1 -1
  78. metadata +30 -5
  79. data/lib/j1/commands/help.rb +0 -32
  80. data/lib/j1/commands/module.rb +0 -69
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c31477f87609e60552f0ffa76b8f36daab38d8915affbef9fca29e185a13dbd
4
- data.tar.gz: 65f2a6293c1f9f05e31c8576f528d30e397b4a790236e0a25a7672b0b3adb705
3
+ metadata.gz: fa9b2f1b29b6e4875eec6816f91adb606ba0094f1157d9959792618c065a727e
4
+ data.tar.gz: cf47cba9bbd587ce4101b1925609b7c146f583712bf232cc98282a5761c34c2a
5
5
  SHA512:
6
- metadata.gz: eff73da4fb89bb43588bfe63bae111e880693ecf423c34051251b4fce2e2014b4de5c392b7dc9161d2bbe7342a1ce52d46f704c2ce5fac526dfc98a9ad4fd3f6
7
- data.tar.gz: 7425d1165d8e388f640cf8d0cdbcf78b9ba7f48d1dd98a5943b446a1e197b35a7555af4086c4ac7d788a27343493b4a35bd30a1affdc843b208efe9e6e66dcb4
6
+ metadata.gz: 9b56d12a6e1b05d37900b1ef121f761fc3adaabac028a355b980d2d3ac41094d91a520350d2d2bab721bb60d76fa69618388bbb45e4190cb933bf18505219c9e
7
+ data.tar.gz: e2694227b059a9f5c52da1c46da80e29d3315b2dda0a87a3442adb70d301835090b0436a1ce516669001285744a468c3b2a85e49429dff2effcf47abc8d34f04
@@ -25,16 +25,6 @@
25
25
 
26
26
  {% comment %} Main
27
27
  -------------------------------------------------------------------------------- {% endcomment %}
28
-
29
- <!-- load the GA library -->
30
- <script async src="https://www.googletagmanager.com/gtag/js?id={{tracking_id}}"></script>
31
-
32
- <!-- GA depends on the cookie consent and is enabled/disabled on OptIn/Out-->
33
- <!--
34
- <script>
35
- window.dataLayer = window.dataLayer || [];
36
- function gtag(){dataLayer.push(arguments);}
37
- gtag('js', new Date());
38
- gtag('config', '{{tracking_id}}');
39
- </script>
40
- -->
28
+ <!-- [INFO ] [j1.modules.connectors.analytics ] [ GA depends on the cookie consent and is enabled/disabled dynamically on OptIn/Out ] -->
29
+ <!-- [INFO ] [j1.modules.connectors.analytics ] [ if analytics enabled, load the GA library statically by default ] -->
30
+ <script async id="google-tag-manager" src="https://www.googletagmanager.com/gtag/js?id={{tracking_id}}"></script>
@@ -23,11 +23,10 @@
23
23
  {% comment %} Variables
24
24
  -------------------------------------------------------------------------------- {% endcomment %}
25
25
 
26
-
27
26
  {% comment %} Main
27
+ <!-- thread container places dynamically by j1 adapter
28
28
  -------------------------------------------------------------------------------- {% endcomment %}
29
- <!-- [INFO ] [j1.modules.connectors.hyvor ] [ place the thread container: start ] -->
30
- <div id="hyvor-talk-view"></div>
31
29
  <!-- [INFO ] [j1.modules.connectors.hyvor ] [ connector depends on the cookie consent (personalization) ] -->
32
- <!-- [INFO ] [j1.modules.connectors.hyvor ] [ connector (dynamic) JS is enabled/disabled on OptIn/Out ] -->
33
- <!-- [INFO ] [j1.modules.connectors.hyvor ] [ place the thread container: end ] -->
30
+ <!-- [INFO ] [j1.modules.connectors.hyvor ] [ connector is enabled/disabled dynamically by j1 adapter on OptIn/Out ] -->
31
+ <!-- [INFO ] [j1.modules.connectors.hyvor ] [ thread container disabled, placed dynamically by j1 adapter ] -->
32
+ <!-- div id="hyvor-talk-view"></div -->
@@ -79,7 +79,7 @@
79
79
  {% if button_tagline %}
80
80
  {% if button_href and button_target %}
81
81
  {% capture bs_button_html %}
82
- <a id="#{{button_id}}" href="{{button_href}}" target="{{button_target}}" rel="noopener" class="{{button_class}}" style="{{button_style}}">
82
+ <a id="{{button_id}}" href="{{button_href}}" target="{{button_target}}" rel="noopener" class="{{button_class}}" style="{{button_style}}">
83
83
  <i class="{{icon_family}} {{icon_family}}-{{button_icon}} {{icon_family}}-{{button_icon_size}} {{icon_family}}-{{button_icon_color}} mr-3"></i>
84
84
  <span class="float-right text-left mt-2">
85
85
  {{button_title}}
@@ -89,7 +89,7 @@
89
89
  {% endcapture %}
90
90
  {% elsif button_href %}
91
91
  {% capture bs_button_html %}
92
- <a id="#{{button_id}}" href="{{button_href}}" class="{{button_class}}" style="{{button_style}}">
92
+ <a id="{{button_id}}" href="{{button_href}}" class="{{button_class}}" style="{{button_style}}">
93
93
  <i class="{{icon_family}} {{icon_family}}-{{button_icon}} {{icon_family}}-{{button_icon_size}} {{icon_family}}-{{button_icon_color}} mr-3"></i>
94
94
  <span class="float-right text-left mt-2">
95
95
  {{button_title}}
@@ -103,7 +103,7 @@
103
103
  {% else %}
104
104
  {% if button_href and button_target %}
105
105
  {% capture bs_button_html %}
106
- <a id="#{{button_id}}" href="{{button_href}}" target="{{button_target}}" rel="noopener" class="{{button_class}}" style="{{button_style}}">
106
+ <a id="{{button_id}}" href="{{button_href}}" target="{{button_target}}" rel="noopener" class="{{button_class}}" style="{{button_style}}">
107
107
  <i class="{{icon_family}} {{icon_family}}-{{button_icon}} {{icon_family}}-{{button_icon_size}} {{icon_family}}-{{button_icon_color}} mr-1"></i>
108
108
  <span class="float-right text-left">
109
109
  {{button_title}}
@@ -112,7 +112,7 @@
112
112
  {% endcapture %}
113
113
  {% elsif button_href %}
114
114
  {% capture bs_button_html %}
115
- <a id="#{{button_id}}" href="{{button_href}}" class="{{button_class}}" style="{{button_style}}">
115
+ <a id="{{button_id}}" href="{{button_href}}" class="{{button_class}}" style="{{button_style}}">
116
116
  <i class="{{icon_family}} {{icon_family}}-{{button_icon}} {{icon_family}}-{{button_icon_size}} {{icon_family}}-{{button_icon_color}} mr-1"></i>
117
117
  <span class="float-right text-left">
118
118
  {{button_title}}
@@ -45,9 +45,5 @@ exclude_from_search: true
45
45
  {{ private_settings | json }}
46
46
 
47
47
  {% endcapture %}
48
- {% if production %}
49
- {{ cache | minifyJSON }}
50
- {% else %}
51
- {{ cache | strip_empty_lines }}
52
- {% endif %}
48
+ {{ cache | encodeBase64 }}
53
49
  {% assign cache = nil %}
@@ -267,15 +267,18 @@ j1.adapter['cookieConsent'] = (function (j1, window) {
267
267
  $('#quickLinksCookieButton').css('display', 'block');
268
268
  }
269
269
 
270
- logger.debug('\n' + 'j1 cookies found:' + j1Cookies.length);
271
- j1Cookies.forEach(item => console.log('j1.core.switcher: ' + item));
272
- logger.debug('\n' + 'ga cookies found:' + gaCookies.length);
273
- gaCookies.forEach(item => console.log('j1.core.switcher: ' + item));
274
-
275
- if (user_agent.includes('iPad')) {
276
- logger.warn('\n' + 'product detected : ' + platform.product);
277
- logger.warn('\n' + 'skip deleting (unwanted) cookies for this platform');
278
- }
270
+ // jadams, 2021-11-29: disabled additional logs to verify the existance
271
+ // of J1 and GA cookies (testing only)
272
+ //
273
+ // logger.debug('\n' + 'j1 cookies found:' + j1Cookies.length);
274
+ // j1Cookies.forEach(item => console.log('j1.core.switcher: ' + item));
275
+ // logger.debug('\n' + 'ga cookies found:' + gaCookies.length);
276
+ // gaCookies.forEach(item => console.log('j1.core.switcher: ' + item));
277
+ //
278
+ // if (user_agent.includes('iPad')) {
279
+ // logger.warn('\n' + 'product detected : ' + platform.product);
280
+ // logger.warn('\n' + 'skip deleting (unwanted) cookies for this platform');
281
+ // }
279
282
 
280
283
  // Manage Google Analytics OptIn/Out
281
284
  // See: https://github.com/luciomartinez/gtag-opt-in/wiki
@@ -776,7 +776,7 @@ var j1 = (function () {
776
776
  }
777
777
  } else {
778
778
  logText = '\n' + 'no banner found in site';
779
- logger.warn(logText);
779
+ logger.debug(logText);
780
780
  return false;
781
781
  }
782
782
  return true;
@@ -879,7 +879,7 @@ var j1 = (function () {
879
879
  }
880
880
  } else {
881
881
  logText = '\n' + 'no panel found in site';
882
- logger.warn(logText);
882
+ logger.debug(logText);
883
883
  return false;
884
884
  }
885
885
  return true;
@@ -931,7 +931,7 @@ var j1 = (function () {
931
931
  selector.load(footer_data_path, cb_load_closure(id));
932
932
  } else {
933
933
  logText = '\n' + 'data not loaded';
934
- logger.warn(logText);
934
+ logger.debug(logText);
935
935
  j1.setXhrDataState(id, 'not loaded');
936
936
  j1.setXhrDomState(id, 'pending');
937
937
  return false;
@@ -1041,8 +1041,8 @@ var j1 = (function () {
1041
1041
  setTimeout (function() {
1042
1042
  // Manage providers for personalization OptIn/Out (Comments|Ads)
1043
1043
  if (!user_consent.personalization) {
1044
- logger.warn('\n' + 'disable comment provider: ' + comment_provider);
1045
- logger.warn('\n' + 'personalization not allowed, privacy settings for personalization: ' + user_consent.personalization);
1044
+ logger.debug('\n' + 'disable comment provider: ' + comment_provider);
1045
+ logger.debug('\n' + 'personalization not allowed, privacy settings for personalization: ' + user_consent.personalization);
1046
1046
  $('#leave-a-comment').remove();
1047
1047
  if (comment_provider === 'disqus') {
1048
1048
  $('#dsq-count-scr').remove();
@@ -1079,7 +1079,7 @@ var j1 = (function () {
1079
1079
  // no dropcaps if translation enabled
1080
1080
  if (user_translate.translationEnabled) {
1081
1081
  logger.info('\n' + 'translation enabled: ' + user_translate.translationEnabled);
1082
- logger.warn('\n' + 'skipped processing of dropcaps');
1082
+ logger.debug('\n' + 'skipped processing of dropcaps');
1083
1083
  } else {
1084
1084
  // initialize dropcaps
1085
1085
  logger.info('\n' + 'post processing: createDropCap');
@@ -1107,7 +1107,7 @@ var j1 = (function () {
1107
1107
  logger.info('\n' + 'tracking disabled, tracking id found: ' + tracking_id);
1108
1108
  }
1109
1109
  } else {
1110
- logger.warn('\n' + 'tracking not allowed, privacy settings for analysis: ' + user_consent.analysis);
1110
+ logger.debug('\n' + 'tracking not allowed, privacy settings for analysis: ' + user_consent.analysis);
1111
1111
  }
1112
1112
 
1113
1113
  // show|hide cookie icon (should MOVED to Cookiebar ???)
@@ -1155,8 +1155,8 @@ var j1 = (function () {
1155
1155
  // for GDPR compliance, themes feature may disabled on
1156
1156
  // privacy settings
1157
1157
  if (!user_consent.personalization) {
1158
- logger.warn('\n' + 'disable themes feature because of privacy settings');
1159
- logger.warn('\n' + 'personalization not allowed, privacy settings for personalization: ' + user_consent.personalization);
1158
+ logger.debug('\n' + 'disable themes feature because of privacy settings');
1159
+ logger.debug('\n' + 'personalization not allowed, privacy settings for personalization: ' + user_consent.personalization);
1160
1160
  $("#themes_menu").hide();
1161
1161
  } else {
1162
1162
  $("#themes_menu").show();
@@ -1198,8 +1198,8 @@ var j1 = (function () {
1198
1198
 
1199
1199
  // Manage providers for personalization OptIn/Out (Comments|Ads)
1200
1200
  if (!user_consent.personalization) {
1201
- logger.warn('\n' + 'disable comment provider: ' + comment_provider);
1202
- logger.warn('\n' + 'personalization not allowed, privacy settings for personalization: ' + user_consent.personalization);
1201
+ logger.debug('\n' + 'disable comment provider: ' + comment_provider);
1202
+ logger.debug('\n' + 'personalization not allowed, privacy settings for personalization: ' + user_consent.personalization);
1203
1203
  $('#leave-a-comment').remove();
1204
1204
  if (comment_provider === 'disqus') {
1205
1205
  $('#dsq-count-scr').remove();
@@ -1260,7 +1260,7 @@ var j1 = (function () {
1260
1260
  // no dropcaps if translation enabled
1261
1261
  if (user_translate.translationEnabled) {
1262
1262
  logger.info('\n' + 'translation enabled: ' + user_translate.translationEnabled);
1263
- logger.warn('\n' + 'skipped processing of dropcaps');
1263
+ logger.debug('\n' + 'skipped processing of dropcaps');
1264
1264
  } else {
1265
1265
  // initialize dropcaps
1266
1266
  logger.info('\n' + 'post processing: createDropCap');
@@ -1289,7 +1289,7 @@ var j1 = (function () {
1289
1289
  logger.info('\n' + 'tracking disabled, tracking id found: ' + tracking_id);
1290
1290
  }
1291
1291
  } else {
1292
- logger.warn('\n' + 'tracking not allowed, privacy settings for analysis: ' + user_consent.analysis);
1292
+ logger.debug('\n' + 'tracking not allowed, privacy settings for analysis: ' + user_consent.analysis);
1293
1293
  }
1294
1294
 
1295
1295
  logger.info('\n' + 'mode detected: web');
@@ -1338,8 +1338,8 @@ var j1 = (function () {
1338
1338
  // for GDPR compliance, themes feature may disabled on
1339
1339
  // privacy settings
1340
1340
  if (!user_consent.personalization) {
1341
- logger.warn('\n' + 'disable themes feature because of privacy settings');
1342
- logger.warn('\n' + 'personalization not allowed, privacy settings for personalization: ' + user_consent.personalization);
1341
+ logger.debug('\n' + 'disable themes feature because of privacy settings');
1342
+ logger.debug('\n' + 'personalization not allowed, privacy settings for personalization: ' + user_consent.personalization);
1343
1343
  $("#themes_menu").hide();
1344
1344
  } else {
1345
1345
  $("#themes_menu").show();
@@ -1594,7 +1594,7 @@ var j1 = (function () {
1594
1594
  if (options.xhr_data_element !== '') {
1595
1595
  logger.info('\n' + 'XHR data element found: ' + options.xhr_data_element);
1596
1596
  } else {
1597
- logger.warn('\n' + 'no XHR data element found, loading data aborted');
1597
+ logger.debug('\n' + 'no XHR data element found, loading data aborted');
1598
1598
  return;
1599
1599
  }
1600
1600
 
@@ -1626,7 +1626,7 @@ var j1 = (function () {
1626
1626
  // failsafe - prevent XHR load errors
1627
1627
  if (id != '#undefined') {
1628
1628
  logText = '\n' + 'data not loaded on id:' + id;
1629
- logger.warn(logText);
1629
+ logger.debug(logText);
1630
1630
  j1.setXhrDataState(id, 'not loaded');
1631
1631
  j1.setXhrDomState(id, 'not loaded');
1632
1632
  // Set processing state to 'finished' to complete module load
@@ -98,7 +98,6 @@ j1.adapter['translator'] = (function (j1, window) {
98
98
  var secure;
99
99
  var logText;
100
100
  var cookie_written;
101
- var modal_language;
102
101
  var navigator_language;
103
102
  var translation_language;
104
103
  var ddSourceLanguage;
@@ -171,7 +170,6 @@ j1.adapter['translator'] = (function (j1, window) {
171
170
  domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
172
171
  cookie_domain = (domain.includes('.')) ? '.' + domain : domain;
173
172
  secure = (url.protocol.includes('https')) ? true : false;
174
- modal_language = "{{site.language}}";
175
173
  navigator_language = navigator.language || navigator.userLanguage; // userLanguage for MS IE compatibility
176
174
  translation_language = navigator_language.split('-')[0];
177
175
  cookie_names = j1.getCookieNames();
@@ -270,6 +268,10 @@ j1.adapter['translator'] = (function (j1, window) {
270
268
  expires: 365
271
269
  });
272
270
 
271
+ if (moduleOptions.dialogLanguage === 'auto') {
272
+ moduleOptions.dialogLanguage = '{{contentLanguage}}';
273
+ }
274
+
273
275
  j1.translator = new Translator({
274
276
  contentURL: moduleOptions.contentURL, // dialog content (modals) for all supported languages
275
277
  cookieName: moduleOptions.cookieName, // the name of the User State Cookie (primary data)
@@ -2456,6 +2456,12 @@ module.exports = function navigator(options) {
2456
2456
  var defaultOptions = options;
2457
2457
  var logger = log4javascript.getLogger('j1.core.navigator.eventHandler');
2458
2458
  var $getNav = $('nav.navbar.navigator');
2459
+ var scrollDuration = 300;
2460
+ var page_link;
2461
+ var classname;
2462
+ var nav_link;
2463
+ var anchor_id;
2464
+ var scrollOffset;
2459
2465
  var json_data; // jadams: unused code (for now).: manages HTML5 server side events
2460
2466
  // for incoming messages from Git Server send e.g. on a 'pull request'
2461
2467
  // NOTE: used for ControlCenter (cc) functionality only !!!
@@ -2496,12 +2502,65 @@ module.exports = function navigator(options) {
2496
2502
  // 'scroll-to-top'
2497
2503
  // See:
2498
2504
  // https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault
2505
+ // https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation
2499
2506
  // https://stackoverflow.com/questions/134845/which-href-value-should-i-use-for-javascript-links-or-javascriptvoid0
2500
2507
  //
2501
2508
 
2502
2509
  $('a[href="#"]').click(function (e) {
2503
2510
  logger.debug('\n' + 'click event on href "#" detected: prevent default action');
2504
2511
  e.preventDefault ? e.preventDefault() : e.returnValue = false;
2512
+ }); // -----------------------------------------------------------------------
2513
+ // In-page smooth scroll
2514
+ // -----------------------------------------------------------------------
2515
+ // bind click event to all headlines generated by AsciiDoctor
2516
+ // for smooth-scroll (in-page)
2517
+ //
2518
+
2519
+ $('.sect1, .sect2 .sect3, .sect4, .sect5, .sect6').on('click', function (e) {
2520
+ page_link = document.querySelector('[id="' + decodeURI(anchor_id).split('#').join('') + '"]') ? true : false;
2521
+ anchor_id = e.target.hash ? e.target.hash : false;
2522
+ classname = e.target.className ? e.target.className : '';
2523
+ nav_link = classname.includes('nav-link'); // skip BS nav links
2524
+
2525
+ scrollOffset = j1.getScrollOffset();
2526
+
2527
+ if (anchor_id && !nav_link || page_link) {
2528
+ logger.debug('\n' + 'click event on headline detected: ' + anchor_id);
2529
+ $('html, body').animate({
2530
+ scrollTop: $(anchor_id).offset().top + scrollOffset
2531
+ }, scrollDuration);
2532
+ e.preventDefault ? e.preventDefault() : e.returnValue = false;
2533
+ }
2534
+ }); // bind click event to all HTML elements of class '.badge' (Bootstrap)
2535
+ // for smooth-scroll (in-page) to a '<div>' element
2536
+ //
2537
+
2538
+ $('.badge').on('click', function (e) {
2539
+ anchor_id = e.target.hash ? e.target.hash : false;
2540
+ scrollOffset = 100;
2541
+
2542
+ if (anchor_id) {
2543
+ logger.debug('\n' + 'click event on badge detected: ' + anchor_id);
2544
+ $('html, body').animate({
2545
+ scrollTop: $(anchor_id).offset().top - scrollOffset // NOTE: diffeent scrollOffset
2546
+
2547
+ }, scrollDuration);
2548
+ event.stopPropagation();
2549
+ }
2550
+ }); // bind click event to all HTML elements of class '.badge-tag' (j1)
2551
+ // for smooth-scroll (in-page)
2552
+
2553
+ $('.badge-tag').on('click', function (e) {
2554
+ anchor_id = e.target.hash ? e.target.hash : false;
2555
+ scrollOffset = j1.getScrollOffset();
2556
+
2557
+ if (anchor_id) {
2558
+ logger.debug('\n' + 'click event on badge-tag detected: ' + anchor_id);
2559
+ $('html, body').animate({
2560
+ scrollTop: $(anchor_id).offset().top + scrollOffset
2561
+ }, scrollDuration);
2562
+ event.stopPropagation();
2563
+ }
2505
2564
  }); // jadams: test code for jQuery plugin 'regex'
2506
2565
  // -----------------------------------------------------------------------
2507
2566
  // $('a:contains("?#")').click(function(e) {