j1-template 2024.1.5 → 2024.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (195) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/layouts/content_generator_page.html +0 -34
  3. data/_includes/themes/j1/modules/searcher/generator.html +4 -1
  4. data/_includes/themes/j1/modules/searcher/procedures/topsearch.proc +59 -56
  5. data/assets/data/authclient.html +1 -8
  6. data/assets/data/banner.html +1 -7
  7. data/assets/data/fab.html +2 -13
  8. data/assets/data/footer.html +0 -3
  9. data/assets/data/galeries.html +2 -13
  10. data/assets/data/gemini-ui.html +74 -21
  11. data/assets/data/iframes.html +1 -4
  12. data/assets/data/masonry.html +1 -13
  13. data/assets/data/masterslider.html +10 -21
  14. data/assets/data/menu.html +6 -14
  15. data/assets/data/mmenu.html +6 -5
  16. data/assets/data/mmenu_toc.html +2 -1
  17. data/assets/data/panel.html +4 -11
  18. data/assets/data/particles.yml +8 -8
  19. data/assets/data/quicklinks.html +4 -23
  20. data/assets/data/rtext_resizer.html +3 -1
  21. data/assets/data/slick.html +9 -11
  22. data/assets/data/translator.html +0 -1
  23. data/assets/themes/j1/adapter/js/advertising.js +143 -182
  24. data/assets/themes/j1/adapter/js/algolia.js +61 -54
  25. data/assets/themes/j1/adapter/js/analytics.js +68 -52
  26. data/assets/themes/j1/adapter/js/asciidoctor.js +32 -20
  27. data/assets/themes/j1/adapter/js/attic.js +75 -69
  28. data/assets/themes/j1/adapter/js/bmd.js +44 -26
  29. data/assets/themes/j1/adapter/js/carousel.js +117 -92
  30. data/assets/themes/j1/adapter/js/chatbot.js +77 -35
  31. data/assets/themes/j1/adapter/js/clipboard.js +67 -49
  32. data/assets/themes/j1/adapter/js/comments.js +93 -70
  33. data/assets/themes/j1/adapter/js/cookieConsent.js +157 -159
  34. data/assets/themes/j1/adapter/js/customFunctions.js +52 -35
  35. data/assets/themes/j1/adapter/js/customModule.js +61 -50
  36. data/assets/themes/j1/adapter/js/docsearch.js +55 -34
  37. data/assets/themes/j1/adapter/js/dropdowns.js +66 -52
  38. data/assets/themes/j1/adapter/js/fab.js +124 -109
  39. data/assets/themes/j1/adapter/js/gallery.js +68 -49
  40. data/assets/themes/j1/adapter/js/gemini.js +961 -301
  41. data/assets/themes/j1/adapter/js/iconPicker.js +76 -54
  42. data/assets/themes/j1/adapter/js/iconPickerPage.js +279 -0
  43. data/assets/themes/j1/adapter/js/iframer.js +84 -63
  44. data/assets/themes/j1/adapter/js/j1.js +605 -542
  45. data/assets/themes/j1/adapter/js/lazyLoader.js +43 -24
  46. data/assets/themes/j1/adapter/js/lightbox.js +53 -52
  47. data/assets/themes/j1/adapter/js/logger.js +78 -66
  48. data/assets/themes/j1/adapter/js/lunr.js +684 -86
  49. data/assets/themes/j1/adapter/js/masonry.js +84 -68
  50. data/assets/themes/j1/adapter/js/masterslider.js +136 -137
  51. data/assets/themes/j1/adapter/js/mmenu.js +102 -66
  52. data/assets/themes/j1/adapter/js/navigator.js +291 -356
  53. data/assets/themes/j1/adapter/js/particles.js +62 -40
  54. data/assets/themes/j1/adapter/js/rangeSlider.js +66 -48
  55. data/assets/themes/j1/adapter/js/rouge.js +63 -44
  56. data/assets/themes/j1/adapter/js/rtable.js +56 -40
  57. data/assets/themes/j1/adapter/js/rtextResizer.js +57 -44
  58. data/assets/themes/j1/adapter/js/scroller.js +170 -133
  59. data/assets/themes/j1/adapter/js/slick.js +99 -97
  60. data/assets/themes/j1/adapter/js/slimSelect.js +288 -0
  61. data/assets/themes/j1/adapter/js/speak2me.js +124 -128
  62. data/assets/themes/j1/adapter/js/themeToggler.js +118 -97
  63. data/assets/themes/j1/adapter/js/{themer.js → themes.js} +144 -113
  64. data/assets/themes/j1/adapter/js/toccer.js +88 -54
  65. data/assets/themes/j1/adapter/js/translator.js +74 -70
  66. data/assets/themes/j1/adapter/js/waves.js +75 -58
  67. data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +29 -11
  68. data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +2 -2
  69. data/assets/themes/j1/core/js/template.js +474 -420
  70. data/assets/themes/j1/core/js/template.min.js +7 -7
  71. data/assets/themes/j1/core/js/template.min.js.map +1 -1
  72. data/assets/themes/j1/modules/carousel/css/theme/uno.css +4 -4
  73. data/assets/themes/j1/modules/carousel/css/theme/uno.min.css +1 -1
  74. data/assets/themes/j1/modules/clipboard/js/clipboard.js +0 -1
  75. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +27 -21
  76. data/assets/themes/j1/modules/iconPicker/css/theme/uno.css +58 -0
  77. data/assets/themes/j1/modules/iconPicker/css/theme/uno.min.css +16 -0
  78. data/assets/themes/j1/modules/iconPicker/js/universal-icon-picker.0.js +493 -0
  79. data/assets/themes/j1/modules/iconPicker/js/universal-icon-picker.js +7 -7
  80. data/assets/themes/j1/modules/js-cookies/js/js.cookie.js +147 -0
  81. data/assets/themes/j1/modules/js-cookies/js/js.cookie.min.js +2 -0
  82. data/assets/themes/j1/modules/lightGallery/js/plugins/lg-video.js +4 -4
  83. data/assets/themes/j1/modules/lightGallery/js/plugins/lg-video.min.js +2 -10
  84. data/assets/themes/j1/modules/lunr/css/j1.css +12 -6
  85. data/assets/themes/j1/modules/lunr/css/j1.min.css +1 -1
  86. data/assets/themes/j1/modules/lunr/js/j1.js +46 -43
  87. data/assets/themes/j1/modules/lunr/js/j1.min.js +1 -1
  88. data/assets/themes/j1/modules/masterslider/js/masterslider.js +1 -1
  89. data/assets/themes/j1/modules/scroller/js/scroller.js +64 -74
  90. data/assets/themes/j1/modules/scroller/js/scroller.min.js +1 -1
  91. data/assets/themes/j1/modules/slick/slider/css/theme/uno.css +4 -4
  92. data/assets/themes/j1/modules/slick/slider/css/theme/uno.min.css +1 -1
  93. data/assets/themes/j1/modules/slimSelect/js/select.js +1865 -1821
  94. data/assets/themes/j1/modules/slimSelect/js/select.min.js +2 -1
  95. data/assets/themes/j1/modules/themeSwitcher/js/switcher.js +87 -89
  96. data/assets/themes/j1/modules/themeSwitcher/js/switcher.min.js +1 -1
  97. data/assets/themes/j1/modules/videojs/js/plugins/vm/api/player.min.js +5 -7
  98. data/assets/themes/j1/modules/videojs/js/plugins/vm/api/v2.20.1/player.min.js +23 -0
  99. data/lib/j1/version.rb +1 -1
  100. data/lib/starter_web/Gemfile +2 -2
  101. data/lib/starter_web/README.md +5 -5
  102. data/lib/starter_web/_config.yml +1 -1
  103. data/lib/starter_web/_data/blocks/_panel.yml +775 -0
  104. data/lib/starter_web/_data/blocks/panel.yml +53 -53
  105. data/lib/starter_web/_data/j1_config.yml +3 -2
  106. data/lib/starter_web/_data/layouts/default.yml +0 -2
  107. data/lib/starter_web/_data/modules/_scroller.yml +102 -0
  108. data/lib/starter_web/_data/modules/carousel.yml +3 -3
  109. data/lib/starter_web/_data/modules/defaults/attics.yml +5 -5
  110. data/lib/starter_web/_data/modules/defaults/docsearch.yml +1 -1
  111. data/lib/starter_web/_data/modules/defaults/gemini.yml +204 -46
  112. data/lib/starter_web/_data/modules/defaults/{iconPicker.yml → icon_picker.yml} +6 -12
  113. data/lib/starter_web/_data/modules/defaults/lunr.yml +20 -5
  114. data/lib/starter_web/_data/modules/defaults/masterslider.yml +4 -4
  115. data/lib/starter_web/_data/modules/defaults/navigator.yml +20 -24
  116. data/lib/starter_web/_data/modules/defaults/particles.yml +3 -3
  117. data/lib/starter_web/_data/modules/defaults/slim_select.yml +54 -0
  118. data/lib/starter_web/_data/modules/defaults/{themer.yml → themes.yml} +10 -10
  119. data/lib/starter_web/_data/modules/defaults/toccer.yml +1 -1
  120. data/lib/starter_web/_data/modules/gallery.yml +33 -38
  121. data/lib/starter_web/_data/modules/gemini.yml +42 -3
  122. data/lib/starter_web/_data/modules/{iconPicker.yml → icon_picker.yml} +31 -3
  123. data/lib/starter_web/_data/modules/lunr.yml +12 -1
  124. data/lib/starter_web/_data/modules/masonry.yml +37 -38
  125. data/lib/starter_web/_data/modules/masterslider.yml +78 -95
  126. data/lib/starter_web/_data/modules/navigator_menu.yml +12 -20
  127. data/lib/starter_web/_data/modules/particles.yml +3 -3
  128. data/lib/starter_web/_data/modules/scroller.yml +3 -3
  129. data/lib/starter_web/_data/modules/slim_select.yml +110 -0
  130. data/lib/starter_web/_data/modules/{themer.yml → themes.yml} +4 -4
  131. data/lib/starter_web/_data/resources.yml +83 -47
  132. data/lib/starter_web/_data/templates/feed.xml +1 -1
  133. data/lib/starter_web/_includes/attributes.asciidoc +354 -355
  134. data/lib/starter_web/_plugins/asciidoctor/gemini-ui-block.rb +1 -1
  135. data/lib/starter_web/_plugins/asciidoctor/slim-select-block.rb +45 -0
  136. data/lib/starter_web/_plugins/index/lunr.rb +1 -1
  137. data/lib/starter_web/collections/asciidoc_skeletons/simple-post/_posts/yyyy-mm-dd-your-post-name.asciidoc +5 -2
  138. data/lib/starter_web/collections/posts/public/featured/_posts/0000-00-00-welcome-to-j1.adoc.erb +3 -3
  139. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.adoc +9 -9
  140. data/lib/starter_web/collections/posts/public/featured/_posts/2021-02-01-static-site-generators.adoc +4 -4
  141. data/lib/starter_web/collections/posts/public/featured/_posts/2022-02-01-about-j1.adoc +3 -2
  142. data/lib/starter_web/collections/posts/public/featured/_posts/2023-10-18-url-types.adoc +12 -12
  143. data/lib/starter_web/package.json +1 -1
  144. data/lib/starter_web/pages/public/about/features.adoc +1 -1
  145. data/lib/starter_web/pages/public/about/reporting_issues.adoc +1 -0
  146. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/_includes/attributes.asciidoc +44 -44
  147. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/documentation.adoc +1 -0
  148. data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/_includes/attributes.asciidoc +12 -12
  149. data/lib/starter_web/pages/public/blog/navigator/archive/allview.html +1 -1
  150. data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/attributes.asciidoc +42 -28
  151. data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/highlghter_rouge.adoc +1 -0
  152. data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/lunr_search.adoc +1 -0
  153. data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/present_audio_video.adoc +18 -2
  154. data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/present_images.adoc +43 -50
  155. data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +6 -11
  156. data/lib/starter_web/pages/public/legal/en/200_impress.adoc +4 -11
  157. data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +5 -12
  158. data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +5 -10
  159. data/lib/starter_web/pages/public/tools/previewer/_includes/attributes.asciidoc +10 -9
  160. data/lib/starter_web/pages/public/tools/previewer/preview_bootstrap_theme.adoc +77 -75
  161. metadata +52 -46
  162. data/lib/starter_web/pages/public/manuals/integrations/gemini/_includes/attributes.asciidoc +0 -47
  163. data/lib/starter_web/pages/public/manuals/integrations/gemini/_includes/documents/preview_google_adsense.asciidoc +0 -448
  164. data/lib/starter_web/pages/public/manuals/integrations/gemini/_includes/documents/readme +0 -0
  165. data/lib/starter_web/pages/public/manuals/integrations/gemini/_includes/tables/readme +0 -0
  166. data/lib/starter_web/pages/public/manuals/integrations/gemini/gemini.adoc +0 -525
  167. data/lib/starter_web/pages/public/manuals/integrations/gemini/security.asccidoc +0 -274
  168. data/lib/starter_web/pages/public/manuals/integrations/gemini/security.hrml +0 -560
  169. /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/article_previewer/viewer_biography.adoc +0 -0
  170. /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/article_previewer/viewer_fantasy.adoc +0 -0
  171. /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/article_previewer/viewer_romance.adoc +0 -0
  172. /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/jekyll_collections.adoc +0 -0
  173. /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/viewer_all_books.adoc +0 -0
  174. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/100_gistblock.asciidoc +0 -0
  175. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_bottom_info.asciidoc +0 -0
  176. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_bottom_left_warning.asciidoc +0 -0
  177. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_bottom_right_danger.asciidoc +0 -0
  178. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_central_success.asciidoc +0 -0
  179. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_full_height_left_info.asciidoc +0 -0
  180. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_full_height_right_success.asciidoc +0 -0
  181. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_table_bs_modal_examples.asciidoc +0 -0
  182. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_top_info.asciidoc +0 -0
  183. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_top_left_info.asciidoc +0 -0
  184. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_top_right_success.asciidoc +0 -0
  185. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/419_advanced_modals_demo.asciidoc +0 -0
  186. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/tables/bs_modal_examples.asciidoc +0 -0
  187. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/themes_bootstrap.asciidoc +0 -0
  188. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/themes_rouge.asciidoc +0 -0
  189. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/asciidoc_extensions.adoc +0 -0
  190. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/bootstrap_themes.adoc +0 -0
  191. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/icon_fonts.adoc +0 -0
  192. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/modal_extentions.adoc +0 -0
  193. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/responsive_tables.adoc +0 -0
  194. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/typography.adoc +0 -0
  195. /data/lib/starter_web/pages/public/{legal/learn → learn}/where_to_go.adoc +0 -0
@@ -27,8 +27,8 @@ regenerate: true
27
27
 
28
28
  {% comment %} Set global settings
29
29
  -------------------------------------------------------------------------------- {% endcomment %}
30
- {% assign environment = site.environment %}
31
- {% assign template_version = site.version %}
30
+ {% assign environment = site.environment %}
31
+ {% assign template_version = site.version %}
32
32
 
33
33
  {% if site.permalink == 'none' %}
34
34
  {% capture page_url %}{{ site.url }}.html{% endcapture %}
@@ -61,8 +61,8 @@ regenerate: true
61
61
  {% assign cookie_defaults = modules.defaults.cookies.defaults %}
62
62
  {% assign cookie_settings = modules.cookies.settings %}
63
63
 
64
- {% assign themer_defaults = modules.defaults.themer.defaults %}
65
- {% assign themer_settings = modules.themer.settings %}
64
+ {% assign themes_defaults = modules.defaults.themes.defaults %}
65
+ {% assign themes_settings = modules.themes.settings %}
66
66
 
67
67
  {% assign scroller_defaults = modules.defaults.scroller.defaults %}
68
68
  {% assign scroller_settings = modules.scroller.settings %}
@@ -76,7 +76,7 @@ regenerate: true
76
76
  {% comment %} Set config options
77
77
  -------------------------------------------------------------------------------- {% endcomment %}
78
78
  {% assign toccer_options = toccer_defaults | merge: toccer_settings %}
79
- {% assign themer_options = themer_defaults| merge: themer_settings %}
79
+ {% assign themes_options = themes_defaults| merge: themes_settings %}
80
80
  {% assign cookie_options = cookie_defaults | merge: cookie_settings %}
81
81
  {% assign scroller_options = scroller_defaults | merge: scroller_settings %}
82
82
  {% assign footer_options = footer_defaults | merge: footer_settings %}
@@ -89,9 +89,9 @@ regenerate: true
89
89
  {% assign banner_data_path = banner_defaults.data_path %}
90
90
  {% assign panel_data_path = panel_defaults.data_path %}
91
91
 
92
- {% assign themer_enabled = modules.themer_options.enabled %}
93
- {% assign themer_reloadPageOnChange = modules.themer_options.reloadPageOnChange %}
94
- {% assign themer_hideOnReload = modules.themer_options.hideOnReload %}
92
+ {% assign themes_enabled = modules.themes_options.enabled %}
93
+ {% assign themes_reloadPageOnChange = modules.themes_options.reloadPageOnChange %}
94
+ {% assign themes_hideOnReload = modules.themes_options.hideOnReload %}
95
95
 
96
96
  {% comment %} Detect prod mode
97
97
  -------------------------------------------------------------------------------- {% endcomment %}
@@ -135,34 +135,39 @@ regenerate: true
135
135
  /* eslint semi: "off" */
136
136
  // -----------------------------------------------------------------------------
137
137
  'use strict';
138
- var j1 = (function (options) {
138
+ var j1 = ((options) => {
139
139
 
140
140
  // ---------------------------------------------------------------------------
141
141
  // globals
142
142
  // ---------------------------------------------------------------------------
143
143
  // base page resources
144
- var rePager = new RegExp('navigator|dateview|tagview|archive');
145
- var environment = '{{environment}}';
146
- var scrollOffsetBase = {{scroller_options.smoothscroll.offsetBase}};
147
- var scrollOffsetCorrection = {{scroller_options.smoothscroll.offsetCorrection}};
148
- var moduleOptions = {};
149
- var j1_runtime_data = {};
150
- var scrollerSettings = {};
151
- var scrollerOptions = {};
152
- var scrollerDefaults = {};
153
- var banner = [];
154
- var _this = j1;
155
- var headingArray = [];
144
+ var environment = '{{environment}}';
145
+ var scrollOffsetBase = {{scroller_options.smoothscroll.offsetBase}};
146
+ var scrollOffsetCorrection = {{scroller_options.smoothscroll.offsetCorrection}};
147
+ var date = new Date();
148
+ var timestamp_now = date.toISOString();
149
+ var url = new URL(window.location.href);
150
+ var rePager = new RegExp('navigator|dateview|tagview|archive');
151
+ var baseUrl = url.origin;
152
+ var hostname = url.hostname;
153
+ var domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
154
+ var secure = (url.protocol.includes('https')) ? true : false;
155
+ var template_version = '{{template_version}}';
156
+ var moduleOptions = {};
157
+ var j1_runtime_data = {};
158
+ var scrollerSettings = {};
159
+ var scrollerOptions = {};
160
+ var scrollerDefaults = {};
161
+ var banner = [];
162
+ var headingArray = [];
156
163
 
164
+ var ep;
157
165
  var settings;
158
166
  var json_data;
159
- var ep;
160
- var baseUrl;
161
167
  var referrer;
162
168
  var documentHeight;
163
169
  var scrollOffset;
164
170
 
165
-
166
171
  // defaults for status information
167
172
  var state = 'not_started';
168
173
  var mode = 'not_detected';
@@ -187,13 +192,13 @@ var j1 = (function (options) {
187
192
 
188
193
  // defaults for dynamic pages
189
194
  var timeoutScrollDynamicPages = '{{template_config.timeoutScrollDynamicPages}}';
190
-
191
195
  var scrollDynamicPagesTopOnChange = '{{template_config.scrollDynamicPagesTopOnChange}}';
192
- var pageGrowthRatio = 0; // ratio a dynamic page has grown in height
193
- var pageBaseHeigth = 0; // base height of a dynamic page (not grown)
194
- var staticPage = false; // defalt: false, but decided in ResizeObserver
196
+
197
+ var pageGrowthRatio = 0; // ratio a dynamic page has grown in height
198
+ var pageBaseHeigth = 0; // base height of a dynamic page (not grown)
199
+ var staticPage = false; // defalt: false, but decided in ResizeObserver
195
200
  var pageHeight;
196
- var pageBaseHeight; // height of a page dynamic detected in ResizeObserver
201
+ var pageBaseHeight; // height of a page dynamic detected in ResizeObserver
197
202
 
198
203
  var growthRatio = 0.00;
199
204
  var previousGrowthRatio = 0.00;
@@ -210,78 +215,106 @@ var j1 = (function (options) {
210
215
  var user_session_detected;
211
216
  var cookie_written;
212
217
 
213
- // defaults for the template
214
- var template_version;
218
+ // defaults for template versions
215
219
  var template_previous_version;
216
220
  var template_version_changed;
217
221
 
218
222
  // defaults for themes
219
223
  var themeName;
220
224
  var themeCss;
221
- var cssExtension = (environment === 'production')
222
- ? '.min.css'
223
- : '.css'
225
+ var cssExtension = (environment === 'production') ? '.min.css' : '.css';
224
226
 
225
227
  // defaults for data files
226
- var colors_data_path = '{{template_config.colors_data_path}}';
227
- var font_size_data_path = '{{template_config.font_size_data_path}}';
228
- var runtime_data_path = '{{template_config.runtime_data_path}}';
229
- var message_catalog_data_path = '{{template_config.message_catalog_data_path}}';
228
+ var colors_data_path = '{{template_config.colors_data_path}}';
229
+ var font_size_data_path = '{{template_config.font_size_data_path}}';
230
+ var runtime_data_path = '{{template_config.runtime_data_path}}';
231
+ var message_catalog_data_path = '{{template_config.message_catalog_data_path}}';
232
+
233
+ // block mgmt
234
+ var banner_state;
235
+ var panel_state;
236
+ var footer_state;
237
+ var banner_blocks;
238
+ var panel_blocks;
239
+ var footer_blocks;
240
+ var banners_exits;
241
+ var panels_exists;
242
+ var footer_exists;
230
243
 
231
244
  // Logger resources
232
245
  var logger;
233
246
  var logText;
234
247
 
248
+ var frontmatterOptions;
249
+ var _this;
250
+
251
+ // date|time
252
+ var startTime;
253
+ var endTime;
254
+ var startTimeModule;
255
+ var endTimeModule;
256
+ var timeSeconds;
257
+
235
258
  // initial cookie settings
236
259
  var cookie_names = {
237
- 'app_session': '{{template_config.cookies.app_session}}',
238
- 'user_session': '{{template_config.cookies.user_session}}',
239
- 'user_state': '{{template_config.cookies.user_state}}',
240
- 'user_consent': '{{template_config.cookies.user_consent}}',
241
- 'user_translate': '{{template_config.cookies.user_translate}}'
260
+ 'app_session': '{{template_config.cookies.app_session}}',
261
+ 'user_session': '{{template_config.cookies.user_session}}',
262
+ 'user_state': '{{template_config.cookies.user_state}}',
263
+ 'user_consent': '{{template_config.cookies.user_consent}}',
264
+ 'user_translate': '{{template_config.cookies.user_translate}}',
265
+ 'chat_prompt': '{{template_config.cookies.chat_prompt}}',
266
+ 'search_prompt': '{{template_config.cookies.search_prompt}}'
242
267
  };
243
- var user_consent = {};
268
+
269
+ var user_consent = {
270
+ 'necessary': true,
271
+ 'analysis': false,
272
+ 'personalization': false
273
+ };
274
+
244
275
  var user_translate = {
245
- 'analysis': true,
246
- 'personalization': true,
247
- 'translationEnabled': true
276
+ 'analysis': false,
277
+ 'personalization': false,
278
+ 'useLanguageFromBrowser': true,
279
+ 'translateAllPages': true,
280
+ 'translationEnabled': false
248
281
  };
282
+
249
283
  var user_session = {
250
- 'mode': 'web',
251
- 'writer': 'j1.adapter',
252
- 'locale': navigator.language || navigator.userLanguage,
253
- 'user_name': '{{template_config.user.user_name}}',
254
- 'provider': '{{template_config.user.provider}}',
255
- 'provider_membership': '{{template_config.user.provider_membership}}',
256
- 'provider_permissions': 'public,{{template_config.user.provider_permissions}}',
257
- 'provider_site_url': '{{template_config.user.provider_site_url}}',
258
- 'provider_home_url': '{{template_config.user.provider_home_url}}',
259
- 'provider_blog_url': '{{template_config.user.provider_blog_url}}',
260
- 'provider_member_url': '{{template_config.user.provider_member_url}}',
261
- 'provider_privacy_url': '{{template_config.user.provider_privacy_url}}',
262
- 'requested_page': 'na',
263
- 'previous_page': 'na',
264
- 'last_pager': '/pages/public/blog/navigator/'
284
+ 'mode': 'web',
285
+ 'writer': 'j1.adapter',
286
+ 'locale': navigator.language || navigator.userLanguage,
287
+ 'user_name': '{{template_config.user.user_name}}',
288
+ 'provider': '{{template_config.user.provider}}',
289
+ 'provider_membership': '{{template_config.user.provider_membership}}',
290
+ 'provider_permissions': 'public,{{template_config.user.provider_permissions}}',
291
+ 'provider_site_url': '{{template_config.user.provider_site_url}}',
292
+ 'provider_home_url': '{{template_config.user.provider_home_url}}',
293
+ 'provider_blog_url': '{{template_config.user.provider_blog_url}}',
294
+ 'provider_member_url': '{{template_config.user.provider_member_url}}',
295
+ 'provider_privacy_url': '{{template_config.user.provider_privacy_url}}',
296
+ 'requested_page': '',
297
+ 'previous_page': '',
298
+ 'last_pager': ''
265
299
  };
266
- var user_state = {
267
- 'writer': 'j1.adapter',
268
- 'template_version': '{{template_version}}',
269
- //
270
- // for testing only
271
- // 'template_version': 'undefined',
272
- // 'template_version': '2022.4.4',
273
- //
274
- 'theme_name': 'UnoLight',
275
- 'theme_css': '',
276
- 'theme_author': 'J1 Team',
277
- 'theme_version': '{{template_version}}',
278
- 'session_active': false,
279
- 'google_translate': 'disabled',
280
- 'translate_all_pages': true,
281
- 'translate_locale': navigator.language || navigator.userLanguage,
282
- 'last_session_ts': ''
300
+
301
+ var user_state = {
302
+ 'writer': 'j1.adapter',
303
+ 'template_version': '{{template_version}}',
304
+ 'theme_name': 'UnoLight',
305
+ 'theme_css': '/assets/themes/j1/core/css/themes/unolight/bootstrap.css',
306
+ 'theme_author': 'J1 Team',
307
+ 'theme_version': '{{template_version}}',
308
+ 'session_active': false,
309
+ 'google_translate': 'disabled',
310
+ 'translate_all_pages': true,
311
+ 'translate_locale': navigator.language || navigator.userLanguage,
312
+ 'last_session_ts': timestamp_now
283
313
  };
284
314
 
315
+ var chat_prompt = {};
316
+ var search_prompt = {};
317
+
285
318
  // ---------------------------------------------------------------------------
286
319
  // Helper functions
287
320
  // ---------------------------------------------------------------------------
@@ -311,7 +344,7 @@ var j1 = (function (options) {
311
344
  // -------------------------------------------------------------------------
312
345
  // init()
313
346
  // -------------------------------------------------------------------------
314
- init: function (options) {
347
+ init: (options) => {
315
348
 
316
349
  // -----------------------------------------------------------------------
317
350
  // Default module settings
@@ -322,12 +355,12 @@ var j1 = (function (options) {
322
355
  }, options);
323
356
 
324
357
  // create settings object from frontmatter options
325
- var frontmatterOptions = options != null ? $.extend({}, options) : {};
358
+ frontmatterOptions = options != null ? $.extend({}, options) : {};
326
359
 
327
360
  // Load scroller module DEFAULTS|CONFIGs
328
- scrollerDefaults = $.extend({}, {{scroller_defaults | replace: 'nil', 'null' | replace: '=>', ':' }});
329
- scrollerSettings = $.extend({}, {{scroller_settings | replace: 'nil', 'null' | replace: '=>', ':' }});
330
- scrollerOptions = $.extend(true, {}, scrollerDefaults, scrollerSettings);
361
+ scrollerDefaults = $.extend({}, {{scroller_defaults | replace: 'nil', 'null' | replace: '=>', ':' }});
362
+ scrollerSettings = $.extend({}, {{scroller_settings | replace: 'nil', 'null' | replace: '=>', ':' }});
363
+ scrollerOptions = $.extend(true, {}, scrollerDefaults, scrollerSettings);
331
364
 
332
365
  // settings for dynamic pages
333
366
  scrollDynamicPagesTopOnChange = frontmatterOptions.scrollDynamicPagesTopOnChange ? frontmatterOptions.scrollDynamicPagesTopOnChange : '{{template_config.scrollDynamicPagesTopOnChange}}';
@@ -336,28 +369,22 @@ var j1 = (function (options) {
336
369
  // -----------------------------------------------------------------------
337
370
  // Global variable settings
338
371
  // -----------------------------------------------------------------------
339
- var logger = log4javascript.getLogger('j1.init');
340
- var url = new URL(window.location.href);
341
- var baseUrl = url.origin;
342
- var hostname = url.hostname;
343
- var domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
344
- var secure = (url.protocol.includes('https')) ? true : false;
345
- var date = new Date();
346
- var timestamp_now = date.toISOString();
347
- var curr_state = 'started';
348
- var gaCookies = j1.findCookie('_ga');
349
- var themerOptions = $.extend({}, {{themer_options | replace: '=>', ':' | replace: 'nil', '""' }});
372
+ var logger = log4javascript.getLogger('j1.init');
373
+ var _this = j1;
374
+ var curr_state = 'started';
375
+ var gaCookies = j1.findCookie('_ga');
376
+ var themesOptions = $.extend({}, {{themes_options | replace: '=>', ':' | replace: 'nil', '""' }});
350
377
 
351
378
  // current template version
352
- template_version = j1.getTemplateVersion();
379
+ // template_version = j1.getTemplateVersion();
353
380
 
354
381
  // -----------------------------------------------------------------------
355
382
  // status settings
356
383
  // save status into the adapter object for (later) global access
357
384
  // -----------------------------------------------------------------------
358
- j1['xhrDataState'] = {};
359
- j1['xhrDOMState'] = {};
360
- j1['pageMonitor'] = {
385
+ j1['xhrDataState'] = {};
386
+ j1['xhrDOMState'] = {};
387
+ j1['pageMonitor'] = {
361
388
  eventNo: 0,
362
389
  pageType: 'unknown',
363
390
  pageBaseHeight: 0,
@@ -374,6 +401,7 @@ var j1 = (function (options) {
374
401
  user_session.timestamp = timestamp_now;
375
402
 
376
403
  user_consent = j1.readCookie(cookie_names.user_consent);
404
+
377
405
  user_session = j1.existsCookie(cookie_names.user_session)
378
406
  ? j1.readCookie(cookie_names.user_session)
379
407
  : cookie_written = j1.writeCookie({
@@ -401,6 +429,24 @@ var j1 = (function (options) {
401
429
  expires: 365
402
430
  });
403
431
 
432
+ chat_prompt = j1.existsCookie(cookie_names.chat_prompt)
433
+ ? j1.readCookie(cookie_names.chat_prompt)
434
+ : cookie_written = j1.writeCookie({
435
+ name: cookie_names.chat_prompt,
436
+ data: chat_prompt,
437
+ secure: secure,
438
+ expires: 365
439
+ });
440
+
441
+ search_prompt = j1.existsCookie(cookie_names.search_prompt)
442
+ ? j1.readCookie(cookie_names.search_prompt)
443
+ : cookie_written = j1.writeCookie({
444
+ name: cookie_names.search_prompt,
445
+ data: search_prompt,
446
+ secure: secure,
447
+ expires: 365
448
+ });
449
+
404
450
  if (typeof user_state.template_version == 'undefined') {
405
451
  // add for compatibility reasons
406
452
  template_version_changed = true;
@@ -430,11 +476,14 @@ var j1 = (function (options) {
430
476
  }
431
477
  }
432
478
 
433
- logger.info('\n' + 'register monitors');
434
- j1.registerMonitors();
479
+ // logger.info('\n' + 'register monitors');
480
+ // j1.registerMonitors();
435
481
 
436
- // detect middleware (mode 'app') and update user session cookie
437
482
  // -----------------------------------------------------------------------
483
+ // APP mode
484
+ // -----------------------------------------------------------------------
485
+ //
486
+ // detect middleware (mode 'app') and update user session cookie
438
487
  if (user_session.mode === 'app') {
439
488
  var url = new liteURL(window.location.href);
440
489
  var ep_status = baseUrl + '/status' + '?page=' + window.location.pathname;
@@ -443,11 +492,12 @@ var j1 = (function (options) {
443
492
  baseUrl = url.origin;
444
493
 
445
494
  // See: https://stackoverflow.com/questions/3709597/wait-until-all-jquery-ajax-requests-are-done
495
+ // wait all $ajax requests done
446
496
  $.when (
447
497
  $.ajax(ep_status)
448
498
  )
449
- .then(function(data) {
450
- var logger = log4javascript.getLogger('j1.init');
499
+ .then((data) => {
500
+ var logger = log4javascript.getLogger('j1');
451
501
  user_session = j1.readCookie(cookie_names.user_session);
452
502
  user_session.mode = 'app';
453
503
  user_session.requested_page = window.location.pathname;
@@ -484,12 +534,12 @@ var j1 = (function (options) {
484
534
  $('#quickLinksSignInOutButton').css('display', 'block');
485
535
  logger.debug('\n' + 'met dependencies for: j1');
486
536
  } // END if (j1.authEnabled
487
- }) // ENF then
488
- .catch(function(error) {
537
+ }) // END all $ajax requests done
538
+ .catch((error) => {
489
539
  // jadams, 2018-08-31
490
540
  // TODO: Check why a timeout is required
491
- setTimeout (function() {
492
- var logger = log4javascript.getLogger('j1.init');
541
+ setTimeout(() => {
542
+ var logger = log4javascript.getLogger('j1');
493
543
  user_session = j1.readCookie(cookie_names.user_session);
494
544
  user_session.mode = 'web';
495
545
  user_session.requested_page = window.location.pathname;
@@ -508,24 +558,24 @@ var j1 = (function (options) {
508
558
  // -----------------------------------------------------------------
509
559
  // load|initialize page resources for block elements
510
560
  // NOTE: asynchronous calls should be rewitten to xhrData
511
- // NOTE: Find $('#content').hide() conterpart in themer adapter
561
+ // NOTE: Find $('#no_flicker').hide() conterpart in themes adapter
512
562
  // -----------------------------------------------------------------
513
- var dependencies_met_page_ready = setInterval (function (options) {
514
- var pageState = $('#no_flicker').css("display");
515
- var pageVisible = (pageState == 'block') ? true : false;
516
- var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true: false;
517
- var banner_blocks = document.querySelectorAll('[id^="banner"]').length;
518
- var panel_blocks = document.querySelectorAll('[id^="panel"]').length;
519
- var footer_blocks = document.querySelectorAll('[id^="footer"]').length;
520
- var banners_exits = (banner_blocks > 0) ? true : false;
521
- var panels_exists = (panel_blocks > 0) ? true : false;
522
- var footer_exists = (footer_blocks > 0) ? true : false;
523
- var banner_state;
524
- var panel_state;
525
- var footer_state;
526
-
527
- if (j1.getState() === 'finished' && pageVisible && atticFinished) {
528
- clearInterval(dependencies_met_page_ready);
563
+ var dependencies_met_page_ready = setInterval (() => {
564
+ var pageState = $('#no_flicker').css("display");
565
+ var pageVisible = (pageState == 'block') ? true : false;
566
+ var j1CoreFinished = (j1.getState() == 'finished') ? true : false;
567
+ var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true: false;
568
+
569
+ if (j1CoreFinished && pageVisible && atticFinished) {
570
+ startTimeModule = Date.now();
571
+
572
+ banner_blocks = document.querySelectorAll('[id^="banner"]').length;
573
+ panel_blocks = document.querySelectorAll('[id^="panel"]').length;
574
+ footer_blocks = document.querySelectorAll('[id^="footer"]').length;
575
+ banners_exits = (banner_blocks > 0) ? true : false;
576
+ panels_exists = (panel_blocks > 0) ? true : false;
577
+ footer_exists = (footer_blocks > 0) ? true : false;
578
+
529
579
  logger.info('\n' + 'load block elements');
530
580
 
531
581
  if (banners_exits) {j1.initBanner(settings);}
@@ -535,7 +585,7 @@ var j1 = (function (options) {
535
585
  // process pages having banners or panels
536
586
  //
537
587
  if (banner_blocks || panel_blocks) {
538
- var dependencies_met_blocks_ready = setInterval (function (settings) {
588
+ var dependencies_met_blocks_ready = setInterval (() => {
539
589
  // check the footer if HTML portion is loaded successfully
540
590
  if (footer_exists) {
541
591
  footer_state = j1.getXhrDataState('#{{footer_id}}');
@@ -547,7 +597,7 @@ var j1 = (function (options) {
547
597
  // check bannern if HTML content is loaded successfully
548
598
  //
549
599
  if (banners_exits) {
550
- Object.entries(j1.xhrDataState).forEach(entry => {
600
+ Object.entries(j1.xhrDataState).forEach ((entry) => {
551
601
  const [key, value] = entry;
552
602
  if (key.includes('banner')) {
553
603
  banner_state = value;
@@ -561,7 +611,7 @@ var j1 = (function (options) {
561
611
  // check panels if HTML content is loaded successfully
562
612
  //
563
613
  if (panels_exists) {
564
- Object.entries(j1.xhrDataState).forEach(entry => {
614
+ Object.entries(j1.xhrDataState).forEach ((entry) => {
565
615
  const [key, value] = entry;
566
616
  if (key.includes('panel')) {
567
617
  panel_state = value;
@@ -577,16 +627,17 @@ var j1 = (function (options) {
577
627
  if (banner_state == 'success' && panel_state == 'success' && footer_state == 'success') {
578
628
  // show the content|footer
579
629
  //
580
- $('#content').show();
630
+ $('#no_flicker').show();
581
631
  $('.{{footer}}').show();
582
632
 
583
633
  clearInterval(dependencies_met_blocks_ready);
584
634
  }
585
- }, 10);
635
+ }, 10); // ENS dependencies_met_blocks_ready
636
+ // END if banner_blocks || panel_blocks
586
637
  } else {
587
638
  // process pages w/o banners or panels
588
639
  //
589
- var dependencies_met_footer_block_ready = setInterval (function (settings) {
640
+ var dependencies_met_footer_block_ready = setInterval (() => {
590
641
  // check the footer if HTML portion is loaded successfully
591
642
  if (footer_exists) {
592
643
  footer_state = j1.getXhrDataState('#{{footer_id}}');
@@ -600,20 +651,23 @@ var j1 = (function (options) {
600
651
  if (footer_state == 'success') {
601
652
  // show the content|footer
602
653
  //
603
- $('#content').show();
654
+ $('#no_flicker').show();
604
655
  $('.{{footer}}').show();
605
656
 
606
657
  clearInterval(dependencies_met_footer_block_ready);
607
- }
658
+ } // END if footer
608
659
  }, 10);
609
- }
610
- }
611
- }, 10);
660
+ } // END pages w/o banners or panels
661
+
662
+ clearInterval(dependencies_met_page_ready);
663
+ } // END if pageVisible
664
+ }, 10); // END dependencies_met_page_ready
612
665
 
613
666
  j1.setState(curr_state);
614
667
  logger.debug('\n' + 'state: ' + j1.getState());
615
668
  }, detectTimeout);
616
669
  });
670
+ // END app mode
617
671
  } else {
618
672
  // web mode
619
673
  state = 'started';
@@ -621,10 +675,9 @@ var j1 = (function (options) {
621
675
  logger.info('\n' + 'page is being initialized');
622
676
  }
623
677
 
624
- state = 'started';
625
- logger.debug('\n' + 'state: ' + state);
626
- logger.info('\n' + 'page is being initialized');
627
-
678
+ // ---------------------------------------------------------------------
679
+ // WEB mode
680
+ // ---------------------------------------------------------------------
628
681
  if ( settings.scrollbar === 'false' ) {
629
682
  $('body').addClass('hide-scrollbar');
630
683
  $('html').addClass('hide-scrollbar-moz');
@@ -673,24 +726,29 @@ var j1 = (function (options) {
673
726
  // -----------------------------------------------------------------------
674
727
  // load|initialize page resources for block elements
675
728
  // NOTE: asynchronous calls should be rewitten to xhrData
676
- // NOTE: Find $('#content').hide() conterpart in themer adapter
729
+ // NOTE: Find $('#no_flicker').hide() conterpart in themes adapter
677
730
  // -----------------------------------------------------------------------
678
- var dependencies_met_page_ready = setInterval (function (options) {
679
- var pageState = $('#no_flicker').css("display");
680
- var pageVisible = (pageState == 'block') ? true : false;
681
- var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true: false;
682
- var banner_blocks = document.querySelectorAll('[id^="banner"]').length;
683
- var panel_blocks = document.querySelectorAll('[id^="panel"]').length;
684
- var footer_blocks = document.querySelectorAll('[id^="footer"]').length;
685
- var banners_exits = (banner_blocks > 0) ? true : false;
686
- var panels_exists = (panel_blocks > 0) ? true : false;
687
- var footer_exists = (footer_blocks > 0) ? true : false;
688
- var banner_state;
689
- var panel_state;
690
- var footer_state;
691
-
692
- if (j1.getState() === 'finished' && pageVisible && atticFinished) {
693
- clearInterval(dependencies_met_page_ready);
731
+ var dependencies_met_page_ready = setInterval (() => {
732
+ var pageState = $('#no_flicker').css("display");
733
+ var pageVisible = (pageState == 'block') ? true : false;
734
+ var j1CoreFinished = (j1.getState() == 'finished') ? true : false;
735
+ var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true: false;
736
+
737
+ if (pageVisible && atticFinished) {
738
+ startTimeModule = Date.now();
739
+
740
+ logger.info('\n' + 'page is being initialized');
741
+
742
+ logger.info('\n' + 'register monitors');
743
+ j1.registerMonitors();
744
+
745
+ banner_blocks = document.querySelectorAll('[id^="banner"]').length;
746
+ panel_blocks = document.querySelectorAll('[id^="panel"]').length;
747
+ footer_blocks = document.querySelectorAll('[id^="footer"]').length;
748
+ banners_exits = (banner_blocks > 0) ? true : false;
749
+ panels_exists = (panel_blocks > 0) ? true : false;
750
+ footer_exists = (footer_blocks > 0) ? true : false;
751
+
694
752
  logger.info('\n' + 'load block elements');
695
753
 
696
754
  if (banners_exits) {j1.initBanner(settings);}
@@ -700,7 +758,7 @@ var j1 = (function (options) {
700
758
  // process pages having banners or panels
701
759
  //
702
760
  if (banner_blocks || panel_blocks) {
703
- var dependencies_met_blocks_ready = setInterval (function (settings) {
761
+ var dependencies_met_blocks_ready = setInterval (() => {
704
762
  // check the footer if HTML portion is loaded successfully
705
763
  if (footer_exists) {
706
764
  footer_state = j1.getXhrDataState('#{{footer_id}}');
@@ -712,7 +770,7 @@ var j1 = (function (options) {
712
770
  // check bannern if HTML content is loaded successfully
713
771
  //
714
772
  if (banners_exits) {
715
- Object.entries(j1.xhrDataState).forEach(entry => {
773
+ Object.entries(j1.xhrDataState).forEach ((entry) => {
716
774
  const [key, value] = entry;
717
775
  if (key.includes('banner')) {
718
776
  banner_state = value;
@@ -726,7 +784,7 @@ var j1 = (function (options) {
726
784
  // check panels if HTML content is loaded successfully
727
785
  //
728
786
  if (panels_exists) {
729
- Object.entries(j1.xhrDataState).forEach(entry => {
787
+ Object.entries(j1.xhrDataState).forEach ((entry) => {
730
788
  const [key, value] = entry;
731
789
  if (key.includes('panel')) {
732
790
  panel_state = value;
@@ -740,18 +798,23 @@ var j1 = (function (options) {
740
798
  // show the content section if block content is available (CLS optimization)
741
799
  //
742
800
  if (banner_state == 'success' && panel_state == 'success' && footer_state == 'success') {
801
+
743
802
  // show the content|footer
744
803
  //
804
+ $('#no_flicker').show();
745
805
  $('#content').show();
746
806
  $('.{{footer}}').show();
747
807
 
748
808
  clearInterval(dependencies_met_blocks_ready);
749
809
  }
750
810
  }, 10);
811
+
812
+ clearInterval(dependencies_met_page_ready);
813
+ // END if banner_blocks || panel_blocks
751
814
  } else {
752
815
  // process pages w/o banners or panels
753
816
  //
754
- var dependencies_met_footer_block_ready = setInterval (function (settings) {
817
+ var dependencies_met_footer_block_ready = setInterval (() => {
755
818
  // check the footer if HTML portion is loaded successfully
756
819
  if (footer_exists) {
757
820
  footer_state = j1.getXhrDataState('#{{footer_id}}');
@@ -763,17 +826,25 @@ var j1 = (function (options) {
763
826
  // show the content section if footer is available (CLS optimization)
764
827
  //
765
828
  if (footer_state == 'success') {
829
+
766
830
  // show the content|footer
767
831
  //
832
+ $('#no_flicker').show();
768
833
  $('#content').show();
769
834
  $('.{{footer}}').show();
770
835
 
771
836
  clearInterval(dependencies_met_footer_block_ready);
772
- }
773
- }, 10);
774
- }
775
- }
776
- }, 10);
837
+ } // END if footer
838
+ }, 10); // END dependencies_met_footer_block_ready
839
+ } // END pages w/o banners or panels
840
+
841
+ endTimeModule = Date.now();
842
+ logger.info('\n' + 'page finalized successfully');
843
+ logger.info('\n' + 'page initializing time: ' + (endTimeModule-startTimeModule) + 'ms');
844
+
845
+ clearInterval(dependencies_met_page_ready);
846
+ } // END pageVisible
847
+ }, 10); // END dependencies_met_page_ready
777
848
 
778
849
  state = 'running';
779
850
  logger.debug('\n' + 'state: ' + state);
@@ -797,40 +868,36 @@ var j1 = (function (options) {
797
868
  // -----------------------------------------------------------------------
798
869
  //
799
870
  j1.finalizePage();
800
-
801
- },
871
+ }, // END init
802
872
 
803
873
  // -------------------------------------------------------------------------
804
874
  // initBanner()
805
875
  // AJAX fetcher to load and place all banner used for a page
806
876
  // -------------------------------------------------------------------------
807
- initBanner: function (options) {
808
- var logger = log4javascript.getLogger('j1.initBanner');
809
- var banner = [];
810
- var bannerOptions = [];
811
- var mod = 'j1';
812
- var logText;
877
+ initBanner: (options) => {
878
+ var logger = log4javascript.getLogger('j1.initBanner');
879
+ var banner = [];
880
+ var bannerOptions = [];
881
+ var mod = 'j1';
813
882
 
814
883
  {% comment %}
815
884
  Closure to pass additional data (e.g. #banner_id) to AJAX load callback
816
885
  See: http://stackoverflow.com/questions/939032/jquery-pass-more-parameters-into-callback
817
886
  -------------------------------------------------------------------------- {% endcomment %}
818
- var cb_load_closure = function(banner_id) {
819
- return function ( responseTxt, statusTxt, xhr ) {
820
- if ( statusTxt == 'success' ) {
821
- // var logger = log4javascript.getLogger('j1.adapter.xhrData');
822
- logText = '\n' + 'loading banner completed on id: ' +banner_id;
823
- logger.info(logText);
887
+ var cb_load_closure = (banner_id) => {
888
+ return (responseTxt, statusTxt, xhr) => {
889
+ if (statusTxt == 'success') {
890
+ logger.debug('\n' + 'loading banner completed on id: ' + banner_id);
824
891
  j1.setXhrDataState(banner_id, statusTxt);
825
892
  j1.setXhrDomState(banner_id, statusTxt);
826
- logger.info('\n' + 'XHR data loaded in the DOM: ' + banner_id);
893
+ logger.debug('\n' + 'XHR data loaded in the DOM: ' + banner_id);
827
894
  }
828
- if ( statusTxt == 'error' ) {
829
- logText = '\n' + 'loading banner failed on id: ' +banner_id+ ', error: ' + xhr.status + ': ' + xhr.statusText;
895
+ if (statusTxt == 'error') {
896
+ logText = '\n' + 'loading banner failed on id: ' +banner_id + ', error: ' + xhr.status + ': ' + xhr.statusText;
830
897
  logger.error(logText);
831
898
  j1.setXhrDataState(banner_id, statusTxt);
832
899
  j1.setXhrDomState(banner_id, statusTxt);
833
- // Set|Log status
900
+
834
901
  state = 'failed';
835
902
  logger.error('\n' + 'state: ' + state);
836
903
  }
@@ -904,20 +971,21 @@ var j1 = (function (options) {
904
971
  } else {
905
972
  logText = '\n' + 'no banner found in site';
906
973
  logger.debug(logText);
974
+
907
975
  return false;
908
976
  }
977
+
909
978
  return true;
910
- },
979
+ }, // END initBanner
911
980
 
912
981
  // -------------------------------------------------------------------------
913
982
  // initPanel()
914
983
  // AJAX fetcher to load and place all panel used for a page
915
984
  // -------------------------------------------------------------------------
916
- initPanel: function ( options ) {
917
- var logger = log4javascript.getLogger('j1.initPanel');
918
- var panel = [];
919
- var mod = 'j1';
920
- var logText;
985
+ initPanel: (options) => {
986
+ var logger = log4javascript.getLogger('j1.initPanel');
987
+ var panel = [];
988
+ var mod = 'j1';
921
989
 
922
990
  {% comment %} Closure to pass additional data (e.g. panel_id) to AJAX load callback
923
991
  See: http://stackoverflow.com/questions/939032/jquery-pass-more-parameters-into-callback
@@ -927,22 +995,20 @@ var j1 = (function (options) {
927
995
  strategy for MutationObserver callbacks to monitor DOM changes
928
996
  needs to be checked if multiple containers are changed in a row
929
997
  -------------------------------------------------------------------------- {% endcomment %}
930
- var cb_load_closure = function(panel_id) {
931
- return function ( responseTxt, statusTxt, xhr ) {
932
- var logger = log4javascript.getLogger('j1.adapter.xhrData');
933
- if ( statusTxt == 'success' ) {
934
- logText = '\n' + 'loading panel completed on id: ' +panel_id;
935
- logger.info(logText);
998
+ var cb_load_closure = (panel_id) => {
999
+ return (responseTxt, statusTxt, xhr) => {
1000
+ if (statusTxt == 'success') {
1001
+ logger.debug('\n' + 'loading panel completed on id: ' + panel_id);
936
1002
  j1.setXhrDataState(panel_id, statusTxt);
937
1003
  j1.setXhrDomState(panel_id, statusTxt);
938
- logger.info('\n' + 'XHR data loaded in the DOM: ' + panel_id);
1004
+ logger.debug('\n' + 'XHR data loaded in the DOM: ' + panel_id);
939
1005
  }
940
- if ( statusTxt == 'error' ) {
941
- logText = '\n' + 'loading panel failed on id: ' +panel_id+ ', error ' + xhr.status + ': ' + xhr.statusText;
1006
+ if (statusTxt == 'error') {
1007
+ logText = '\n' + 'loading panel failed on id: ' + panel_id + ', error ' + xhr.status + ': ' + xhr.statusText;
942
1008
  logger.error(logText);
943
1009
  j1.setXhrDataState(panel_id, statusTxt);
944
1010
  j1.setXhrDomState(panel_id, statusTxt);
945
- // Set|Log status
1011
+
946
1012
  state = 'error';
947
1013
  logger.error('\n' + 'state: ' + state);
948
1014
  }
@@ -1009,37 +1075,32 @@ var j1 = (function (options) {
1009
1075
  } else {
1010
1076
  logText = '\n' + 'no panel found in site';
1011
1077
  logger.debug(logText);
1078
+
1012
1079
  return false;
1013
1080
  }
1081
+
1014
1082
  return true;
1015
- },
1083
+ }, // END initPanel
1016
1084
 
1017
1085
  // -------------------------------------------------------------------------
1018
1086
  // initFooter()
1019
1087
  // AJAX fetcher to load and place the footer used for a page
1020
1088
  // -------------------------------------------------------------------------
1021
- initFooter: function ( options ) {
1022
- var logger = log4javascript.getLogger('j1.initFooter');
1023
- var mod = 'j1';
1024
- var logText;
1025
-
1026
- logText = '\n' + 'loading footer started';
1027
- logger.info(logText);
1089
+ initFooter: (options) => {
1090
+ var logger = log4javascript.getLogger('j1.initFooter');
1091
+ var mod = 'j1';
1028
1092
 
1029
- var cb_load_closure = function(footer_id) {
1030
- return function ( responseTxt, statusTxt, xhr ) {
1031
- var logger = log4javascript.getLogger('j1.adapter.xhrData');
1032
- if ( statusTxt == 'success' ) {
1033
- logText = '\n' + 'footer loaded successfully on id: ' + footer_id;
1034
- logger.info(logText);
1093
+ var cb_load_closure = (footer_id) => {
1094
+ return (responseTxt, statusTxt, xhr) => {
1095
+ if (statusTxt == 'success') {
1096
+ logger.debug('\n' + 'footer loaded successfully on id: ' + footer_id);
1035
1097
  j1.setXhrDataState(footer_id, statusTxt);
1036
1098
  j1.setXhrDomState(footer_id, statusTxt);
1037
- logger.info('\n' + 'XHR data loaded in the DOM: ' + footer_id);
1038
- logText = '\n' + 'initialization finished';
1039
- logger.info(logText);
1099
+ logger.debug('\n' + 'XHR data loaded in the DOM: ' + footer_id);
1100
+ logger.debug('\n' + 'initialization footer finished');
1040
1101
  }
1041
- if ( statusTxt == 'error' ) {
1042
- logText = '\n' + 'loading footer failed on id: ' +footer_id+ ', error ' + xhr.status + ': ' + xhr.statusText;
1102
+ if (statusTxt == 'error') {
1103
+ logText = '\n' + 'loading footer failed on id: ' + footer_id + ', error ' + xhr.status + ': ' + xhr.statusText;
1043
1104
  logger.error(logText);
1044
1105
  j1.setXhrDataState(footer_id, statusTxt);
1045
1106
  j1.setXhrDomState(footer_id, statusTxt);
@@ -1047,26 +1108,28 @@ var j1 = (function (options) {
1047
1108
  // Set|Log status
1048
1109
  state = 'failed';
1049
1110
  logger.error('\n' + 'state: ' + state);
1050
- logText = '\n' + 'initialization finished';
1051
- logger.info(logText);
1111
+ logger.error('\n' + 'initialization footer failed');
1052
1112
  }
1053
1113
  };
1054
1114
  };
1055
1115
 
1116
+ logger.info('\n' + 'loading footer on id: {{footer_id}}');
1117
+
1056
1118
  var id = '#' + '{{footer_id}}';
1057
1119
  var selector = $(id);
1058
1120
  if (selector.length) {
1059
1121
  var footer_data_path = '{{footer_data_path}} ' + id;
1060
1122
  selector.load(footer_data_path, cb_load_closure(id));
1061
1123
  } else {
1062
- logText = '\n' + 'data not loaded';
1063
- logger.debug(logText);
1124
+ logger.debug('\n' + 'data not loaded');
1064
1125
  j1.setXhrDataState(id, 'not loaded');
1065
1126
  j1.setXhrDomState(id, 'pending');
1127
+
1066
1128
  return false;
1067
1129
  }
1130
+
1068
1131
  return true;
1069
- },
1132
+ }, // END initFooter
1070
1133
 
1071
1134
  // -------------------------------------------------------------------------
1072
1135
  // finalizePage
@@ -1078,9 +1141,8 @@ var j1 = (function (options) {
1078
1141
  // To make correct data sure for APP mode, a status request is done
1079
1142
  // to load the current state from the middleware (skipped in WEB mode)
1080
1143
  // -------------------------------------------------------------------------
1081
- finalizePage: function (options) {
1082
- var logger = log4javascript.getLogger('j1.adapter.finalizePage');
1083
- // var flickerTimeout = {{template_config.flicker_timeout}};
1144
+ finalizePage: (options) => {
1145
+ var logger = log4javascript.getLogger('j1.finalizePage');
1084
1146
  var url = new liteURL(window.location.href);
1085
1147
  var baseUrl = url.origin;
1086
1148
  var secure = (url.protocol.includes('https')) ? true : false;
@@ -1114,7 +1176,7 @@ var j1 = (function (options) {
1114
1176
  var personalization = (meta_personalization === 'true') ? true: false;
1115
1177
 
1116
1178
  const cb = (list) => {
1117
- list.getEntries().forEach(entry => {
1179
+ list.getEntries().forEach ((entry) => {
1118
1180
  console.log(entry);
1119
1181
  });
1120
1182
  }
@@ -1131,7 +1193,8 @@ var j1 = (function (options) {
1131
1193
  logger.info(logText);
1132
1194
 
1133
1195
  if (j1.appDetected()) {
1134
- // app mode
1196
+ // ---------------------------------------------------------------------
1197
+ // APP mode
1135
1198
  // ---------------------------------------------------------------------
1136
1199
  logger.info('\n' + 'mode detected: app');
1137
1200
 
@@ -1193,7 +1256,7 @@ var j1 = (function (options) {
1193
1256
  $('head').append(body_animation_fadein);
1194
1257
  }
1195
1258
 
1196
- // display the page loaded is managed by module "themer"
1259
+ // display the page loaded is managed by module "themes"
1197
1260
  // $('#no_flicker').css('display', 'block');
1198
1261
  // $('#no_flicker').show();
1199
1262
 
@@ -1257,7 +1320,7 @@ var j1 = (function (options) {
1257
1320
  $('#quickLinksSignInOutButton').css('display', 'block');
1258
1321
  }
1259
1322
 
1260
- // TODO: should MOVED to Themer ???
1323
+ // TODO: should MOVED to themes ???
1261
1324
  // jadams, 2021-07-25: hide|show themes menu on cookie consent
1262
1325
  // (analysis|personalization) settings. BootSwatch is a 3rd party
1263
1326
  // is using e.g GA. Because NO control is possible on 3rd parties,
@@ -1288,11 +1351,14 @@ var j1 = (function (options) {
1288
1351
  j1.core.navigator.updateSidebar(current_user_data);
1289
1352
 
1290
1353
  // initiate smooth scroller if page is ready and visible
1291
- var dependencies_met_page_ready = setInterval (function (options) {
1292
- var pageState = $('#no_flicker').css("display");
1293
- var pageVisible = (pageState == 'block') ? true: false;
1294
- if ( j1.getState() === 'finished' && pageVisible ) {
1295
- setTimeout (function() {
1354
+ var dependencies_met_page_ready = setInterval (() => {
1355
+ var pageState = $('#no_flicker').css("display");
1356
+ var pageVisible = (pageState == 'block') ? true: false;
1357
+ var j1CoreFinished = (j1.getState() == 'finished') ? true : false;
1358
+ var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true: false;
1359
+
1360
+ if (j1CoreFinished && pageVisible && atticFinished) {
1361
+ setTimeout(() => {
1296
1362
  // scroll to an anchor in current page if given in URL
1297
1363
  j1.scrollToAnchor();
1298
1364
  }, {{template_config.page_on_load_timeout}});
@@ -1309,11 +1375,14 @@ var j1 = (function (options) {
1309
1375
  logText = '\n' + 'page finalized successfully';
1310
1376
  logger.info(logText);
1311
1377
 
1378
+ endTimeModule = Date.now();
1379
+ logger.info('\n' + 'page initializing time: ' + (endTimeModule-startTimeModule) + 'ms');
1380
+
1312
1381
  });
1313
1382
  } else {
1314
- // web mode
1315
1383
  // ---------------------------------------------------------------------
1316
-
1384
+ // WEB mode
1385
+ // ---------------------------------------------------------------------
1317
1386
  logger.info('\n' + 'state: finished');
1318
1387
  logger.info('\n' + 'page initialization: finished');
1319
1388
 
@@ -1338,7 +1407,7 @@ var j1 = (function (options) {
1338
1407
  $('head').append(body_animation_fadein);
1339
1408
  }
1340
1409
 
1341
- // display the page loaded is managed by module "themer"
1410
+ // display the page loaded is managed by module "themes"
1342
1411
  // $('#no_flicker').css('display', 'block');
1343
1412
  // $('#no_flicker').show();
1344
1413
 
@@ -1424,13 +1493,13 @@ var j1 = (function (options) {
1424
1493
  $('#quickLinksCookieButton').css('display', 'none');
1425
1494
  }
1426
1495
 
1427
- // TODO: should MOVED to Themer ???
1496
+ // TODO: should MOVED to themes ???
1428
1497
  // jadams, 2021-07-25: hide|show themes menu on cookie consent
1429
1498
  // (analysis|personalization) settings. BootSwatch is a 3rd party
1430
1499
  // is using e.g GA. Because NO control is possible on 3rd parties,
1431
1500
  // for GDPR compliance, themes feature may disabled on
1432
1501
  // privacy settings
1433
- if (!user_consent.personalization) {
1502
+ if (!user_consent.personalization) {
1434
1503
  logger.debug('\n' + 'disable themes feature because of privacy settings');
1435
1504
  logger.debug('\n' + 'personalization not allowed, privacy settings for personalization: ' + user_consent.personalization);
1436
1505
  $("#themes_menu").hide();
@@ -1456,6 +1525,7 @@ var j1 = (function (options) {
1456
1525
  if (typeof template_previous_version == 'undefined') template_previous_version = 'na';
1457
1526
  logger.warn('\n' + 'template version detected as changed');
1458
1527
  logger.warn('\n' + 'template version previous|current: ' + template_previous_version + '|' + template_version);
1528
+
1459
1529
  // Update the user_state cookie
1460
1530
  // TODO: replace theme_version by template_version as they
1461
1531
  // are alwas the same
@@ -1478,18 +1548,21 @@ var j1 = (function (options) {
1478
1548
  j1.core.navigator.updateSidebar(current_user_data);
1479
1549
 
1480
1550
  // initiate smooth scroller if page is ready and visible
1481
- var dependencies_met_page_ready = setInterval (function (options) {
1482
- var pageState = $('#no_flicker').css("display");
1483
- var pageVisible = (pageState == 'block') ? true: false;
1484
- if ( j1.getState() === 'finished' && pageVisible ) {
1485
- setTimeout (function() {
1551
+ var dependencies_met_page_ready = setInterval (() => {
1552
+ var pageState = $('#no_flicker').css("display");
1553
+ var pageVisible = (pageState == 'block') ? true: false;
1554
+ var j1CoreFinished = (j1.getState() === 'finished') ? true : false;
1555
+ var atticFinished = (j1.adapter.attic.getState() == 'finished') ? true: false;
1556
+
1557
+ if (j1CoreFinished && pageVisible && atticFinished) {
1558
+ setTimeout(() => {
1486
1559
  // scroll to an anchor in current page if given in URL
1487
1560
  j1.scrollToAnchor();
1488
1561
  }, {{template_config.page_on_load_timeout}});
1489
1562
 
1490
1563
  clearInterval(dependencies_met_page_ready);
1491
- }
1492
- }, 10);
1564
+ } // END if pageVisible
1565
+ }, 10); // END dependencies_met_page_ready
1493
1566
 
1494
1567
  // set|log status
1495
1568
  state = 'finished';
@@ -1498,12 +1571,11 @@ var j1 = (function (options) {
1498
1571
  logger.info(logText);
1499
1572
  logText = '\n' + 'page finalized successfully';
1500
1573
  logger.info(logText);
1501
- }
1502
- },
1503
1574
 
1504
- // -------------------------------------------------------------------------
1505
- // Helper functions
1506
- // -------------------------------------------------------------------------
1575
+ endTimeModule = Date.now();
1576
+ logger.info('\n' + 'page initializing time: ' + (endTimeModule-startTimeModule) + 'ms');
1577
+ }
1578
+ }, // END finalizePage
1507
1579
 
1508
1580
  // -------------------------------------------------------------------------
1509
1581
  // mergeData()
@@ -1520,15 +1592,15 @@ var j1 = (function (options) {
1520
1592
  }
1521
1593
  }
1522
1594
  return o;
1523
- },
1595
+ }, // END mergeData
1524
1596
 
1525
1597
  // -------------------------------------------------------------------------
1526
1598
  // getPrevPage()
1527
1599
  // Returns the last vistited page
1528
1600
  // -------------------------------------------------------------------------
1529
- getPrevPage: function () {
1601
+ getPrevPage: () => {
1530
1602
  return previous_page;
1531
- },
1603
+ }, // END getPrevPage
1532
1604
 
1533
1605
  // -------------------------------------------------------------------------
1534
1606
  // getLanguage()
@@ -1536,26 +1608,23 @@ var j1 = (function (options) {
1536
1608
  // See:
1537
1609
  // https://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference
1538
1610
  // -------------------------------------------------------------------------
1539
- getLanguage: function () {
1611
+ getLanguage: () => {
1540
1612
  var language = navigator.languages ? navigator.languages[0] : (navigator.language || navigator.userLanguage);
1541
- },
1613
+ }, // END getLanguage
1542
1614
 
1543
1615
  // -------------------------------------------------------------------------
1544
1616
  // getTemplateVersion()
1545
1617
  // Returns the template version taken from site config (_config.yml)
1546
1618
  // -------------------------------------------------------------------------
1547
- getTemplateVersion: function () {
1619
+ getTemplateVersion: () => {
1548
1620
  return '{{template_version}}';
1549
- },
1621
+ }, // END getTemplateVersion
1550
1622
 
1551
1623
  // -------------------------------------------------------------------------
1552
1624
  // getScrollOffset()
1553
1625
  // Calculate offset for a correct (smooth) scroll position
1554
1626
  // -------------------------------------------------------------------------
1555
- getScrollOffset: function (offsetCorrection) {
1556
- // var scrollOffset;
1557
- // var offsetCorrection = 0;
1558
-
1627
+ getScrollOffset: (offsetCorrection) => {
1559
1628
  var $pagehead = $('.attic');
1560
1629
  var $navbar = $('#navigator_nav_navbar');
1561
1630
  var $adblock = $('#adblock');
@@ -1578,7 +1647,7 @@ var j1 = (function (options) {
1578
1647
  : -1*(n + a + f) + h + offsetCorrection;
1579
1648
 
1580
1649
  return scrollOffset;
1581
- },
1650
+ }, // END getScrollOffset
1582
1651
 
1583
1652
  // -------------------------------------------------------------------------
1584
1653
  // scrollTo()
@@ -1587,7 +1656,7 @@ var j1 = (function (options) {
1587
1656
  // TOCCER module
1588
1657
  // NOTE: crollTo() is triggered by 'onDocumentHeigthChange'
1589
1658
  // -------------------------------------------------------------------------
1590
- scrollTo: function (offset) {
1659
+ scrollTo: (offset) => {
1591
1660
  var logger = log4javascript.getLogger('j1.scrollTo');
1592
1661
  var anchor = window.location.href.split('#')[1];
1593
1662
  var anchor_id = (typeof anchor !== 'undefined') && (anchor != '') ? '#' + anchor : false;
@@ -1630,26 +1699,27 @@ var j1 = (function (options) {
1630
1699
  logger.info('\n' + 'bound click event to "#", suppress default action');
1631
1700
  $(window).scrollTop($(window).scrollTop()+1);
1632
1701
  $(window).scrollTop($(window).scrollTop()-1);
1702
+
1633
1703
  return false;
1634
1704
  }
1635
- },
1705
+ }, // END scrollTo
1636
1706
 
1637
1707
  // -------------------------------------------------------------------------
1638
1708
  // authEnabled()
1639
1709
  // Returns the state of the authentication module
1640
1710
  // -------------------------------------------------------------------------
1641
- authEnabled: function () {
1711
+ authEnabled: () => {
1642
1712
  var logger = log4javascript.getLogger('j1.authentication');
1643
1713
  var authEnabled = {{authentication_options.j1_auth.enabled}};
1644
1714
 
1645
1715
  return authEnabled;
1646
- },
1716
+ }, // END authEnabled
1647
1717
 
1648
1718
  // -------------------------------------------------------------------------
1649
1719
  // appDetected()
1650
1720
  // Returns true if a web session cookie exists
1651
1721
  // -------------------------------------------------------------------------
1652
- appDetected: function () {
1722
+ appDetected: () => {
1653
1723
  var user_session;
1654
1724
  var cookieExists = j1.existsCookie(cookie_names.user_session);
1655
1725
  var detected = false;
@@ -1661,16 +1731,17 @@ var j1 = (function (options) {
1661
1731
  // detected = 'unknown';
1662
1732
  detected = false;
1663
1733
  }
1734
+
1664
1735
  return detected;
1665
- },
1736
+ }, // END appDetected
1666
1737
 
1667
1738
  // -------------------------------------------------------------------------
1668
1739
  // loadHTML()
1669
1740
  // Load HTML data asychronously using XHR|jQuery on an element (e.g. <div>)
1670
1741
  // specified by xhr_container_id, xhr_data_path (options)
1671
1742
  // -------------------------------------------------------------------------
1672
- loadHTML: function (options, mod, status) {
1673
- var logger = log4javascript.getLogger('j1.adapter.loadHTML');
1743
+ loadHTML: (options, mod, status) => {
1744
+ var logger = log4javascript.getLogger('j1.loadHTML');
1674
1745
  var selector = $('#' + options.xhr_container_id);
1675
1746
  var state = status;
1676
1747
  var observer_options = {
@@ -1680,30 +1751,29 @@ var j1 = (function (options) {
1680
1751
  subtree: true
1681
1752
  };
1682
1753
  var observer;
1683
- var logText;
1684
1754
 
1685
- var cb_load_closure = function(mod, id) {
1686
- return function (responseTxt, statusTxt, xhr) {
1687
- var logger = log4javascript.getLogger('j1.adapter.loadHTML');
1688
- if ( statusTxt === 'success' ) {
1755
+ var cb_load_closure = (mod, id) => {
1756
+ return (responseTxt, statusTxt, xhr) => {
1757
+ if (statusTxt === 'success') {
1689
1758
  j1.setXhrDataState(id, statusTxt);
1690
1759
  j1.setXhrDomState(id, 'pending');
1691
1760
 
1692
- logText = '\n' + 'data loaded successfully on id: ' +id;
1693
- logger.debug(logText);
1761
+ logger.debug('\n' + 'data loaded successfully on id: ' +id);
1762
+
1694
1763
  state = true;
1695
1764
  }
1696
1765
  if ( statusTxt === 'error' ) {
1697
1766
  // jadams, 2020-07-21: to be checked why id could be UNDEFINED
1698
1767
  if (typeof(id) != "undefined") {
1699
1768
  state = 'failed';
1700
- logger.info('\n' + 'set state for ' +mod+ ' to: ' + state);
1769
+ logger.debug('\n' + 'set state for ' +mod+ ' to: ' + state);
1701
1770
  // jadams, 2020-07-21: intermediate state should DISABLED
1702
1771
  // executeFunctionByName(mod + '.setState', window, state);
1703
1772
  j1.setXhrDataState(id, statusTxt);
1704
1773
  j1.setXhrDomState(id, 'pending');
1705
1774
  logText = '\n' + 'loading data failed on id: ' +id+ ', error ' + xhr.status + ': ' + xhr.statusText;
1706
1775
  logger.error(logText);
1776
+
1707
1777
  state = false;
1708
1778
  }
1709
1779
  }
@@ -1713,9 +1783,9 @@ var j1 = (function (options) {
1713
1783
  // see: https://stackoverflow.com/questions/20420577/detect-added-element-to-dom-with-mutation-observer
1714
1784
  //
1715
1785
  var html_data_path = options.xhr_data_path + ' #' + options.xhr_data_element;
1716
- var id = '#' + options.xhr_container_id;
1717
- var container = '#' + options.xhr_container_id + '_container';
1718
- var $selector = $(id);
1786
+ var id = '#' + options.xhr_container_id;
1787
+ var container = '#' + options.xhr_container_id + '_container';
1788
+ var $selector = $(id);
1719
1789
 
1720
1790
  // NOTE: Unclear why some pages (e.g. about/site) affected (fam button).
1721
1791
  // All pages should have FRONTMATTER defaults (by _config.yml) setting
@@ -1723,14 +1793,14 @@ var j1 = (function (options) {
1723
1793
 
1724
1794
  // failsafe - prevent XHR load errors
1725
1795
  if (options.xhr_data_element !== '') {
1726
- logger.info('\n' + 'XHR data element found: ' + options.xhr_data_element);
1796
+ logger.debug('\n' + 'XHR data element found: ' + options.xhr_data_element);
1727
1797
  } else {
1728
1798
  logger.debug('\n' + 'no XHR data element found, loading data aborted');
1729
1799
  return;
1730
1800
  }
1731
1801
 
1732
- if ( $selector.length ) {
1733
- $selector.load( html_data_path, cb_load_closure( mod, id ) );
1802
+ if ($selector.length) {
1803
+ $selector.load(html_data_path, cb_load_closure( mod, id ));
1734
1804
 
1735
1805
  var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
1736
1806
  var xhrObserver = new MutationObserver (mutationHandler);
@@ -1755,39 +1825,37 @@ var j1 = (function (options) {
1755
1825
  } else {
1756
1826
  // jadams, 2020-07-21: To be clarified why a id is "undefined"
1757
1827
  // failsafe - prevent XHR load errors
1758
- if (id != '#undefined') {
1759
- logText = '\n' + 'data not loaded on id:' + id;
1760
- logger.debug(logText);
1828
+ if (id !== '#undefined') {
1761
1829
  j1.setXhrDataState(id, 'not loaded');
1762
- j1.setXhrDomState(id, 'not loaded');
1763
- // Set processing state to 'finished' to complete module load
1764
- state = 'finished';
1765
- logger.debug('\n' + 'state: ' + state);
1830
+ j1.setXhrDomState(id, 'not loaded')
1831
+
1766
1832
  // jadams, 2020-07-21: intermediate state should DISABLED
1767
1833
  // executeFunctionByName(mod + '.setState', window, state);
1768
- state = false;
1834
+ // state = false;
1769
1835
  }
1770
1836
  }
1837
+
1771
1838
  return state;
1772
- },
1839
+ }, // END loadHTML
1773
1840
 
1774
1841
  // -------------------------------------------------------------------------
1775
1842
  // loadJS()
1776
1843
  // Load JS data asychronously using jQuery (XHR)
1777
1844
  // -------------------------------------------------------------------------
1778
- loadJS: function (options, mod, status) {
1779
- var logger = log4javascript.getLogger('j1.adapter.loadJS');
1845
+ loadJS: (options, mod, status) => {
1846
+ var logger = log4javascript.getLogger('j1.loadJS');
1780
1847
  var state = status;
1781
1848
  var logText;
1782
1849
 
1783
1850
  var cb_load_closure = function(mod, id) {
1784
1851
  return function (responseTxt, statusTxt, xhr) {
1785
- var logger = log4javascript.getLogger('j1.adapter.loadJS');
1852
+ var logger = log4javascript.getLogger('j1.loadJS');
1786
1853
  if ( statusTxt === 'success' ) {
1787
1854
  j1.setXhrDataState(id, statusTxt);
1788
1855
 
1789
1856
  logText = '\n' + 'data loaded successfully for: ' +id;
1790
1857
  logger.info(logText);
1858
+
1791
1859
  state = true;
1792
1860
  }
1793
1861
  if ( statusTxt === 'error' ) {
@@ -1796,6 +1864,7 @@ var j1 = (function (options) {
1796
1864
  j1.setXhrDataState(id, statusTxt);
1797
1865
  logText = '\n' + 'loading data failed for: ' +id+ ', error ' + xhr.status + ': ' + xhr.statusText;
1798
1866
  logger.error(logText);
1867
+
1799
1868
  state = false;
1800
1869
  }
1801
1870
  };
@@ -1808,17 +1877,17 @@ var j1 = (function (options) {
1808
1877
  });
1809
1878
 
1810
1879
  return state;
1811
- },
1880
+ }, // END loadJS
1812
1881
 
1813
1882
  // -------------------------------------------------------------------------
1814
1883
  // removeRessource (Vanilla JS)
1815
1884
  // -------------------------------------------------------------------------
1816
- removeRessource: function (filename, filetype) {
1885
+ removeRessource: (filename, filetype) => {
1817
1886
  // determine element type to create nodelist from
1818
- var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none"
1887
+ var targetelement = (filetype === "js") ? "script" : (filetype === "css") ? "link" : "none";
1819
1888
  // determine corresponding attribute to test for
1820
- var targetattr=(filetype=="js")? "src" : (filetype=="css")? "href" : "none"
1821
- var allsuspects=document.getElementsByTagName(targetelement)
1889
+ var targetattr = (filetype === "js") ? "src" : (filetype === "css") ? "href" : "none";
1890
+ var allsuspects = document.getElementsByTagName(targetelement)
1822
1891
 
1823
1892
  // search backwards within nodelist for matching elements to remove
1824
1893
  // remove element by calling parentNode.removeChild()
@@ -1826,13 +1895,13 @@ var j1 = (function (options) {
1826
1895
  if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1)
1827
1896
  allsuspects[i].parentNode.removeChild(allsuspects[i])
1828
1897
  }
1829
- },
1898
+ }, // END removeRessource
1830
1899
 
1831
1900
  // -------------------------------------------------------------------------
1832
1901
  // subdomain()
1833
1902
  // Returns true|false if a subdomain is used for a given URL
1834
1903
  // -------------------------------------------------------------------------
1835
- subdomain: function (url) {
1904
+ subdomain: (url) => {
1836
1905
  // See: https://snipplr.com/view/5449/check-if-a-url-contains-a-subdomain
1837
1906
 
1838
1907
  // IF THERE, REMOVE WHITE SPACE FROM BOTH ENDS
@@ -1869,7 +1938,7 @@ var j1 = (function (options) {
1869
1938
  // -------------------------------------------------------------------------
1870
1939
  // readCookie (Vanilla JS)
1871
1940
  // -------------------------------------------------------------------------
1872
- readCookie: function (name) {
1941
+ readCookie: (name) => {
1873
1942
  var data;
1874
1943
  var data_json;
1875
1944
  var cookieExists = j1.existsCookie(name);
@@ -1886,7 +1955,7 @@ var j1 = (function (options) {
1886
1955
  } else {
1887
1956
  return false;
1888
1957
  }
1889
- },
1958
+ }, // END readCookie
1890
1959
 
1891
1960
  // -------------------------------------------------------------------------
1892
1961
  // writeCookie (Cookie lib)
@@ -1920,7 +1989,7 @@ var j1 = (function (options) {
1920
1989
  // must now also specify the Secure attribute (they require a secure
1921
1990
  // context/HTTPS).
1922
1991
  // -------------------------------------------------------------------------
1923
- writeCookie: function (options /*name, data, [path, expires, domain, samesite, http_only, secure]*/) {
1992
+ writeCookie: (options /*name, data, [path, expires, domain, samesite, http_only, secure]*/) => {
1924
1993
  var date = new Date();
1925
1994
  var timestamp_now = date.toISOString();
1926
1995
  var url = new liteURL(window.location.href);
@@ -1945,7 +2014,7 @@ var j1 = (function (options) {
1945
2014
 
1946
2015
  // Failsafe: if 'None' is given for samesite in non-secure environments
1947
2016
  // -----------------------------------------------------------------------
1948
- if (settings.samesite == 'None' && !settings.secure) {
2017
+ if (settings.samesite === 'None' && !settings.secure) {
1949
2018
  settings.samesite = 'Lax';
1950
2019
  }
1951
2020
 
@@ -1975,7 +2044,7 @@ var j1 = (function (options) {
1975
2044
 
1976
2045
  // set domain used by cookies
1977
2046
  if (settings.domain) {
1978
- if (settings.domain == 'auto') {
2047
+ if (settings.domain === 'auto') {
1979
2048
  stringifiedAttributes += '; ' + 'Domain=' + auto_domain;
1980
2049
  } else {
1981
2050
  stringifiedAttributes += '; ' + 'Domain=' + settings.domain;
@@ -1984,7 +2053,7 @@ var j1 = (function (options) {
1984
2053
 
1985
2054
  // set secure attribute
1986
2055
  if (settings.secure) {
1987
- if (settings.secure == 'auto') {
2056
+ if (settings.secure === 'auto') {
1988
2057
  stringifiedAttributes += '; ' + 'Secure=' + auto_secure;
1989
2058
  } else {
1990
2059
  stringifiedAttributes += '; ' + 'Secure=' + settings.secure;
@@ -2000,7 +2069,7 @@ var j1 = (function (options) {
2000
2069
  } else {
2001
2070
  return false;
2002
2071
  }
2003
- },
2072
+ }, // END writeCookie
2004
2073
 
2005
2074
  // -------------------------------------------------------------------------
2006
2075
  // findCookie (Vanilla JS)
@@ -2011,17 +2080,17 @@ var j1 = (function (options) {
2011
2080
  // -------------------------------------------------------------------------
2012
2081
  // See: https://stackoverflow.com/questions/52287989/javascript-cookie-remove-or-delete-with-regex-regular-expression
2013
2082
  // -------------------------------------------------------------------------
2014
- findCookie: function (name) {
2083
+ findCookie: (name) => {
2015
2084
  var rCookie=[];
2016
2085
  document.cookie.replace(new RegExp(name + '[^= ]*', 'g'), function(a){ rCookie.push(a.trim()); });
2017
2086
 
2018
2087
  return rCookie;
2019
- },
2088
+ }, // END findCookie
2020
2089
 
2021
2090
  // -------------------------------------------------------------------------
2022
2091
  // removeCookie (Vanilla JS)
2023
2092
  // -------------------------------------------------------------------------
2024
- removeCookie: function (options /*name, [path, domain]*/) {
2093
+ removeCookie: (options /*name, [path, domain]*/) => {
2025
2094
  var url = new liteURL(window.location.href);
2026
2095
  var baseUrl = url.origin;;
2027
2096
  var hostname = url.hostname;
@@ -2047,16 +2116,16 @@ var j1 = (function (options) {
2047
2116
 
2048
2117
  // set domain used by cookies
2049
2118
  if (settings.domain) {
2050
- if (settings.domain == 'auto') {
2119
+ if (settings.domain === 'auto') {
2051
2120
  stringifiedAttributes += '; ' + 'Domain=' + auto_domain;
2052
- } else if (typeof settings.domain == 'string') {
2121
+ } else if (typeof settings.domain === 'string') {
2053
2122
  stringifiedAttributes += '; ' + 'Domain=' + settings.domain;
2054
2123
  }
2055
2124
  }
2056
2125
 
2057
2126
  // set secure attribute
2058
2127
  if (settings.secure) {
2059
- if (settings.secure == 'auto') {
2128
+ if (settings.secure === 'auto') {
2060
2129
  stringifiedAttributes += '; ' + 'Secure=' + auto_secure;
2061
2130
  } else {
2062
2131
  stringifiedAttributes += '; ' + 'Secure=' + settings.secure;
@@ -2071,7 +2140,7 @@ var j1 = (function (options) {
2071
2140
  } else {
2072
2141
  return false;
2073
2142
  }
2074
- },
2143
+ }, // END removeCookie
2075
2144
 
2076
2145
  // -------------------------------------------------------------------------
2077
2146
  // expireCookie (Vanilla JS)
@@ -2094,7 +2163,7 @@ var j1 = (function (options) {
2094
2163
  // to already KNOWN values.
2095
2164
  //
2096
2165
  // -------------------------------------------------------------------------
2097
- expireCookie: function (options /*name [,path, samesite, secure]*/) {
2166
+ expireCookie: (options /*name [,path, samesite, secure]*/) => {
2098
2167
  var url = new liteURL(window.location.href);
2099
2168
  var baseUrl = url.origin;;
2100
2169
  var hostname = url.hostname;
@@ -2119,7 +2188,7 @@ var j1 = (function (options) {
2119
2188
 
2120
2189
  // set domain used by cookies
2121
2190
  if (settings.domain) {
2122
- if (settings.domain == 'auto') {
2191
+ if (settings.domain === 'auto') {
2123
2192
  stringifiedAttributes += '; ' + 'Domain=' + auto_domain;
2124
2193
  } else if (typeof settings.domain == 'string') {
2125
2194
  if (settings.domain !== 'false') {
@@ -2130,18 +2199,18 @@ var j1 = (function (options) {
2130
2199
 
2131
2200
  // set secure attribute
2132
2201
  if (settings.secure) {
2133
- if (settings.secure == 'auto') {
2202
+ if (settings.secure === 'auto') {
2134
2203
  stringifiedAttributes += '; ' + 'Secure=' + auto_secure;
2135
2204
  } else {
2136
2205
  stringifiedAttributes += '; ' + 'Secure=' + settings.secure;
2137
2206
  }
2138
2207
  }
2139
2208
 
2140
- var dc = document.cookie; // all cookies in page
2141
- var end = dc.length; // default to end of the string
2142
- var prefix = settings.name + '='; // search string for the cookie name given
2143
- var begin = dc.indexOf('; ' + prefix);
2144
- var content = '';
2209
+ var dc = document.cookie; // all cookies in page
2210
+ var end = dc.length; // default to end of the string
2211
+ var prefix = settings.name + '='; // search string for the cookie name given
2212
+ var begin = dc.indexOf('; ' + prefix);
2213
+ var content = '';
2145
2214
 
2146
2215
  // collect the cookie content
2147
2216
  // -----------------------------------------------------------------------
@@ -2169,13 +2238,13 @@ var j1 = (function (options) {
2169
2238
  document.cookie = settings.name + '=' + content + stringifiedAttributes;
2170
2239
 
2171
2240
  return true;
2172
- },
2241
+ }, // END expireCookie
2173
2242
 
2174
2243
  // -------------------------------------------------------------------------
2175
2244
  // existsCookie (Vanilla JS)
2176
2245
  // returns true if a cookie of given name exists
2177
2246
  // -------------------------------------------------------------------------
2178
- existsCookie: function (name) {
2247
+ existsCookie: (name) => {
2179
2248
  var dc = document.cookie;
2180
2249
  var prefix = name + '=';
2181
2250
  var begin = dc.indexOf('; ' + prefix);
@@ -2209,7 +2278,7 @@ var j1 = (function (options) {
2209
2278
  cookieExists = cookieContent.length ? true : false;
2210
2279
 
2211
2280
  return cookieExists;
2212
- },
2281
+ }, // END existsCookie
2213
2282
 
2214
2283
  // -------------------------------------------------------------------------
2215
2284
  // Resolve MACROs
@@ -2221,10 +2290,10 @@ var j1 = (function (options) {
2221
2290
  // https://stackoverflow.com/questions/179713/how-to-change-the-href-for-a-hyperlink-using-jquery
2222
2291
  // https://stackoverflow.com/questions/5223/length-of-a-javascript-object
2223
2292
  // -------------------------------------------------------------------------
2224
- resolveMacros: function (user_data) {
2293
+ resolveMacros: (user_data) => {
2225
2294
  var logger = log4javascript.getLogger('j1.resolveMacros');
2226
2295
 
2227
- var sidebarLoaded = setInterval(function() {
2296
+ var sidebarLoaded = setInterval(() => {
2228
2297
  if ($('#sidebar_mmenu').length) {
2229
2298
  if (Object.keys(user_data).length) {
2230
2299
  $('[id^=macro-]').each(function() {
@@ -2287,16 +2356,16 @@ var j1 = (function (options) {
2287
2356
  }
2288
2357
  }
2289
2358
  }, 10);
2290
- },
2359
+ }, // END resolveMacros
2291
2360
 
2292
2361
  // -------------------------------------------------------------------------
2293
2362
  // Update MACROs
2294
2363
  // Update the values, NOT the placeholders
2295
2364
  // -------------------------------------------------------------------------
2296
- updateMacros: function (user_data) {
2365
+ updateMacros: (user_data) => {
2297
2366
  var logger = log4javascript.getLogger('j1.updateMacros');
2298
2367
 
2299
- var sidebarLoaded = setInterval(function() {
2368
+ var sidebarLoaded = setInterval(() => {
2300
2369
  if ($('#sidebar_mmenu').length) {
2301
2370
 
2302
2371
  if (Object.keys(user_data).length) {
@@ -2345,82 +2414,25 @@ var j1 = (function (options) {
2345
2414
  }
2346
2415
  }
2347
2416
  }, 10);
2348
- },
2349
-
2350
- // -------------------------------------------------------------------------
2351
- // getMessage
2352
- // Get a log message from the log message catalog object
2353
- // -------------------------------------------------------------------------
2354
- getMessage: function (level, message, property) {
2355
- var message = j1.messages[level][message]['message'][property];
2356
-
2357
- return message;
2358
- },
2417
+ }, // END updateMacros
2359
2418
 
2360
2419
  // -------------------------------------------------------------------------
2361
2420
  // logger
2362
2421
  // Log a message
2363
2422
  // -------------------------------------------------------------------------
2364
- logger: function (logger, level, message) {
2423
+ logger: (logger, level, message) => {
2365
2424
  var logger = log4javascript.getLogger(logger);
2366
2425
 
2367
2426
  logger[level](message);
2368
2427
 
2369
2428
  return true;
2370
- },
2371
-
2372
- // -------------------------------------------------------------------------
2373
- // Send message
2374
- // -------------------------------------------------------------------------
2375
- sendMessage: function ( sender, receiver, message ) {
2376
- var logger = log4javascript.getLogger('j1.sendMessage');
2377
- // var json_message = JSON.stringify(message, undefined, 2); // multiline
2378
- var json_message = JSON.stringify(message);
2379
-
2380
- if ( receiver === 'j1' ) {
2381
- logText = '\n' + 'send message from ' + sender + ' to' + receiver + ': ' + json_message;
2382
- logger.debug(logText);
2383
- executeFunctionByName('j1' + '.messageHandler', window, sender, message);
2384
- } else {
2385
- logText = '\n' + 'send message from ' + sender + ' to ' + receiver + ': ' + json_message;
2386
- logger.debug(logText);
2387
- //executeFunctionByName('j1.' + receiver + '.messageHandler', window, sender, message)
2388
- executeFunctionByName(receiver + '.messageHandler', window, sender, message);
2389
- }
2390
-
2391
- },
2392
-
2393
- // -------------------------------------------------------------------------
2394
- // messageHandler: MessageHandler for J1 CookieConsent module
2395
- // Manage messages send from other J1 modules
2396
- // -------------------------------------------------------------------------
2397
- messageHandler: function ( sender, message ) {
2398
- // var json_message = JSON.stringify(message, undefined, 2); // multiline
2399
- var json_message = JSON.stringify(message);
2400
-
2401
- logText = '\n' + 'received message from ' + sender + ': ' + json_message;
2402
- logger.debug(logText);
2403
-
2404
- // -----------------------------------------------------------------------
2405
- // Process commands|actions
2406
- // -----------------------------------------------------------------------
2407
- if ( message.type === 'command' && message.action === 'module_initialized' ) {
2408
- _this.setState('finished');
2409
- logger.info('\n' + message.text);
2410
- }
2411
-
2412
- //
2413
- // Place handling of other command|action here
2414
- //
2415
-
2416
- return true;
2417
- },
2429
+ }, // END logger
2418
2430
 
2419
2431
  // -------------------------------------------------------------------------
2420
2432
  // getStyleValue:
2421
2433
  // Returns the value of a style from a css class definition
2422
2434
  // example: j1.getStyleValue('uno-primary', 'background-color')
2423
- getStyleValue: function (className, style) {
2435
+ getStyleValue: (className, style) => {
2424
2436
  var elementId = 'test-' + className,
2425
2437
  testElement = document.getElementById(elementId),
2426
2438
  val;
@@ -2435,16 +2447,15 @@ var j1 = (function (options) {
2435
2447
  document.body.removeChild(testElement);
2436
2448
 
2437
2449
  return val;
2438
- },
2450
+ }, // END getStyleValue
2439
2451
 
2440
2452
  // -------------------------------------------------------------------------
2441
2453
  // getStyleSheetLoaded:
2442
2454
  // NOTE:
2443
2455
  // EXAMPLE: getStyleSheetLoaded('bootstrap');
2444
- //
2445
- getStyleSheetLoaded: function (styleSheet) {
2446
- // var styleSheet = styleSheetName.toLowerCase() + '.css';
2447
- var sheets = document.styleSheets, stylesheet = sheets[(sheets.length - 1)];
2456
+ // -------------------------------------------------------------------------
2457
+ getStyleSheetLoaded: (styleSheet) => {
2458
+ var sheets = document.styleSheets, stylesheet = sheets[(sheets.length - 1)];
2448
2459
 
2449
2460
  // find CSS file 'styleSheetName' in document
2450
2461
  for(var i in document.styleSheets) {
@@ -2452,14 +2463,14 @@ var j1 = (function (options) {
2452
2463
  return true;;
2453
2464
  }
2454
2465
  }
2455
- },
2466
+ }, // END getStyleSheetLoaded
2456
2467
 
2457
2468
  // -------------------------------------------------------------------------
2458
2469
  // Returns the names of cookies used for J1 Theme
2459
2470
  // -------------------------------------------------------------------------
2460
- getCookieNames: function () {
2471
+ getCookieNames: () => {
2461
2472
  return cookie_names;
2462
- },
2473
+ }, // END getCookieNames
2463
2474
 
2464
2475
  // -------------------------------------------------------------------------
2465
2476
  // Set dynamic styles
@@ -2528,119 +2539,105 @@ var j1 = (function (options) {
2528
2539
  // return true;
2529
2540
  // },
2530
2541
 
2531
- // -------------------------------------------------------------------------
2532
- // setState()
2533
- // Set the current (processing) state of the module
2534
- // -------------------------------------------------------------------------
2535
- setState: function (stat) {
2536
- state = stat;
2537
- },
2538
-
2539
- // -------------------------------------------------------------------------
2540
- // getState()
2541
- // Returns the current (processing) state of the module
2542
- // -------------------------------------------------------------------------
2543
- getState: function () {
2544
- return state;
2545
- },
2546
-
2547
2542
  // -------------------------------------------------------------------------
2548
2543
  // setXhrDataState()
2549
2544
  // Set the final (loading) state of an element (partial) loaded via Xhr
2550
2545
  // -------------------------------------------------------------------------
2551
- setXhrDataState: function (obj, stat) {
2546
+ setXhrDataState: (obj, stat) => {
2552
2547
  j1.xhrDataState[obj] = stat;
2553
- },
2548
+ }, // END setXhrDataState
2554
2549
 
2555
2550
  // -------------------------------------------------------------------------
2556
2551
  // getXhrDataState()
2557
2552
  // Returns the final (loading) state of an element (partial) loaded via Xhr
2558
2553
  // -------------------------------------------------------------------------
2559
- getXhrDataState: function (obj) {
2554
+ getXhrDataState: (obj) => {
2560
2555
  return j1.xhrDataState[obj];
2561
- },
2556
+ }, // END mergeData
2562
2557
 
2563
2558
  // -------------------------------------------------------------------------
2564
2559
  // setXhrDomState()
2565
2560
  // Set the state of an element loaded via Xhr that is
2566
2561
  // successfully added to the DOM
2567
2562
  // -------------------------------------------------------------------------
2568
- setXhrDomState: function (obj, stat) {
2563
+ setXhrDomState: (obj, stat) => {
2569
2564
  j1.xhrDOMState[obj] = stat;
2570
- },
2565
+ }, // END getXhrDataState
2571
2566
 
2572
2567
  // -------------------------------------------------------------------------
2573
2568
  // getXhrDataState()
2574
2569
  // Returns the state of an element loaded via Xhr that is
2575
2570
  // successfully added to the DOM
2576
2571
  // -------------------------------------------------------------------------
2577
- getXhrDOMState: function (obj) {
2572
+ getXhrDOMState: (obj) => {
2578
2573
  return j1.xhrDOMState[obj];
2579
- },
2574
+ }, // END getXhrDOMState
2580
2575
 
2581
2576
  // -------------------------------------------------------------------------
2582
2577
  // setMode()
2583
2578
  // Set the current mode of the site (web|app)
2584
2579
  // -------------------------------------------------------------------------
2585
- setMode: function (mod) {
2580
+ setMode: (mod) => {
2586
2581
  mode = mod;
2587
- },
2582
+ }, // END setMode
2588
2583
 
2589
2584
  // -------------------------------------------------------------------------
2590
2585
  // getMode()
2591
2586
  // Returns the current mode of the site (web|app)
2592
2587
  // -------------------------------------------------------------------------
2593
- getMode: function () {
2588
+ getMode: () => {
2594
2589
  return mode;
2595
- },
2590
+ }, // END getMode
2596
2591
 
2597
2592
  // -------------------------------------------------------------------------
2598
2593
  // checkUserAgent()
2599
2594
  // Returns the name (UA) of the web browser
2600
2595
  // -------------------------------------------------------------------------
2601
- checkUserAgent: function () {
2596
+ checkUserAgent: () => {
2602
2597
  if (navigator.userAgent.search(ua_name) >= 0) {
2603
2598
  return true;
2604
2599
  } else {
2605
2600
  return false;
2606
2601
  }
2607
- },
2602
+ }, // END checkUserAgent
2608
2603
 
2609
2604
  // -------------------------------------------------------------------------
2610
2605
  // generateId()
2611
2606
  // Generate a unique (thread) id used by the logger
2612
2607
  // -------------------------------------------------------------------------
2613
- generateId: function (length) {
2608
+ generateId: (length) => {
2614
2609
  var result = '';
2615
2610
  var characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
2616
2611
  var charactersLength = characters.length;
2612
+
2617
2613
  for ( var i = 0; i < length; i++ ) {
2618
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
2614
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
2619
2615
  }
2616
+
2620
2617
  return result;
2621
- },
2618
+ }, // END generateId
2622
2619
 
2623
2620
  // -------------------------------------------------------------------------
2624
2621
  // getTrue()
2625
2622
  // Returns always true (for testing purposes)
2626
2623
  // -------------------------------------------------------------------------
2627
- getTrue: function () {
2624
+ getTrue: () => {
2628
2625
  return true;
2629
- },
2626
+ }, // END getTrue
2630
2627
 
2631
2628
  // -------------------------------------------------------------------------
2632
2629
  // getFalse()
2633
2630
  // Returns always false (for testing purposes)
2634
2631
  // -------------------------------------------------------------------------
2635
- getFalse: function () {
2632
+ getFalse: () => {
2636
2633
  return false;
2637
- },
2634
+ }, // END getFalse
2638
2635
 
2639
2636
  // -------------------------------------------------------------------------
2640
2637
  // goHome()
2641
2638
  // Redirect current page to the browser homepage
2642
2639
  // -------------------------------------------------------------------------
2643
- goHome: function () {
2640
+ goHome: () => {
2644
2641
  // most browsers
2645
2642
  if (typeof window.home == 'function') {
2646
2643
  window.home();
@@ -2650,16 +2647,16 @@ var j1 = (function (options) {
2650
2647
  } else {
2651
2648
  window.location.href = 'about:blank';
2652
2649
  }
2653
- },
2650
+ }, // END goHome
2654
2651
 
2655
2652
  // -------------------------------------------------------------------------
2656
2653
  // goBack()
2657
2654
  // Redirect current page to last visited page (referrer)
2658
2655
  // -------------------------------------------------------------------------
2659
- goBack: function () {
2656
+ goBack: () => {
2660
2657
  // where visitor has come from
2661
2658
  window.location.href = document.referrer;
2662
- },
2659
+ }, // END goBack
2663
2660
 
2664
2661
  // -------------------------------------------------------------------------
2665
2662
  // scrollToAnchor()
@@ -2667,21 +2664,24 @@ var j1 = (function (options) {
2667
2664
  // TODO: Find a better solution for 'dynamic' pages to detect
2668
2665
  // the content if fully loaded instead using a timeout
2669
2666
  // -------------------------------------------------------------------------
2670
- scrollToAnchor: function () {
2671
- var logger = log4javascript.getLogger('j1.adapter.scrollToAnchor');
2667
+ scrollToAnchor: () => {
2668
+ var logger = log4javascript.getLogger('j1.scrollToAnchor');
2672
2669
  var scrollOffset;
2673
2670
 
2674
- var dependencies_met_page_displayed = setInterval (function () {
2675
- var pageState = $('#no_flicker').css("display");
2676
- var pageVisible = (pageState == 'block') ? true: false;
2677
- if (j1['pageMonitor'].pageType !== 'unknown' && j1.getState() == 'finished' && pageVisible) {
2671
+ var dependencies_met_page_displayed = setInterval (() => {
2672
+ var pageState = $('#no_flicker').css("display");
2673
+ var pageVisible = (pageState === 'block') ? true: false;
2674
+ var j1CoreFinished = (j1.getState() === 'finished') ? true : false;
2675
+ var pageMonitor = (j1['pageMonitor'].pageType !== 'unknown') ? true : false;
2676
+
2677
+ if (j1CoreFinished && pageVisible && pageMonitor) {
2678
2678
 
2679
2679
  // TODO: Check why a timeout is required to run the
2680
2680
  // smmoth scroller (j1.scrollTo)
2681
2681
  //
2682
- if (j1['pageMonitor'].pageType == 'static') {
2682
+ if (j1['pageMonitor'].pageType === 'static') {
2683
2683
  // page type static
2684
- setTimeout (function() {
2684
+ setTimeout(() => {
2685
2685
  var headingUrl = new URL(window.location.href);
2686
2686
  var headingHash = headingUrl.hash;
2687
2687
  var headingId = headingHash.replace(/#/g, '');
@@ -2692,7 +2692,7 @@ var j1 = (function (options) {
2692
2692
 
2693
2693
  // scroll if headingId
2694
2694
  //
2695
- if (headingHash == '') {
2695
+ if (headingHash === '') {
2696
2696
  logger.debug('\n' + 'scrollToAnchor: top position detected');
2697
2697
  } else {
2698
2698
  logger.debug('\n' + 'scrollToAnchor: scroll to headline by id: ' + headingHash);
@@ -2705,9 +2705,9 @@ var j1 = (function (options) {
2705
2705
  }, {{template_config.timeoutScrollStaticPages}});
2706
2706
 
2707
2707
  clearInterval(dependencies_met_page_displayed);
2708
- } else if (j1['pageMonitor'].pageType == 'dynamic') {
2708
+ } else if (j1['pageMonitor'].pageType === 'dynamic') {
2709
2709
  // page type dynamic
2710
- setTimeout (function() {
2710
+ setTimeout(() => {
2711
2711
  var headingArray = j1.core.parseHeadings(); // collect all headings in page
2712
2712
  var headingUrl = new URL(window.location.href);
2713
2713
  var headingHash = headingUrl.hash;
@@ -2727,7 +2727,7 @@ var j1 = (function (options) {
2727
2727
  // collect top position for the active headline
2728
2728
  //
2729
2729
  if (headingArray !== null) {
2730
- headingArray.forEach(function(heading, index) {
2730
+ headingArray.forEach ((heading, index) => {
2731
2731
 
2732
2732
  if (heading.offsetTop !== undefined && heading.id == headingId && countOnce) {
2733
2733
  scrollOffset = heading.offsetTop;
@@ -2737,7 +2737,7 @@ var j1 = (function (options) {
2737
2737
  // calculate scrollOffsetCorrection based on AVERAGE
2738
2738
  // height of (number of) headlines
2739
2739
  //
2740
- if (headlineNo == 1) {
2740
+ if (headlineNo === 1) {
2741
2741
  scrollOffsetCorrection = scrollOffset - (headlineNo * 89);
2742
2742
  } else if (headlineNo <= 3) {
2743
2743
  scrollOffsetCorrection = scrollOffset - (headlineNo * 30);
@@ -2764,19 +2764,19 @@ var j1 = (function (options) {
2764
2764
 
2765
2765
  // scroll to headline's top position
2766
2766
  //
2767
- if (headingHash == '') {
2767
+ if (headingHash === '') {
2768
2768
  headingHash = '#';
2769
2769
  logger.debug('\n' + 'scrollToAnchor: top position detected');
2770
2770
  } else {
2771
- logger.debug('\n' + 'scrollToAnchor: headline|no: ' + headingHash + '|' + headlineNo);
2771
+ logger.debug('\n' + 'scrollToAnchor: headline|no: ' + headingHash + '|' + headlineNo);
2772
2772
 
2773
- // build-in scroller
2774
- //
2775
- window.scroll ({
2776
- top: scrollTop,
2777
- left: 0,
2778
- behavior: 'smooth'
2779
- });
2773
+ // build-in scroller
2774
+ //
2775
+ window.scroll ({
2776
+ top: scrollTop,
2777
+ left: 0,
2778
+ behavior: 'smooth'
2779
+ });
2780
2780
  } // END if headingHash
2781
2781
 
2782
2782
  }, {{template_config.timeoutScrollDynamicPages}});
@@ -2784,7 +2784,7 @@ var j1 = (function (options) {
2784
2784
  clearInterval(dependencies_met_page_displayed);
2785
2785
  } else {
2786
2786
  // page type unknown (failsave fallback)
2787
- setTimeout (function() {
2787
+ setTimeout(() => {
2788
2788
  logger.debug('\n' + 'scrollToAnchor: scroll page of type: unknown');
2789
2789
 
2790
2790
  scrollOffset = scrollOffsetCorrection - scrollOffsetBase;
@@ -2797,14 +2797,13 @@ var j1 = (function (options) {
2797
2797
 
2798
2798
  } // END if j1['pageMonitor'].pageType
2799
2799
  }, 10);
2800
- },
2800
+ }, // END scrollToAnchor
2801
2801
 
2802
2802
  // -------------------------------------------------------------------------
2803
2803
  // stringToBoolean()
2804
2804
  // convert a string to boolean
2805
2805
  // -------------------------------------------------------------------------
2806
- stringToBoolean: function (string) {
2807
-
2806
+ stringToBoolean: (string) => {
2808
2807
  switch(string.toLowerCase().trim()) {
2809
2808
  case "true":
2810
2809
  case "yes":
@@ -2818,7 +2817,6 @@ var j1 = (function (options) {
2818
2817
  default:
2819
2818
  return Boolean(string);
2820
2819
  }
2821
-
2822
2820
  }, // END stringToBoolean
2823
2821
 
2824
2822
  // -------------------------------------------------------------------------
@@ -2833,7 +2831,7 @@ var j1 = (function (options) {
2833
2831
  //
2834
2832
  // -------------------------------------------------------------------------
2835
2833
  //
2836
- registerLazyLoadCss: function () {
2834
+ registerLazyLoadCss: () => {
2837
2835
 
2838
2836
  console.log('register CSS files for lazy loading');
2839
2837
 
@@ -2883,12 +2881,12 @@ var j1 = (function (options) {
2883
2881
  // registerMonitors()
2884
2882
  //
2885
2883
  // -------------------------------------------------------------------------
2886
- registerMonitors: function () {
2887
- var cls;
2888
- var lcp
2884
+ registerMonitors: () => {
2885
+ const development = ('{{environment}}'.includes('prod')) ? false : true;
2889
2886
  var cumulated_cls = 0;
2890
2887
  var cumulated_lcp = 0;
2891
- const development = ('{{environment}}'.includes('prod')) ? false : true;
2888
+ var cls;
2889
+ var lcp;
2892
2890
 
2893
2891
  {% comment %} generate code for performance monitor if 'enabled'
2894
2892
  ------------------------------------------------------------------------ {% endcomment %}
@@ -2898,12 +2896,12 @@ var j1 = (function (options) {
2898
2896
  // see: https://developer.mozilla.org/en-US/docs/Web/API/LargestContentfulPaint
2899
2897
  //
2900
2898
  const performanceObserverLCP = new PerformanceObserver((entryList) => {
2901
- const entries = entryList.getEntries();
2899
+ const entries = entryList.getEntries();
2902
2900
 
2903
2901
  // logger API used for deveöopment only
2904
2902
  //
2905
2903
  if (development) {
2906
- var logger = log4javascript.getLogger('PerformanceObserver');
2904
+ var logger = log4javascript.getLogger('j1.PerformanceObserver');
2907
2905
  }
2908
2906
 
2909
2907
  // Use the latest LCP candidate
@@ -2914,10 +2912,10 @@ var j1 = (function (options) {
2914
2912
  var lcp_full = cumulated_lcp/1000;
2915
2913
  lcp = lcp_full.toFixed(3);
2916
2914
 
2917
- var url = lastEntry.url;
2918
- var pathname = url.replace( /^[a-zA-Z]{3,5}\:\/{2}[a-zA-Z0-9_.:-]+\//, '' );
2915
+ var url = lastEntry.url;
2916
+ var pathname = url.replace( /^[a-zA-Z]{3,5}\:\/{2}[a-zA-Z0-9_.:-]+\//, '' );
2919
2917
 
2920
- if (development && lastEntry.url != '') {
2918
+ if (development && lastEntry.url !== '') {
2921
2919
  logger.debug('\n' + 'Largest Contentful Paint (LCP), url:', pathname);
2922
2920
  } else {
2923
2921
  console.debug(`Largest Contentful Paint (LCP), url: ${pathname}`);
@@ -2947,10 +2945,10 @@ var j1 = (function (options) {
2947
2945
  // logger API used for deveöopment only
2948
2946
  //
2949
2947
  if (development) {
2950
- var logger = log4javascript.getLogger('PerformanceObserver');
2948
+ var logger = log4javascript.getLogger('j1.PerformanceObserver');
2951
2949
  }
2952
2950
 
2953
- entries.forEach(entry => {
2951
+ entries.forEach ((entry) => {
2954
2952
 
2955
2953
  if (entry.sources) {
2956
2954
 
@@ -3007,7 +3005,7 @@ var j1 = (function (options) {
3007
3005
  // logger API used for deveöopment only
3008
3006
  //
3009
3007
  if (development) {
3010
- var logger = log4javascript.getLogger('ResizeObserver');
3008
+ var logger = log4javascript.getLogger('j1.ResizeObserver');
3011
3009
  }
3012
3010
 
3013
3011
  // get the page height from the DOM
@@ -3026,7 +3024,7 @@ var j1 = (function (options) {
3026
3024
 
3027
3025
  // skip first Observer event
3028
3026
  //
3029
- if (j1['pageMonitor'] !== undefined && j1['pageMonitor'].eventNo !== undefined && j1['pageMonitor'].eventNo == 2) {
3027
+ if (j1['pageMonitor'] !== undefined && j1['pageMonitor'].eventNo !== undefined && j1['pageMonitor'].eventNo === 2) {
3030
3028
  // Set initial data from second event
3031
3029
  //
3032
3030
  j1['pageMonitor'].pageBaseHeight = documentHeight;
@@ -3130,54 +3128,12 @@ var j1 = (function (options) {
3130
3128
 
3131
3129
  // jadams, 2023-10-26: delay untion STATIC portion of a page is loaded
3132
3130
  //
3133
- setTimeout (function() {
3131
+ setTimeout(() => {
3134
3132
  resizeObserver.observe(
3135
3133
  document.querySelector('body')
3136
3134
  );
3137
3135
  }, 500);
3138
3136
 
3139
- // jadams, 2023-10-25: disabled
3140
- // NOTE: Funtions like j1.getCookieNames()seems NOT available
3141
- // in callback beforeunload'
3142
- //
3143
- // -----------------------------------------------------------------------
3144
- // final updates before browser page|tab
3145
- // see: https://stackoverflow.com/questions/3888902/detect-browser-or-tab-closing
3146
- // -----------------------------------------------------------------------
3147
- // window.addEventListener('beforeunload', function (event) {
3148
- // var cookie_names = j1.getCookieNames();
3149
- // var date = new Date();
3150
- // var timestamp_now = date.toISOString();
3151
- // var user_state = j1.readCookie(cookie_names.user_state);
3152
- // var user_consent = j1.readCookie(cookie_names.user_consent);
3153
- // var url = new liteURL(window.location.href);
3154
- // var secure = (url.protocol.includes('https')) ? true : false;
3155
- // var ep_status;
3156
- // var url;
3157
- // var baseUrl;
3158
- //
3159
- // // final update of the user state cookie
3160
- // user_state.session_active = false;
3161
- // user_state.last_session_ts = timestamp_now;
3162
- //
3163
- // if (!user_consent.analysis || !user_consent.personalization) {
3164
- //
3165
- // cookie_written = j1.writeCookie({
3166
- // name: cookie_names.user_state,
3167
- // data: user_state,
3168
- // secure: secure,
3169
- // expires: 0
3170
- // });
3171
- // } else {
3172
- // cookie_written = j1.writeCookie({
3173
- // name: cookie_names.user_state,
3174
- // data: user_state,
3175
- // secure: secure,
3176
- // expires: 365
3177
- // });
3178
- // }
3179
- // }); // END beforeunload
3180
-
3181
3137
  // initialize event handler for window/history/back on <ESC>
3182
3138
  //
3183
3139
  window.onkeyup = function (event) {
@@ -3198,20 +3154,127 @@ var j1 = (function (options) {
3198
3154
  }
3199
3155
  });
3200
3156
 
3201
- } // END registerMonitors
3157
+ }, // END registerMonitors
3202
3158
 
3203
- };
3204
- }) (j1, window);
3159
+ // -------------------------------------------------------------------------
3160
+ // int2float()
3161
+ // convert an integer to float using given precision (default: 2 decimals)
3162
+ // -------------------------------------------------------------------------
3163
+ int2float: (number, precision = 2) => {
3164
+ return number.toFixed(precision);
3165
+ },
3205
3166
 
3206
- {% comment %} NOTE: Unexpected token: punc (;) errors if compressed
3207
- --------------------------------------------------------------------------------
3208
- {% if production %}
3209
- {{ cache | minifyJS }}
3210
- {% else %}
3211
- {{ cache | strip_empty_lines }}
3212
- {% endif %}
3213
- {% assign cache = nil %}
3214
- -------------------------------------------------------------------------------- {% endcomment %}
3167
+ // -------------------------------------------------------------------------
3168
+ // getTimeLeft()
3169
+ // calulates the time left
3170
+ // -------------------------------------------------------------------------
3171
+ getTimeLeft: (endDate) => {
3172
+ // Get the current date and time
3173
+ const now = new Date();
3174
+
3175
+ // Get the milliseconds of both dates
3176
+ const endTime = endDate.getTime();
3177
+ const currentTime = now.getTime();
3178
+
3179
+ // Calculate the difference in milliseconds
3180
+ const difference = endTime - currentTime;
3181
+
3182
+ // Check if the end date has passed (difference is negative)
3183
+ if (difference < 0) {
3184
+ return 'Time has passed!';
3185
+ }
3186
+
3187
+ // Calculate remaining days using milliseconds in a day
3188
+ const daysLeft = Math.floor(difference / (1000 * 60 * 60 * 24));
3189
+
3190
+ // Calculate remaining hours using milliseconds in an hour
3191
+ const hoursLeft = Math.floor((difference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
3192
+
3193
+ // Calculate remaining minutes using milliseconds in a minute
3194
+ const minutesLeft = Math.floor((difference % (1000 * 60 * 60)) / (1000 * 60));
3195
+
3196
+ // Calculate remaining seconds using milliseconds in a second
3197
+ const secondsLeft = Math.floor((difference % (1000 * 60)) / 1000);
3198
+
3199
+ // Return a formatted string showing remaining time
3200
+ return `${daysLeft} days, ${hoursLeft} hours, ${minutesLeft} minutes, ${secondsLeft} seconds left`;
3201
+
3202
+ }, // END getTimeLeft
3203
+
3204
+ // -------------------------------------------------------------------------
3205
+ // getMessage()
3206
+ // get a log message from the log message catalog object
3207
+ // -------------------------------------------------------------------------
3208
+ getMessage: (level, message, property) => {
3209
+ var message = j1.messages[level][message]['message'][property];
3210
+
3211
+ return message;
3212
+ }, // END getMessage
3213
+
3214
+ // -------------------------------------------------------------------------
3215
+ // sendMessage()
3216
+ // -------------------------------------------------------------------------
3217
+ sendMessage: (sender, receiver, message) => {
3218
+ var logger = log4javascript.getLogger('j1.sendMessage');
3219
+ // var json_message = JSON.stringify(message, undefined, 2); // multiline
3220
+ var json_message = JSON.stringify(message);
3221
+
3222
+ if (receiver === 'j1') {
3223
+ logText = '\n' + 'send message from ' + sender + ' to' + receiver + ': ' + json_message;
3224
+ logger.debug(logText);
3225
+ executeFunctionByName('j1' + '.messageHandler', window, sender, message);
3226
+ } else {
3227
+ logText = '\n' + 'send message from ' + sender + ' to ' + receiver + ': ' + json_message;
3228
+ logger.debug(logText);
3229
+ //executeFunctionByName('j1.' + receiver + '.messageHandler', window, sender, message)
3230
+ executeFunctionByName(receiver + '.messageHandler', window, sender, message);
3231
+ }
3232
+ }, // END sendMessage
3233
+
3234
+ // -------------------------------------------------------------------------
3235
+ // messageHandler()
3236
+ // manage messages send from other J1 modules
3237
+ // -------------------------------------------------------------------------
3238
+ messageHandler: (sender, message) => {
3239
+ // var json_message = JSON.stringify(message, undefined, 2); // multiline
3240
+ var json_message = JSON.stringify(message);
3241
+
3242
+ logText = '\n' + 'received message from ' + sender + ': ' + json_message;
3243
+ logger.debug(logText);
3244
+
3245
+ // -----------------------------------------------------------------------
3246
+ // process commands|actions
3247
+ // -----------------------------------------------------------------------
3248
+ if ( message.type === 'command' && message.action === 'module_initialized' ) {
3249
+ _this.setState('finished');
3250
+ logger.info('\n' + message.text);
3251
+ }
3252
+
3253
+ //
3254
+ // place handling of other command|action here
3255
+ //
3256
+
3257
+ return true;
3258
+ }, // END messageHandler
3259
+
3260
+ // -------------------------------------------------------------------------
3261
+ // setState()
3262
+ // det the current (processing) state of the module
3263
+ // -------------------------------------------------------------------------
3264
+ setState: (stat) => {
3265
+ state = stat;
3266
+ }, // END setState
3267
+
3268
+ // -------------------------------------------------------------------------
3269
+ // getState()
3270
+ // returns the current (processing) state of the module
3271
+ // -------------------------------------------------------------------------
3272
+ getState: () => {
3273
+ return state;
3274
+ } // END getState
3275
+
3276
+ }; // END main (return)
3277
+ })(j1, window);
3215
3278
 
3216
3279
  {% endcapture %}
3217
3280
  {% if production %}