j1_template 2019.4.8 → 2019.4.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (403) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/blocks/footer/boxes/about_box.proc +46 -0
  3. data/_includes/themes/j1/{modules/footers/boxes/about_box.proc → blocks/footer/boxes/about_box.proc.org} +0 -0
  4. data/_includes/themes/j1/{modules/footers → blocks/footer}/boxes/contacts_box.proc +1 -1
  5. data/_includes/themes/j1/blocks/footer/boxes/issue.proc +38 -0
  6. data/_includes/themes/j1/{modules/footers → blocks/footer}/boxes/legal_statements.proc +1 -12
  7. data/_includes/themes/j1/{modules/footers → blocks/footer}/boxes/links_box.proc +11 -4
  8. data/_includes/themes/j1/{modules/footers → blocks/footer}/boxes/news_box.proc +8 -2
  9. data/_includes/themes/j1/{modules/footers → blocks/footer}/boxes/social_media_icons.proc +1 -1
  10. data/_includes/themes/j1/{modules/footers/footer_light_generator.html → blocks/footer/generator.html} +7 -7
  11. data/_includes/themes/j1/layouts/_unused/layout_module_generator.html.org +49 -0
  12. data/_includes/themes/j1/layouts/{layout_theme_generator.html → _unused/layout_theme_generator.html} +0 -0
  13. data/_includes/themes/j1/layouts/{layout_theme_generator.new.html → _unused/layout_theme_generator.new.html} +0 -0
  14. data/_includes/themes/j1/layouts/{layout_theme_generator.org.html → _unused/layout_theme_generator.org.html} +0 -0
  15. data/_includes/themes/j1/layouts/content_generator_blog_archive.html +20 -9
  16. data/_includes/themes/j1/layouts/content_generator_page.html +8 -13
  17. data/_includes/themes/j1/layouts/layout_module_generator.html +11 -13
  18. data/_includes/themes/j1/modules/{headers/master_header_generator.html → attics/generator.html} +35 -36
  19. data/_includes/themes/j1/modules/navigator/procedures/topsearch.proc +2 -1
  20. data/_includes/themes/j1/procedures/global/{_get_page_path.proc.new → _unused/_get_page_path.proc.new} +0 -0
  21. data/_includes/themes/j1/procedures/global/{_get_page_path.proc.org → _unused/_get_page_path.proc.org} +0 -0
  22. data/_includes/themes/j1/procedures/global/set_base_vars_folders.proc +37 -0
  23. data/_includes/themes/j1/procedures/global/setup.proc +37 -45
  24. data/_includes/themes/j1/procedures/layouts/_unused/module_writer.proc.org +309 -0
  25. data/_includes/themes/j1/procedures/layouts/content_writer.proc +2 -1
  26. data/_includes/themes/j1/procedures/layouts/default_writer.proc +1 -1
  27. data/_includes/themes/j1/procedures/layouts/module_writer.proc +222 -153
  28. data/_includes/themes/j1/procedures/posts/collate_timeline.proc +6 -9
  29. data/_layouts/default.html +35 -30
  30. data/lib/j1/templates/posts/0000-00-00-welcome-to-j1-template.adoc.erb +14 -5
  31. data/lib/j1/version.rb +1 -1
  32. data/lib/j1_app/j1_auth_manager/_unused/auth_manager.before_merge_added.rb +1 -1
  33. data/lib/j1_app/j1_auth_manager/_unused/auth_manager.new.rb +1 -1
  34. data/lib/j1_app/j1_auth_manager/_unused/auth_manager.no_cookie.mgmt.rb +1 -1
  35. data/lib/j1_app/j1_auth_manager/_unused/auth_manager.ok.rb +1 -1
  36. data/lib/j1_app/j1_auth_manager/_unused/auth_manager.org.2.rb +1 -1
  37. data/lib/j1_app/j1_auth_manager/_unused/auth_manager.org.rb +1 -1
  38. data/lib/j1_app/j1_auth_manager/_unused/auth_manager.update.web_cookie.rb +1 -1
  39. data/lib/j1_app/j1_auth_manager/_views/auth_manager_ui.erb +234 -0
  40. data/lib/j1_app/j1_auth_manager/auth_manager.rb +1 -1
  41. data/lib/j1_app/j1_auth_manager/views/auth_manager_ui.erb +9 -8
  42. data/lib/starter_web/Gemfile +22 -24
  43. data/lib/starter_web/_cc_test_data/_config.yml +1 -1
  44. data/lib/starter_web/_cc_test_data/_data/blocks/banner.yml +2 -2
  45. data/lib/starter_web/_cc_test_data/_data/blocks/defaults/banner.yml +1 -1
  46. data/lib/starter_web/_cc_test_data/_data/layouts/app.yml +2 -2
  47. data/lib/starter_web/_cc_test_data/_data/layouts/blog_archive.yml +2 -2
  48. data/lib/starter_web/_cc_test_data/_data/layouts/collection.yml +2 -2
  49. data/lib/starter_web/_cc_test_data/_data/layouts/home.yml +2 -2
  50. data/lib/starter_web/_cc_test_data/_data/layouts/page.yml +2 -2
  51. data/lib/starter_web/_cc_test_data/_data/layouts/post.yml +2 -2
  52. data/lib/starter_web/_cc_test_data/_data/layouts/raw.yml +2 -2
  53. data/lib/starter_web/_cc_test_data/_data/resources.yml +2 -2
  54. data/lib/starter_web/_config.yml +1 -1
  55. data/lib/starter_web/_data/_defaults/resources.yml +1 -1
  56. data/lib/starter_web/_data/_old_configs/j1_resources.org.yml +2 -2
  57. data/lib/starter_web/_data/_old_configs/j1_resources.yml +1 -1
  58. data/lib/starter_web/_data/blocks/_unused/banner.new.yml +297 -0
  59. data/lib/starter_web/_data/blocks/_unused/banner.org.yml +297 -0
  60. data/lib/starter_web/_data/blocks/_unused/panel.new.yml +348 -0
  61. data/lib/starter_web/_data/blocks/_unused/panel.org.yml +331 -0
  62. data/lib/starter_web/_data/blocks/banner.yml +27 -31
  63. data/lib/starter_web/_data/blocks/defaults/banner.yml +1 -1
  64. data/lib/starter_web/_data/blocks/footer.yml +9 -7
  65. data/lib/starter_web/_data/blocks/panel.yml +62 -52
  66. data/lib/starter_web/_data/layouts/app.yml +2 -2
  67. data/lib/starter_web/_data/layouts/blog_archive.yml +2 -2
  68. data/lib/starter_web/_data/layouts/collection.yml +2 -2
  69. data/lib/starter_web/_data/layouts/default.yml +8 -8
  70. data/lib/starter_web/_data/layouts/home.yml +5 -5
  71. data/lib/starter_web/_data/layouts/page.yml +2 -2
  72. data/lib/starter_web/_data/layouts/post.yml +2 -2
  73. data/lib/starter_web/_data/layouts/raw.yml +2 -2
  74. data/lib/starter_web/_data/modules/_old_configs/defaults/banner.yml +1 -1
  75. data/lib/starter_web/_data/modules/_old_configs/j1_banner.yml +1 -1
  76. data/lib/starter_web/_data/modules/_old_configs/j1_header.yml +1 -1
  77. data/lib/starter_web/_data/modules/attics.yml +220 -0
  78. data/lib/starter_web/_data/modules/defaults/attics.yml +220 -0
  79. data/lib/starter_web/_data/modules/defaults/log4javascript.yml +0 -16
  80. data/lib/starter_web/_data/modules/defaults/navigator.yml +3 -3
  81. data/lib/starter_web/_data/modules/defaults/{theme_switcher.yml → themer.yml} +27 -27
  82. data/lib/starter_web/_data/modules/defaults/toccer.yml +40 -40
  83. data/lib/starter_web/_data/modules/log4javascript.yml +0 -16
  84. data/lib/starter_web/_data/modules/navigator_menu.yml +48 -35
  85. data/lib/starter_web/_data/modules/{theme_switcher.yml → themer.yml} +27 -48
  86. data/lib/starter_web/_data/modules/toccer.yml +3 -3
  87. data/lib/starter_web/_data/resources.yml +86 -60
  88. data/lib/starter_web/_data/template_settings.yml +1 -1
  89. data/lib/starter_web/_plugins/filters.rb +10 -0
  90. data/lib/starter_web/assets/_data/_temp/_banner.html +421 -0
  91. data/lib/starter_web/assets/_data/_temp/_panel.html +585 -0
  92. data/lib/starter_web/assets/{data → _data}/_temp/banner.case.snippet.html.asciidoc +0 -0
  93. data/lib/starter_web/assets/{data → _data}/_temp/banner.new.html.asciidoc +0 -0
  94. data/lib/starter_web/assets/{data → _data}/_temp/banner.with.defaults.html.asciidoc +0 -0
  95. data/lib/starter_web/assets/_data/_temp/footer.html.new +228 -0
  96. data/lib/starter_web/assets/_data/_temp/footer.html.org +234 -0
  97. data/lib/starter_web/assets/{data → _data}/_temp/footer.old.html +0 -0
  98. data/lib/starter_web/assets/{data → _data}/_temp/footer_new.html +0 -0
  99. data/lib/starter_web/assets/{data → _data}/_temp/footer_old.html +0 -0
  100. data/lib/starter_web/assets/{data → _data}/_temp/menu.old.html +0 -0
  101. data/lib/starter_web/assets/{data → _data}/_temp/panel.new.html +0 -0
  102. data/lib/starter_web/assets/{data → _data}/_temp/panel.old.html +0 -0
  103. data/lib/starter_web/assets/{data → _data}/_temp/panel.org.html +0 -0
  104. data/lib/starter_web/assets/_data/animate.json +120 -0
  105. data/lib/starter_web/assets/_data/ascii_code_table.json +1794 -0
  106. data/lib/starter_web/assets/_data/authclient.html +365 -0
  107. data/lib/starter_web/assets/_data/banner.html +431 -0
  108. data/lib/starter_web/assets/_data/carousel.json +110 -0
  109. data/lib/starter_web/assets/_data/colors.json +43 -0
  110. data/lib/starter_web/assets/_data/cookie_consent.html +225 -0
  111. data/lib/starter_web/assets/_data/countries.json +974 -0
  112. data/lib/starter_web/assets/_data/font_sizes.json +43 -0
  113. data/lib/starter_web/assets/_data/fontawesome_icons.json +5525 -0
  114. data/lib/starter_web/assets/_data/footer.html +239 -0
  115. data/lib/starter_web/assets/_data/galleries.json +160 -0
  116. data/lib/starter_web/assets/_data/mdi_icons.json +14641 -0
  117. data/lib/starter_web/assets/_data/menu.html +469 -0
  118. data/lib/starter_web/assets/_data/messages.yml +130 -0
  119. data/lib/starter_web/assets/_data/objects.json +458 -0
  120. data/lib/starter_web/assets/_data/panel.html +501 -0
  121. data/lib/starter_web/assets/_data/panel.new.html +498 -0
  122. data/lib/starter_web/assets/_data/quicklinks.html +178 -0
  123. data/lib/starter_web/assets/_data/search.yml +131 -0
  124. data/lib/starter_web/assets/_data/sidebar.html +261 -0
  125. data/lib/starter_web/assets/_data/themes.json +59 -0
  126. data/lib/starter_web/assets/_data/twa_v1.json +6978 -0
  127. data/lib/starter_web/assets/_data/twa_v2.json +12812 -0
  128. data/lib/starter_web/assets/_data/webhook.html +190 -0
  129. data/lib/starter_web/assets/data/_unused/_banner.html +421 -0
  130. data/lib/starter_web/assets/data/_unused/_panel.html +585 -0
  131. data/lib/starter_web/assets/data/_unused/banner.case.snippet.html.asciidoc +91 -0
  132. data/lib/starter_web/assets/data/_unused/banner.new.html.asciidoc +559 -0
  133. data/lib/starter_web/assets/data/_unused/banner.with.defaults.html.asciidoc +547 -0
  134. data/lib/starter_web/assets/data/_unused/footer.html.new +228 -0
  135. data/lib/starter_web/assets/data/_unused/footer.html.org +234 -0
  136. data/lib/starter_web/assets/data/_unused/footer.old.html +231 -0
  137. data/lib/starter_web/assets/data/_unused/footer_new.html +226 -0
  138. data/lib/starter_web/assets/data/_unused/footer_old.html +222 -0
  139. data/lib/starter_web/assets/data/_unused/menu.old.html +462 -0
  140. data/lib/starter_web/assets/data/_unused/panel.new.html +498 -0
  141. data/lib/starter_web/assets/data/_unused/panel.old.html +597 -0
  142. data/lib/starter_web/assets/data/_unused/panel.org.html +597 -0
  143. data/lib/starter_web/assets/data/authclient.html +6 -6
  144. data/lib/starter_web/assets/data/banner.html +92 -82
  145. data/lib/starter_web/assets/data/cookie_consent.html +11 -43
  146. data/lib/starter_web/assets/data/footer.html +16 -11
  147. data/lib/starter_web/assets/data/menu.html +19 -20
  148. data/lib/starter_web/assets/data/messages.yml +20 -19
  149. data/lib/starter_web/assets/data/panel.html +196 -280
  150. data/lib/starter_web/assets/data/webhook.html +4 -4
  151. data/lib/starter_web/assets/images/articles/img2.jpg +0 -0
  152. data/lib/starter_web/assets/images/articles/img3.jpg +0 -0
  153. data/lib/starter_web/assets/images/articles/img7.jpg +0 -0
  154. data/lib/starter_web/assets/images/attics/banner/admin-dashboard-bootstrap-1280x800-bw.jpg +0 -0
  155. data/lib/starter_web/assets/images/attics/banner/docker-1280x600-bw.jpg +0 -0
  156. data/lib/starter_web/assets/images/attics/banner/jekyll.1200x600-bw.jpg +0 -0
  157. data/lib/starter_web/assets/images/attics/banner/library-1920x800-bw.jpg +0 -0
  158. data/lib/starter_web/assets/images/attics/banner/signpost-1920x800-bw.jpg +0 -0
  159. data/lib/starter_web/assets/images/attics/banner/water-journal-1280x600.jpg +0 -0
  160. data/lib/starter_web/assets/images/attics/banner/write-1280x600-bw.jpg +0 -0
  161. data/lib/starter_web/assets/images/attics/building-blocks-1920x1280-bw.jpg +0 -0
  162. data/lib/starter_web/assets/images/attics/cookies-1920x1200-bw.jpg +0 -0
  163. data/lib/starter_web/assets/images/attics/go-up-1920x1280-bw.jpg +0 -0
  164. data/lib/starter_web/assets/images/attics/ideas-start-here-1920x1280-bw.jpg +0 -0
  165. data/lib/starter_web/assets/images/attics/library-1920x1280-bw.jpg +0 -0
  166. data/lib/starter_web/assets/images/attics/premium-1920x1280-bw.jpg +0 -0
  167. data/lib/starter_web/assets/images/attics/runner-1920x1200-bw.jpg +0 -0
  168. data/lib/starter_web/assets/images/attics/spider-web-1920x1200-bw.jpg +0 -0
  169. data/lib/starter_web/assets/images/attics/the-place-1920x1280-bw.jpg +0 -0
  170. data/lib/starter_web/assets/images/attics/welcome-1920x1280-bw.jpg +0 -0
  171. data/lib/starter_web/assets/images/icons/j1/favicon.ico +0 -0
  172. data/lib/starter_web/assets/images/icons/j1/j1-256x256.png +0 -0
  173. data/lib/starter_web/assets/images/icons/j1/j1-32x32.ico +0 -0
  174. data/lib/starter_web/assets/images/icons/j1/j1-512x512.png +0 -0
  175. data/lib/starter_web/assets/images/icons/j1/j1-64x64.png +0 -0
  176. data/lib/starter_web/assets/images/icons/j1/j1..ico +0 -0
  177. data/lib/starter_web/assets/images/icons/j1/scalable/j1.svg +37 -47
  178. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/get-started-1920x1280-bw.jpg +0 -0
  179. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/{130_layout_inheritance.png → intro/130_layout_inheritance.png} +0 -0
  180. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/{content_inheritance.png → intro/content_inheritance.png} +0 -0
  181. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/{content_inheritance_thumb.png → intro/content_inheritance_thumb.png} +0 -0
  182. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/{html_layout.png → intro/html_layout.png} +0 -0
  183. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/{j1-quickstart-windows.png → intro/j1-quickstart-windows.png} +0 -0
  184. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/intro/j1-template-theme.jpg +0 -0
  185. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/{j1_layout.png → intro/j1_layout.png} +0 -0
  186. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/{jekyll-minima-theme.png → intro/jekyll-minima-theme.png} +0 -0
  187. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/{lane_inheritance.png → intro/lane_inheritance.png} +0 -0
  188. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/{layout_inheritance.png → intro/layout_inheritance.png} +0 -0
  189. data/lib/starter_web/assets/images/pages/log_expert/image_020.png +0 -0
  190. data/lib/starter_web/assets/images/pages/roundtrip/bootstrap-1920x1000-bw.jpg +0 -0
  191. data/lib/starter_web/assets/images/pages/roundtrip/cards-1920x1280-bw.jpg +0 -0
  192. data/lib/starter_web/assets/images/pages/roundtrip/emojies-1920x1280-bw.jpg +0 -0
  193. data/lib/starter_web/assets/images/pages/roundtrip/icon-fonts-1920x1280-bw.jpg +0 -0
  194. data/lib/starter_web/assets/images/pages/roundtrip/images-1920x1280-bw.jpg +0 -0
  195. data/lib/starter_web/assets/images/pages/roundtrip/puzzle-1920x1280-bw.jpg +0 -0
  196. data/lib/starter_web/assets/images/pages/roundtrip/tables-1920x1280-bw.jpg +0 -0
  197. data/lib/starter_web/assets/images/pages/roundtrip/themes-1920x1280-bw.jpg +0 -0
  198. data/lib/starter_web/assets/images/pages/roundtrip/typography-1920x1280-bw.jpg +0 -0
  199. data/lib/starter_web/assets/themes/j1/adapter/js/_unused/back2top.org.js +17 -19
  200. data/lib/starter_web/assets/themes/j1/adapter/js/_unused/cookie_consent.org.js +1 -1
  201. data/lib/starter_web/assets/themes/j1/adapter/js/_unused/masterheader.org.js +20 -20
  202. data/lib/starter_web/assets/themes/j1/adapter/js/_unused/navigator.new.kapott.1.js +1 -1
  203. data/lib/starter_web/assets/themes/j1/adapter/js/_unused/navigator.new.kapott.2.js +5 -5
  204. data/lib/starter_web/assets/themes/j1/adapter/js/_unused/navigator.plus.old.func.js +980 -0
  205. data/lib/starter_web/assets/themes/j1/adapter/js/{octokit.app_only.js → _unused/octokit.app_only.js} +1 -1
  206. data/lib/starter_web/assets/themes/j1/adapter/js/_unused/octokit.old.js +1 -1
  207. data/lib/starter_web/assets/themes/j1/adapter/js/{switcher.js → _unused/switcher.js} +55 -0
  208. data/lib/starter_web/assets/themes/j1/adapter/js/_unused/template.new-1.js +1 -1
  209. data/lib/starter_web/assets/themes/j1/adapter/js/_unused/template.new.js +4 -4
  210. data/lib/starter_web/assets/themes/j1/adapter/js/_unused/template.old.js +5 -5
  211. data/lib/starter_web/assets/themes/j1/adapter/js/_unused/template.org.js +1 -1
  212. data/lib/starter_web/assets/themes/j1/adapter/js/_unused/themer.css_load_check.js +360 -0
  213. data/lib/starter_web/assets/themes/j1/adapter/js/algolia.js +29 -24
  214. data/lib/starter_web/assets/themes/j1/adapter/js/{master_header.js → attic.js} +242 -213
  215. data/lib/starter_web/assets/themes/j1/adapter/js/back2top.js +38 -36
  216. data/lib/starter_web/assets/themes/j1/adapter/js/bootstrap_gallery.js +33 -33
  217. data/lib/starter_web/assets/themes/j1/adapter/js/carousel.js +35 -30
  218. data/lib/starter_web/assets/themes/j1/adapter/js/cookie_bar.js +24 -19
  219. data/lib/starter_web/assets/themes/j1/adapter/js/cookie_consent.js +89 -72
  220. data/lib/starter_web/assets/themes/j1/adapter/js/custom.js +31 -26
  221. data/lib/starter_web/assets/themes/j1/adapter/js/example.js +28 -22
  222. data/lib/starter_web/assets/themes/j1/adapter/js/framer.js +23 -18
  223. data/lib/starter_web/assets/themes/j1/adapter/js/justified_gallery.js +22 -18
  224. data/lib/starter_web/assets/themes/j1/adapter/js/lightbox.js +23 -18
  225. data/lib/starter_web/assets/themes/j1/adapter/js/logger.js +21 -18
  226. data/lib/starter_web/assets/themes/j1/adapter/js/navigator.js +344 -446
  227. data/lib/starter_web/assets/themes/j1/adapter/js/octokit.js +99 -98
  228. data/lib/starter_web/assets/themes/j1/adapter/js/scroller.js +19 -15
  229. data/lib/starter_web/assets/themes/j1/adapter/js/searcher.js +27 -30
  230. data/lib/starter_web/assets/themes/j1/adapter/js/stickybits.js +21 -15
  231. data/lib/starter_web/assets/themes/j1/adapter/js/themer.js +350 -0
  232. data/lib/starter_web/assets/themes/j1/adapter/js/toccer.js +59 -58
  233. data/lib/starter_web/assets/themes/j1/core/css/globals.css +14545 -0
  234. data/lib/starter_web/assets/themes/j1/core/css/globals.min.css +1 -0
  235. data/lib/starter_web/assets/themes/j1/core/css/globals.scss +28 -0
  236. data/lib/starter_web/assets/themes/j1/core/css/theme_extensions.css +283 -315
  237. data/lib/starter_web/assets/themes/j1/core/css/theme_extensions.min.css +1 -1
  238. data/lib/starter_web/assets/themes/j1/core/css/uno.css +283 -315
  239. data/lib/starter_web/assets/themes/j1/core/css/uno.min.css +1 -1
  240. data/lib/starter_web/assets/themes/j1/core/css/vendor.css +211 -181
  241. data/lib/starter_web/assets/themes/j1/core/css/vendor.min.css +2 -2
  242. data/lib/starter_web/assets/themes/j1/{adapter/js/template.js → core/js/_unused/j1.flicker_timeout.js} +261 -192
  243. data/lib/starter_web/assets/themes/j1/core/js/j1.js +1792 -0
  244. data/lib/starter_web/assets/themes/j1/core/js/template.js +7 -7
  245. data/lib/starter_web/assets/themes/j1/core/js/template.js.map +1 -1
  246. data/lib/starter_web/assets/themes/j1/core/js/template.min.js +1 -1
  247. data/lib/starter_web/collections/posts/private/series/_posts/2018-11-01-docker-using-shared-folders.adoc +7 -9
  248. data/lib/starter_web/collections/posts/protected/wikipedia/_posts/2016-11-20-minneapolis.adoc +0 -1
  249. data/lib/starter_web/collections/posts/protected/wikipedia/_posts/2016-11-24-narcisse-snake-dens.adoc +0 -1
  250. data/lib/starter_web/collections/posts/protected/wikipedia/_posts/2016-11-26-columbia-river.adoc +0 -1
  251. data/lib/starter_web/collections/posts/public/featured/_posts/0000-00-00-welcome-to-j1-template.adoc.erb +123 -26
  252. data/lib/starter_web/collections/posts/public/featured/_posts/000_includes/unsplash-badge.asciidoc +31 -0
  253. data/lib/starter_web/collections/posts/public/featured/_posts/{2018-06-01-top-open-source-static-site-generators.adoc → 2019-05-01-top-open-source-static-site-generators.adoc} +24 -13
  254. data/lib/starter_web/collections/posts/public/featured/_posts/{2019-04-22-about-cookies.adoc → 2019-06-01-about-cookies.adoc} +28 -9
  255. data/lib/starter_web/collections/posts/public/jekyll/_posts/2018-05-01-confusion-about-base-url.adoc +6 -2
  256. data/lib/starter_web/index.html +20 -26
  257. data/lib/starter_web/package.json +6 -5
  258. data/lib/starter_web/pages/private/bookshelf/100_whats_up.adoc +12 -7
  259. data/lib/starter_web/pages/private/bookshelf/200_book_shelf_biography.adoc +3 -3
  260. data/lib/starter_web/pages/private/bookshelf/300_book_shelf_fantasy.adoc +3 -3
  261. data/lib/starter_web/pages/private/bookshelf/400_book_shelf_romance.adoc +3 -3
  262. data/lib/starter_web/pages/private/docs/gh_webhooks/manage_webhook_from_gh.adoc +1 -1
  263. data/lib/starter_web/pages/private/docs/platform/platform.adoc +2 -2
  264. data/lib/starter_web/pages/private/pen/jquery/deferred_try_catch.adoc +1 -1
  265. data/lib/starter_web/pages/protected/previewer/justified_gallery.html +5 -6
  266. data/lib/starter_web/pages/protected/previewer/mdi_icons_preview.adoc +3 -8
  267. data/lib/starter_web/pages/protected/previewer/twitter_emoji_preview.adoc +7 -8
  268. data/lib/starter_web/pages/public/about/{quick_search.adoc → _unused/site_search.adoc} +4 -4
  269. data/lib/starter_web/pages/public/about/about_site.adoc +5 -4
  270. data/lib/starter_web/pages/public/about/become_a_patron.adoc +10 -9
  271. data/lib/starter_web/pages/public/blog/navigator/archive.html +7 -8
  272. data/lib/starter_web/pages/public/blog/navigator/archive/categoryview.html +6 -7
  273. data/lib/starter_web/pages/public/blog/navigator/archive/dateview.html +8 -8
  274. data/lib/starter_web/pages/public/blog/navigator/archive/tagview.html +7 -8
  275. data/lib/starter_web/pages/public/blog/navigator/index.html +7 -8
  276. data/lib/starter_web/pages/public/legal/de/300_privacy.adoc +1 -1
  277. data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +1 -1
  278. data/lib/starter_web/pages/public/panels/service_panel/01_core.adoc +2 -2
  279. data/lib/starter_web/pages/public/previewer/bootstrap_theme.adoc +36 -26
  280. data/lib/starter_web/pages/public/start/_unused/_roundtrip/000_includes/attributes.asciidoc +95 -0
  281. data/lib/starter_web/pages/public/start/_unused/_roundtrip/000_includes/documents/100_gistblock.asciidoc +27 -0
  282. data/lib/starter_web/pages/public/start/_unused/_roundtrip/000_includes/documents/410_extended_modals_html.asciidoc +928 -0
  283. data/lib/starter_web/pages/public/start/_unused/_roundtrip/000_includes/documents/420_responsive_tables.asciidoc +203 -0
  284. data/lib/starter_web/pages/public/start/_unused/_roundtrip/000_whats_up.adoc +63 -0
  285. data/lib/starter_web/pages/public/start/_unused/_roundtrip/100_present_images.adoc +305 -0
  286. data/lib/starter_web/pages/public/start/_unused/_roundtrip/100_present_videos.adoc +159 -0
  287. data/lib/starter_web/pages/public/start/_unused/_roundtrip/200_typography.adoc +517 -0
  288. data/lib/starter_web/pages/public/start/_unused/_roundtrip/300_icon_fonts.adoc +328 -0
  289. data/lib/starter_web/pages/public/start/_unused/_roundtrip/400_asciidoc_extensions.adoc +577 -0
  290. data/lib/starter_web/pages/public/start/_unused/_roundtrip/410_bs_modals_extentions.adoc +465 -0
  291. data/lib/starter_web/pages/public/start/_unused/_roundtrip/420_responsive_tables_extensions.adoc +268 -0
  292. data/lib/starter_web/pages/public/start/_unused/_roundtrip/500_themes.adoc +81 -0
  293. data/lib/starter_web/pages/public/start/_unused/_roundtrip/800_whats_next.adoc +73 -0
  294. data/lib/starter_web/pages/public/start/_unused/_roundtrip/_unused/600_cards.adoc +770 -0
  295. data/lib/starter_web/pages/public/start/_unused/_roundtrip/_unused/710_search_engine.adoc +195 -0
  296. data/lib/starter_web/pages/public/start/_unused/_roundtrip/_unused/720_google_custom_search.adoc +41 -0
  297. data/lib/starter_web/pages/public/start/_unused/bmd_examples/100_bmd_landing_page.asciidoc +2 -2
  298. data/lib/starter_web/pages/public/start/_unused/change_me_first.adoc +139 -0
  299. data/lib/starter_web/pages/public/start/downloads/quickstarter/100_linux_starter.adoc +2 -2
  300. data/lib/starter_web/pages/public/start/downloads/quickstarter/200_macos_starter.adoc +1 -1
  301. data/lib/starter_web/pages/public/start/downloads/quickstarter/300_windows_starter.adoc +1 -1
  302. data/lib/starter_web/pages/public/start/downloads/quickstarter/quickstart.adoc +3 -3
  303. data/lib/starter_web/pages/public/start/kickstarter/web_in_a_day/000_includes/attributes.asciidoc +8 -8
  304. data/lib/starter_web/pages/public/start/kickstarter/web_in_a_day/100_introduction.adoc +22 -14
  305. data/lib/starter_web/pages/public/start/kickstarter/web_in_a_day/110_preparations.adoc +3 -3
  306. data/lib/starter_web/pages/public/start/kickstarter/web_in_a_day/120_getting_started.adoc +3 -3
  307. data/lib/starter_web/pages/public/start/roundtrip/000_includes/attributes.asciidoc +2 -0
  308. data/lib/starter_web/pages/public/start/roundtrip/000_includes/documents/410_extended_modals_html.asciidoc +928 -0
  309. data/lib/starter_web/pages/public/start/roundtrip/000_whats_up.adoc +63 -0
  310. data/lib/starter_web/pages/public/start/roundtrip/100_present_images.adoc +15 -103
  311. data/lib/starter_web/pages/public/start/roundtrip/100_present_videos.adoc +159 -0
  312. data/lib/starter_web/pages/public/start/roundtrip/200_typography.adoc +16 -15
  313. data/lib/starter_web/pages/public/start/roundtrip/300_icon_fonts.adoc +9 -8
  314. data/lib/starter_web/pages/public/start/roundtrip/400_asciidoc_extensions.adoc +13 -8
  315. data/lib/starter_web/pages/public/start/roundtrip/410_bs_modals_extentions.adoc +12 -936
  316. data/lib/starter_web/pages/public/start/roundtrip/420_responsive_tables_extensions.adoc +25 -29
  317. data/lib/starter_web/pages/public/start/roundtrip/500_themes.adoc +17 -14
  318. data/lib/starter_web/pages/public/start/roundtrip/800_whats_next.adoc +73 -0
  319. data/lib/starter_web/pages/public/start/roundtrip/_unused/600_cards.adoc +5 -5
  320. data/lib/starter_web/pages/public/start/roundtrip/_unused/710_search_engine.adoc +1 -1
  321. data/lib/starter_web/pages/public/start/roundtrip/_unused/720_google_custom_search.adoc +2 -2
  322. data/lib/starter_web/pages/public/start/whats_next.adoc +76 -0
  323. data/lib/starter_web/pages/public/start/whats_up.adoc +13 -11
  324. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  325. data/lib/starter_web/utilsrv/package.json +1 -1
  326. metadata +274 -120
  327. data/_includes/themes/j1/modules/navigator/generator.olde.html +0 -192
  328. data/lib/starter_web/_data/modules/defaults/header.yml +0 -221
  329. data/lib/starter_web/_data/modules/header.yml +0 -221
  330. data/lib/starter_web/assets/images/animated/1_ZrgWTM-NmdhJFac8T7-4Rg.gif +0 -0
  331. data/lib/starter_web/assets/images/animated/2049.gif +0 -0
  332. data/lib/starter_web/assets/images/carousel/katarina/katarina-1.jpg +0 -0
  333. data/lib/starter_web/assets/images/carousel/katarina/katarina-2.jpg +0 -0
  334. data/lib/starter_web/assets/images/carousel/katarina/katarina-3.jpg +0 -0
  335. data/lib/starter_web/assets/images/carousel/katarina/katarina-4.jpg +0 -0
  336. data/lib/starter_web/assets/images/carousel/katarina/katarina-5.jpg +0 -0
  337. data/lib/starter_web/assets/images/icons/j1/j1.ico +0 -0
  338. data/lib/starter_web/assets/images/icons/j1/scalable/j1v2.svg +0 -2034
  339. data/lib/starter_web/assets/images/master_header/aaron-burden-1280x600.png +0 -0
  340. data/lib/starter_web/assets/images/master_header/admin-bootstrap.jpg +0 -0
  341. data/lib/starter_web/assets/images/master_header/admin-dashboard-bootstrap-1280x600.png +0 -0
  342. data/lib/starter_web/assets/images/master_header/chuttersnap-1280x800.png +0 -0
  343. data/lib/starter_web/assets/images/master_header/clark-tibbs-do-something-1280x600.png +0 -0
  344. data/lib/starter_web/assets/images/master_header/clark-tibbs-do-something-1920x900.png +0 -0
  345. data/lib/starter_web/assets/images/master_header/docker_banner_l-1280x500.png +0 -0
  346. data/lib/starter_web/assets/images/master_header/docker_banner_r-1280x500.png +0 -0
  347. data/lib/starter_web/assets/images/master_header/homehead-default-1280x600.png +0 -0
  348. data/lib/starter_web/assets/images/master_header/homehead-default-1920x800.png +0 -0
  349. data/lib/starter_web/assets/images/master_header/ideas-start-here-1280x900.png +0 -0
  350. data/lib/starter_web/assets/images/master_header/ideas-start-here-1920x1200.png +0 -0
  351. data/lib/starter_web/assets/images/master_header/maarten-van-den-heuvel-1280x600.png +0 -0
  352. data/lib/starter_web/assets/images/master_header/pagehead-default-1280x500.png +0 -0
  353. data/lib/starter_web/assets/images/master_header/pagehead-default-1920x600.png +0 -0
  354. data/lib/starter_web/assets/images/master_header/stefan-stefancik-1280x800.png +0 -0
  355. data/lib/starter_web/assets/images/master_header/tables-1920.jpg +0 -0
  356. data/lib/starter_web/assets/images/master_header/water-journal-1280x600.png +0 -0
  357. data/lib/starter_web/assets/images/master_header/whats-up-1920x1200.png +0 -0
  358. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/j1-template-theme.png +0 -0
  359. data/lib/starter_web/assets/images/pages/roundtrip/bootstrap-modals.jpg +0 -0
  360. data/lib/starter_web/assets/images/pages/roundtrip/cards-1920.jpg +0 -0
  361. data/lib/starter_web/assets/images/pages/roundtrip/icon-fonts-1920.jpg +0 -0
  362. data/lib/starter_web/assets/images/pages/roundtrip/meeting.jpg +0 -0
  363. data/lib/starter_web/assets/images/pages/roundtrip/oleg-magni-1920x1280.png +0 -0
  364. data/lib/starter_web/assets/images/pages/roundtrip/package.json +0 -125
  365. data/lib/starter_web/assets/images/pages/roundtrip/puzzle-1280x600.jpg +0 -0
  366. data/lib/starter_web/assets/images/pages/roundtrip/readme_1280x600.png +0 -0
  367. data/lib/starter_web/assets/images/pages/roundtrip/readme_1920x1000.png +0 -0
  368. data/lib/starter_web/assets/images/pages/roundtrip/theme-1920.jpg +0 -0
  369. data/lib/starter_web/assets/images/pages/roundtrip/typography-1920.jpg +0 -0
  370. data/lib/starter_web/assets/images/public/aaron-burden-1280x600.png +0 -0
  371. data/lib/starter_web/assets/images/public/admin-bootstrap.jpg +0 -0
  372. data/lib/starter_web/assets/images/public/admin-dashboard-bootstrap-1280x600.png +0 -0
  373. data/lib/starter_web/assets/images/public/cat-5.jpg +0 -0
  374. data/lib/starter_web/assets/images/public/cat-6.jpg +0 -0
  375. data/lib/starter_web/assets/images/public/cat-7.jpg +0 -0
  376. data/lib/starter_web/assets/images/public/cat-8.jpg +0 -0
  377. data/lib/starter_web/assets/images/public/chuttersnap-1280x800.png +0 -0
  378. data/lib/starter_web/assets/images/public/clark-tibbs-do-something-1280x600.png +0 -0
  379. data/lib/starter_web/assets/images/public/clark-tibbs-do-something-1920x900.png +0 -0
  380. data/lib/starter_web/assets/images/public/docker_banner_l-1280x500.png +0 -0
  381. data/lib/starter_web/assets/images/public/docker_banner_r-1280x500.png +0 -0
  382. data/lib/starter_web/assets/images/public/homehead-default-1280x600.png +0 -0
  383. data/lib/starter_web/assets/images/public/homehead-default-1920x800.png +0 -0
  384. data/lib/starter_web/assets/images/public/ideas-start-here-1280x900.png +0 -0
  385. data/lib/starter_web/assets/images/public/ideas-start-here-1920x1200.png +0 -0
  386. data/lib/starter_web/assets/images/public/image_01.jpg +0 -0
  387. data/lib/starter_web/assets/images/public/image_02.jpg +0 -0
  388. data/lib/starter_web/assets/images/public/image_03.jpg +0 -0
  389. data/lib/starter_web/assets/images/public/image_04.jpg +0 -0
  390. data/lib/starter_web/assets/images/public/katarina-1.jpg +0 -0
  391. data/lib/starter_web/assets/images/public/katarina-2.jpg +0 -0
  392. data/lib/starter_web/assets/images/public/katarina-3.jpg +0 -0
  393. data/lib/starter_web/assets/images/public/katarina-4.jpg +0 -0
  394. data/lib/starter_web/assets/images/public/katarina-5.jpg +0 -0
  395. data/lib/starter_web/assets/images/public/maarten-van-den-heuvel-1280x600.png +0 -0
  396. data/lib/starter_web/assets/images/public/pagehead-default-1280x500.png +0 -0
  397. data/lib/starter_web/assets/images/public/pagehead-default-1920x600.png +0 -0
  398. data/lib/starter_web/assets/images/public/stefan-stefancik-1280x800.png +0 -0
  399. data/lib/starter_web/assets/images/public/tables-1920.jpg +0 -0
  400. data/lib/starter_web/assets/images/public/water-journal-1280x600.png +0 -0
  401. data/lib/starter_web/collections/posts/public/featured/_posts/2018-07-01-what-is-a-static-site.adoc +0 -140
  402. data/lib/starter_web/pages/public/start/change_me_first.adoc +0 -67
  403. data/screenshot.png +0 -0
@@ -0,0 +1,1792 @@
1
+ ---
2
+ regenerate: true
3
+ ---
4
+
5
+ {% capture cache %}
6
+
7
+ {% comment %}
8
+ # -----------------------------------------------------------------------------
9
+ # ~/assets/themes/j1/core/js/j1.js
10
+ # Liquid template to initialize J1 Template Core functions
11
+ #
12
+ # Product/Info:
13
+ # https://jekyll.one
14
+ #
15
+ # Copyright (C) 2019 Juergen Adams
16
+ #
17
+ # J1 Template is licensed under the MIT License.
18
+ # For details, see https://jekyll.one
19
+ # -----------------------------------------------------------------------------
20
+ # TODO: jadams, 2019-01-20: Isolate drawer, switch from BME code
21
+ # -----------------------------------------------------------------------------
22
+ # Test data:
23
+ # {{ liquid_var | debug }}
24
+ # -----------------------------------------------------------------------------
25
+ {% endcomment %}
26
+
27
+ {% comment %} Liquid procedures
28
+ -------------------------------------------------------------------------------- {% endcomment %}
29
+
30
+ {% comment %} Set global settings
31
+ -------------------------------------------------------------------------------- {% endcomment %}
32
+ {% assign environment = site.environment %}
33
+ {% assign template_version = site.version %}
34
+
35
+ {% if site.permalink == 'none' %}
36
+ {% capture page_url %}{{ site.url }}.html{% endcapture %}
37
+ {% else %}
38
+ {% capture page_url %}{{ site.url }}{% endcapture %}
39
+ {% endif %}
40
+
41
+ {% comment %} Process YML config data
42
+ ================================================================================ {% endcomment %}
43
+
44
+ {% comment %} Set config files
45
+ -------------------------------------------------------------------------------- {% endcomment %}
46
+ {% assign template_config = site.data.template_settings %}
47
+ {% assign blocks = site.data.blocks %}
48
+ {% assign modules = site.data.modules %}
49
+
50
+ {% comment %} Set config data
51
+ -------------------------------------------------------------------------------- {% endcomment %}
52
+ {% assign banner_config_defaults = blocks.defaults.banner.defaults %}
53
+ {% assign banner_config_settings = blocks.banner.settings %}
54
+ {% assign panel_config_defaults = blocks.defaults.panel.defaults %}
55
+ {% assign panel_config_settings = blocks.panel.settings %}
56
+ {% assign footer_config_defaults = blocks.defaults.footer.defaults %}
57
+ {% assign toccer_defaults = modules.defaults.toccer.defaults %}
58
+ {% assign toccer_settings = modules.toccer.settings %}
59
+ {% assign themer_defaults = modules.defaults.themer.defaults %}
60
+ {% assign themer_settings = modules.themer.settings %}
61
+
62
+ {% comment %} Set config options
63
+ -------------------------------------------------------------------------------- {% endcomment %}
64
+ {% assign toccer_options = toccer_defaults | merge: toccer_settings %}
65
+ {% assign themer_options = themer_defaults | merge: themer_settings %}
66
+ {% assign footer_id = footer_config_defaults.container-id %}
67
+ {% assign footer_data_path = footer_config_defaults.data_path %}
68
+ {% assign banner_data_path = banner_config_defaults.data_path %}
69
+ {% assign panel_data_path = panel_config_defaults.data_path %}
70
+
71
+ {% assign hideOnReload = modules.themer_options.hideOnReload %}
72
+
73
+ /*
74
+ # -----------------------------------------------------------------------------
75
+ # ~/assets/themes/j1/adapter/js/j1_template.js
76
+ # JS Adapter for J1 Template
77
+ #
78
+ # Product/Info:
79
+ # https://jekyll.one
80
+ #
81
+ # Copyright (C) 2019 Juergen Adams
82
+ #
83
+ # J1 Template is licensed under the MIT License.
84
+ # For details, see https://jekyll.one
85
+ # -----------------------------------------------------------------------------
86
+ # Adapter generated: {{site.time}}
87
+ # -----------------------------------------------------------------------------
88
+ */
89
+ 'use strict';
90
+
91
+ var j1 = (function () {
92
+
93
+ // ---------------------------------------------------------------------------
94
+ // globals
95
+ // ---------------------------------------------------------------------------
96
+ var rePager = new RegExp('navigator|dateview|tagview|archive');
97
+ var environment = '{{environment}}';
98
+ var moduleOptions = {};
99
+
100
+ // Status information
101
+ var state = 'not_started';
102
+ var mode = 'not_detected';
103
+
104
+ var current_page;
105
+ var previous_page;
106
+ var last_pager;
107
+ var last_pager_url;
108
+ var app_detected;
109
+ var user_state_detected;
110
+
111
+ // Theme information
112
+ var themeName;
113
+ var themeCss;
114
+ var themeExtensionCss;
115
+
116
+ // Pathes of J1 data files
117
+ var colors_data_path = '{{template_config.colors_data_path}}';
118
+ var font_size_data_path = '{{template_config.font_size_data_path}}';
119
+ var message_catalog_data_path = '{{template_config.message_catalog_data_path}}';
120
+
121
+ // Logger
122
+ var logger;
123
+ var logText;
124
+
125
+ var _this;
126
+ var settings;
127
+ var json_data;
128
+ var ep;
129
+ var baseUrl;
130
+ var referrer;
131
+
132
+ var default_theme_css = environment === 'production' ? '/assets/themes/j1/core/css/uno.min.css' : '/assets/themes/j1/core/css/uno.css'
133
+ var default_theme_name = 'Uno';
134
+ var default_theme_author = 'J1 Team';
135
+ var default_theme_link = 'https://jekyll.one/';
136
+
137
+ var cookie_names = {
138
+ 'app_session': '{{template_config.cookies.app_session}}',
139
+ 'user_session': '{{template_config.cookies.user_session}}',
140
+ 'cookie_consent': '{{template_config.cookies.cookie_consent}}'
141
+ }
142
+
143
+ // J1 UserState Cookie (initial values)
144
+ var user_state = {
145
+ 'theme_css': default_theme_css,
146
+ 'theme_extension_css': '{{themer_options.includeBootswatch}}',
147
+ 'theme_name': default_theme_name,
148
+ 'theme_author': default_theme_author,
149
+ 'theme_author_url': '{{template_config.theme_author_url}}',
150
+ 'theme_link': default_theme_link,
151
+ 'theme_version': '{{site.version}}',
152
+ 'provider': '{{template_config.user.provider}}',
153
+ 'provider_membership': '{{template_config.user.provider_membership}}',
154
+ 'provider_permissions': '{{template_config.user.provider_permissions}}',
155
+ 'provider_site_url': '{{template_config.user.provider_site_url}}',
156
+ 'provider_home_url': '{{template_config.user.provider_home_url}}',
157
+ 'provider_blog_url': '{{template_config.user.provider_blog_url}}',
158
+ 'provider_member_url': '{{template_config.user.provider_member_url}}',
159
+ 'provider_privacy_url': '{{template_config.user.provider_privacy_url}}',
160
+ 'mode': 'na',
161
+ 'user_name': '{{template_config.user.user_name}}',
162
+ 'locale': navigator.language || navigator.userLanguage,
163
+ 'requested_page': 'na',
164
+ 'previous_page': 'na',
165
+ 'last_pager': '/pages/public/blog/navigator/',
166
+ 'cookies_accepted': 'pending'
167
+ };
168
+
169
+ // ---------------------------------------------------------------------------
170
+ // helper functions
171
+ // ---------------------------------------------------------------------------
172
+
173
+ function executeFunctionByName(functionName, context /*, args */) {
174
+ // See: https://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string
175
+ //
176
+ var args = Array.prototype.slice.call(arguments, 2);
177
+ var namespaces = functionName.split(".");
178
+ var func = namespaces.pop();
179
+ for(var i = 0; i < namespaces.length; i++) {
180
+ context = context[namespaces[i]];
181
+ }
182
+ return context[func].apply(context, args);
183
+ }
184
+
185
+ // ---------------------------------------------------------------------------
186
+ // main object
187
+ // ---------------------------------------------------------------------------
188
+ return {
189
+
190
+ // -------------------------------------------------------------------------
191
+ // init
192
+ // Initializer
193
+ // -------------------------------------------------------------------------
194
+ init: function ( options ) {
195
+
196
+ // initialize state flag
197
+ //j1.state = 'pending';
198
+
199
+ var url = new parseURL(window.location.href)
200
+ var baseUrl = url.origin;
201
+
202
+ // -----------------------------------------------------------------------
203
+ // options loader
204
+ // -----------------------------------------------------------------------
205
+ var defaults = {
206
+ toc: false,
207
+ scrollbar: false,
208
+ comments: false
209
+ };
210
+ var args = $.extend(defaults, options);
211
+
212
+ // -----------------------------------------------------------------------
213
+ // init global vars
214
+ // -----------------------------------------------------------------------
215
+ var epoch = Math.floor(Date.now()/1000);
216
+ var timestamp_now = moment.unix(epoch).format('YYYY-MM-DD HH:mm:ss');
217
+ var curr_state = 'started';
218
+
219
+ logger = log4javascript.getLogger('j1.init');
220
+ user_state.created = timestamp_now;
221
+ user_state.timestamp = timestamp_now;
222
+
223
+ // -----------------------------------------------------------------------
224
+ // Initialize||Load (existing) user session cookie
225
+ // -----------------------------------------------------------------------
226
+ user_state = j1.existsCookie(cookie_names.user_session)
227
+ ? j1.readCookie(cookie_names.user_session)
228
+ : j1.writeCookie({
229
+ name: cookie_names.user_session,
230
+ data: user_state
231
+ });
232
+
233
+ // Detect middleware (mode 'app') and update user state cookie
234
+ // -----------------------------------------------------------------------
235
+ // if (user_state.mode === 'na' || user_state.mode === 'app') {
236
+ if (user_state.mode === 'na') {
237
+ var url = new parseURL(window.location.href)
238
+
239
+ baseUrl = url.origin;
240
+ ep = baseUrl + '/status' + '?page=' + window.location.pathname;
241
+
242
+ $.when ($.ajax(ep))
243
+ .then(function(data) {
244
+ var logger = log4javascript.getLogger('j1.init');
245
+ user_state = j1.readCookie(cookie_names.user_session);
246
+ user_state.mode = 'app';
247
+ user_state.timestamp = timestamp_now;
248
+ user_state.requested_page = window.location.pathname;
249
+ user_state = j1.mergeData(user_state, data);
250
+ logText = 'mode detected: ' + user_state.mode;
251
+
252
+ logger.info(logText);
253
+ logger.info('update user state cookie');
254
+ j1.writeCookie({
255
+ name: cookie_names.user_session,
256
+ data: user_state
257
+ });
258
+ j1.setState(curr_state);
259
+ })
260
+ .catch(function(error) {
261
+ var logger = log4javascript.getLogger('j1.init');
262
+ user_state.mode = 'web';
263
+ user_state.requested_page = window.location.pathname;
264
+ user_state.timestamp = timestamp_now;
265
+ logText = 'mode detected: ' + user_state.mode;
266
+ logger.info(logText);
267
+ j1.writeCookie({
268
+ name: cookie_names.user_session,
269
+ data: user_state
270
+ });
271
+ logger.info('update user state cookie');
272
+ j1.setState(curr_state);
273
+ });
274
+ } else {
275
+ state = 'started';
276
+ logger.info('state: ' + state);
277
+ logger.info('page is being initialized');
278
+ }
279
+
280
+ {% comment %} Deferred data loads
281
+ See: https://stackoverflow.com/questions/3709597/wait-until-all-jquery-ajax-requests-are-done
282
+ Load J1 Template data objects 'asychronously'
283
+ -------------------------------------------------------------------------- {% endcomment %}
284
+
285
+ // -----------------------------------------------------------------------
286
+ // data loader (should be rewitten to xhrDATA() )
287
+ // -----------------------------------------------------------------------
288
+ $.when (
289
+ j1.getColorData(colors_data_path),
290
+ j1.getFontSizeData(font_size_data_path),
291
+ j1.getMessageCatalog(message_catalog_data_path))
292
+ .done (function(colorData, fontSizes, messageCatalog) {
293
+ j1.colors = colorData[0];
294
+ j1.fonts = fontSizes[0];
295
+
296
+ // set logger for callback|anonymous
297
+ //
298
+ var logger = log4javascript.getLogger('j1.init');
299
+
300
+ logText = j1.getMessage('info', 'getState', 'text');
301
+ logText = logText + j1.getMessage('info', 'getState', 'data_objects');
302
+ logText = logText + j1.getMessage('info', 'getState', 'finished');
303
+ j1.logger('j1.init', 'info', logText);
304
+
305
+ logText = j1.getMessage('info', 'setState', 'text');
306
+ logText = logText + j1.getMessage('info', 'setState', 'started');
307
+ j1.logger('j1.init', 'info', logText);
308
+ executeFunctionByName('j1.setState', window, state);
309
+
310
+ // set logger for callback|anonymous
311
+ var logger = log4javascript.getLogger('j1.init');
312
+
313
+ if ( args.scrollbar === 'false' ) {
314
+ $('body').addClass( 'hide-scrollbar' )
315
+ $('html').addClass( 'hide-scrollbar-moz' )
316
+ }
317
+
318
+ logger.info('read user state from cookie');
319
+ user_state = j1.readCookie(cookie_names.user_session);
320
+
321
+ // process|update UserState
322
+ //
323
+ themeName = user_state.theme_name;
324
+ themeCss = user_state.theme_css;
325
+ themeExtensionCss = user_state.theme_extension_css;
326
+
327
+ // save last page access
328
+ // See: https://stackoverflow.com/questions/3528324/how-to-get-the-previous-url-in-javascript
329
+ // See: https://developer.mozilla.org/de/docs/Web/API/Window/history
330
+ //
331
+ user_state.timestamp = timestamp_now;
332
+ referrer = new parseURL(document.referrer);
333
+ current_page = window.location.pathname;
334
+ user_state.requested_page = current_page;
335
+ user_state.previous_page = referrer.search === '' ?
336
+ (referrer.pathname === '' ? current_page : referrer.pathname) :
337
+ (user_state.previous_page === '' || user_state.previous_page === 'na'
338
+ ? '/'
339
+ : user_state.previous_page);
340
+
341
+ // calculate last 'pager' if any
342
+ //
343
+ if (rePager.test(user_state.previous_page)) {
344
+ last_pager = user_state.previous_page;
345
+ user_state.last_pager = last_pager;
346
+ } else {
347
+ last_pager = user_state.last_pager;
348
+ }
349
+
350
+ logger.info('update user state cookie');
351
+ j1.writeCookie({
352
+ name: cookie_names.user_session,
353
+ data: user_state
354
+ });
355
+
356
+ // ---------------------------------------------------------------------
357
+ // Initialize page resources for global modules (sequential asynchronous)
358
+ // (should be rewitten to xhrDATA() )
359
+ // ---------------------------------------------------------------------
360
+ $.when (
361
+ j1.initBanner(settings),
362
+ j1.initPanel(settings),
363
+ j1.initFooter(settings) )
364
+ .then (function (initBanner_response, initPanel_response, initFooter_response) {
365
+ var logger = log4javascript.getLogger('j1.init');
366
+
367
+ // Wait for LAST thenable (footer) in chain finishes
368
+ var footerLoaded = setInterval(function() {
369
+ if ( j1.getState() == 'footer_loaded') {
370
+ // clear interval checking
371
+ clearInterval(footerLoaded);
372
+ logger.info('loading data completed');
373
+
374
+ // Continue to run initializers
375
+ //
376
+ state = j1.getMessage('info', 'setState', 'running');
377
+ logText = j1.getMessage('info', 'setState', 'text');
378
+ logText = logText + j1.getMessage('info', 'setState', 'running');
379
+ j1.logger('j1.init', 'info', logText);
380
+
381
+ user_state.timestamp = timestamp_now;
382
+ j1.writeCookie({
383
+ name: cookie_names.user_session,
384
+ data: user_state
385
+ });
386
+
387
+ // ---------------------------------------------------------------
388
+ // Finalize|Display page (sequential asynchronous)
389
+ // NOTE:
390
+ // jadams 2019-01-20: for MDB, enabled only drawer, switch
391
+ // and ripples
392
+ // ---------------------------------------------------------------
393
+ $.when (
394
+ j1.initMDB(settings),
395
+ j1.initClipboard(settings))
396
+ .then (function () {
397
+ j1.displayPage();
398
+ })
399
+ .catch(function(error) {
400
+ var logger = log4javascript.getLogger('j1.init');
401
+ json_data = JSON.stringify(error, undefined, 2);
402
+ logText = 'deferred: ' + json_data;
403
+ logger.error(logText);
404
+ });
405
+ }
406
+ }, 25); // END 'footerLoaded'
407
+ }) // END load global modules
408
+ .catch(function(error) {
409
+ var logger = log4javascript.getLogger('j1.init');
410
+ json_data = JSON.stringify(error, undefined, 2);
411
+ logText = 'deferred: ' + json_data;
412
+ logger.error(logText);
413
+ });
414
+ }) // END load global data objects
415
+ .catch(function(error) {
416
+ var logger = log4javascript.getLogger('j1.init');
417
+ json_data = JSON.stringify(error, undefined, 2);
418
+ logText = 'deferred: ' + json_data;
419
+ logger.error(logText);
420
+ });
421
+
422
+ }, // END init
423
+
424
+ // -------------------------------------------------------------------------
425
+ // initBanner
426
+ // AJAX fetcher to load and place all banner used for a page
427
+ // -------------------------------------------------------------------------
428
+ initBanner: function (options) {
429
+ var logger = log4javascript.getLogger('j1.initBanner');
430
+ var banner = [];
431
+ var bannerOptions = [];
432
+ var mod = 'j1';
433
+
434
+ {% comment %}
435
+ Closure to pass additional data (e.g. #banner_id) to AJAX load callback
436
+ See: http://stackoverflow.com/questions/939032/jquery-pass-more-parameters-into-callback
437
+ -------------------------------------------------------------------------- {% endcomment %}
438
+ var cb_load_closure = function(banner_id) {
439
+ return function ( responseTxt, statusTxt, xhr ) {
440
+ if ( statusTxt == 'success' ) {
441
+ logText = 'loading banner on ID ' +banner_id+ ' completed';
442
+ logger.info(logText);
443
+ }
444
+ if ( statusTxt == 'error' ) {
445
+ logText = 'loading banner on ID ' +banner_id+ ' failed: ' + xhr.status + ': ' + xhr.statusText;
446
+ logger.error(logText);
447
+ // Set|Log status
448
+ state = 'failed';
449
+ logger.error('state: ' + state);
450
+ }
451
+ };
452
+ };
453
+
454
+ {% comment %} Collect all banner id|s configured
455
+ -------------------------------------------------------------------------- {% endcomment %}
456
+ {% for items in banner_config_settings %}
457
+ {% assign key = items[0] %}
458
+ {% assign value = items[1] %}
459
+
460
+ {% if key == 'divider' %} {% assign banner_config = value %} {% endif %}
461
+ {% if key == 'teaser' %} {% assign banner_config = value %} {% endif %}
462
+ {% if key == 'image' %} {% assign banner_config = value %} {% endif %}
463
+ {% if key == 'parallax' %} {% assign banner_config = value %} {% endif %}
464
+ {% if key == 'exception' %} {% assign banner_config = value %} {% endif %}
465
+
466
+ {% for items in banner_config %}
467
+ {% for banners in items %}
468
+
469
+ {% for banner in banners %}
470
+ {% for item in banner %}
471
+ {% assign key = item[0] %}
472
+ {% assign value = item[1] %}
473
+
474
+ {% if key and debug %} item:value {{key}}:{{value}} {% endif %}
475
+
476
+ {% if key == 'id' %} {% assign id = value %} {% endif %}
477
+ {% if key == 'enabled' %} {% assign enabled = value %} {% endif %}
478
+ {% if key == 'background_color_1' %} {% assign background_color_1 = value %} {% endif %}
479
+ {% if key == 'background_color_2' %} {% assign background_color_2 = value %} {% endif %}
480
+ {% endfor %}
481
+ {% endfor %}
482
+
483
+ {% if id and enabled %}
484
+ {% comment %} Add CSS styles for current banner to section <HEAD>
485
+ -------------------------------------------------------------------- {% endcomment %}
486
+ {% if background_color_1 and background_color_2 %}
487
+ var banner_backround_style = '';
488
+ // Initialze banner background gradient/colors
489
+ banner_backround_style += "<style> .{{id}}-background { ";
490
+ banner_backround_style += "background-image: -webkit-gradient(linear, left top, left bottom, from( " +j1.setColorData('{{background_color_1}}')+ " ), to( " +j1.setColorData('{{background_color_2}}')+ " ));";
491
+ banner_backround_style += "background-image: -webkit-linear-gradient(top, " +j1.setColorData('{{background_color_1}}')+ " 0%, " +j1.setColorData('{{background_color_2}}')+ " 100%);";
492
+ banner_backround_style += "background-image: -o-linear-gradient(top, " +j1.setColorData('{{background_color_1}}')+ " 0%, " +j1.setColorData('{{background_color_2}}')+ " 100%);";
493
+ banner_backround_style += "background-image: linear-gradient(to bottom, " +j1.setColorData('{{background_color_1}}')+ " 0%, " +j1.setColorData('{{background_color_2}}')+ " 100%);";
494
+ banner_backround_style += 'filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="' +j1.setColorData('{{background_color_1}}')+ '", endColorstr="' +j1.setColorData('{{background_color_2}}')+ '", GradientType=0); ';
495
+ banner_backround_style += "} </style>";
496
+ $('head').append( banner_backround_style );
497
+ {% endif %}
498
+
499
+ {% comment %} Register current banner
500
+ -------------------------------------------------------------------- {% endcomment %}
501
+ banner.push('{{id}}');
502
+ {% endif %}
503
+
504
+ {% endfor %} {% comment %} END banners {% endcomment %}
505
+
506
+ {% comment %} Reset (Liquid) element variables
507
+ ---------------------------------------------------------------------- {% endcomment %}
508
+ {% assign id = nil %}
509
+ {% assign enabled = nil %}
510
+ {% assign background_color_1 = nil %}
511
+ {% assign background_color_2 = nil %}
512
+ {% assign banner_config = nil %}
513
+
514
+ {% endfor %} {% comment %} END banner_config {% endcomment %}
515
+ {% endfor %} {% comment %} END banner_config_settings {% endcomment %}
516
+
517
+ {% comment %} REGISTER exceptions container
518
+ -------------------------------------------------------------------------- {% endcomment %}
519
+ banner.push('exception_container');
520
+
521
+ {% comment %} LOAD all banner registered
522
+ -------------------------------------------------------------------------- {% endcomment %}
523
+ if ( banner.length ) {
524
+ for (var i in banner) {
525
+ var id = '#' + banner[i];
526
+ var selector = $(id);
527
+ if (selector.length) {
528
+ logText = 'loading banner on ID: ' +banner[i];
529
+ logger.info(logText);
530
+ var banner_data_path = '{{banner_data_path}} ' + id + ' > *';
531
+ selector.load( banner_data_path, cb_load_closure( id ) );
532
+ }
533
+ }
534
+ } else {
535
+ logText = 'no banner found in site';
536
+ logger.info(logText);
537
+ }
538
+
539
+ return true;
540
+ }, // END initBanner
541
+
542
+ // -------------------------------------------------------------------------
543
+ // initPanel
544
+ // AJAX fetcher to load and place all panel used for a page
545
+ // -------------------------------------------------------------------------
546
+ // ToDo:
547
+ initPanel: function ( options ) {
548
+ var logger = log4javascript.getLogger('j1.initPanel');
549
+ var panel = [];
550
+ var mod = 'j1';
551
+
552
+ {% comment %} Closure to pass additional data (e.g. panel_id) to AJAX load callback
553
+ See: http://stackoverflow.com/questions/939032/jquery-pass-more-parameters-into-callback
554
+ -------------------------------------------------------------------------- {% endcomment %}
555
+ var cb_load_closure = function(panel_id) {
556
+ return function ( responseTxt, statusTxt, xhr ) {
557
+ if ( statusTxt == 'success' ) {
558
+ logText = 'loading panel on ID ' +panel_id+ ' completed';
559
+ logger.info(logText);
560
+ }
561
+ if ( statusTxt == 'error' ) {
562
+ logText = 'loading panel on ID ' +panel_id+ ' failed: ' + xhr.status + ': ' + xhr.statusText;
563
+ logger.error(logText);
564
+ // Set|Log status
565
+ state = 'Error';
566
+ logger.error('state: ' + state);
567
+ }
568
+ };
569
+ };
570
+
571
+ {% comment %} Collect all panel id|s configured
572
+ -------------------------------------------------------------------------- {% endcomment %}
573
+ {% for items in panel_config_settings %}
574
+ {% assign key = items[0] %}
575
+ {% assign value = items[1] %}
576
+
577
+ {% if key == 'intro' %} {% assign panel_config = value %} {% endif %}
578
+ {% if key == 'service' %} {% assign panel_config = value %} {% endif %}
579
+ {% if key == 'step' %} {% assign panel_config = value %} {% endif %}
580
+ {% if key == 'news' %} {% assign panel_config = value %} {% endif %}
581
+ {% if key == 'exception' %} {% assign panel_config = value %} {% endif %}
582
+
583
+ {% for items in panel_config %}
584
+ {% for panels in items %}
585
+
586
+ {% for panel in panels %}
587
+ {% for item in panel %}
588
+ {% assign key = item[0] %}
589
+ {% assign value = item[1] %}
590
+
591
+ {% if key and debug %} item:value {{key}}:{{value}} {% endif %}
592
+
593
+ {% if key == 'id' %} {% assign id = value %} {% endif %}
594
+ {% if key == 'enabled' %} {% assign enabled = value %} {% endif %}
595
+ {% endfor %}
596
+ {% endfor %}
597
+
598
+ {% comment %} Register current panel
599
+ -------------------------------------------------------------------------- {% endcomment %}
600
+ {% if id and enabled %}
601
+ panel.push('{{id}}');
602
+ {% endif %}
603
+
604
+ {% comment %} Reset (Liquid) element variables
605
+ -------------------------------------------------------------------------- {% endcomment %}
606
+ {% assign id = nil %}
607
+ {% assign enabled = nil %}
608
+ {% assign panel_config = nil %}
609
+
610
+ {% endfor %} {% comment %} END panels {% endcomment %}
611
+ {% endfor %} {% comment %} END panel_config {% endcomment %}
612
+ {% endfor %} {% comment %} END panel_config_settings {% endcomment %}
613
+
614
+ if ( panel.length ) {
615
+ for (var i in panel) {
616
+ var id = "#" + panel[i];
617
+ var selector = $(id);
618
+ if ( selector.length ) {
619
+ logText = 'loading panel on ID: ' +panel[i];
620
+ logger.info(logText);
621
+ var panel_data_path = '{{panel_data_path}} ' + id + ' > *';
622
+ selector.load( panel_data_path, cb_load_closure( id ) );
623
+ }
624
+ }
625
+ } else {
626
+ logText = 'no panel found in site';
627
+ logger.info(logText);
628
+ }
629
+
630
+ return true;
631
+ }, // END initPanel
632
+
633
+ // -------------------------------------------------------------------------
634
+ // initFooter
635
+ // AJAX fetcher to load and place the footer used for a page
636
+ // -------------------------------------------------------------------------
637
+ initFooter: function ( options ) {
638
+ var logger = log4javascript.getLogger('j1.initFooter');
639
+ var mod = 'j1';
640
+
641
+ logText = 'begin initialization';
642
+ logger.info(logText);
643
+
644
+ var cb_load_closure = function(footer_id) {
645
+ return function ( responseTxt, statusTxt, xhr ) {
646
+ if ( statusTxt == 'success' ) {
647
+ logText = 'footer on ID ' +footer_id+ ' loaded successfully';
648
+ logger.info(logText);
649
+
650
+ state = 'footer_loaded';
651
+ logger.info('Set state for module ' + mod + ': ' + state);
652
+ executeFunctionByName(mod + '.setState', window, state)
653
+
654
+ logText = 'initialization completed';
655
+ logger.info(logText);
656
+ }
657
+ if ( statusTxt == 'error' ) {
658
+ logText = 'footer on ID ' +footer_id+ ' loading failed. Error: ' + xhr.status + ': ' + xhr.statusText;
659
+ logger.error(logText);
660
+ // Set|Log status
661
+ state = 'failed';
662
+ logger.error('state: ' + state);
663
+ logText = 'initialization completed';
664
+ logger.info(logText);
665
+ }
666
+ };
667
+ };
668
+
669
+ var id = '#' + '{{footer_id}}';
670
+ var selector = $(id);
671
+ if ( selector.length ) {
672
+ var footer_data_path = '{{footer_data_path}}';
673
+ // var footer_data_path = '{{footer_data_path}}' + id + ' > *';
674
+ selector.load( footer_data_path, cb_load_closure( id ) );
675
+ }
676
+
677
+ return true;
678
+ }, // END initFooter
679
+
680
+ // -------------------------------------------------------------------------
681
+ // initClipboard
682
+ // Create copy-to-clipboard for all pages
683
+ // -------------------------------------------------------------------------
684
+ initClipboard: function ( options ) {
685
+ var logger = log4javascript.getLogger('j1.initClipboard');
686
+
687
+ logText = 'begin initialization';
688
+ logger.info(logText);
689
+
690
+ // insert copy to clipboard button before all elements having a
691
+ // class of ".highlight" assigned to (e.g. Asciidoc source blocks)
692
+ $('.highlight').each(function () {
693
+ // Check if no clipboard should be applied
694
+ var isNoClip = $(this).closest('.noclip');
695
+ if ( isNoClip.length == 0) {
696
+ var btnHtml = '<div class="j1-clipboard"><span class="btn-clipboard j1-tooltip" title="Copy to clipboard">Copy</span></div>';
697
+ var bumms = $(this).closest('.noclip');
698
+ $(this).before(btnHtml);
699
+ $('.btn-clipboard').tooltip();
700
+ }
701
+ });
702
+ var clipboard = new Clipboard( '.btn-clipboard', {
703
+ target: function target(trigger) {
704
+ return trigger.parentNode.nextElementSibling;
705
+ }
706
+ });
707
+
708
+ // Manage clipboard events
709
+ clipboard.on('success', function (e) {
710
+ $(e.trigger).attr('title', 'Copied!').tooltip('_fixTitle').tooltip('show').attr('title', 'Copy to clipboard').tooltip('_fixTitle');
711
+ var logger = log4javascript.getLogger('j1.initClipboard');
712
+ var logText = 'Copy-To-Clipboard sucessfull';
713
+ logger.debug(logText);
714
+ /* Cleanup clipped data for trailing numbers */
715
+ var splitted = e.text.split('\n');
716
+ var concat;
717
+ var i;
718
+ for (i=0; i<splitted.length; i++) {
719
+ concat += splitted[i].replace(/^\s+\d+/, '');
720
+ }
721
+ e.clearSelection();
722
+ });
723
+ clipboard.on('error', function (e) {
724
+ var fallbackMsg = /Mac/i.test(navigator.userAgent) ? 'Press \u2318 to copy' : 'Press Ctrl-C to copy';
725
+ logger = log4javascript.getLogger('j1.initClipboard');
726
+ logText = 'Copy-To-Clipboard failed. Use fallback.';
727
+ logger.warn(logText);
728
+ $(e.trigger).attr('title', fallbackMsg).tooltip('_fixTitle').tooltip('show').attr('title', 'Copy to clipboard').tooltip('_fixTitle');
729
+ });
730
+
731
+ logText = 'initialization completed';
732
+ logger.info(logText);
733
+
734
+ return true;
735
+ }, // END initClipboard
736
+
737
+ // -------------------------------------------------------------------------
738
+ // displayPage
739
+ // Show the page after timeout of {{hideOnReload}} ms
740
+ // -------------------------------------------------------------------------
741
+ // NOTE:
742
+ // jadams, 2019-08-21: for unknown reason, the user state data
743
+ // (read from cookie) seems not coorect (or loaded too late).
744
+ // To make correct data sure for APP mode, a status request is done
745
+ // to load the current state from the middleware (skipped in WEB mode)
746
+ // -------------------------------------------------------------------------
747
+ displayPage: function (options) {
748
+ var logger = log4javascript.getLogger('j1.displayPage');
749
+ var flickerTimeout = {{template_config.flicker_timeout}};
750
+ var url = new parseURL(window.location.href)
751
+ var baseUrl = url.origin;
752
+ var ep = baseUrl + '/status' + '?page=' + window.location.pathname;
753
+ var user_state = j1.readCookie(cookie_names.user_session);
754
+ var provider;
755
+ var previous_page;
756
+ var appDetected;
757
+ var providerPermissions;
758
+ var categoryAllowed;
759
+
760
+ if (j1.appDetected()) {
761
+ // APP mode
762
+ $.when ($.ajax(ep))
763
+ .then(function(data) {
764
+ var logger = log4javascript.getLogger('j1.displayPage');
765
+ user_state = j1.mergeData(user_state, data);
766
+
767
+ j1.writeCookie({
768
+ name: cookie_names.user_session,
769
+ data: user_state
770
+ });
771
+
772
+ providerPermissions = user_state.provider_permissions;
773
+ providerPermissions.push('public');
774
+ categoryAllowed = providerPermissions.includes(user_state.page_permission);
775
+
776
+ // Make sure that protected pages are ALWAYS checked for permissions
777
+ // -------------------------------------------------------------------
778
+ if (user_state.page_permission !== 'public' && categoryAllowed === false) {
779
+ // redirect to middleware|page_authentication
780
+ if (data.authenticated === 'true') {
781
+ ep = baseUrl + '/post_authentication';
782
+ window.location.href = ep;
783
+ } else {
784
+ ep = baseUrl + '/page_validation?page=' + window.location.pathname;
785
+ window.location.href = ep;
786
+ return false;
787
+ }
788
+ } // END check protected pages
789
+
790
+ setTimeout (function() {
791
+ // Display page
792
+ $('#no_flicker').css('display', 'block');
793
+
794
+ // Show or Hide cookie icon
795
+ if (user_state.cookies_accepted === 'accepted') {
796
+ // Display cookie icon
797
+ $('#quickLinksCookieButton').css('display', 'block');
798
+ } else {
799
+ logText = 'Hide cookie icon';
800
+ logger.info(logText);
801
+ // Display cookie icon
802
+ $('#quickLinksCookieButton').css('display', 'none');
803
+ }
804
+
805
+ // Show Control Center icon
806
+ $('#quickLinksControlCenterButton').css('display', 'block');
807
+
808
+ // Show or Hide SignInOut icon
809
+ if (j1.authClientEnabled()) {
810
+ logger.info('APP mode deteced, present SignInOut icon');
811
+ if (user_state.authenticated === 'true') {
812
+ // Set SignOut
813
+ $('#navLinkSignInOut').attr("data-target","#modalOmniSignOut");
814
+ $('#iconSignInOut').removeClass( "mdi-login" ).addClass( "mdi-logout" );
815
+ } else {
816
+ // Set SignIn
817
+ $('#navLinkSignInOut').attr("data-target","#modalOmniSignIn");
818
+ $('#iconSignInOut').removeClass( "mdi-logout" ).addClass( "mdi-login" );
819
+ }
820
+ logger.info('authentication detected as: ' + user_state.authenticated);
821
+ logger.info('Show SignInOut icon');
822
+ $('#quickLinksSignInOutButton').css('display', 'block');
823
+ }
824
+
825
+ // If the page requested contains an anchor element,
826
+ // do a smooth scroll to
827
+ j1.scrollTo();
828
+
829
+ if (user_state.previous_page !== user_state.current_page) {
830
+ logText = 'Page change detected';
831
+ logger.info(logText);
832
+ logText = 'Previous page: ' + user_state.previous_page;
833
+ logger.info(logText);
834
+ logText = 'Current page: ' + user_state.current_page;
835
+ logger.info(logText);
836
+ }
837
+
838
+ j1.core.navigator.updateSidebar(user_state);
839
+
840
+ // Set|Log status
841
+ state = 'finished';
842
+ logText = 'state: ' + state;
843
+ logger.info(logText);
844
+ logText = "J1 Template successfully initialized";
845
+ logger.info(logText);
846
+
847
+ }, flickerTimeout);
848
+ });
849
+ // END APP mode
850
+ } else {
851
+ // WEB mode
852
+ setTimeout (function() {
853
+ // Display page
854
+ $('#no_flicker').css('display', 'block');
855
+
856
+ logger.info('WEB mode detetced, hide SignInOut icon');
857
+ $('#quickLinksSignInOutButton').css('display', 'none');
858
+
859
+ // Show or Hide cookie icon
860
+ if (user_state.cookies_accepted === 'accepted') {
861
+ // Display cookie icon
862
+ $('#quickLinksCookieButton').css('display', 'block');
863
+ } else {
864
+ logText = 'Hide cookie icon';
865
+ logger.info(logText);
866
+ // Display cookie icon
867
+ $('#quickLinksCookieButton').css('display', 'none');
868
+ }
869
+
870
+ // If the page requested contains an anchor element,
871
+ // do a smooth scroll to
872
+ j1.scrollTo();
873
+
874
+ if (user_state.previous_page !== user_state.current_page) {
875
+ logText = 'Page change detected';
876
+ logger.info(logText);
877
+ logText = 'Previous page: ' + user_state.previous_page;
878
+ logger.info(logText);
879
+ logText = 'Current page: ' + user_state.current_page;
880
+ logger.info(logText);
881
+ }
882
+
883
+ j1.core.navigator.updateSidebar(user_state);
884
+
885
+ // Set|Log status
886
+ state = 'finished';
887
+ logText = 'state: ' + state;
888
+ logger.info(logText);
889
+ logText = "J1 Template successfully initialized";
890
+ logger.info(logText);
891
+
892
+ }, flickerTimeout);
893
+ } // END WEB mode
894
+ }, // END displayPage
895
+
896
+ // -------------------------------------------------------------------------
897
+ // Initialize BS Material Design
898
+ // -------------------------------------------------------------------------
899
+ // ToDo:
900
+ initMDB: function (options) {
901
+ var logger;
902
+
903
+ logger = log4javascript.getLogger('j1.initMDB');
904
+ logText = 'MDB is being initialized';
905
+ logger.info(logText);
906
+
907
+ $('body').bootstrapMaterialDesign();
908
+ //new WOW().init();
909
+
910
+ var logText = 'initializing MDB completed';
911
+ logger.info(logText);
912
+
913
+ return true;
914
+ }, // END initMDB
915
+
916
+ // -------------------------------------------------------------------------
917
+ // Helper functions
918
+ // -------------------------------------------------------------------------
919
+
920
+ // -------------------------------------------------------------------------
921
+ // Merge two objects (properties) and returns the resulting object
922
+ // TODO: Improve comment, give synopsis and example
923
+ // See: https://stackoverflow.com/questions/43109229/merge-default-options-containing-object-with-json-object
924
+ // -------------------------------------------------------------------------
925
+ mergeData: function () {
926
+ var a = [].slice.call(arguments), o = a.shift();
927
+
928
+ for(var i=0,l=a.length; i<l; i++){
929
+ for(var p in a[i]){
930
+ o[p] = a[i][p];
931
+ }
932
+ }
933
+
934
+ return o;
935
+ }, // END mergeData
936
+
937
+ // -------------------------------------------------------------------------
938
+ // returns the last vistited page
939
+ // -------------------------------------------------------------------------
940
+ getPrevPage: function () {
941
+ return previous_page;
942
+ }, // END getPrevPage
943
+
944
+ // -------------------------------------------------------------------------
945
+ // returns the preferred language taken form window.navigator
946
+ // See:
947
+ // https://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference
948
+ // -------------------------------------------------------------------------
949
+ getLanguage: function () {
950
+ var language = navigator.languages ? navigator.languages[0] : (navigator.language || navigator.userLanguage);
951
+
952
+ return language;
953
+ }, // END getLanguage
954
+
955
+ // -------------------------------------------------------------------------
956
+ // returns the template version taken from site config ( _config.yml)
957
+ // -------------------------------------------------------------------------
958
+ getTemplateVersion: function () {
959
+ return '{{template_version}}';
960
+ }, // END getTemplateVersion
961
+
962
+ // -------------------------------------------------------------------------
963
+ // Scrolls smooth to any anchor referenced by an page URL
964
+ // Values for delay|offset are taken from TOC module (Tocbot)
965
+ // -------------------------------------------------------------------------
966
+ scrollTo: function () {
967
+ // Unclear why a offset correction is needed (sometimes ???)
968
+ var offset_correction = {{toccer_options.headingsOffset}};
969
+ var offset = {{toccer_options.smoothScrollOffset}};
970
+ var anchor_id = window.location.href.split("#")[1];
971
+ var selector;
972
+ var heading;
973
+ var re;
974
+
975
+ if (anchor_id) {
976
+ selector = $('.' + anchor_id + ', #' + anchor_id +',[name='+anchor_id+']');
977
+ heading = selector[0].nodeName;
978
+
979
+
980
+ // scroll only, if an anchor is given with URL
981
+ if (selector.length) {
982
+ var delay = {{toccer_options.smoothScrollDuration}};
983
+ var scroll_to = parseInt( selector.offset().top - offset - offset_correction );
984
+ //var scroll_to = selector.offset().top;
985
+ $('html,body').animate({scrollTop: scroll_to}, delay,
986
+ function () {
987
+ // scroll the page one pixel back and forth
988
+ // to get the right position for the NAV Module (Tocbot)
989
+ $(window).scrollTop($(window).scrollTop()+1);
990
+ $(window).scrollTop($(window).scrollTop()-1);
991
+ });
992
+ } else {
993
+ // TODO: to be checked if this else is needed
994
+ // scroll the page one pixel back and forth
995
+ // to get the right position for the NAV Module (Tocbot)
996
+ $(window).scrollTop($(window).scrollTop()+1);
997
+ $(window).scrollTop($(window).scrollTop()-1);
998
+ } // selector.length
999
+ } else {
1000
+ // scroll the page one pixel back and forth
1001
+ // to get the right position for the NAV Module (Tocbot)
1002
+ $(window).scrollTop($(window).scrollTop()+1);
1003
+ $(window).scrollTop($(window).scrollTop()-1);
1004
+ } // END if anchor_id
1005
+
1006
+ return true;
1007
+ }, // END scrollTo
1008
+
1009
+ // -------------------------------------------------------------------------
1010
+ // Detect if a page has changed
1011
+ //
1012
+ // Note:
1013
+ // Returns true on a change. Otherwise false
1014
+ // some of the "values" set ealier by j1.resolveMacros needs to be
1015
+ // updated
1016
+ // -------------------------------------------------------------------------
1017
+ hasPageChanged: function ( data ) {
1018
+ var user_state = data;
1019
+ var logger;
1020
+ var logText;
1021
+
1022
+ if (user_state.previous_page == user_state.current_page ) {
1023
+ return false;
1024
+ } else {
1025
+ return true;
1026
+ }
1027
+
1028
+ }, // END hasPageChanged
1029
+
1030
+ // -------------------------------------------------------------------------
1031
+ // authClientEnabled:
1032
+ // Returns the state of the authClient
1033
+ // -------------------------------------------------------------------------
1034
+ authClientEnabled: function () {
1035
+ var authClientEnabled = {{site.j1_auth.enabled}};
1036
+
1037
+ return authClientEnabled;
1038
+ }, // END authClientEnabled
1039
+
1040
+ // -------------------------------------------------------------------------
1041
+ // appDetected:
1042
+ // Returns true if a web session cookie exists
1043
+ // -------------------------------------------------------------------------
1044
+ appDetected: function () {
1045
+ var user_state = j1.readCookie(cookie_names.user_session);
1046
+ var detected = user_state.mode === 'app' ? true : false;
1047
+
1048
+ return detected;
1049
+ }, // END appDetected
1050
+
1051
+ // -------------------------------------------------------------------------
1052
+ // xhrDATA:
1053
+ // Load data asychronously using XHR on a DIV container
1054
+ // specified (from options: xhr_data_path)
1055
+ // -------------------------------------------------------------------------
1056
+ xhrDATA: function (mod, options, status) {
1057
+ var logger = log4javascript.getLogger('j1.xhrDATA');
1058
+ var state = status;
1059
+ var logText;
1060
+
1061
+ var cb_load_closure = function(mod, id) {
1062
+ return function (responseTxt, statusTxt, xhr) {
1063
+ if ( statusTxt === 'success' ) {
1064
+ if (state) {
1065
+ logger.info('set state for ' +mod+ ' to: ' + state);
1066
+ executeFunctionByName(mod + '.setState', window, state);
1067
+ }
1068
+ logText = 'data on ' +id+ ' loaded successfully';
1069
+ logger.info(logText);
1070
+ }
1071
+ if ( statusTxt === 'error' ) {
1072
+ state = 'failed';
1073
+ logger.info('set state for ' +mod+ ' to: ' + state);
1074
+ executeFunctionByName(mod + '.setState', window, state);
1075
+ logText = 'data on ' +id+ ' loading failed: ' + xhr.status + ': ' + xhr.statusText;
1076
+ logger.error(logText);
1077
+ }
1078
+ };
1079
+ };
1080
+
1081
+ var id = "#" + options.xhr_container_id;
1082
+ var selector = $(id);
1083
+
1084
+ if ( selector.length ) {
1085
+ var modal_html_data_path = options.xhr_data_path + " > *";
1086
+ selector.load( modal_html_data_path, cb_load_closure( mod, id ) );
1087
+ return true;
1088
+ } else {
1089
+ logText = "Data not loaded"
1090
+ logger.warn(logText);
1091
+ // Set processing state to 'finished' to complete module load
1092
+ state = 'finished';
1093
+ logger.info('state: ' + state);
1094
+ executeFunctionByName(mod + '.setState', window, state)
1095
+ return false;
1096
+ }
1097
+ }, // END xhrDATA
1098
+
1099
+ // -------------------------------------------------------------------------
1100
+ // xhrAPI: XMLHttpRequest (XHR) based async server API request
1101
+ // Request an REST API at 'url', using verb 'type' of response type 'type'
1102
+ // -------------------------------------------------------------------------
1103
+ xhrAPI: function (url, request_type, data_type) {
1104
+ var type = typeof request_type == 'undefined' || request_type == '' ? 'GET' : request_type;
1105
+ var data_type = typeof data_type == 'undefined' || data_type == '' ? 'json' : data_type;
1106
+
1107
+ return $.ajax({
1108
+ url: url,
1109
+ type: type,
1110
+ dataType: data_type,
1111
+ success: function(data) {
1112
+ if (typeof data == 'string') {
1113
+ return JSON.parse(data);
1114
+ }
1115
+ if (typeof data == 'object') {
1116
+ return data;
1117
+ }
1118
+ },
1119
+ error: function(error) {
1120
+ json_data = JSON.stringify(error, undefined, 2);
1121
+ logger.error("XHR request failed: " + json_data);
1122
+ }
1123
+ });
1124
+
1125
+ }, // END xhrAPI
1126
+
1127
+ // -------------------------------------------------------------------------
1128
+ // fetchAPI: Fetch (Promise) based async request
1129
+ // Returns the current git state collected from /git endpoint
1130
+ // -------------------------------------------------------------------------
1131
+ fetchAPI: function (params, cbData) {
1132
+ var cbData = cbData;
1133
+ var parameters = params == '' ? 'all' : params;
1134
+ var url = 'http://localhost:41001/gut';
1135
+
1136
+ async function callAPI() {
1137
+ const URL = url;
1138
+ const fetchResult = fetch(URL)
1139
+ const response = await fetchResult;
1140
+
1141
+ if (response.ok) {
1142
+ const jsonData = await response.json();
1143
+ json_data = JSON.stringify(jsonData, undefined, 2);
1144
+ logText = 'Response from Fetch received: ' + json_data;
1145
+ logger.info(logText);
1146
+ //console.log(jsonData);
1147
+ } else {
1148
+ throw Error(response.statusText);
1149
+ // logger.error("Fetch request failed: " + response.statusText);
1150
+ }
1151
+ }
1152
+ callAPI();
1153
+
1154
+ return true;
1155
+ }, // END fetchAPI
1156
+
1157
+ // -------------------------------------------------------------------------
1158
+ // getColorData: Returns the j1_colors object
1159
+ // Load color definitions from colors_data_path
1160
+ // -------------------------------------------------------------------------
1161
+ getColorData: function (data_path) {
1162
+ var logger = log4javascript.getLogger('j1.getColorData');
1163
+ var j1_colors = {};
1164
+
1165
+ return $.ajax({
1166
+ url: data_path,
1167
+ success: function (data) {
1168
+ var logText = "Color data loaded successfully"
1169
+ logger.info(logText);
1170
+ state = 'color_data_loaded_success';
1171
+ logger.info('state: ' + state);
1172
+ executeFunctionByName('j1.setState', window, state);
1173
+
1174
+ if (typeof data == 'string') {
1175
+ j1_colors = JSON.parse(data);
1176
+ }
1177
+ if (typeof data == 'object') {
1178
+ j1_colors = data;
1179
+ }
1180
+ },
1181
+ error: function (data) {
1182
+ var logText = "Color data not loaded"
1183
+ logger.warn(logText);
1184
+ state = 'color_data_loaded_failed';
1185
+ logger.info('state: ' + state);
1186
+ executeFunctionByName('j1.setState', window, state)
1187
+ return false;
1188
+ }
1189
+ });
1190
+
1191
+ }, // END getColorData
1192
+
1193
+ // -------------------------------------------------------------------------
1194
+ // getColorData: Returns a color out of the j1_colors object
1195
+ // if
1196
+ // -------------------------------------------------------------------------
1197
+ setColorData: function (color) {
1198
+
1199
+ if ( typeof color != 'undefined' ) {
1200
+ var reHex = /^#[A-Fa-f0-9]+$/;
1201
+ var reRGBA = /^rgba/;
1202
+ var isHex = color.match(reHex);
1203
+ var isRGBA = color.match(reRGBA);
1204
+
1205
+ if ( typeof j1.colors[color] != 'undefined' ) {
1206
+ return j1.colors[color];
1207
+ } else if (isHex) {
1208
+ return color;
1209
+ } else if (isRGBA) {
1210
+ return color;
1211
+ } else {
1212
+ return false;
1213
+ }
1214
+ } else {
1215
+ return false;
1216
+ }
1217
+
1218
+ }, // END setColorData
1219
+
1220
+ // -------------------------------------------------------------------------
1221
+ // getFontSizeData: Returns the j1_font_sizes object
1222
+ // Load loadFontSize definitions from font_size_data_path
1223
+ // -------------------------------------------------------------------------
1224
+ getFontSizeData: function (data_path) {
1225
+ var logger = log4javascript.getLogger('j1.getFontSizeData');
1226
+ var j1_font_sizes = {};
1227
+
1228
+ return $.ajax({
1229
+ url: data_path,
1230
+ success: function (data) {
1231
+ var logText = "Font size data loaded successfully"
1232
+ logger.info(logText);
1233
+ state = 'fontsize_data_loaded_success';
1234
+ logger.info('state: ' + state);
1235
+ executeFunctionByName('j1.setState', window, state);
1236
+
1237
+ if (typeof data == 'string') {
1238
+ j1_font_sizes = JSON.parse(data);
1239
+ }
1240
+ if (typeof data == 'object') {
1241
+ j1_font_sizes = data;
1242
+ }
1243
+ },
1244
+ error: function (data) {
1245
+ var logText = "Font size data not loaded"
1246
+ logger.warn(logText);
1247
+ state = 'fontsize_data_loaded_failed';
1248
+ logger.info('state: ' + state);
1249
+ executeFunctionByName('j1.setState', window, state)
1250
+ return false;
1251
+ }
1252
+ });
1253
+
1254
+ }, // END getFontSizeData
1255
+
1256
+ // -------------------------------------------------------------------------
1257
+ // getFontSize: Returns the CSS value for a 'logical' fontsize
1258
+ // out of the j1_font_sizes object
1259
+ // -------------------------------------------------------------------------
1260
+ setFontSize: function (size) {
1261
+
1262
+ if ( typeof size != 'undefined' ) {
1263
+ var reCSS = /\bpx\b|\brem\b|\bem\b|\%|\binherit\b|\binitial\b|\bunset\b/;
1264
+ var isCSS = size.match(reCSS);
1265
+
1266
+ // if ( typeof j1_font_sizes[size] != "undefined" ) {
1267
+ if ( typeof j1.fonts[size] != "undefined" ) {
1268
+ return j1.fonts[size];
1269
+ } else if (isCSS) {
1270
+ return size;
1271
+ } else {
1272
+ return false;
1273
+ }
1274
+ } else {
1275
+ return false;
1276
+ }
1277
+
1278
+ }, // END getFontSize
1279
+
1280
+ // -------------------------------------------------------------------------
1281
+ // loadMessageCatalog
1282
+ // Loads the message catalog object
1283
+ // -------------------------------------------------------------------------
1284
+ getMessageCatalog: function (data_path /*, request_type, data_type*/) {
1285
+ var logger = log4javascript.getLogger('j1.loadMessageCatalog');
1286
+ var message_catalog = {};
1287
+ var type = typeof request_type == 'undefined' || request_type == '' ? 'GET' : request_type;
1288
+ var data_type = typeof data_type == 'undefined' || data_type == '' ? 'text' : data_type;
1289
+ var messageData;
1290
+ var logBase;
1291
+ var logText;
1292
+ var property;
1293
+
1294
+ return $.ajax({
1295
+ url: data_path,
1296
+ type: type,
1297
+ dataType: data_type,
1298
+ success: function (data) {
1299
+ messageData = yaml.safeLoad(data);
1300
+ for (property in messageData) {
1301
+ if (messageData.hasOwnProperty(property)) {
1302
+ message_catalog[property] = {};
1303
+ messageData[property].forEach((element) => {
1304
+ var key = Object.keys(element)[0];
1305
+ var value = element[Object.keys(element)[0]];
1306
+ message_catalog[property][key] = value;
1307
+ });
1308
+ }
1309
+ }
1310
+ j1.messages = message_catalog;
1311
+ logBase = message_catalog.info.getData.message
1312
+ logText = logBase.text + logBase.message_catalog + logBase.finished;
1313
+ logger.info(logText);
1314
+ },
1315
+ error: function(data) {
1316
+ var json_data = JSON.stringify(data, undefined, 2);
1317
+ logBase = message_catalog.error.getData.message;
1318
+ logText = logBase.text + logBase.xhr + ': ' + json_data
1319
+ logger.error(logText);
1320
+ }
1321
+ });
1322
+
1323
+ }, // END getMessageCatalog
1324
+
1325
+ // -------------------------------------------------------------------------
1326
+ // readCookie:
1327
+ //
1328
+ // -------------------------------------------------------------------------
1329
+ readCookie: function (name) {
1330
+ var data;
1331
+ var data_json;
1332
+ data_json = window.atob(Cookies.get(name));
1333
+ data = JSON.parse(data_json);
1334
+
1335
+ if (data) {
1336
+ return data;
1337
+ } else {
1338
+ return false;
1339
+ }
1340
+ }, // END readCookie
1341
+
1342
+ // -------------------------------------------------------------------------
1343
+ // writeCookie:
1344
+ // Write 'data' to a cookie 'name'. If not exists, the cookie gets
1345
+ // created. Returns 'true' if cookie was written, otherwise 'false'.
1346
+ //
1347
+ writeCookie: function (options /*name, data, [path, expires, secure]*/) {
1348
+ var defaults = {
1349
+ name: '',
1350
+ data: {},
1351
+ path: '/',
1352
+ expires: 0,
1353
+ secure: false
1354
+ };
1355
+ var args = $.extend(defaults, options);
1356
+
1357
+ var epoch = Math.floor(Date.now()/1000);
1358
+ var timestamp = moment.unix(epoch).format('YYYY-MM-DD hh:mm:ss');
1359
+ var cookie_data = {};
1360
+ var data_json;
1361
+ var data_encoded;
1362
+
1363
+ if (j1.existsCookie(args.name)) {
1364
+ cookie_data = j1.readCookie(args.name);
1365
+ cookie_data.timestamp = timestamp;
1366
+ cookie_data = j1.mergeData(cookie_data, args.data);
1367
+ data_json = JSON.stringify( cookie_data );
1368
+ data_encoded = window.btoa(data_json);
1369
+ if (args.expires > 0) {
1370
+ Cookies.set(args.name, data_encoded, { expires: args.expires });
1371
+ } else {
1372
+ Cookies.set(args.name, data_encoded);
1373
+ }
1374
+ } else {
1375
+ cookie_data = args.data
1376
+ data_json = JSON.stringify( args.data );
1377
+ data_encoded = window.btoa(data_json);
1378
+ if (args.expires > 0) {
1379
+ Cookies.set(args.name, data_encoded, { expires: args.expires });
1380
+ } else {
1381
+ Cookies.set(args.name, data_encoded);
1382
+ }
1383
+ }
1384
+
1385
+ if (j1.existsCookie(args.name)) {
1386
+ return cookie_data;
1387
+ } else {
1388
+ return false;
1389
+ }
1390
+
1391
+ }, // END writeCookie
1392
+
1393
+ // -------------------------------------------------------------------------
1394
+ // Clears all given cookies by name (except cookies set to httpOnly).
1395
+ // For all cookies the expire date is set in the past, those cookies
1396
+ // are 'session' cookies. All session cookies are deleted (automatically)
1397
+ // by the browser if the last session (browser window) is closed.
1398
+ // See: https://stackoverflow.com/questions/179355/clearing-all-cookies-with-javascript
1399
+ // -------------------------------------------------------------------------
1400
+ removeCookie: function (options /*name [, path]*/) {
1401
+ var cookieExists;
1402
+ var defaults = {
1403
+ name: '',
1404
+ path: '/'
1405
+ };
1406
+ var args = $.extend(defaults, options);
1407
+
1408
+ Cookies.remove(args.name, { path: args.path });
1409
+
1410
+ }, // END removeCookie
1411
+
1412
+ // -------------------------------------------------------------------------
1413
+ // Clears all given cookies by name (except cookies set to httpOnly).
1414
+ // For all cookies the expire date is set in the past, those cookies
1415
+ // are 'session' cookies. All session cookies are deleted (automatically)
1416
+ // by the browser if the last session (browser window) is closed.
1417
+ // See: https://stackoverflow.com/questions/179355/clearing-all-cookies-with-javascript
1418
+ // -------------------------------------------------------------------------
1419
+ deleteCookie: function (options) {
1420
+ var name = options;
1421
+ var all_cookies = document.cookie.split("; ");
1422
+
1423
+ if ( name === 'all' ) {
1424
+ for (var c = 0; c < all_cookies.length; c++) {
1425
+ var d = window.location.hostname.split(".");
1426
+ while (d.length > 0) {
1427
+ var cookieBase = encodeURIComponent(all_cookies[c].split(";")[0].split("=")[0]) + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; domain=' + d.join('.') + ' ;path=';
1428
+ var p = location.pathname.split('/');
1429
+ document.cookie = cookieBase + '/';
1430
+ while (p.length > 0) {
1431
+ document.cookie = cookieBase + p.join('/');
1432
+ p.pop();
1433
+ };
1434
+ d.shift();
1435
+ }
1436
+ }
1437
+ } else {
1438
+ document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
1439
+ }
1440
+
1441
+ return true;
1442
+ }, // END deleteCookie
1443
+
1444
+ // -------------------------------------------------------------------------
1445
+ // returns true if a given cookie exists
1446
+ // -------------------------------------------------------------------------
1447
+ existsCookie: function (name) {
1448
+ var dc = document.cookie;
1449
+ var prefix = name + "=";
1450
+ var begin = dc.indexOf("; " + prefix);
1451
+ var end = dc.length; // default to end of the string
1452
+ var cookieExists = false;
1453
+ var cookieContent = '';
1454
+
1455
+ // found, and not in first position
1456
+ if (begin !== -1) {
1457
+ // exclude the "; "
1458
+ begin += 2;
1459
+ } else {
1460
+ //see if cookie is in first position
1461
+ begin = dc.indexOf(prefix);
1462
+ // not found at all or found as a portion of another cookie name
1463
+ if (begin === -1 || begin !== 0 ) return null;
1464
+ }
1465
+
1466
+ // if ";" is found somewhere after the prefix position then "end" is
1467
+ // that position, otherwise it defaults to the end of the string
1468
+ if (dc.indexOf(";", begin) !== -1) {
1469
+ end = dc.indexOf(";", begin);
1470
+ }
1471
+
1472
+ cookieContent = decodeURI(dc.substring(begin + prefix.length, end) ).replace(/"/g, '');
1473
+ cookieExists = cookieContent.length ? true : false;
1474
+
1475
+ return cookieExists;
1476
+ }, // END existsCookie
1477
+
1478
+ // -------------------------------------------------------------------------
1479
+ // Resolve MACROs
1480
+ //
1481
+ // See:
1482
+ // https://stackoverflow.com/questions/5376431/wildcards-in-jquery-selectors
1483
+ // https://stackoverflow.com/questions/16400072/jquery-each-only-affects-last-element
1484
+ // https://dzone.com/articles/why-does-javascript-loop-only-use-last-value
1485
+ // https://stackoverflow.com/questions/179713/how-to-change-the-href-for-a-hyperlink-using-jquery
1486
+ // -------------------------------------------------------------------------
1487
+ resolveMacros: function ( user_data ) {
1488
+
1489
+ // default settings
1490
+ // user_data.theme_author_url = '{{site.data.template_settings.theme_author_url}}'
1491
+ // user_data.theme_version = j1.getTemplateVersion();
1492
+
1493
+ $('[id^=macro-]').each(function() {
1494
+
1495
+ $('#macro-provider').each(function() {
1496
+ var $this = $(this);
1497
+ var $html = $this.html();
1498
+ $this.html($html.replace('??provider', user_data.provider));
1499
+ this.href = this.href.replace(/.*\/??provider-site-url/, user_data.provider_site_url);
1500
+ });
1501
+ $('#macro-user-name').each(function() {
1502
+ var $this = $(this);
1503
+ var $html = $this.html();
1504
+ $this.html($html.replace('??user-name', user_data.user_name));
1505
+ this.href = this.href.replace(/.*\/??provider_member_url/, user_data.provider_member_url);
1506
+ });
1507
+ $('#macro-provider-permissions').each(function() {
1508
+ var $this = $(this);
1509
+ var $html = $this.html();
1510
+ $this.html($html.replace('??provider-permissions', user_data.provider_permissions));
1511
+ this.href = this.href.replace(/.*\/??provider_member_url/, user_data.provider_member_url);
1512
+ });
1513
+ $('#macro-provider-membership').each(function() {
1514
+ var $this = $(this);
1515
+ var $html = $this.html();
1516
+ $this.html($html.replace('??provider-membership', user_data.provider_membership));
1517
+ this.href = this.href.replace(/.*\/??provider_member_url/, user_data.provider_member_url);
1518
+ });
1519
+ $('#macro-cookie-state').each(function() {
1520
+ var $this = $(this);
1521
+ var $html = $this.html();
1522
+ $this.html($html.replace('??cookie-state', user_data.cookies_accepted));
1523
+ this.href = this.href.replace(/.*\/??provider_privacy_url/, user_data.provider_privacy_url);
1524
+ });
1525
+ $('#macro-theme-name').each(function() {
1526
+ var $this = $(this);
1527
+ var $html = $this.html();
1528
+ $this.html($html.replace('??theme-name', user_data.theme_name));
1529
+ });
1530
+ $('#macro-theme-author').each(function() {
1531
+ var $this = $(this);
1532
+ var $html = $this.html();
1533
+ $this.html($html.replace('??theme-author', user_data.theme_author));
1534
+ this.href = this.href.replace(/.*\/??theme-author-url/, user_data.theme_author_url);
1535
+ });
1536
+ $('#macro-theme-version').each(function() {
1537
+ var $this = $(this);
1538
+ var $html = $this.html();
1539
+ $this.html($html.replace('??theme-version', user_data.theme_version));
1540
+ });
1541
+
1542
+ });
1543
+
1544
+ return true;
1545
+ }, // END resolveMacros
1546
+
1547
+ // -------------------------------------------------------------------------
1548
+ // Update MACROs
1549
+ // Update the values, NOT the placeholders
1550
+ // -------------------------------------------------------------------------
1551
+ updateMacros: function ( user_data ) {
1552
+
1553
+ $('[id^=macro-]').each(function() {
1554
+
1555
+ $('#macro-provider').each(function() {
1556
+ var $this = $(this);
1557
+ var $html = $this.html();
1558
+ $this.html($html.replace(/Provider:.*/, 'Provider: ' + user_data.provider));
1559
+ $('#macro-provider').attr("href", user_data.provider_site_url);
1560
+ });
1561
+ $('#macro-user-name').each(function() {
1562
+ var $this = $(this);
1563
+ var $html = $this.html();
1564
+ $this.html($html.replace(/User:.*/, 'User: ' + user_data.user_name));
1565
+ $('#macro-user-name').attr("href", user_data.provider_member_url);
1566
+ });
1567
+ $('#macro-provider-permissions').each(function() {
1568
+ var $this = $(this);
1569
+ var $html = $this.html();
1570
+ // $this.html($html.replace(/public|protected|private|blocked/, user_data.provider_permissions));
1571
+ $this.html($html.replace(/public.*|protected.*|private.*|blocked.*/, user_data.provider_permissions));
1572
+ $('#macro-provider-permissions').attr("href", user_data.provider_member_url);
1573
+ });
1574
+ $('#macro-provider-membership').each(function() {
1575
+ var $this = $(this);
1576
+ var $html = $this.html();
1577
+ $this.html($html.replace(/guest|member/, user_data.provider_membership));
1578
+ $('#macro-provider-membership').attr("href", user_data.provider_member_url);
1579
+ });
1580
+ $('#macro-cookie-state').each(function() {
1581
+ var $this = $(this);
1582
+ var $html = $this.html();
1583
+ $this.html($html.replace(/accepted|declined|pending/, user_data.cookies_accepted));
1584
+ $('#macro-cookie-state').attr("href", user_data.provider_privacy_url);
1585
+ });
1586
+
1587
+ });
1588
+
1589
+ return true;
1590
+ }, // END updateMacros
1591
+
1592
+ // -------------------------------------------------------------------------
1593
+ // getMessage
1594
+ // Get a log message from the log message catalog object
1595
+ // -------------------------------------------------------------------------
1596
+ getMessage: function (level, message, property) {
1597
+ var message = j1.messages[level][message]["message"][property];
1598
+
1599
+ return message;
1600
+ }, // END getMessage
1601
+
1602
+ // -------------------------------------------------------------------------
1603
+ // logger
1604
+ // Log a message
1605
+ // -------------------------------------------------------------------------
1606
+ logger: function (logger, level, message) {
1607
+ var logger = log4javascript.getLogger(logger);
1608
+
1609
+ logger[level](message);
1610
+
1611
+ return true;
1612
+ }, // END logger
1613
+
1614
+ // -------------------------------------------------------------------------
1615
+ // getBaseUrl
1616
+ // -------------------------------------------------------------------------
1617
+ // getBaseUrl: function () {
1618
+ // var myUrl = window.location.href;
1619
+ // var ua = platform.name.toLowerCase();
1620
+ // var reURL = new RegExp('(http[s]?:\/\/)?([^\/]+)(.*)');
1621
+ // var baseUrl;
1622
+ // //var reGroups;
1623
+ //
1624
+ // // NOTE: named capture groups NOT supported by FF + IE11
1625
+ // // if ( ua === 'chrome' ) {
1626
+ // // reURL = new RegExp('(?<prot>http[s]?:\/\/)?(?<host>[^\/]+)(?<path>.*)');
1627
+ // // reGroups = myUrl.match(reURL).groups;
1628
+ // // baseUrl = reGroups.prot + reGroups.host;
1629
+ // // } else {
1630
+ // // reURL = new RegExp('(http[s]?:\/\/)?([^\/]+)(.*)');
1631
+ // // myUrl.match(reURL);
1632
+ // // baseUrl = RegExp.$1 + RegExp.$2 + RegExp.$3;
1633
+ // // }
1634
+ //
1635
+ // myUrl.match(reURL);
1636
+ // // baseUrl = RegExp.$1 + RegExp.$2 + RegExp.$3;
1637
+ // baseUrl = RegExp.$1 + RegExp.$2;
1638
+ //
1639
+ // return baseUrl;
1640
+ // }, // END getBaseUrl
1641
+
1642
+ // -------------------------------------------------------------------------
1643
+ // getPath
1644
+ // See: https://stackoverflow.com/questions/27745/getting-parts-of-a-url-regex
1645
+ // -------------------------------------------------------------------------
1646
+ // getPath: function ( myUrl ) {
1647
+ // var url = new parseURL(myUrl)
1648
+ // // var reURL = new RegExp('(http[s]?:\/\/)?([^\/]+)(.*)');
1649
+ // // var path;
1650
+ // //
1651
+ // // myUrl.match(reURL);
1652
+ // path = url.path;
1653
+ //
1654
+ // return path;
1655
+ // }, // END getPath
1656
+
1657
+ // -------------------------------------------------------------------------
1658
+ // Send message
1659
+ // -------------------------------------------------------------------------
1660
+ sendMessage: function ( sender, receiver, message ) {
1661
+ var logger = log4javascript.getLogger('j1.sendMessage');
1662
+ var json_message = JSON.stringify(message, undefined, 2);
1663
+
1664
+ if ( receiver === 'j1' ) {
1665
+ logText = 'Send message from ' + sender + ' to' + receiver + ': ' + json_message;
1666
+ logger.debug(logText);
1667
+ executeFunctionByName('j1' + '.messageHandler', window, sender, message)
1668
+ } else {
1669
+ logText = 'Send message from ' + sender + ' to ' + receiver + ': ' + json_message;
1670
+ logger.debug(logText);
1671
+ //executeFunctionByName('j1.' + receiver + '.messageHandler', window, sender, message)
1672
+ executeFunctionByName(receiver + '.messageHandler', window, sender, message)
1673
+ }
1674
+
1675
+ }, // END sendMessage
1676
+
1677
+ // -------------------------------------------------------------------------
1678
+ // messageHandler: MessageHandler for J1 CookieConsent module
1679
+ // Manage messages send from other J1 modules
1680
+ // -------------------------------------------------------------------------
1681
+ messageHandler: function ( sender, message ) {
1682
+ var json_message = JSON.stringify(message, undefined, 2);
1683
+
1684
+ logText = 'Received message from ' + sender + ': ' + json_message;
1685
+ logger.debug(logText);
1686
+
1687
+ // -----------------------------------------------------------------------
1688
+ // Process commands|actions
1689
+ // -----------------------------------------------------------------------
1690
+ if ( message.type === 'command' && message.action === 'module_initialized' ) {
1691
+ _this.setState('finished');
1692
+ logger.info(message.text);
1693
+ }
1694
+
1695
+ //
1696
+ // Place handling of other command|action here
1697
+ //
1698
+
1699
+ return true;
1700
+ }, // END messageHandler
1701
+
1702
+ // -------------------------------------------------------------------------
1703
+ // getStyleValue:
1704
+ // returns the value of a style from a css class definition
1705
+ // example: j1.getStyleValue('bg-primary', 'background-color')
1706
+ getStyleValue: function (className, style) {
1707
+ var elementId = 'test-' + className,
1708
+ testElement = document.getElementById(elementId),
1709
+ val;
1710
+
1711
+ if (testElement === null) {
1712
+ testElement = document.createElement('div');
1713
+ testElement.className = className;
1714
+ testElement.style.display = 'none';
1715
+ document.body.appendChild(testElement);
1716
+ }
1717
+ val = $(testElement).css(style);
1718
+ document.body.removeChild(testElement);
1719
+
1720
+ return val;
1721
+ }, // END getStyleValue
1722
+
1723
+ // -------------------------------------------------------------------------
1724
+ // Returns the names of cookies used for J1 Template
1725
+ // -------------------------------------------------------------------------
1726
+ getCookieNames: function () {
1727
+ return cookie_names;
1728
+ }, // end getCookieNames
1729
+
1730
+ // -------------------------------------------------------------------------
1731
+ // Set the current (processing) state of the module
1732
+ // -------------------------------------------------------------------------
1733
+ setState: function (stat) {
1734
+ state= stat;
1735
+ //j1.state stat;
1736
+ }, // end setState
1737
+
1738
+ // -------------------------------------------------------------------------
1739
+ // Returns the current (processing) state of the module
1740
+ // -------------------------------------------------------------------------
1741
+ getState: function () {
1742
+ // return j1.state;
1743
+ return state;
1744
+ }, // end getState
1745
+
1746
+ // -------------------------------------------------------------------------
1747
+ // Set the current mode of the site (web|app)
1748
+ // -------------------------------------------------------------------------
1749
+ setMode: function (mod) {
1750
+ mode = mod;
1751
+ }, // END setMode
1752
+
1753
+ // -------------------------------------------------------------------------
1754
+ // Return the current mode of the site (web|app)
1755
+ // -------------------------------------------------------------------------
1756
+ getMode: function () {
1757
+ return mode;
1758
+ }, // END getMode
1759
+
1760
+ // -------------------------------------------------------------------------
1761
+ // getUserAgent
1762
+ // Return the name of the web browser
1763
+ // -------------------------------------------------------------------------
1764
+ checkUserAgent: function (ua_name) {
1765
+ if (navigator.userAgent.search(ua_name) >= 0) {
1766
+ return true;
1767
+ } else {
1768
+ return false;
1769
+ }
1770
+ }, // END checkUserAgent
1771
+
1772
+ // -------------------------------------------------------------------------
1773
+ // Return always true (for testing purposes)
1774
+ // -------------------------------------------------------------------------
1775
+ getTrue: function () {
1776
+ return true;
1777
+ }, // END isTrue
1778
+
1779
+ // -------------------------------------------------------------------------
1780
+ // Return always false (for testing purposes)
1781
+ // -------------------------------------------------------------------------
1782
+ getFalse: function () {
1783
+ return false;
1784
+ }, // END isTrue
1785
+
1786
+ } // END j1 (return)
1787
+ }) (j1, window);
1788
+
1789
+ {% endcapture %}
1790
+
1791
+ {{ cache | strip_empty_lines }}
1792
+ {% assign cache = nil %}