j1-template 2024.3.16 → 2024.3.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (621) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/layouts/content_generator_collection.html +1 -1
  3. data/_includes/themes/j1/layouts/content_generator_news_panel_posts.html +1 -1
  4. data/_includes/themes/j1/layouts/content_generator_page.html +1 -1
  5. data/_includes/themes/j1/layouts/content_generator_post.html +1 -1
  6. data/_includes/themes/j1/layouts/content_generator_raw.html +1 -1
  7. data/_includes/themes/j1/layouts/layout_metadata_generator.html +1 -1
  8. data/_includes/themes/j1/layouts/layout_module_generator.html +1 -1
  9. data/_includes/themes/j1/layouts/layout_resource_generator.html +1 -1
  10. data/_includes/themes/j1/modules/attics/generator.html +1 -1
  11. data/_includes/themes/j1/modules/navigator/generator.html +1 -1
  12. data/_includes/themes/j1/modules/searcher/generator.html +1 -1
  13. data/_includes/themes/j1/modules/searcher/procedures/topsearch.proc +1 -1
  14. data/_includes/themes/j1/procedures/blocks/footer/boxes/about_box.proc +1 -1
  15. data/_includes/themes/j1/procedures/blocks/footer/boxes/contacts_box.proc +1 -1
  16. data/_includes/themes/j1/procedures/blocks/footer/boxes/issue.proc +1 -1
  17. data/_includes/themes/j1/procedures/blocks/footer/boxes/legal_statements.proc +1 -1
  18. data/_includes/themes/j1/procedures/blocks/footer/boxes/links_box.proc +1 -1
  19. data/_includes/themes/j1/procedures/blocks/footer/boxes/news_box.proc +1 -1
  20. data/_includes/themes/j1/procedures/blocks/footer/boxes/social_media_icons.proc +1 -1
  21. data/_includes/themes/j1/procedures/blocks/get_wave.proc +1 -1
  22. data/_includes/themes/j1/procedures/collections/create_collection_article_preview.proc +1 -1
  23. data/_includes/themes/j1/procedures/collections/pager.proc +1 -1
  24. data/_includes/themes/j1/procedures/global/attributes_loader.proc +1 -1
  25. data/_includes/themes/j1/procedures/global/collect_frontmatter_options.proc +1 -1
  26. data/_includes/themes/j1/procedures/global/collect_page_options.proc +1 -1
  27. data/_includes/themes/j1/procedures/global/create_bs_button.proc +1 -1
  28. data/_includes/themes/j1/procedures/global/create_word_cloud.proc +1 -1
  29. data/_includes/themes/j1/procedures/global/date-german.proc +1 -1
  30. data/_includes/themes/j1/procedures/global/get_category.proc +1 -1
  31. data/_includes/themes/j1/procedures/global/get_category_item.proc +1 -1
  32. data/_includes/themes/j1/procedures/global/get_documents_dir.proc +1 -1
  33. data/_includes/themes/j1/procedures/global/get_page_path.proc +1 -1
  34. data/_includes/themes/j1/procedures/global/get_page_url.proc +1 -1
  35. data/_includes/themes/j1/procedures/global/select_color.proc +1 -1
  36. data/_includes/themes/j1/procedures/global/select_font_size.proc +1 -1
  37. data/_includes/themes/j1/procedures/global/select_icon_size.proc +1 -1
  38. data/_includes/themes/j1/procedures/global/select_location.proc +1 -1
  39. data/_includes/themes/j1/procedures/global/set_base_vars_folders.proc +1 -1
  40. data/_includes/themes/j1/procedures/global/set_env_entry_document.proc +1 -1
  41. data/_includes/themes/j1/procedures/global/set_image_block.proc +1 -1
  42. data/_includes/themes/j1/procedures/global/setup.proc +1 -1
  43. data/_includes/themes/j1/procedures/layouts/content_writer.proc +1 -1
  44. data/_includes/themes/j1/procedures/layouts/default_writer.proc +1 -1
  45. data/_includes/themes/j1/procedures/layouts/module_writer.proc +1 -1
  46. data/_includes/themes/j1/procedures/layouts/resource_writer.proc +1 -1
  47. data/_includes/themes/j1/procedures/posts/collate_calendar.proc +1 -1
  48. data/_includes/themes/j1/procedures/posts/collate_list.proc +1 -1
  49. data/_includes/themes/j1/procedures/posts/collate_timeline.proc +1 -1
  50. data/_includes/themes/j1/procedures/posts/create_ad_block.proc +1 -1
  51. data/_includes/themes/j1/procedures/posts/create_series_header.proc +1 -1
  52. data/_includes/themes/j1/procedures/posts/pager.proc +1 -1
  53. data/_layouts/autopage_category.html +1 -1
  54. data/_layouts/autopage_collection.html +1 -1
  55. data/_layouts/autopage_collections_tags.html +1 -1
  56. data/_layouts/autopage_tags.html +1 -1
  57. data/_layouts/collection.html +1 -1
  58. data/_layouts/compress.html +1 -1
  59. data/_layouts/default.html +1 -1
  60. data/_layouts/home.html +1 -1
  61. data/_layouts/news_panel_posts.html +1 -1
  62. data/_layouts/page.html +1 -1
  63. data/_layouts/post.html +1 -1
  64. data/_layouts/raw.html +1 -1
  65. data/apps/public/cc/cc.yml +1 -1
  66. data/assets/data/amplitude.html +137 -66
  67. data/assets/data/authclient.html +1 -1
  68. data/assets/data/banner.html +2 -2
  69. data/assets/data/carousel.json +1 -1
  70. data/assets/data/cookieconsent.html +2 -2
  71. data/assets/data/docsearch.html +2 -2
  72. data/assets/data/fab.html +2 -2
  73. data/assets/data/footer.html +2 -2
  74. data/assets/data/galeries.html +2 -2
  75. data/assets/data/gallery_customizer.html +2 -2
  76. data/assets/data/gemini-ui.html +2 -2
  77. data/assets/data/iframes.html +2 -2
  78. data/assets/data/iso-3166-country-codes.json +1 -1
  79. data/assets/data/iso-639-language-codes.json +1 -1
  80. data/assets/data/j1_config.json +1 -1
  81. data/assets/data/masonry.html +2 -2
  82. data/assets/data/masterslider.html +2 -2
  83. data/assets/data/mdi_icons.json +1 -1
  84. data/assets/data/mdil_icons.json +1 -1
  85. data/assets/data/menu.html +2 -2
  86. data/assets/data/mmenu.html +2 -2
  87. data/assets/data/mmenu_sidebar.html +2 -2
  88. data/assets/data/mmenu_toc.html +2 -2
  89. data/assets/data/panel.html +2 -2
  90. data/assets/data/particles.yml +1 -1
  91. data/assets/data/private.json +1 -1
  92. data/assets/data/quicklinks.html +2 -2
  93. data/assets/data/rtext_resizer.html +2 -2
  94. data/assets/data/slick.html +2 -2
  95. data/assets/data/speak2me.html +2 -2
  96. data/assets/data/swiper.html +244 -0
  97. data/assets/data/swiper.json +84 -0
  98. data/assets/data/themes.bootswatch.json +1 -1
  99. data/assets/data/themes.json +1 -1
  100. data/assets/data/translator.html +1 -1
  101. data/assets/error_pages/HTTP204.html +1 -1
  102. data/assets/error_pages/HTTP400.html +1 -1
  103. data/assets/error_pages/HTTP401.html +1 -1
  104. data/assets/error_pages/HTTP403.html +1 -1
  105. data/assets/error_pages/HTTP404.html +1 -1
  106. data/assets/error_pages/HTTP444.html +1 -1
  107. data/assets/error_pages/HTTP445.html +1 -1
  108. data/assets/error_pages/HTTP446.html +1 -1
  109. data/assets/error_pages/HTTP447.html +1 -1
  110. data/assets/error_pages/HTTP448.html +1 -1
  111. data/assets/error_pages/HTTP500.html +1 -1
  112. data/assets/error_pages/HTTP501.html +1 -1
  113. data/assets/error_pages/HTTP502.html +1 -1
  114. data/assets/error_pages/HTTP503.html +1 -1
  115. data/assets/theme/j1/adapter/js/advertising.js +2 -2
  116. data/assets/theme/j1/adapter/js/algolia.js +2 -2
  117. data/assets/theme/j1/adapter/js/amplitude.30.js +1177 -0
  118. data/assets/theme/j1/adapter/js/amplitude.js +165 -132
  119. data/assets/theme/j1/adapter/js/analytics.js +2 -2
  120. data/assets/theme/j1/adapter/js/asciidoctor.js +2 -2
  121. data/assets/theme/j1/adapter/js/attic.js +2 -2
  122. data/assets/theme/j1/adapter/js/bmd.js +2 -2
  123. data/assets/theme/j1/adapter/js/carousel.js +2 -2
  124. data/assets/theme/j1/adapter/js/chatbot.js +2 -2
  125. data/assets/theme/j1/adapter/js/clipboard.js +2 -2
  126. data/assets/theme/j1/adapter/js/comments.js +2 -2
  127. data/assets/theme/j1/adapter/js/cookieConsent.js +2 -2
  128. data/assets/theme/j1/adapter/js/customFunctions.js +2 -2
  129. data/assets/theme/j1/adapter/js/customModule.js +2 -2
  130. data/assets/theme/j1/adapter/js/docsearch.js +2 -2
  131. data/assets/theme/j1/adapter/js/dropdowns.js +2 -2
  132. data/assets/theme/j1/adapter/js/fab.js +2 -2
  133. data/assets/theme/j1/adapter/js/gallery.js +2 -2
  134. data/assets/theme/j1/adapter/js/gemini.js +2 -2
  135. data/assets/theme/j1/adapter/js/iconPicker.js +2 -2
  136. data/assets/theme/j1/adapter/js/iconPickerPage.js +2 -2
  137. data/assets/theme/j1/adapter/js/iframer.js +2 -2
  138. data/assets/theme/j1/adapter/js/j1.js +5 -5
  139. data/assets/theme/j1/adapter/js/lazyLoader.js +2 -2
  140. data/assets/theme/j1/adapter/js/lightbox.js +2 -2
  141. data/assets/theme/j1/adapter/js/logger.js +2 -2
  142. data/assets/theme/j1/adapter/js/lunr.js +2 -2
  143. data/assets/theme/j1/adapter/js/masonry.js +2 -2
  144. data/assets/theme/j1/adapter/js/masterslider.js +4 -3
  145. data/assets/theme/j1/adapter/js/mmenu.js +2 -2
  146. data/assets/theme/j1/adapter/js/navigator.js +2 -2
  147. data/assets/theme/j1/adapter/js/particles.js +2 -2
  148. data/assets/theme/j1/adapter/js/rangeSlider.js +2 -2
  149. data/assets/theme/j1/adapter/js/rouge.js +2 -2
  150. data/assets/theme/j1/adapter/js/rtable.js +2 -2
  151. data/assets/theme/j1/adapter/js/rtextResizer.js +2 -2
  152. data/assets/theme/j1/adapter/js/scroller.js +2 -2
  153. data/assets/theme/j1/adapter/js/slick.js +2 -2
  154. data/assets/theme/j1/adapter/js/slimSelect.js +2 -2
  155. data/assets/theme/j1/adapter/js/speak2me.js +2 -2
  156. data/assets/theme/j1/adapter/js/swiper.js +503 -0
  157. data/assets/theme/j1/adapter/js/themeToggler.js +2 -2
  158. data/assets/theme/j1/adapter/js/themes.js +2 -2
  159. data/assets/theme/j1/adapter/js/toccer.js +2 -2
  160. data/assets/theme/j1/adapter/js/translator.js +2 -2
  161. data/assets/theme/j1/adapter/js/videojs.js +2 -2
  162. data/assets/theme/j1/adapter/js/waves.js +2 -2
  163. data/assets/theme/j1/core/country-flags/css/theme/uno.css +1 -1
  164. data/assets/theme/j1/core/country-flags/css/theme/uno.min.css +1 -1
  165. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/amplitude.css +14 -4
  166. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/amplitude.min.css +2 -2
  167. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/compact.css +1 -1
  168. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/compact.min.css +1 -1
  169. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/large.css +54 -7
  170. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/large.min.css +3 -2
  171. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/mini.css +1 -1
  172. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/mini.min.css +1 -1
  173. data/assets/theme/j1/modules/amplitudejs/js/amplitude.js +1 -1
  174. data/assets/theme/j1/modules/amplitudejs/js/amplitude.map +1 -1
  175. data/assets/theme/j1/modules/amplitudejs/js/amplitude.min.js +1 -1
  176. data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.js +1621 -90
  177. data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.min.js +14 -0
  178. data/assets/theme/j1/modules/amplitudejs/js/visualizations/bar.js +2 -2
  179. data/assets/theme/j1/modules/amplitudejs/js/visualizations/bar.min.js +1 -1
  180. data/assets/theme/j1/modules/amplitudejs/js/visualizations/circular-equalizer.js +32 -2
  181. data/assets/theme/j1/modules/amplitudejs/js/visualizations/circular-equalizer.min.js +1 -1
  182. data/assets/theme/j1/modules/amplitudejs/js/visualizations/frequency-analyzer.js +2 -2
  183. data/assets/theme/j1/modules/amplitudejs/js/visualizations/frequency-analyzer.min.js +1 -1
  184. data/assets/theme/j1/modules/amplitudejs/js/visualizations/michael-bromley.js +2 -2
  185. data/assets/theme/j1/modules/amplitudejs/js/visualizations/michael-bromley.min.js +1 -1
  186. data/assets/theme/j1/modules/amplitudejs/js/visualizations/template.js +2 -2
  187. data/assets/theme/j1/modules/amplitudejs/js/visualizations/template.min.js +1 -1
  188. data/assets/theme/j1/modules/amplitudejs/scss/theme/uno/dark/amplitude.scss +1 -1
  189. data/assets/theme/j1/modules/amplitudejs/scss/theme/uno/dark/player/compact.scss +1 -1
  190. data/assets/theme/j1/modules/amplitudejs/scss/theme/uno/dark/player/large.scss +1 -1
  191. data/assets/theme/j1/modules/amplitudejs/scss/theme/uno/dark/player/mini.scss +1 -1
  192. data/assets/theme/j1/modules/backstretch/js/backstretch.js +1 -1
  193. data/assets/theme/j1/modules/backstretch/js/backstretch.min.js +1 -1
  194. data/assets/theme/j1/modules/bmd/js/bmd.js +1 -1
  195. data/assets/theme/j1/modules/bmd/js/bmd.min.js +1 -1
  196. data/assets/theme/j1/modules/carousel/css/carousel.css +1 -1
  197. data/assets/theme/j1/modules/carousel/css/carousel.min.css +1 -1
  198. data/assets/theme/j1/modules/carousel/css/carousel_transitions.css +1 -1
  199. data/assets/theme/j1/modules/carousel/css/carousel_transitions.min.css +1 -1
  200. data/assets/theme/j1/modules/carousel/css/theme/uno.css +1 -1
  201. data/assets/theme/j1/modules/carousel/css/theme/uno.min.css +1 -1
  202. data/assets/theme/j1/modules/chatbot/css/theme/uno.css +1 -1
  203. data/assets/theme/j1/modules/chatbot/css/theme/uno.min.css +1 -1
  204. data/assets/theme/j1/modules/clipboard/css/theme/uno.css +1 -1
  205. data/assets/theme/j1/modules/clipboard/css/theme/uno.min.css +1 -1
  206. data/assets/theme/j1/modules/cookieConsent/js/cookieConsent.js +1 -1
  207. data/assets/theme/j1/modules/cookieConsent/js/cookieConsent.min.js +1 -1
  208. data/assets/theme/j1/modules/dropdowns/css/theme/uno/dropdowns.css +1 -1
  209. data/assets/theme/j1/modules/dropdowns/css/theme/uno/dropdowns.min.css +1 -1
  210. data/assets/theme/j1/modules/dropdowns/js/cash.js +1 -1
  211. data/assets/theme/j1/modules/dropdowns/js/cash.min.js +1 -1
  212. data/assets/theme/j1/modules/dropdowns/js/dropdowns.js +1 -1
  213. data/assets/theme/j1/modules/dropdowns/js/dropdowns.min.js +1 -1
  214. data/assets/theme/j1/modules/fab/js/cash.js +1 -1
  215. data/assets/theme/j1/modules/fab/js/cash.min.js +1 -1
  216. data/assets/theme/j1/modules/fab/js/fab.js +1 -1
  217. data/assets/theme/j1/modules/fab/js/fab.min.js +1 -1
  218. data/assets/theme/j1/modules/gemini/css/theme/uno.css +1 -1
  219. data/assets/theme/j1/modules/gemini/css/theme/uno.min.css +1 -1
  220. data/assets/theme/j1/modules/gemini/js/gemini.js +1 -1
  221. data/assets/theme/j1/modules/gemini/js/gemini.min.js +1 -1
  222. data/assets/theme/j1/modules/iconPicker/css/theme/uno.css +1 -1
  223. data/assets/theme/j1/modules/iconPicker/css/theme/uno.min.css +1 -1
  224. data/assets/theme/j1/modules/iconPicker/css/universal-icon-picker.css +1 -1
  225. data/assets/theme/j1/modules/iconPicker/css/universal-icon-picker.min.css +1 -1
  226. data/assets/theme/j1/modules/iconPicker/js/universal-icon-picker.js +1 -1
  227. data/assets/theme/j1/modules/iconPicker/js/universal-icon-picker.min.js +1 -1
  228. data/assets/theme/j1/modules/j1LazyLoader/LICENSE +1 -1
  229. data/assets/theme/j1/modules/jquery/js/extensions/hasClass.js +1 -1
  230. data/assets/theme/j1/modules/jquery/js/extensions/hasClass.min.js +1 -1
  231. data/assets/theme/j1/modules/jquery/js/extensions/removeClass.js +1 -1
  232. data/assets/theme/j1/modules/jquery/js/extensions/removeClass.min.js +1 -1
  233. data/assets/theme/j1/modules/justifiedGallery/css/justifiedGallery.css +1 -1
  234. data/assets/theme/j1/modules/justifiedGallery/css/justifiedGallery.min.css +1 -1
  235. data/assets/theme/j1/modules/justifiedGallery/css/theme/uno.css +1 -1
  236. data/assets/theme/j1/modules/justifiedGallery/css/theme/uno.min.css +1 -1
  237. data/assets/theme/j1/modules/lazyCssLoader/js/main.0.js +1 -1
  238. data/assets/theme/j1/modules/lazyCssLoader/js/main.1.js +1 -1
  239. data/assets/theme/j1/modules/lazyCssLoader/js/main.js +1 -1
  240. data/assets/theme/j1/modules/lightGallery/css/lg-transitions.css +1 -1
  241. data/assets/theme/j1/modules/lightGallery/css/lg-transitions.min.css +1 -1
  242. data/assets/theme/j1/modules/lightGallery/css/lightgallery-bundle.css +1 -1
  243. data/assets/theme/j1/modules/lightGallery/css/lightgallery-bundle.min.css +1 -1
  244. data/assets/theme/j1/modules/lightGallery/css/themes/uno/uno.css +1 -1
  245. data/assets/theme/j1/modules/lightGallery/css/themes/uno/uno.min.css +1 -1
  246. data/assets/theme/j1/modules/lightGallery/js/lightgallery.js +1 -1
  247. data/assets/theme/j1/modules/lightGallery/js/lightgallery.min.js +1 -1
  248. data/assets/theme/j1/modules/lightGallery/js/plugins/j1/j1-video.js +1 -1
  249. data/assets/theme/j1/modules/lightGallery/js/plugins/j1/j1-video.min.js +1 -1
  250. data/assets/theme/j1/modules/lightGallery/js/plugins/j1/lg-video.1.js +1 -1
  251. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-autoplay.js +1 -1
  252. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-autoplay.min.js +1 -1
  253. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-comment.js +1 -1
  254. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-comment.min.js +1 -1
  255. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-fullscreen.js +1 -1
  256. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-fullscreen.min.js +1 -1
  257. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-hash.js +1 -1
  258. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-hash.min.js +1 -1
  259. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-medium-zoom.js +1 -1
  260. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-medium-zoom.min.js +1 -1
  261. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-pager.js +1 -1
  262. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-pager.min.js +1 -1
  263. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-rotate.js +1 -1
  264. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-rotate.min.js +1 -1
  265. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-share.js +1 -1
  266. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-share.min.js +1 -1
  267. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-thumbnail.js +1 -1
  268. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-thumbnail.min.js +1 -1
  269. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-video.js +1 -1
  270. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-video.min.js +1 -1
  271. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-vimeo-thumbnail.js +1 -1
  272. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-vimeo-thumbnail.min.js +1 -1
  273. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-zoom.js +1 -1
  274. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-zoom.min.js +1 -1
  275. data/assets/theme/j1/modules/lightbox/css/lightbox.css +1 -1
  276. data/assets/theme/j1/modules/lightbox/css/lightbox.min.css +1 -1
  277. data/assets/theme/j1/modules/lightbox/css/theme/uno.css +1 -1
  278. data/assets/theme/j1/modules/lightbox/css/theme/uno.min.css +1 -1
  279. data/assets/theme/j1/modules/lightbox/js/lightbox.js +1 -1
  280. data/assets/theme/j1/modules/lightbox/js/lightbox.min.js +1 -1
  281. data/assets/theme/j1/modules/lunr/css/theme/uno.css +1 -1
  282. data/assets/theme/j1/modules/lunr/css/theme/uno.min.css +1 -1
  283. data/assets/theme/j1/modules/lunr/js/j1.js +1 -1
  284. data/assets/theme/j1/modules/lunr/js/j1.min.js +1 -1
  285. data/assets/theme/j1/modules/masterslider/css/theme/uno.css +1 -1
  286. data/assets/theme/j1/modules/masterslider/css/theme/uno.min.css +1 -1
  287. data/assets/theme/j1/modules/mmenuLight/css/mmenu-light.css +1 -1
  288. data/assets/theme/j1/modules/mmenuLight/css/mmenu-light.min.css +1 -1
  289. data/assets/theme/j1/modules/mmenuLight/css/theme/uno/mmenu.css +1 -1
  290. data/assets/theme/j1/modules/mmenuLight/css/theme/uno/mmenu.min.css +1 -1
  291. data/assets/theme/j1/modules/mmenuLight/js/mmenu.js +1 -1
  292. data/assets/theme/j1/modules/mmenuLight/js/mmenu.min.js +1 -1
  293. data/assets/theme/j1/modules/msDropdown/css/flags.css +1 -1
  294. data/assets/theme/j1/modules/msDropdown/css/flags.min.css +1 -1
  295. data/assets/theme/j1/modules/msDropdown/css/msDropdown.css +1 -1
  296. data/assets/theme/j1/modules/msDropdown/css/msDropdown.min.css +1 -1
  297. data/assets/theme/j1/modules/msDropdown/css/themes/uno/msDropdown.css +1 -1
  298. data/assets/theme/j1/modules/msDropdown/css/themes/uno/msDropdown.min.css +1 -1
  299. data/assets/theme/j1/modules/msDropdown/js/msDropdown.js +1 -1
  300. data/assets/theme/j1/modules/msDropdown/js/msDropdown.min.js +1 -1
  301. data/assets/theme/j1/modules/photoswipe/LICENSE +21 -0
  302. data/assets/theme/j1/modules/photoswipe/README.md +32 -0
  303. data/assets/theme/j1/modules/photoswipe/_info/.version_5.4.4 +6 -0
  304. data/assets/theme/j1/modules/photoswipe/_info/example/photoswipe-caption-plugin.html +237 -0
  305. data/assets/theme/j1/modules/photoswipe/_info/example/test-gallery.html +36 -0
  306. data/assets/theme/j1/modules/photoswipe/css/photoswipe-caption-plugin.css +69 -0
  307. data/assets/theme/j1/modules/photoswipe/css/photoswipe-caption-plugin.min.css +16 -0
  308. data/assets/theme/j1/modules/photoswipe/css/photoswipe.css +376 -0
  309. data/assets/theme/j1/modules/photoswipe/css/photoswipe.min.css +17 -0
  310. data/assets/theme/j1/modules/photoswipe/js/_info/README.md +43 -0
  311. data/assets/theme/j1/modules/photoswipe/js/photoswipe-caption-plugin.js +428 -0
  312. data/assets/theme/j1/modules/photoswipe/js/photoswipe-caption-plugin.min.js +18 -0
  313. data/assets/theme/j1/modules/photoswipe/js/photoswipe-core.js +7102 -0
  314. data/assets/theme/j1/modules/photoswipe/js/photoswipe-core.min.js +18 -0
  315. data/assets/theme/j1/modules/photoswipe/js/photoswipe-lightbox.1.js +1990 -0
  316. data/assets/theme/j1/modules/photoswipe/js/photoswipe-lightbox.js +1981 -0
  317. data/assets/theme/j1/modules/photoswipe/js/photoswipe-lightbox.min.js +18 -0
  318. data/assets/theme/j1/modules/rangeSlider/css/theme/uno/nouislider.css +1 -1
  319. data/assets/theme/j1/modules/rangeSlider/css/theme/uno/nouislider.min.css +1 -1
  320. data/assets/theme/j1/modules/rouge/css/base16/theme.css +1 -1
  321. data/assets/theme/j1/modules/rouge/css/base16/theme.min.css +1 -1
  322. data/assets/theme/j1/modules/rouge/css/base16.dark/theme.css +1 -1
  323. data/assets/theme/j1/modules/rouge/css/base16.dark/theme.min.css +1 -1
  324. data/assets/theme/j1/modules/rouge/css/base16.light/theme.css +1 -1
  325. data/assets/theme/j1/modules/rouge/css/base16.light/theme.min.css +1 -1
  326. data/assets/theme/j1/modules/rouge/css/base16.monokai/theme.css +1 -1
  327. data/assets/theme/j1/modules/rouge/css/base16.monokai/theme.min.css +1 -1
  328. data/assets/theme/j1/modules/rouge/css/base16.monokai.dark/theme.css +1 -1
  329. data/assets/theme/j1/modules/rouge/css/base16.monokai.dark/theme.min.css +1 -1
  330. data/assets/theme/j1/modules/rouge/css/base16.monokai.light/theme.css +1 -1
  331. data/assets/theme/j1/modules/rouge/css/base16.monokai.light/theme.min.css +1 -1
  332. data/assets/theme/j1/modules/rouge/css/base16.solarized/theme.css +1 -1
  333. data/assets/theme/j1/modules/rouge/css/base16.solarized/theme.min.css +1 -1
  334. data/assets/theme/j1/modules/rouge/css/base16.solarized.dark/theme.css +1 -1
  335. data/assets/theme/j1/modules/rouge/css/base16.solarized.dark/theme.min.css +1 -1
  336. data/assets/theme/j1/modules/rouge/css/base16.solarized.light/theme.css +1 -1
  337. data/assets/theme/j1/modules/rouge/css/base16.solarized.light/theme.min.css +1 -1
  338. data/assets/theme/j1/modules/rouge/css/colorful/theme.css +1 -1
  339. data/assets/theme/j1/modules/rouge/css/colorful/theme.min.css +1 -1
  340. data/assets/theme/j1/modules/rouge/css/github/theme.css +1 -1
  341. data/assets/theme/j1/modules/rouge/css/github/theme.min.css +1 -1
  342. data/assets/theme/j1/modules/rouge/css/gruvbox/theme.css +1 -1
  343. data/assets/theme/j1/modules/rouge/css/gruvbox/theme.min.css +1 -1
  344. data/assets/theme/j1/modules/rouge/css/gruvbox.dark/theme.css +1 -1
  345. data/assets/theme/j1/modules/rouge/css/gruvbox.dark/theme.min.css +1 -1
  346. data/assets/theme/j1/modules/rouge/css/gruvbox.light/theme.css +1 -1
  347. data/assets/theme/j1/modules/rouge/css/gruvbox.light/theme.min.css +1 -1
  348. data/assets/theme/j1/modules/rouge/css/igorpro/theme.css +1 -1
  349. data/assets/theme/j1/modules/rouge/css/igorpro/theme.min.css +1 -1
  350. data/assets/theme/j1/modules/rouge/css/molokai/theme.css +1 -1
  351. data/assets/theme/j1/modules/rouge/css/molokai/theme.min.css +1 -1
  352. data/assets/theme/j1/modules/rouge/css/monokai/theme.css +1 -1
  353. data/assets/theme/j1/modules/rouge/css/monokai/theme.min.css +1 -1
  354. data/assets/theme/j1/modules/rouge/css/monokai.sublime/theme.css +1 -1
  355. data/assets/theme/j1/modules/rouge/css/monokai.sublime/theme.min.css +1 -1
  356. data/assets/theme/j1/modules/rouge/css/pastie/theme.css +1 -1
  357. data/assets/theme/j1/modules/rouge/css/pastie/theme.min.css +1 -1
  358. data/assets/theme/j1/modules/rouge/css/thankful_eyes/theme.css +1 -1
  359. data/assets/theme/j1/modules/rouge/css/thankful_eyes/theme.min.css +1 -1
  360. data/assets/theme/j1/modules/rouge/css/themes.txt +1 -1
  361. data/assets/theme/j1/modules/rouge/css/tulip/theme.css +1 -1
  362. data/assets/theme/j1/modules/rouge/css/tulip/theme.min.css +1 -1
  363. data/assets/theme/j1/modules/rouge/css/uno.dark/theme.css +1 -1
  364. data/assets/theme/j1/modules/rouge/css/uno.dark/theme.min.css +1 -1
  365. data/assets/theme/j1/modules/rouge/css/uno.light/theme.css +1 -1
  366. data/assets/theme/j1/modules/rouge/css/uno.light/theme.min.css +1 -1
  367. data/assets/theme/j1/modules/rouge/js/select.js +1 -1
  368. data/assets/theme/j1/modules/rtable/css/theme/uno/rtable.css +1 -1
  369. data/assets/theme/j1/modules/rtable/css/theme/uno/rtable.min.css +1 -1
  370. data/assets/theme/j1/modules/rtable/js/rtable.js +1 -1
  371. data/assets/theme/j1/modules/rtable/js/rtable.min.js +1 -1
  372. data/assets/theme/j1/modules/scroller/css/theme/uno.css +1 -1
  373. data/assets/theme/j1/modules/scroller/css/theme/uno.min.css +1 -1
  374. data/assets/theme/j1/modules/scroller/js/scroller.min.js +1 -1
  375. data/assets/theme/j1/modules/slick/lightbox/css/theme/uno.css +1 -1
  376. data/assets/theme/j1/modules/slick/lightbox/css/theme/uno.min.css +1 -1
  377. data/assets/theme/j1/modules/slick/slider/css/theme/uno.css +1 -1
  378. data/assets/theme/j1/modules/slick/slider/css/theme/uno.min.css +1 -1
  379. data/assets/theme/j1/modules/spinner/css/spin.css +1 -1
  380. data/assets/theme/j1/modules/spinner/css/spin.min.css +1 -1
  381. data/assets/theme/j1/modules/spinner/js/spin.js +1 -1
  382. data/assets/theme/j1/modules/spinner/js/spin.min.js +1 -1
  383. data/assets/theme/j1/modules/swiper/LICENSE +20 -0
  384. data/assets/theme/j1/modules/swiper/README.md +95 -0
  385. data/assets/theme/j1/modules/swiper/_info/.version_1.2.0 +15 -0
  386. data/assets/theme/j1/modules/swiper/_info/swiperjs.com-demos.url +2 -0
  387. data/assets/theme/j1/modules/swiper/css/modules/effectNeighbor.css +53 -0
  388. data/assets/theme/j1/modules/swiper/css/modules/effectNeighbor.min.css +17 -0
  389. data/assets/theme/j1/modules/swiper/css/modules/effectPanorama.css +26 -0
  390. data/assets/theme/j1/modules/swiper/css/modules/effectPanorama.min.css +17 -0
  391. data/assets/theme/j1/modules/swiper/css/modules/effectThumbs.css +44 -0
  392. data/assets/theme/j1/modules/swiper/css/modules/effectThumbs.min.css +44 -0
  393. data/assets/theme/j1/modules/swiper/css/swiper-bundle.css +746 -0
  394. data/assets/theme/j1/modules/swiper/css/swiper-bundle.min..css +23 -0
  395. data/assets/theme/j1/modules/swiper/css/theme/uno.css +229 -0
  396. data/assets/theme/j1/modules/swiper/css/theme/uno.min.css +144 -0
  397. data/assets/theme/j1/modules/swiper/js/modules/!readme +3 -0
  398. data/assets/theme/j1/modules/swiper/js/modules/effectNeighbor.js +33 -0
  399. data/assets/theme/j1/modules/swiper/js/modules/effectNeighbor.min.js +33 -0
  400. data/assets/theme/j1/modules/swiper/js/modules/effectPanorama.js +93 -0
  401. data/assets/theme/j1/modules/swiper/js/modules/effectPanorama.min.js +17 -0
  402. data/assets/theme/j1/modules/swiper/js/modules/effectThumbs.js +113 -0
  403. data/assets/theme/j1/modules/swiper/js/modules/effectThumbs.min.js +33 -0
  404. data/assets/theme/j1/modules/swiper/js/swiper-bundle.js +9791 -0
  405. data/assets/theme/j1/modules/swiper/js/swiper-bundle.min.js +23 -0
  406. data/assets/theme/j1/modules/themeSwitcher/js/switcher.js +1 -1
  407. data/assets/theme/j1/modules/themeSwitcher/js/switcher.min.js +1 -1
  408. data/assets/theme/j1/modules/translator/css/translator.css +1 -1
  409. data/assets/theme/j1/modules/translator/css/translator.min.css +1 -1
  410. data/assets/theme/j1/modules/translator/js/translator.js +1 -1
  411. data/assets/theme/j1/modules/translator/js/translator.min.js +1 -1
  412. data/assets/theme/j1/modules/videoPlayer/vimeo/js/player.min.js +1 -1
  413. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.0.css +1 -1
  414. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.1.css +1 -1
  415. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.css +1 -1
  416. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.min.css +1 -1
  417. data/assets/theme/j1/modules/videojs/css/plugins/controls/zoom.css +1 -1
  418. data/assets/theme/j1/modules/videojs/css/plugins/controls/zoom.min.css +1 -1
  419. data/assets/theme/j1/modules/videojs/css/themes/uno.css +1 -1
  420. data/assets/theme/j1/modules/videojs/css/themes/uno.min.css +1 -1
  421. data/assets/theme/j1/modules/videojs/js/plugins/controls/autocaption/autocaption.js +1 -1
  422. data/assets/theme/j1/modules/videojs/js/plugins/controls/autocaption/autocaption.min.js +1 -1
  423. data/assets/theme/j1/modules/videojs/js/plugins/controls/hotkeys/hotkeys.js +1 -1
  424. data/assets/theme/j1/modules/videojs/js/plugins/controls/hotkeys/hotkeys.min.js +1 -1
  425. data/assets/theme/j1/modules/videojs/js/plugins/controls/skipbuttons/skipbuttons.js +1 -1
  426. data/assets/theme/j1/modules/videojs/js/plugins/controls/skipbuttons/skipbuttons.min.js +1 -1
  427. data/assets/theme/j1/modules/videojs/js/plugins/controls/zoom/zoom.js +1 -1
  428. data/assets/theme/j1/modules/videojs/js/plugins/controls/zoom/zoom.min.js +1 -1
  429. data/assets/theme/j1/modules/videojs/js/plugins/players/dm/api/dailymotion.sdk.js +1 -1
  430. data/assets/theme/j1/modules/videojs/js/plugins/players/dm/api/dailymotion.sdk.min.js +1 -1
  431. data/assets/theme/j1/modules/videojs/js/plugins/players/dm/dailymotion.js +1 -1
  432. data/assets/theme/j1/modules/videojs/js/plugins/players/dm/dailymotion.min.js +1 -1
  433. data/assets/theme/j1/modules/videojs/js/plugins/players/vm/api/vimeo.js +1 -1
  434. data/assets/theme/j1/modules/videojs/js/plugins/players/vm/api/vimeo.min.js +1 -1
  435. data/assets/theme/j1/modules/videojs/js/plugins/players/vm/vimeo.js +1 -1
  436. data/assets/theme/j1/modules/videojs/js/plugins/players/vm/vimeo.min.js +1 -1
  437. data/assets/theme/j1/modules/videojs/js/plugins/players/wt/wistia.js +1 -1
  438. data/assets/theme/j1/modules/videojs/js/plugins/players/wt/wistia.min.js +1 -1
  439. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/api/youtube.min.js +1 -1
  440. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/v3.0.0/youtube.js +1 -1
  441. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/v3.0.0/youtube.min.js +1 -1
  442. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/youtube.js +1 -1
  443. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/youtube.min.js +1 -1
  444. data/lib/j1/version.rb +1 -1
  445. data/lib/starter_web/Gemfile +1 -1
  446. data/lib/starter_web/README.md +5 -5
  447. data/lib/starter_web/_config.yml +2 -2
  448. data/lib/starter_web/_data/j1_config.yml +1 -1
  449. data/lib/starter_web/_data/modules/amplitude_players.yml +352 -0
  450. data/lib/starter_web/_data/modules/{amplitude.yml → amplitude_playlists.yml} +257 -239
  451. data/lib/starter_web/_data/modules/authentication.yml +1 -1
  452. data/lib/starter_web/_data/modules/defaults/amplitude.yml +60 -35
  453. data/lib/starter_web/_data/modules/defaults/slick.yml +1 -1
  454. data/lib/starter_web/_data/modules/defaults/swiper.yml +175 -0
  455. data/lib/starter_web/_data/modules/log4javascript.yml +1 -1
  456. data/lib/starter_web/_data/modules/navigator.yml +1 -1
  457. data/lib/starter_web/_data/modules/navigator_menu.yml +1 -1
  458. data/lib/starter_web/_data/modules/swiper.yml +655 -0
  459. data/lib/starter_web/_data/modules/swiper_playlists.yml +480 -0
  460. data/lib/starter_web/_data/private.yml +1 -1
  461. data/lib/starter_web/_data/resources.yml +272 -158
  462. data/lib/starter_web/_data/templates/feed.xml +1 -1
  463. data/lib/starter_web/_includes/custom/static/bs5_accordion.html +1 -1
  464. data/lib/starter_web/_includes/custom/templates/bs5_accordion.html +1 -1
  465. data/lib/starter_web/_includes/custom/templates/collection_panel.html +1 -1
  466. data/lib/starter_web/_includes/custom/templates/custom_header.html +1 -1
  467. data/lib/starter_web/_includes/custom/templates/people_panel.html +1 -1
  468. data/lib/starter_web/_includes/google/static/google_ad__your-slot-id.html +1 -1
  469. data/lib/starter_web/_includes/google/templates/google_ads.html +1 -1
  470. data/lib/starter_web/_plugins/asciidoctor/admonition-block-answer.rb +1 -1
  471. data/lib/starter_web/_plugins/asciidoctor/admonition-block-question.rb +1 -1
  472. data/lib/starter_web/_plugins/asciidoctor/amplitude-block.rb +2 -1
  473. data/lib/starter_web/_plugins/asciidoctor/banner.rb +1 -1
  474. data/lib/starter_web/_plugins/asciidoctor/callout.rb +1 -1
  475. data/lib/starter_web/_plugins/asciidoctor/carousel-block.rb +1 -1
  476. data/lib/starter_web/_plugins/asciidoctor/conum.rb +1 -1
  477. data/lib/starter_web/_plugins/asciidoctor/dailymotion-block.rb +1 -1
  478. data/lib/starter_web/_plugins/asciidoctor/fab-icon-inline.rb +1 -1
  479. data/lib/starter_web/_plugins/asciidoctor/fas-icon-inline.rb +1 -1
  480. data/lib/starter_web/_plugins/asciidoctor/flag-icon-inline.rb +1 -1
  481. data/lib/starter_web/_plugins/asciidoctor/gallery-block.rb +1 -1
  482. data/lib/starter_web/_plugins/asciidoctor/gemini-ui-block.rb +1 -1
  483. data/lib/starter_web/_plugins/asciidoctor/gist-block.rb +1 -1
  484. data/lib/starter_web/_plugins/asciidoctor/google-ad-block.rb +1 -1
  485. data/lib/starter_web/_plugins/asciidoctor/iconify-icon-inline.rb +1 -1
  486. data/lib/starter_web/_plugins/asciidoctor/iframe-block.rb +1 -1
  487. data/lib/starter_web/_plugins/asciidoctor/lightbox-block.rb +1 -1
  488. data/lib/starter_web/_plugins/asciidoctor/lorem_inline.rb +1 -1
  489. data/lib/starter_web/_plugins/asciidoctor/masonry-block.rb +1 -1
  490. data/lib/starter_web/_plugins/asciidoctor/masterslider-block.rb +1 -1
  491. data/lib/starter_web/_plugins/asciidoctor/mdi-icon-inline.rb +1 -1
  492. data/lib/starter_web/_plugins/asciidoctor/mdib-icon-inline.rb +1 -1
  493. data/lib/starter_web/_plugins/asciidoctor/mdil-icon-inline.rb +1 -1
  494. data/lib/starter_web/_plugins/asciidoctor/panel.rb +1 -1
  495. data/lib/starter_web/_plugins/asciidoctor/placeholder-inline.rb +1 -1
  496. data/lib/starter_web/_plugins/asciidoctor/range-slider-block.rb +1 -1
  497. data/lib/starter_web/_plugins/asciidoctor/shout-block.rb +1 -1
  498. data/lib/starter_web/_plugins/asciidoctor/slick-block.rb +1 -1
  499. data/lib/starter_web/_plugins/asciidoctor/slim-select-block.rb +1 -1
  500. data/lib/starter_web/_plugins/asciidoctor/swiper-block.rb +55 -0
  501. data/lib/starter_web/_plugins/asciidoctor/textbook-block.rb +1 -1
  502. data/lib/starter_web/_plugins/asciidoctor/twitter-emoji-inline.rb +1 -1
  503. data/lib/starter_web/_plugins/asciidoctor/videojs-block.rb +1 -5
  504. data/lib/starter_web/_plugins/asciidoctor/vimeo-block.rb +1 -1
  505. data/lib/starter_web/_plugins/asciidoctor/wistia-block.rb +1 -1
  506. data/lib/starter_web/_plugins/asciidoctor/youtube-block.rb +1 -1
  507. data/lib/starter_web/_plugins/filter/debug.rb +1 -1
  508. data/lib/starter_web/_plugins/filter/encodeBase64.rb +1 -1
  509. data/lib/starter_web/_plugins/filter/encryptAES.rb +1 -1
  510. data/lib/starter_web/_plugins/filter/filters.rb +32 -1
  511. data/lib/starter_web/_plugins/filter/liquify.rb +1 -1
  512. data/lib/starter_web/_plugins/filter/minifyJS.rb +1 -1
  513. data/lib/starter_web/_plugins/filter/minifyJSON.rb +1 -1
  514. data/lib/starter_web/_plugins/filter/prettify.rb +1 -1
  515. data/lib/starter_web/_plugins/filter/xml_prettify.rb +1 -1
  516. data/lib/starter_web/_plugins/helper/symlink_watcher.rb +1 -1
  517. data/lib/starter_web/_plugins/i18n/date.rb +1 -1
  518. data/lib/starter_web/_plugins/index/lunr.rb +2 -2
  519. data/lib/starter_web/_plugins/seo/j1-feed.rb +1 -1
  520. data/lib/starter_web/_plugins/seo/j1-seo-tags.rb +1 -1
  521. data/lib/starter_web/_plugins/seo/j1-sitemap.rb +1 -1
  522. data/lib/starter_web/assets/image/icons/tv/Index of -tv-logos-.url +2 -0
  523. data/lib/starter_web/assets/image/icons/tv/TV from Germany - LyngSat Logo.url +2 -0
  524. data/lib/starter_web/assets/image/icons/tv/Zeichnung.svg +47 -0
  525. data/lib/starter_web/assets/image/icons/tv/ard-icon-16x16.ico +0 -0
  526. data/lib/starter_web/assets/image/icons/tv/ard-icon-24x24.png +0 -0
  527. data/lib/starter_web/assets/image/icons/tv/ard-icon-512x512.png +0 -0
  528. data/lib/starter_web/assets/image/icons/tv/ard-icon.jpg +0 -0
  529. data/lib/starter_web/assets/image/icons/tv/ard-icon.jpg (353/303/227353).url" +2 -0
  530. data/lib/starter_web/assets/image/icons/tv/ard-icon.png +0 -0
  531. data/lib/starter_web/assets/image/icons/tv/ard-logo-png_seeklogo-428343.png +0 -0
  532. data/lib/starter_web/assets/image/icons/tv/cytec-tvlogos- collection of mostly german tv channel logos.url +2 -0
  533. data/lib/starter_web/assets/image/icons/tv/output_image.jpg +0 -0
  534. data/lib/starter_web/assets/image/icons/tv/pang.ping +0 -0
  535. data/lib/starter_web/assets/image/icons/tv/tv-logos-countries-germany-0_all_logos_mosaic.md at main /302/267 tv-logo-tv-logos.url" +2 -0
  536. data/lib/starter_web/assets/image/modules/attics/1920x1280/tiny_desk.jpg +0 -0
  537. data/lib/starter_web/assets/image/modules/attics/alice-donovan-rouse-2.jpg +0 -0
  538. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-1.jpg +0 -0
  539. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-2.jpg +0 -0
  540. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-3.jpg +0 -0
  541. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-4.jpg +0 -0
  542. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-5.jpg +0 -0
  543. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-6.jpg +0 -0
  544. data/lib/starter_web/assets/image/modules/gallery/mega_cities/295683517.jpg +0 -0
  545. data/lib/starter_web/assets/image/modules/gallery/mega_cities/chicago-us.jpg +0 -0
  546. data/lib/starter_web/assets/image/modules/gallery/mega_cities/denys-nevozhai-1_b.jpg +0 -0
  547. data/lib/starter_web/assets/image/modules/gallery/mega_cities/denys-nevozhai-1_c.jpg +0 -0
  548. data/lib/starter_web/assets/image/modules/gallery/mega_cities/denys-nevozhai-3_b.jpg +0 -0
  549. data/lib/starter_web/assets/image/modules/gallery/mega_cities/emmad-mazhari_c.jpg +0 -0
  550. data/lib/starter_web/assets/image/modules/gallery/mega_cities/federico-rizzarelli_b.jpg +0 -0
  551. data/lib/starter_web/assets/image/modules/gallery/mega_cities/federico-rizzarelli_c.jpg +0 -0
  552. data/lib/starter_web/assets/image/modules/gallery/mega_cities/jakarta_indonesia.jpg +0 -0
  553. data/lib/starter_web/assets/image/modules/gallery/mega_cities/jakarta_indonesia_2.jpg +0 -0
  554. data/lib/starter_web/assets/image/modules/gallery/mega_cities/melbourne_australia.jpg +0 -0
  555. data/lib/starter_web/assets/image/modules/gallery/mega_cities/melbourne_australia.webp +0 -0
  556. data/lib/starter_web/assets/image/modules/gallery/mega_cities/queen_bees_at_eureka_tower.jpg +0 -0
  557. data/lib/starter_web/assets/image/modules/gallery/mega_cities/shanghai_china.jpg +0 -0
  558. data/lib/starter_web/assets/image/modules/gallery/mega_cities/thomas-tucker_b.jpg +0 -0
  559. data/lib/starter_web/assets/image/modules/gallery/mega_cities/tokyo_japan.jpg +0 -0
  560. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/guardians-of-the-galaxy.jpg +0 -0
  561. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/justice-league.jpg +0 -0
  562. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/spider-man.jpg +0 -0
  563. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/suicide-squad.jpg +0 -0
  564. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/thor-ragnarok.jpg +0 -0
  565. data/lib/starter_web/assets/image/modules/gallery/panorama/1.jpg +0 -0
  566. data/lib/starter_web/assets/image/modules/gallery/panorama/10.jpg +0 -0
  567. data/lib/starter_web/assets/image/modules/gallery/panorama/11.jpg +0 -0
  568. data/lib/starter_web/assets/image/modules/gallery/panorama/12.jpg +0 -0
  569. data/lib/starter_web/assets/image/modules/gallery/panorama/2.jpg +0 -0
  570. data/lib/starter_web/assets/image/modules/gallery/panorama/3.jpg +0 -0
  571. data/lib/starter_web/assets/image/modules/gallery/panorama/4.jpg +0 -0
  572. data/lib/starter_web/assets/image/modules/gallery/panorama/5.jpg +0 -0
  573. data/lib/starter_web/assets/image/modules/gallery/panorama/6.jpg +0 -0
  574. data/lib/starter_web/assets/image/modules/gallery/panorama/7.jpg +0 -0
  575. data/lib/starter_web/assets/image/modules/gallery/panorama/8.jpg +0 -0
  576. data/lib/starter_web/assets/image/modules/gallery/panorama/9.jpg +0 -0
  577. data/lib/starter_web/assets/video/poster/youtube/faelle_des_bnd/der_unverzichtbare_feind.jpg +0 -0
  578. data/lib/starter_web/assets/video/poster/youtube/faelle_des_bnd/ein_diener_vieler_herren.jpg +0 -0
  579. data/lib/starter_web/assets/video/poster/youtube/the_piano/the-piano.jpg +0 -0
  580. data/lib/starter_web/config.ru +1 -1
  581. data/lib/starter_web/dot.gitattributes +1 -1
  582. data/lib/starter_web/dot.nojekyll +1 -1
  583. data/lib/starter_web/package.json +1 -1
  584. data/lib/starter_web/pages/public/{manuals/integrations/google/gemini/_includes → _includes}/attributes.asciidoc +5 -7
  585. data/lib/starter_web/pages/public/_includes/documents/photoswipe/200_photoswipe_parameters.asciidoc +529 -0
  586. data/lib/starter_web/pages/public/_includes/documents/photoswipe/210_photoswipe_lightbox_parameters.asciidoc +105 -0
  587. data/lib/starter_web/pages/public/_includes/documents/photoswipe/300_caption_plugin_for_photoSwipe.asciidoc +324 -0
  588. data/lib/starter_web/pages/public/_includes/documents/swiper/100_swiper_features.asciidoc +50 -0
  589. data/lib/starter_web/pages/public/_includes/documents/swiper/100_swiper_html_layout.asciidoc +122 -0
  590. data/lib/starter_web/pages/public/_includes/documents/swiper/100_swiper_initialization.asciidoc +53 -0
  591. data/lib/starter_web/pages/public/_includes/documents/swiper/110_swiper_common_options.asciidoc +118 -0
  592. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_a_k.asciidoc +1094 -0
  593. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_l_o.asciidoc +537 -0
  594. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_p_s.asciidoc +757 -0
  595. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_t_z.asciidoc +451 -0
  596. data/lib/starter_web/pages/public/_includes/documents/swiper/300_swiper_instance_properties.asciidoc +873 -0
  597. data/lib/starter_web/pages/public/_includes/documents/swiper/400_swiper_modules.asciidoc +3445 -0
  598. data/lib/starter_web/pages/public/_includes/documents/swiper/500_swiper_methods.asciidoc +989 -0
  599. data/lib/starter_web/pages/public/_includes/documents/swiper/600_swiper_events.asciidoc +1534 -0
  600. data/lib/starter_web/pages/public/{amplitude_yt_tester.adoc → tools/tester/amplitude_yt_tester.adoc} +81 -67
  601. data/lib/starter_web/pages/public/tools/tester/swiper_tester.adoc +796 -0
  602. data/lib/starter_web/pages/public/tour/modal_extentions.adoc +12 -5
  603. data/lib/starter_web/pages/public/tour/play_audio.adoc +60 -5
  604. data/lib/starter_web/pages/public/tour/play_video.adoc +30 -0
  605. data/lib/starter_web/pages/public/tour/present_images.adoc +24 -22
  606. metadata +128 -20
  607. data/assets/theme/j1/modules/amplitudejs/js/tech/youtube_example.js +0 -211
  608. data/lib/starter_web/assets/image/modules/gallery/mega_cities/thomas-tucker-bw.jpg +0 -0
  609. data/lib/starter_web/pages/public/lazy_loader_tester.adoc +0 -402
  610. data/lib/starter_web/pages/public/manuals/integrations/amplitudejs/_includes/attributes.asciidoc +0 -69
  611. data/lib/starter_web/pages/public/manuals/integrations/amplitudejs/_includes/documents/readme +0 -0
  612. data/lib/starter_web/pages/public/manuals/integrations/amplitudejs/amplitudejs-api.adoc +0 -2260
  613. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/documents/preview_google_adsense.asciidoc +0 -448
  614. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/documents/readme +0 -0
  615. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/tables/readme +0 -0
  616. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/gemini.adoc +0 -525
  617. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/security.asccidoc +0 -274
  618. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/security.hrml +0 -560
  619. data/lib/starter_web/pages/public/manuals/integrations/videojs/youtube-api.adoc +0 -1638
  620. data/lib/starter_web/pages/public/manuals/ytdl/man.adoc +0 -3020
  621. data/lib/starter_web/pages/public/manuals/ytdl/man.md +0 -2378
@@ -0,0 +1,1177 @@
1
+ ---
2
+ regenerate: true
3
+ ---
4
+
5
+ {%- capture cache -%}
6
+
7
+ {% comment %}
8
+ # -----------------------------------------------------------------------------
9
+ # ~/assets/theme/j1/adapter/js/amplitude.js
10
+ # Liquid template to adapt the AmplitudeJS v4 module
11
+ #
12
+ # Product/Info:
13
+ # https://jekyll.one
14
+ # Copyright (C) 2023-2025 Juergen Adams
15
+ #
16
+ # J1 Template is licensed under the MIT License.
17
+ # For details, see: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE
18
+ # -----------------------------------------------------------------------------
19
+ # Test data:
20
+ # {{ liquid_var | debug }}
21
+ # amplitude_options: {{ amplitude_options | debug }}
22
+ # -----------------------------------------------------------------------------
23
+ {% endcomment %}
24
+
25
+ {% comment %} Liquid procedures
26
+ -------------------------------------------------------------------------------- {% endcomment %}
27
+
28
+ {% comment %} Set global settings
29
+ -------------------------------------------------------------------------------- {% endcomment %}
30
+ {% assign environment = site.environment %}
31
+ {% assign asset_path = "/assets/theme/j1" %}
32
+
33
+ {% comment %} Process YML config data
34
+ ================================================================================ {% endcomment %}
35
+
36
+ {% comment %} Set config files
37
+ -------------------------------------------------------------------------------- {% endcomment %}
38
+ {% assign template_config = site.data.j1_config %}
39
+ {% assign blocks = site.data.blocks %}
40
+ {% assign modules = site.data.modules %}
41
+
42
+ {% comment %} Set config data (settings only)
43
+ -------------------------------------------------------------------------------- {% endcomment %}
44
+ {% assign amplitude_defaults = modules.defaults.amplitude.defaults %}
45
+ {% assign amplitude_settings = modules.amplitude.settings %}
46
+
47
+ {% comment %} Set config options (settings only)
48
+ -------------------------------------------------------------------------------- {% endcomment %}
49
+ {% assign amplitude_options = amplitude_defaults | merge: amplitude_settings %}
50
+
51
+ {% comment %} Variables
52
+ -------------------------------------------------------------------------------- {% endcomment %}
53
+ {% assign comments = amplitude_options.enabled %}
54
+
55
+ {% comment %} Detect prod mode
56
+ -------------------------------------------------------------------------------- {% endcomment %}
57
+ {% assign production = false %}
58
+ {% if environment == 'prod' or environment == 'production' %}
59
+ {% assign production = true %}
60
+ {% endif %}
61
+
62
+ /*
63
+ # -----------------------------------------------------------------------------
64
+ # ~/assets/theme/j1/adapter/js/amplitude.js
65
+ # J1 Adapter for the amplitude module
66
+ #
67
+ # Product/Info:
68
+ # https://jekyll.one
69
+ #
70
+ # Copyright (C) 2023-2025 Juergen Adams
71
+ #
72
+ # J1 Template is licensed under the MIT License.
73
+ # For details, see: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE
74
+ # -----------------------------------------------------------------------------
75
+ # Adapter generated: {{site.time}}
76
+ # -----------------------------------------------------------------------------
77
+ */
78
+
79
+ // -----------------------------------------------------------------------------
80
+ // ESLint shimming
81
+ // -----------------------------------------------------------------------------
82
+ /* eslint indent: "off" */
83
+ // -----------------------------------------------------------------------------
84
+
85
+ "use strict";
86
+ j1.adapter.amplitude = ((j1, window) => {
87
+
88
+ // global settings
89
+ // ---------------------------------------------------------------------------
90
+ var environment = '{{environment}}';
91
+ var cookie_names = j1.getCookieNames();
92
+ var user_state = j1.readCookie(cookie_names.user_state);
93
+ var state = 'not_started';
94
+
95
+ // module settings
96
+ // ---------------------------------------------------------------------------
97
+
98
+ // control|logging
99
+ // ---------------------------------------------------------------------------
100
+ var _this;
101
+ var logger;
102
+ var logText;
103
+ var toJSON;
104
+ var toText;
105
+
106
+ // date|time monitoring
107
+ //----------------------------------------------------------------------------
108
+ var startTime;
109
+ var endTime;
110
+ var startTimeModule;
111
+ var endTimeModule;
112
+ var timeSeconds;
113
+
114
+ // AmplitudeJS API settings
115
+ // ---------------------------------------------------------------------------
116
+ var ytpSongIndex = "0";
117
+ var ytpAutoPlay = false;
118
+ var ytpLoop = true;
119
+ var playLists = {};
120
+ var playersUILoaded = { state: false };
121
+ var apiInitialized = { state: false };
122
+ var playList;
123
+ var playerID;
124
+ var playerType;
125
+ var playListTitle;
126
+ var playListName;
127
+ var amplitudePlayerState;
128
+ var amplitudeDefaults;
129
+ var amplitudeSettings;
130
+ var amplitudeOptions;
131
+ var ytPlayer;
132
+ var ytpPlaybackRate
133
+
134
+ // AmplitudeJS Player DEFAULT settings
135
+ // ---------------------------------------------------------------------------
136
+ var xhrLoadState;
137
+ var dependency;
138
+ var playerCounter = 0;
139
+ var load_dependencies = {};
140
+ var playersProcessed = [];
141
+ var playersHtmlLoaded = false;
142
+ var processingPlayersFinished = false;
143
+
144
+ var playerAudioInfo = ('{{amplitude_defaults.playlist.audio_info}}' === 'true') ? true : false;
145
+ var playerDefaultPluginManager = ('{{amplitude_defaults.player.plugin_manager.enabled}}' === 'true') ? true : false;
146
+ var playerDefaultType = '{{amplitude_defaults.player.type}}';
147
+ var playerVolumeValue = '{{amplitude_defaults.player.volume_slider.preset_value}}';
148
+ var playerVolumeSliderStep = '{{amplitude_defaults.player.volume_slider.slider_step}}';
149
+ var playerRepeat = ('{{amplitude_defaults.player.repeat}}' === 'true') ? true : false;
150
+ var playerShuffle = ('{{amplitude_defaults.player.shuffle}}' === 'true') ? true : false;
151
+ var playerPlayNextTitle = ('{{amplitude_defaults.player.play_next_title}}' === 'true') ? true : false;
152
+ var playerPauseNextTitle = ('{{amplitude_defaults.player.pause_next_title}}' === 'true') ? true : false;
153
+ var playerDelayNextTitle = '{{amplitude_defaults.player.delay_next_title}}';
154
+ var playerForwardBackwardSkipSeconds = '{{amplitude_defaults.player.forward_backward_skip_seconds}}';
155
+
156
+ var pluginManagerEnabled;
157
+ var playerExistsInPage;
158
+
159
+ // YT player settings
160
+ // -----------------------------------------------------------------------------
161
+ // const YT_PLAYER_STATE = {
162
+ // not_started: -1,
163
+ // ended: 0,
164
+ // playing: 1,
165
+ // paused: 2,
166
+ // buffering: 3,
167
+ // video_cued: 5
168
+ // };
169
+
170
+ // AmplitudeJS settings curently NOT used
171
+ // ---------------------------------------------------------------------------
172
+ var playerWaveformsEnabled = '{{amplitude_defaults.player.waveforms.enabled}}';
173
+ var playerWaveformsSampleRate = '{{amplitude_defaults.player.waveforms.sample_rate}}';
174
+ var playerVisualizationEnabled = '{{amplitude_defaults.player.visualization.enabled}}';
175
+ var playerVisualizationName = '{{amplitude_defaults.player.visualization.name}}';
176
+
177
+
178
+ // ---------------------------------------------------------------------------
179
+ // helper functions
180
+ // ---------------------------------------------------------------------------
181
+
182
+ // ---------------------------------------------------------------------------
183
+ // main
184
+ // ---------------------------------------------------------------------------
185
+ return {
186
+
187
+ // -------------------------------------------------------------------------
188
+ // adapter initializer
189
+ // -------------------------------------------------------------------------
190
+ init: (options) => {
191
+
192
+ // -----------------------------------------------------------------------
193
+ // default module settings
194
+ // -----------------------------------------------------------------------
195
+ var settings = $.extend({
196
+ module_name: 'j1.adapter.amplitude',
197
+ generated: '{{site.time}}'
198
+ }, options);
199
+
200
+ // -----------------------------------------------------------------------
201
+ // global variable settings
202
+ // -----------------------------------------------------------------------
203
+ amplitudeDefaults = $.extend({}, {{amplitude_defaults | replace: 'nil', 'null' | replace: '=>', ':' }});
204
+ amplitudeSettings = $.extend({}, {{amplitude_settings | replace: 'nil', 'null' | replace: '=>', ':' }});
205
+ amplitudeOptions = $.extend(true, {}, amplitudeDefaults, amplitudeSettings);
206
+
207
+ // save AJS player setiings for later use (e.g. the AJS plugins)
208
+ // j1.adapter.amplitude['amplitudeDefaults'] = amplitudeDefaults;
209
+ // j1.adapter.amplitude['amplitudeSettings'] = amplitudeSettings;
210
+ // j1.adapter.amplitude['amplitudeOptions'] = amplitudeOptions;
211
+
212
+ // -----------------------------------------------------------------------
213
+ // control|logging settings
214
+ // -----------------------------------------------------------------------
215
+ _this = j1.adapter.amplitude;
216
+ logger = log4javascript.getLogger('j1.adapter.amplitude');
217
+
218
+ // -----------------------------------------------------------------------
219
+ // module initializer
220
+ // -----------------------------------------------------------------------
221
+ var dependencies_met_page_ready = setInterval (() => {
222
+ var pageState = $('#content').css("display");
223
+ var pageVisible = (pageState === 'block') ? true : false;
224
+ var j1CoreFinished = (j1.getState() === 'finished') ? true : false;
225
+
226
+ if (j1CoreFinished && pageVisible) {
227
+ startTimeModule = Date.now();
228
+
229
+ _this.setState('started');
230
+ logger.debug('\n' + 'module state: ' + _this.getState());
231
+ logger.info('\n' + 'module is being initialized');
232
+
233
+ // -------------------------------------------------------------------
234
+ // create global playlist (songs)
235
+ // -------------------------------------------------------------------
236
+ var songs = [];
237
+ _this.songLoader(songs);
238
+
239
+ // -------------------------------------------------------------------
240
+ // load all players (HTML|UI)
241
+ // -------------------------------------------------------------------
242
+ _this.playerHtmlLoader(playersUILoaded);
243
+
244
+ // -------------------------------------------------------------------
245
+ // inititialize amplitude api
246
+ // -------------------------------------------------------------------
247
+ var dependencies_met_players_loaded = setInterval (() => {
248
+ if (playersUILoaded.state) {
249
+ _this.initApi(songs);
250
+ // var playbackRate = ytPlayer.getPlaybackRate();
251
+
252
+ clearInterval(dependencies_met_players_loaded);
253
+ } // END if playersUILoaded
254
+ }, 10); // END dependencies_met_players_loaded
255
+
256
+ // -------------------------------------------------------------------
257
+ // initialize player specific UI events
258
+ // -------------------------------------------------------------------
259
+ var dependencies_met_api_initialized = setInterval (() => {
260
+ if (apiInitialized.state) {
261
+ _this.initPlayerUiEvents();
262
+
263
+ clearInterval(dependencies_met_api_initialized);
264
+ } // END if apiInitialized
265
+ }, 10); // END dependencies_met_api_initialized
266
+
267
+ clearInterval(dependencies_met_page_ready);
268
+ } // END pageVisible
269
+ }, 10); // END dependencies_met_page_ready
270
+
271
+ }, // END init
272
+
273
+ // -------------------------------------------------------------------------
274
+ // Create global playlist|songs (API)
275
+ // -------------------------------------------------------------------------
276
+ songLoader: (songs) => {
277
+
278
+ logger.info('\n' + 'creating global playlist (API): started');
279
+
280
+ // -----------------------------------------------------------------------
281
+ // initialize amplitude songs
282
+ // -----------------------------------------------------------------------
283
+ {% for playlist in amplitude_settings.playlists %} {% if playlist.enabled %}
284
+ var song_items = $.extend({}, {{playlist.items | replace: 'nil', 'null' | replace: '=>', ':' }});
285
+
286
+ for (var i = 0; i < Object.keys(song_items).length; i++) {
287
+ if (song_items[i].enabled) {
288
+ var item = song_items[i];
289
+ var song = {};
290
+
291
+ // map config settings|amplitude song items
292
+ // -----------------------------------------------------------------
293
+ for (const key in item) {
294
+ // skip properties NOT needed for a song
295
+ if (key === 'item' || key === 'audio_base' || key === 'enabled') {
296
+ continue;
297
+ } else if (key === 'audio') {
298
+ song.url = item.audio_base + '/' + item[key];
299
+ continue;
300
+ } else if (key === 'title') {
301
+ song.name = item[key];
302
+ continue;
303
+ } else if (key === 'name') {
304
+ song.album = item[key];
305
+ continue;
306
+ } else if (key === 'cover_image') {
307
+ song.cover_art_url = item[key];
308
+ continue;
309
+ } else if (key === 'audio_info') {
310
+ song.audio_info = item[key];
311
+ continue;
312
+ } else if (key === 'rating') {
313
+ song.rating = item[key];
314
+ continue;
315
+ } else {
316
+ song[key] = item[key];
317
+ } // END if key
318
+ } // END for item
319
+ } // END id enabled
320
+
321
+ songs.push(song);
322
+ } // END for song_items
323
+
324
+ {% endif %} {% endfor %}
325
+
326
+ logger.info('\n' + 'creating global playlist (API): finished');
327
+ }, // END songLoader
328
+
329
+ // -------------------------------------------------------------------------
330
+ // load players HTML portion (UI)
331
+ // -------------------------------------------------------------------------
332
+ playerHtmlLoader: (playersLoaded) => {
333
+ var playerExistsInPage;
334
+
335
+ // -----------------------------------------------------------------------
336
+ // initialize HTML portion (UI) for all players configured|enabled
337
+ // -----------------------------------------------------------------------
338
+ logger.info('\n' + 'loading player HTML components (UI): started');
339
+
340
+ {% for player in amplitude_options.players %} {% if player.enabled %}
341
+ {% assign xhr_data_path = amplitude_options.xhr_data_path %}
342
+ {% capture xhr_container_id %}{{player.id}}_parent{% endcapture %}
343
+
344
+ // load players only that are configured in current page
345
+ //
346
+ playerExistsInPage = ($('#' + '{{xhr_container_id}}')[0] !== undefined) ? true : false;
347
+ if (playerExistsInPage) {
348
+ playerCounter++;
349
+ logger.debug('\n' + 'load player UI on ID #{{player.id}}: started');
350
+
351
+ j1.loadHTML({
352
+ xhr_container_id: '{{xhr_container_id}}',
353
+ xhr_data_path: '{{xhr_data_path}}',
354
+ xhr_data_element: '{{player.id}}'
355
+ },
356
+ 'j1.adapter.amplitude',
357
+ 'data_loaded'
358
+ );
359
+
360
+ // dynamic loader variable to setup the player on ID {{player.id}}
361
+ dependency = 'dependencies_met_html_loaded_{{player.id}}';
362
+ load_dependencies[dependency] = '';
363
+
364
+ // ---------------------------------------------------------------------
365
+ // initialize amplitude instance (when player UI loaded)
366
+ // ---------------------------------------------------------------------
367
+ load_dependencies['dependencies_met_html_loaded_{{player.id}}'] = setInterval (() => {
368
+ // check if HTML portion of the player is loaded successfully
369
+ xhrLoadState = j1.xhrDOMState['#' + '{{xhr_container_id}}'];
370
+
371
+ if (xhrLoadState === 'success') {
372
+ playersProcessed.push('{{xhr_container_id}}');
373
+ logger.debug('\n' + 'load player UI on ID #{{player.id}}: finished');
374
+
375
+ clearInterval(load_dependencies['dependencies_met_html_loaded_{{player.id}}']);
376
+ }
377
+ }, 10); // END dependencies_met_html_loaded
378
+ } // END if playerExistsInPage
379
+
380
+ {% endif %} {% endfor %}
381
+
382
+ load_dependencies['dependencies_met_players_loaded'] = setInterval (() => {
383
+
384
+ if (playersProcessed.length === playerCounter) {
385
+ processingPlayersFinished = true;
386
+ }
387
+
388
+ if (processingPlayersFinished) {
389
+ logger.info('\n' + 'loading player HTML components (UI): finished');
390
+
391
+ clearInterval(load_dependencies['dependencies_met_players_loaded']);
392
+ playersLoaded.state = true;
393
+ }
394
+ }, 10); // END dependencies_met_players_loaded
395
+
396
+ }, // END playerHtmlLoader
397
+
398
+ // -------------------------------------------------------------------------
399
+ // initApi
400
+ // -------------------------------------------------------------------------
401
+ initApi: (songlist) => {
402
+ logger.info('\n' + 'initialze API: started');
403
+
404
+ {% comment %} collect playlists
405
+ -------------------------------------------------------------------------- {% endcomment %}
406
+ {% assign playlists_enabled = 0 %}
407
+ {% for list in amplitude_settings.playlists %} {% if list.enabled %}
408
+ {% assign playlists_enabled = playlists_enabled | plus: 1 %}
409
+ {% endif %} {% endfor %}
410
+
411
+ {% assign playlists_processed = 0 %}
412
+ {% for list in amplitude_settings.playlists %} {% if list.enabled %}
413
+ {% assign playlist_items = list.items %}
414
+ {% assign playlist_name = list.name %}
415
+ {% assign playlist_title = list.title %}
416
+
417
+ {% comment %} collect song items
418
+ ------------------------------------------------------------------------ {% endcomment %}
419
+ {% for item in playlist_items %} {% if item.enabled %}
420
+ {% capture song_item %}
421
+ {
422
+ "name": "{{item.title}}",
423
+ "artist": "{{item.artist}}",
424
+ "album": "{{item.name}}",
425
+ "url": "{{item.audio_base}}/{{item.audio}}",
426
+ "audio_info": "{{item.audio_info}}",
427
+ "rating": "{{item.rating}}",
428
+ "cover_art_url": "{{item.cover_image}}"
429
+ }{% if forloop.last %}{% else %},{% endif %}
430
+ {% endcapture %}
431
+ {% capture song_items %}{{song_items}} {{song_item}}{% endcapture %}
432
+
433
+ {% comment %} create playlist
434
+ ---------------------------------------------------------------------- {% endcomment %}
435
+ {% if forloop.last %}
436
+ {% capture playlist %}
437
+ "{{playlist_name}}": {
438
+ "title": "{{playlist_title}}",
439
+ "songs": [
440
+ {{song_items}}
441
+ ]
442
+ }
443
+ {% endcapture %}
444
+ {% assign playlists_processed = playlists_processed | plus: 1 %}
445
+
446
+ {% comment %} reset song_items
447
+ -------------------------------------------------------------------- {% endcomment %}
448
+ {% capture song_items %}{% endcapture %}
449
+ {% endif %}
450
+ {% endif %} {% endfor %}
451
+
452
+ {% comment %} collect playlists players enabled
453
+ ------------------------------------------------------------------------ {% endcomment %}
454
+ {% capture playlists %}
455
+ {{playlists}} {{playlist}} {% if playlists_processed == playlists_enabled %}{% else %},{% endif %}
456
+ {% endcapture %}
457
+
458
+ {% endif %} {% endfor %}
459
+
460
+ // See: https://521dimensions.com/open-source/amplitudejs/docs
461
+ // NOTE: slider VALUE (volume) is set by DEFAULT settings (player)
462
+ Amplitude.init({
463
+
464
+ bindings: {
465
+ 33: 'play_pause',
466
+ 37: 'prev',
467
+ 39: 'next'
468
+ },
469
+ songs: songlist,
470
+ playlists: {
471
+ {{playlists}}
472
+ },
473
+ callbacks: {
474
+ initialized: function() {
475
+ var amplitudeConfig = Amplitude.getConfig();
476
+ logger.info('\n' + 'initialze API: finished');
477
+ // indicate api successfully initialized
478
+ apiInitialized.state = true;
479
+ },
480
+ onInitError: function() {
481
+ // indicate api failed on initialization
482
+ apiInitialized.state = false;
483
+ console.error('\n' + 'Amplitude API failed on initialization');
484
+ },
485
+ play: function() {
486
+ var songMetaData = Amplitude.getActiveSongMetadata();
487
+ logger.debug('\n' + 'playing title: ' + songMetaData.name);
488
+ document.getElementById('album-art').style.visibility = 'hidden';
489
+ document.getElementById('large-visualization').style.visibility = 'visible';
490
+ },
491
+ pause: function() {
492
+ var songMetaData = Amplitude.getActiveSongMetadata();
493
+ logger.debug('\n' + 'pause title: ' + songMetaData.name);
494
+ document.getElementById('album-art').style.visibility = 'visible';
495
+ document.getElementById('large-visualization').style.visibility = 'hidden';
496
+ },
497
+ song_change: function() {
498
+ var songMetaData = Amplitude.getActiveSongMetadata();
499
+ logger.debug('\n' + 'changed to title: ' + songMetaData.name + ' with titleIndex ' + songMetaData.index);
500
+ },
501
+ next: function() {
502
+ var songMetaData = Amplitude.getActiveSongMetadata();
503
+
504
+ if (playerDelayNextTitle) {
505
+ logger.debug('\n' + 'delay on next title: ' + songMetaData.name + ' with titleIndex ' + songMetaData.index);
506
+ }
507
+
508
+ if (playerPauseNextTitle) {
509
+ amplitudePlayerState = Amplitude.getPlayerState();
510
+ if (amplitudePlayerState === 'playing' || amplitudePlayerState === 'stopped' ) {
511
+ setTimeout(() => {
512
+ // pause playback of next title
513
+ logger.debug('\n' + 'paused on next title: ' + songMetaData.name);
514
+ Amplitude.pause();
515
+ }, 150);
516
+ } // END if playing
517
+ } // END if pause on next title
518
+ },
519
+ prev: function() {
520
+ var songMetaData = Amplitude.getActiveSongMetadata();
521
+
522
+ if (playerDelayNextTitle) {
523
+ logger.debug('\n' + 'delay on previous title: ' + songMetaData.name + ' with titleIndex ' + songMetaData.index);
524
+ }
525
+
526
+ if (playerPauseNextTitle) {
527
+ amplitudePlayerState = Amplitude.getPlayerState();
528
+ if (amplitudePlayerState === 'playing' || amplitudePlayerState === 'stopped' ) {
529
+ setTimeout(() => {
530
+ // pause playback of next title
531
+ logger.debug('\n' + 'paused on next title: ' + songMetaData.name);
532
+ Amplitude.pause();
533
+ }, 150);
534
+ } // END if playing
535
+ } // END if pause on next title
536
+ }
537
+ }, // END callbacks
538
+
539
+ // waveforms: {
540
+ // sample_rate: playerWaveformSampleRate
541
+ // },
542
+
543
+ continue_next: playerPlayNextTitle,
544
+ volume: playerVolumeValue,
545
+ volume_decrement: playerVolumeSliderStep,
546
+ volume_increment: playerVolumeSliderStep
547
+
548
+ }); // END Amplitude init
549
+
550
+ }, // END initApi
551
+
552
+ // -------------------------------------------------------------------------
553
+ // initPlayerUiEvents
554
+ // -------------------------------------------------------------------------
555
+ initPlayerUiEvents: () => {
556
+
557
+ var dependencies_met_player_instances_initialized = setInterval (() => {
558
+ if (apiInitialized.state) {
559
+ var parentContainer = (document.getElementById('{{xhr_container_id}}') !== null) ? true : false;
560
+ var parentContainerExist = ($('#' + '{{xhr_container_id}}')[0] !== undefined) ? true : false;
561
+
562
+ logger.info('\n' + 'initialize player specific UI events: started');
563
+
564
+ {% for player in amplitude_options.players %} {% if player.enabled %}
565
+ {% assign xhr_data_path = amplitude_options.xhr_data_path %}
566
+ {% capture xhr_container_id %}{{player.id}}_parent{% endcapture %}
567
+
568
+ playerID = '{{player.id}}';
569
+ playerType = '{{player.type}}';
570
+ playList = '{{player.playlist}}';
571
+ playListName = '{{player.playlist.name}}'
572
+ playListTitle = '{{player.playlist.title}}';
573
+
574
+ logger.debug('\n' + 'set playlist {{player.playlist}} on id #{{player.id}} with title: ' + playListTitle);
575
+
576
+ // dynamic loader variable to setup the player on ID {{player.id}}
577
+ dependency = 'dependencies_met_player_loaded_{{player.id}}';
578
+ load_dependencies[dependency] = '';
579
+
580
+ // -----------------------------------------------------------------
581
+ // initialize player instance (when player UI is loaded)
582
+ // -----------------------------------------------------------------
583
+ load_dependencies['dependencies_met_player_loaded_{{player.id}}'] = setInterval (() => {
584
+ // check if HTML portion of the player is loaded successfully
585
+ var xhrLoadState = j1.xhrDOMState['#' + '{{xhr_container_id}}'];
586
+ var playerExistsInPage = ($('#' + '{{xhr_container_id}}')[0] !== undefined) ? true : false;
587
+
588
+ if (xhrLoadState === 'success' && playerExistsInPage) {
589
+
590
+ // set song (title) specific audio info links
591
+ // -------------------------------------------------------------
592
+ if (playerAudioInfo) {
593
+ var infoLinks = document.getElementsByClassName('audio-info-link');
594
+ _this.setAudioInfo(infoLinks);
595
+ }
596
+
597
+ // jadams, 2024-10-19: (song) events DISABLED
598
+ // set song (title) specific UI events
599
+ // -------------------------------------------------------------
600
+ // var songElements = document.getElementsByClassName('song');
601
+ // _this.songEvents(songElements);
602
+
603
+ // player specific UI events
604
+ // -------------------------------------------------------------
605
+ logger.debug('\n' + 'setup player specific UI events on ID #{{player.id}}: started');
606
+
607
+ var dependencies_met_api_initialized = setInterval (() => {
608
+ if (apiInitialized.state) {
609
+ amplitudePlayerState = Amplitude.getPlayerState();
610
+
611
+ {% if player.id contains 'mini' %}
612
+ // ---------------------------------------------------------
613
+ // START mini player UI events
614
+ //
615
+ if (document.getElementById('{{player.id}}') !== null) {
616
+
617
+ // add listeners to all progress bars found (mini-player)
618
+ // getElementsByClassName returns an Array-like object
619
+ // -------------------------------------------------------
620
+ var progressBars = document.getElementsByClassName("mini-player-progress");
621
+ for (var i=0; i<progressBars.length; i++) {
622
+ if (progressBars[i].dataset.amplitudeSource === 'youtube') {
623
+ // do nothing
624
+ } else {
625
+ progressBars[i].addEventListener('click', function(event) {
626
+ var offset = this.getBoundingClientRect();
627
+ var xpos = event.pageX - offset.left;
628
+
629
+ Amplitude.setSongPlayedPercentage(
630
+ (parseFloat(xpos)/parseFloat(this.offsetWidth))*100);
631
+ }); // END EventListener 'click'
632
+ }
633
+ } // END for
634
+
635
+ // for (var i=0; i<progressBars.length; i++) {
636
+ // progressBars[i].addEventListener('click', function(event) {
637
+ // var offset = this.getBoundingClientRect();
638
+ // var xpos = event.pageX - offset.left;
639
+
640
+ // Amplitude.setSongPlayedPercentage(
641
+ // (parseFloat(xpos)/parseFloat(this.offsetWidth))*100);
642
+ // });
643
+ // }
644
+
645
+ } // END mini player UI events
646
+ {% endif %}
647
+
648
+ {% if player.id contains 'compact' %}
649
+ // ---------------------------------------------------------
650
+ // START compact player UI events
651
+ //
652
+ if (document.getElementById('{{player.id}}') !== null) {
653
+
654
+ // show|hide scrollbar in playlist (compact player)
655
+ // -------------------------------------------------------
656
+ const songsInPlaylist = Amplitude.getSongsInPlaylist(playListName);
657
+ if (songsInPlaylist.length <= 8) {
658
+ const titleListCompactPlayer = document.getElementById('compact_player_title_list_' + playListName);
659
+ if (titleListCompactPlayer !== null) {
660
+ titleListCompactPlayer.classList.add('hide-scrollbar');
661
+ }
662
+ }
663
+
664
+ // show|hide playlist
665
+ // -------------------------------------------------------
666
+
667
+ // show playlist
668
+ var showPlaylist = document.getElementById("show_playlist_{{player.id}}");
669
+ if (showPlaylist !== null) {
670
+ showPlaylist.addEventListener('click', function(event) {
671
+ var scrollOffset = (window.innerWidth >= 720) ? -130 : -110;
672
+
673
+ // scroll player to top position
674
+ const targetDiv = document.getElementById("show_playlist_{{player.id}}");
675
+ const targetDivPosition = targetDiv.offsetParent.offsetTop;
676
+ window.scrollTo(0, targetDivPosition + scrollOffset);
677
+
678
+ // open playlist
679
+ var playlistScreen = document.getElementById("playlist_screen_{{player.id}}");
680
+
681
+ playlistScreen.classList.remove('slide-out-top');
682
+ playlistScreen.classList.add('slide-in-top');
683
+ playlistScreen.style.display = "block";
684
+ playlistScreen.style.zIndex = "199";
685
+
686
+ // disable scrolling (if window viewport >= BS Medium and above)
687
+ if (window.innerWidth >= 720) {
688
+ if ($('body').hasClass('stop-scrolling')) {
689
+ return false;
690
+ } else {
691
+ $('body').addClass('stop-scrolling');
692
+ }
693
+ }
694
+ }); // END EventListener 'click' (compact player|show playlist)
695
+ } // END if showPlaylist
696
+
697
+ // hide playlist
698
+ var hidePlaylist = document.getElementById("hide_playlist_{{player.id}}");
699
+ if (hidePlaylist !== null) {
700
+ hidePlaylist.addEventListener('click', function(event) {
701
+ var playlistScreen = document.getElementById("playlist_screen_{{player.id}}");
702
+
703
+ playlistScreen.classList.remove('slide-in-top');
704
+ playlistScreen.classList.add('slislide-out-top');
705
+ playlistScreen.style.display = "none";
706
+ playlistScreen.style.zIndex = "1";
707
+
708
+ // enable scrolling
709
+ if ($('body').hasClass('stop-scrolling')) {
710
+ $('body').removeClass('stop-scrolling');
711
+ }
712
+ }); // END EventListener 'click' (compact player|show playlist)
713
+ } // END if hidePlaylist
714
+
715
+ // add listeners to all progress bars found (compact-player)
716
+ // getElementsByClassName returns an Array-like object
717
+ // -------------------------------------------------------
718
+ var progressBars = document.getElementsByClassName("compact-player-progress");
719
+ for (var i=0; i<progressBars.length; i++) {
720
+ if (progressBars[i].dataset.amplitudeSource === 'youtube') {
721
+ // do nothing
722
+ } else {
723
+ progressBars[i].addEventListener('click', function(event) {
724
+ var offset = this.getBoundingClientRect();
725
+ var xpos = event.pageX - offset.left;
726
+
727
+ Amplitude.setSongPlayedPercentage(
728
+ (parseFloat(xpos)/parseFloat(this.offsetWidth))*100);
729
+ }); // END EventListener 'click'
730
+ }
731
+ } // END for
732
+
733
+ // click on skip forward|backward (compact player)
734
+ // See: https://github.com/serversideup/amplitudejs/issues/384
735
+ // -------------------------------------------------------
736
+
737
+ // add listeners to all SkipForwardButtons found
738
+ var compactPlayerSkipForwardButtons = document.getElementsByClassName("compact-player-skip-forward");
739
+ for (var i=0; i<compactPlayerSkipForwardButtons.length; i++) {
740
+ if (compactPlayerSkipForwardButtons[i].id === 'skip-forward_{{player.id}}') {
741
+ compactPlayerSkipForwardButtons[i].addEventListener('click', function(event) {
742
+ const skipOffset = parseFloat(playerForwardBackwardSkipSeconds);
743
+ const duration = Amplitude.getSongDuration();
744
+ const currentTime = parseFloat(Amplitude.getSongPlayedSeconds());
745
+ const targetTime = parseFloat(currentTime + skipOffset);
746
+
747
+ if (currentTime > 0) {
748
+ Amplitude.setSongPlayedPercentage((targetTime / duration) * 100);
749
+ }
750
+ }); // END EventListener 'click'
751
+ } // END if ID
752
+ } // END for SkipForwardButtons
753
+
754
+ // add listeners to all SkipBackwardButtons found
755
+ var compactPlayerSkipBackwardButtons = document.getElementsByClassName("compact-player-skip-backward");
756
+ for (var i=0; i<compactPlayerSkipBackwardButtons.length; i++) {
757
+ if (compactPlayerSkipBackwardButtons[i].id === 'skip-backward_{{player.id}}') {
758
+ compactPlayerSkipBackwardButtons[i].addEventListener('click', function(event) {
759
+ const skipOffset = parseFloat(playerForwardBackwardSkipSeconds);
760
+ const duration = Amplitude.getSongDuration();
761
+ const currentTime = parseFloat(Amplitude.getSongPlayedSeconds());
762
+ const targetTime = parseFloat(currentTime - skipOffset);
763
+
764
+ if (currentTime > 0) {
765
+ Amplitude.setSongPlayedPercentage((targetTime / duration) * 100);
766
+ }
767
+ }); // END EventListener 'click'
768
+ } // END if ID
769
+ } // END for SkipBackwardButtons
770
+
771
+ // click on shuffle button
772
+ var compactPlayerShuffleButton = document.getElementById('compact_player_shuffle');
773
+ if (compactPlayerShuffleButton) {
774
+ compactPlayerShuffleButton.addEventListener('click', function(event) {
775
+ var shuffleState = (document.getElementById('compact_player_shuffle').className.includes('amplitude-shuffle-on')) ? true : false;
776
+
777
+ Amplitude.setShuffle(shuffleState)
778
+ }); // END EventListener 'click'
779
+ } // END compactPlayerShuffleButton
780
+
781
+ // click on repeat button
782
+ var compactPlayerRepeatButton = document.getElementById('compact_player_repeat');
783
+ if (compactPlayerRepeatButton) {
784
+ compactPlayerRepeatButton.addEventListener('click', function(event) {
785
+ var repeatState = (document.getElementById('compact_player_repeat').className.includes('amplitude-repeat-on')) ? true : false;
786
+
787
+ Amplitude.setRepeat(repeatState)
788
+ }); // END EventListener 'click'
789
+ } // END compactPlayerRepeatButton
790
+
791
+ } // END compact player UI events
792
+ {% endif %}
793
+
794
+ {% if player.id contains 'large' %}
795
+ // START large player UI events
796
+ //
797
+ if (document.getElementById('{{player.id}}') !== null) {
798
+
799
+ // NOTE: listener overloads for video managed by plugin
800
+ // -------------------------------------------------------
801
+
802
+ // click on prev button
803
+ var largePlayerPreviousButton = document.getElementById('large_player_previous');
804
+ if (largePlayerPreviousButton && largePlayerPreviousButton.getAttribute("data-amplitude-source") === 'youtube') {
805
+ // do nothing (managed by plugin)
806
+ }
807
+
808
+ // click on play_pause button
809
+ var largePlayerPlayButton = document.getElementById('large_player_play_pause');
810
+ // add listeners to all progress bars found (large-player)
811
+ // -------------------------------------------------------
812
+ var progressBars = document.getElementsByClassName("large-player-progress");
813
+ for (var i=0; i<progressBars.length; i++) {
814
+ if (progressBars[i].dataset.amplitudeSource === 'youtube') {
815
+ // do nothing (managed by plugin)
816
+ } else {
817
+ progressBars[i].addEventListener('click', function(event) {
818
+ var offset = this.getBoundingClientRect();
819
+ var xpos = event.pageX - offset.left;
820
+
821
+ Amplitude.setSongPlayedPercentage(
822
+ (parseFloat(xpos)/parseFloat(this.offsetWidth))*100);
823
+ }); // END EventListener 'click'
824
+ }
825
+ } // END for
826
+
827
+ // click on skip forward|backward (large player)
828
+ // See: https://github.com/serversideup/amplitudejs/issues/384
829
+ // -------------------------------------------------------
830
+
831
+ // add listeners to all SkipForwardButtons found
832
+ var largePlayerSkipForwardButtons = document.getElementsByClassName("large-player-skip-forward");
833
+ for (var i=0; i<largePlayerSkipForwardButtons.length; i++) {
834
+ if (largePlayerSkipForwardButtons[i].id === 'skip-forward_{{player.id}}') {
835
+ if (largePlayerSkipForwardButtons[i].dataset.amplitudeSource === 'youtube') {
836
+ // do nothing (managed by plugin)
837
+ } else {
838
+ largePlayerSkipForwardButtons[i].addEventListener('click', function(event) {
839
+ const skipOffset = parseFloat(playerForwardBackwardSkipSeconds);
840
+ const duration = Amplitude.getSongDuration();
841
+ const currentTime = parseFloat(Amplitude.getSongPlayedSeconds());
842
+ const targetTime = parseFloat(currentTime + skipOffset);
843
+
844
+ if (currentTime > 0) {
845
+ Amplitude.setSongPlayedPercentage((targetTime / duration) * 100);
846
+ }
847
+ }); // END EventListener 'click'
848
+ } // END else
849
+ } // END if ID
850
+ } // END for SkipForwardButtons
851
+
852
+ // add listeners to all SkipBackwardButtons found
853
+ var largePlayerSkipBackwardButtons = document.getElementsByClassName("large-player-skip-backward");
854
+ for (var i=0; i<largePlayerSkipBackwardButtons.length; i++) {
855
+ if (largePlayerSkipBackwardButtons[i].id === 'skip-backward_{{player.id}}') {
856
+ if (largePlayerSkipBackwardButtons[i].dataset.amplitudeSource === 'youtube') {
857
+ // do nothing (managed by plugin)
858
+ } else {
859
+ largePlayerSkipBackwardButtons[i].addEventListener('click', function(event) {
860
+ const skipOffset = parseFloat(playerForwardBackwardSkipSeconds);
861
+ const duration = Amplitude.getSongDuration();
862
+ const currentTime = parseFloat(Amplitude.getSongPlayedSeconds());
863
+ const targetTime = parseFloat(currentTime - skipOffset);
864
+
865
+ if (currentTime > 0) {
866
+ Amplitude.setSongPlayedPercentage((targetTime / duration) * 100);
867
+ }
868
+ }); // END EventListener 'click'
869
+ } // END else
870
+ } // END if ID
871
+ } // END for SkipBackwardButtons
872
+
873
+ // click on shuffle button
874
+ var largePlayerShuffleButton = document.getElementById('large_player_shuffle');
875
+ if (largePlayerShuffleButton) {
876
+ largePlayerShuffleButton.addEventListener('click', function(event) {
877
+ var shuffleState = (document.getElementById('large_player_shuffle').className.includes('amplitude-shuffle-on')) ? true : false;
878
+ Amplitude.setShuffle(shuffleState)
879
+ }); // END EventListener 'click'
880
+ } // END largePlayerShuffleButton
881
+
882
+ // click on repeat button
883
+ var largePlayerRepeatButton = document.getElementById('large_player_repeat');
884
+ if (largePlayerShuffleButton) {
885
+ largePlayerRepeatButton.addEventListener('click', function(event) {
886
+ var repeatState = (document.getElementById('large_player_repeat').className.includes('amplitude-repeat-on')) ? true : false;
887
+ Amplitude.setRepeat(repeatState)
888
+ }); // END EventListener 'click'
889
+ } // END if largePlayerRepeatButton
890
+
891
+ // enable|disable scrolling on playlist (large player)
892
+ // -------------------------------------------------------
893
+ if (document.getElementById('large_player_right') !== null) {
894
+
895
+ // show|hide scrollbar in playlist
896
+ // -----------------------------------------------------
897
+ const songsInPlaylist = Amplitude.getSongsInPlaylist(playListName);
898
+
899
+ if (songsInPlaylist.length <= 8) {
900
+ const titleListLargePlayer = document.getElementById('large_player_title_list_' + playListName);
901
+ if (titleListLargePlayer !== null) {
902
+ titleListLargePlayer.classList.add('hide-scrollbar');
903
+ }
904
+ }
905
+
906
+ // scroll to player top position (large player)
907
+ //
908
+ // Bootstrap grid breakpoints
909
+ // SN: 576px Mobile
910
+ // MD: 768px Small Desktop|Tablet
911
+ // LG: 992px Default Desktop
912
+ // XL: 1200px Large Desktop
913
+ // XXL: 1400px X Large Desktop
914
+ // -----------------------------------------------------
915
+
916
+ var largePlayerTitleHeader = document.getElementById("large_player_title_header_{{player.id}}");
917
+ largePlayerTitleHeader.addEventListener('click', function(event) {
918
+ var playerRight = document.getElementById("{{player.id}}");
919
+ var playlistHeader = document.getElementById("playlist_header_{{player.id}}");
920
+ var scrollOffset = (window.innerWidth >= 992) ? -130 : -44;
921
+
922
+ // scroll player|playlist to top position (large player)
923
+ //
924
+ const targetDivPlayerRight = playerRight;
925
+ const targetDivPositionPlayerRight = targetDivPlayerRight.offsetTop;
926
+ const targetDivPlaylistHeader = playlistHeader;
927
+ const targetDivPositionplaylistHeader = targetDivPlaylistHeader.offsetTop;
928
+
929
+ // NOTE: depending on WINDOW SIZE the relation changes to TOP POSITION (targetDivPosition)
930
+ //
931
+ if (targetDivPositionPlayerRight > targetDivPositionplaylistHeader) {
932
+ window.scrollTo(0, targetDivPositionPlayerRight + targetDivPlaylistHeader.offsetParent.firstElementChild.clientHeight + scrollOffset);
933
+ } else {
934
+ window.scrollTo(0, targetDivPositionplaylistHeader + scrollOffset);
935
+ }
936
+ }); // END EventListener 'click' largePlayerTitleHeader
937
+
938
+ var largePlayerPlaylistHeader = document.getElementById("playlist_header_{{player.id}}");
939
+ largePlayerPlaylistHeader.addEventListener('click', function(event) {
940
+ var playerRight = document.getElementById("{{player.id}}");
941
+ var playlistHeader = document.getElementById("playlist_header_{{player.id}}");
942
+ var scrollOffset = (window.innerWidth >= 992) ? -130 : -44;
943
+
944
+ // scroll player|playlist to top position (large player)
945
+ //
946
+ const targetDivPlayerRight = playerRight;
947
+ const targetDivPositionPlayerRight = targetDivPlayerRight.offsetTop;
948
+ const targetDivPlaylistHeader = playlistHeader;
949
+ const targetDivPositionplaylistHeader = targetDivPlaylistHeader.offsetTop;
950
+
951
+ // NOTE: depending on WINDOW SIZE the relation changes to TOP POSITION (targetDivPosition)
952
+ //
953
+ if (targetDivPositionPlayerRight > targetDivPositionplaylistHeader) {
954
+ window.scrollTo(0, targetDivPositionPlayerRight + targetDivPlaylistHeader.offsetParent.firstElementChild.clientHeight + scrollOffset);
955
+ } else {
956
+ window.scrollTo(0, targetDivPositionplaylistHeader + scrollOffset);
957
+ }
958
+
959
+ }); // END EventListener 'click' largePlayerPlaylistHeader
960
+
961
+ // disable scrolling (if window viewport >= BS Medium and above)
962
+ document.getElementById('large_player_right').addEventListener('mouseenter', function() {
963
+ if (window.innerWidth >= 720) {
964
+ if ($('body').hasClass('stop-scrolling')) {
965
+ return false;
966
+ } else {
967
+ $('body').addClass('stop-scrolling');
968
+ }
969
+ }
970
+ }); // END EventListener 'mouseenter'
971
+
972
+ // enable scrolling
973
+ document.getElementById('large_player_right').addEventListener('mouseleave', function() {
974
+ if ($('body').hasClass('stop-scrolling')) {
975
+ $('body').removeClass('stop-scrolling');
976
+ }
977
+ }); // END EventListener 'mouseleave'
978
+
979
+ } // END enable|disable scrolling on playlist
980
+
981
+ // set volume slider presets (for the player when exists|enabled)
982
+ //
983
+ var volumeSlider = document.getElementById('volume_slider_{{player.id}}');
984
+ if (volumeSlider !== null) {
985
+ const volumeMin = parseInt('{{player.volume_slider.min_value}}');
986
+ const volumeMax = parseInt('{{player.volume_slider.max_value}}');
987
+ const volumeValue = parseInt('{{player.volume_slider.preset_value}}');
988
+ const volumeStep = parseInt('{{player.volume_slider.slider_step}}');
989
+
990
+ // if player has NO slider presets, use amplitude defaults
991
+ //
992
+ volumeSlider.min = (isNaN(volumeMin)) ? parseInt('{{amplitude_defaults.player.volume_slider.min_value}}') : volumeMin;
993
+ volumeSlider.max = (isNaN(volumeMax)) ? parseInt('{{amplitude_defaults.player.volume_slider.max_value}}') : volumeMax;
994
+ volumeSlider.value = (isNaN(volumeValue)) ? parseInt('{{amplitude_defaults.player.volume_slider.preset_value}}') : volumeValue;
995
+ volumeSlider.step = (isNaN(volumeStep)) ? parseInt('{{amplitude_defaults.player.volume_slider.slider_step}}') : volumeStep;
996
+ } // END volumeSlider exists
997
+
998
+ } // END large player UI events
999
+ {% endif %}
1000
+
1001
+ // ---------------------------------------------------------
1002
+ // START configured player features
1003
+
1004
+ logger.debug('\n' + 'set play next title: ' + playerPlayNextTitle);
1005
+ logger.debug('\n' + 'set delay between titles: ' + playerDelayNextTitle + 'ms');
1006
+ logger.debug('\n' + 'set repeat (album): ' + playerRepeat);
1007
+ logger.debug('\n' + 'set shuffle (album): ' + playerShuffle);
1008
+
1009
+ // set delay between titles (songs)
1010
+ Amplitude.setDelay(playerDelayNextTitle);
1011
+ // set repeat (album)
1012
+ Amplitude.setRepeat(playerRepeat);
1013
+ // set shuffle (album)
1014
+ Amplitude.setShuffle(playerShuffle);
1015
+
1016
+ // ---------------------------------------------------------
1017
+ // END configured player features
1018
+
1019
+ // finished messages
1020
+ // ---------------------------------------------------------
1021
+ logger.debug('\n' + 'current player state: ' + amplitudePlayerState);
1022
+ logger.debug('\n' + 'setup player specific UI events on ID #{{player.id}}: finished');
1023
+
1024
+ clearInterval(dependencies_met_api_initialized);
1025
+ } // END if apiInitialized
1026
+ }, 10); // END dependencies_met_api_initialized
1027
+
1028
+ playerExistsInPage = (document.getElementById(playerID + '_parent') !== null) ? true : false;
1029
+ pluginManagerEnabled = ('{{player.plugin_manager.enabled}}'.length > 0 && '{{player.plugin_manager.enabled}}' === 'true') ? true : playerDefaultPluginManager;
1030
+ if (playerExistsInPage && pluginManagerEnabled) {
1031
+ _this.pluginManager('{{player.plugin_manager.plugins}}');
1032
+ }
1033
+
1034
+ clearInterval(load_dependencies['dependencies_met_player_loaded_{{player.id}}']);
1035
+ } // END if xhrLoadState success
1036
+ }, 10); // END dependencies_met_html_loaded
1037
+
1038
+ {% endif %} {% endfor %}
1039
+
1040
+ logger.info('\n' + 'initialize player specific UI events: finished');
1041
+
1042
+ _this.setState('finished');
1043
+ logger.debug('\n' + 'module state: ' + _this.getState());
1044
+ logger.info('\n' + 'module initialized successfully');
1045
+
1046
+ endTimeModule = Date.now();
1047
+ logger.info('\n' + 'module initializing time: ' + (endTimeModule-startTimeModule) + 'ms');
1048
+
1049
+ clearInterval(dependencies_met_player_instances_initialized);
1050
+ } // END if apiInitialized
1051
+ }, 10); // END initialize player specific UI events
1052
+ }, // END initPlayerUiEvents
1053
+
1054
+ // -------------------------------------------------------------------------
1055
+ // START setAudioInfo
1056
+ setAudioInfo: (audioInfo) => {
1057
+ // jadams: ??? new config setting 'pause_on_audio_info' ???
1058
+ // when the audioInfo link is clicked, stop all propagation so
1059
+ // AmplitudeJS doesn't play the song.
1060
+ for (var i=0; i<audioInfo.length; i++) {
1061
+ audioInfo[i].addEventListener('click', function (event) {
1062
+ event.stopPropagation();
1063
+ });
1064
+ }
1065
+ }, // END setAudioInfo
1066
+
1067
+ // -------------------------------------------------------------------------
1068
+ // songEvents
1069
+ // -------------------------------------------------------------------------
1070
+ songEvents: (songs) => {
1071
+ logger.debug('\n' + 'initializing title events for player on ID ' + '#' + playerID + ': started');
1072
+
1073
+ for (var i = 0; i < songs.length; i++) {
1074
+ // ensure that on mouseover, CSS styles don't get messed up for active songs
1075
+ songs[i].addEventListener('mouseover', function() {
1076
+ // active song indicator (mini play button) in playlist
1077
+ if (!this.classList.contains('amplitude-active-song-container')) {
1078
+ if (this.querySelectorAll('.play-button-container')[0] !== undefined) {
1079
+ this.querySelectorAll('.play-button-container')[0].style.display = 'block';
1080
+ }
1081
+ } // END mini play button in playlist
1082
+ }); // END EventListener 'mouseover' (songlist)
1083
+
1084
+ // ensure that on mouseout, CSS styles don't get messed up for active songs
1085
+ songs[i].addEventListener('mouseout', function() {
1086
+ if (this.querySelectorAll('.play-button-container')[0] !== undefined) {
1087
+ this.querySelectorAll('.play-button-container')[0].style.display = 'none';
1088
+ }
1089
+ }); // END EventListener 'mouseout' (songlist)
1090
+
1091
+ // show|hide the (mini) play button when the song is clicked
1092
+ songs[i].addEventListener('click', function () {
1093
+ if (this.querySelectorAll('.play-button-container')[0] !== undefined) {
1094
+ this.querySelectorAll('.play-button-container')[0].style.display = 'none';
1095
+ }
1096
+ }); // END EventListener 'click' (songlist)
1097
+ }
1098
+
1099
+ logger.debug('\n' + 'initializing title events for player on ID ' + '#' + playerID + ': finished');
1100
+ }, // END songEvents
1101
+
1102
+ // -------------------------------------------------------------------------
1103
+ // pluginManager()
1104
+ //
1105
+ // -------------------------------------------------------------------------
1106
+ pluginManager: (plugin) => {
1107
+ // if (plugin === 'ytp' && j1.adapter.amplitude['ytPlayerReady'] === undefined ) {
1108
+ if (plugin === 'ytp') {
1109
+ var tech;
1110
+ var techScript;
1111
+
1112
+ tech = document.createElement('script');
1113
+ tech.id = 'tech_' + plugin;
1114
+ tech.src = '/assets/theme/j1/modules/amplitudejs/js/tech/' + plugin + '.js';
1115
+ techScript = document.getElementsByTagName('script')[0];
1116
+
1117
+ techScript.parentNode.insertBefore(tech, techScript);
1118
+ }
1119
+ }, // END pluginManager
1120
+
1121
+ // -------------------------------------------------------------------------
1122
+ // messageHandler()
1123
+ // manage messages send from other J1 modules
1124
+ // -------------------------------------------------------------------------
1125
+ messageHandler: (sender, message) => {
1126
+ var json_message = JSON.stringify(message, undefined, 2);
1127
+
1128
+ logText = '\n' + 'received message from ' + sender + ': ' + json_message;
1129
+ logger.debug(logText);
1130
+
1131
+ // -----------------------------------------------------------------------
1132
+ // process commands|actions
1133
+ // -----------------------------------------------------------------------
1134
+ if (message.type === 'command' && message.action === 'module_initialized') {
1135
+
1136
+ //
1137
+ // place handling of command|action here
1138
+ //
1139
+
1140
+ logger.info('\n' + message.text);
1141
+ }
1142
+
1143
+ //
1144
+ // place handling of other command|action here
1145
+ //
1146
+
1147
+ return true;
1148
+ }, // END messageHandler
1149
+
1150
+ // -------------------------------------------------------------------------
1151
+ // setState()
1152
+ // sets the current (processing) state of the module
1153
+ // -------------------------------------------------------------------------
1154
+ setState: (stat) => {
1155
+ _this.state = stat;
1156
+ }, // END setState
1157
+
1158
+ // -------------------------------------------------------------------------
1159
+ // getState()
1160
+ // Returns the current (processing) state of the module
1161
+ // -------------------------------------------------------------------------
1162
+ getState: () => {
1163
+ return _this.state;
1164
+ } // END getState
1165
+
1166
+ }; // END main (return)
1167
+ })(j1, window);
1168
+
1169
+ {%- endcapture -%}
1170
+
1171
+ {%- if production -%}
1172
+ {{ cache|minifyJS }}
1173
+ {%- else -%}
1174
+ {{ cache|strip_empty_lines }}
1175
+ {%- endif -%}
1176
+
1177
+ {%- assign cache = false -%}