j1-template 2024.3.17 → 2024.3.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (610) 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 +5 -5
  67. data/assets/data/authclient.html +1 -1
  68. data/assets/data/banner.html +1 -1
  69. data/assets/data/carousel.json +1 -1
  70. data/assets/data/cookieconsent.html +1 -1
  71. data/assets/data/docsearch.html +1 -1
  72. data/assets/data/fab.html +1 -1
  73. data/assets/data/footer.html +1 -1
  74. data/assets/data/galeries.html +1 -1
  75. data/assets/data/gallery_customizer.html +1 -1
  76. data/assets/data/gemini-ui.html +1 -1
  77. data/assets/data/iframes.html +1 -1
  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 +1 -1
  82. data/assets/data/masterslider.html +1 -1
  83. data/assets/data/mdi_icons.json +1 -1
  84. data/assets/data/mdil_icons.json +1 -1
  85. data/assets/data/menu.html +1 -1
  86. data/assets/data/mmenu.html +1 -1
  87. data/assets/data/mmenu_sidebar.html +1 -1
  88. data/assets/data/mmenu_toc.html +1 -1
  89. data/assets/data/panel.html +1 -1
  90. data/assets/data/particles.yml +1 -1
  91. data/assets/data/private.json +1 -1
  92. data/assets/data/quicklinks.html +1 -1
  93. data/assets/data/rtext_resizer.html +1 -1
  94. data/assets/data/slick.html +1 -1
  95. data/assets/data/speak2me.html +1 -1
  96. data/assets/data/swiper.html +137 -206
  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 +2 -2
  118. data/assets/theme/j1/adapter/js/amplitude.js +35 -33
  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 +2 -2
  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 +2 -2
  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 +280 -8
  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 +1 -1
  166. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/amplitude.min.css +1 -1
  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 +1 -1
  170. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/large.min.css +1 -1
  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 +25 -22
  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 +1 -1
  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 +1 -1
  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 +1 -1
  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 +1 -1
  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 +1 -1
  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/css/photoswipe-caption-plugin.css +3 -1
  302. data/assets/theme/j1/modules/photoswipe/css/photoswipe-caption-plugin.min.css +1 -1
  303. data/assets/theme/j1/modules/photoswipe/js/photoswipe-caption-plugin.js +428 -0
  304. data/assets/theme/j1/modules/photoswipe/js/photoswipe-caption-plugin.min.js +17 -4
  305. data/assets/theme/j1/modules/photoswipe/js/photoswipe-core.js +7102 -0
  306. data/assets/theme/j1/modules/photoswipe/js/photoswipe-core.min.js +3 -3
  307. data/assets/theme/j1/modules/photoswipe/js/photoswipe-lightbox.1.js +1990 -0
  308. data/assets/theme/j1/modules/photoswipe/js/photoswipe-lightbox.js +1981 -0
  309. data/assets/theme/j1/modules/photoswipe/js/photoswipe-lightbox.min.js +1 -1
  310. data/assets/theme/j1/modules/rangeSlider/css/theme/uno/nouislider.css +1 -1
  311. data/assets/theme/j1/modules/rangeSlider/css/theme/uno/nouislider.min.css +1 -1
  312. data/assets/theme/j1/modules/rouge/css/base16/theme.css +1 -1
  313. data/assets/theme/j1/modules/rouge/css/base16/theme.min.css +1 -1
  314. data/assets/theme/j1/modules/rouge/css/base16.dark/theme.css +1 -1
  315. data/assets/theme/j1/modules/rouge/css/base16.dark/theme.min.css +1 -1
  316. data/assets/theme/j1/modules/rouge/css/base16.light/theme.css +1 -1
  317. data/assets/theme/j1/modules/rouge/css/base16.light/theme.min.css +1 -1
  318. data/assets/theme/j1/modules/rouge/css/base16.monokai/theme.css +1 -1
  319. data/assets/theme/j1/modules/rouge/css/base16.monokai/theme.min.css +1 -1
  320. data/assets/theme/j1/modules/rouge/css/base16.monokai.dark/theme.css +1 -1
  321. data/assets/theme/j1/modules/rouge/css/base16.monokai.dark/theme.min.css +1 -1
  322. data/assets/theme/j1/modules/rouge/css/base16.monokai.light/theme.css +1 -1
  323. data/assets/theme/j1/modules/rouge/css/base16.monokai.light/theme.min.css +1 -1
  324. data/assets/theme/j1/modules/rouge/css/base16.solarized/theme.css +1 -1
  325. data/assets/theme/j1/modules/rouge/css/base16.solarized/theme.min.css +1 -1
  326. data/assets/theme/j1/modules/rouge/css/base16.solarized.dark/theme.css +1 -1
  327. data/assets/theme/j1/modules/rouge/css/base16.solarized.dark/theme.min.css +1 -1
  328. data/assets/theme/j1/modules/rouge/css/base16.solarized.light/theme.css +1 -1
  329. data/assets/theme/j1/modules/rouge/css/base16.solarized.light/theme.min.css +1 -1
  330. data/assets/theme/j1/modules/rouge/css/colorful/theme.css +1 -1
  331. data/assets/theme/j1/modules/rouge/css/colorful/theme.min.css +1 -1
  332. data/assets/theme/j1/modules/rouge/css/github/theme.css +1 -1
  333. data/assets/theme/j1/modules/rouge/css/github/theme.min.css +1 -1
  334. data/assets/theme/j1/modules/rouge/css/gruvbox/theme.css +1 -1
  335. data/assets/theme/j1/modules/rouge/css/gruvbox/theme.min.css +1 -1
  336. data/assets/theme/j1/modules/rouge/css/gruvbox.dark/theme.css +1 -1
  337. data/assets/theme/j1/modules/rouge/css/gruvbox.dark/theme.min.css +1 -1
  338. data/assets/theme/j1/modules/rouge/css/gruvbox.light/theme.css +1 -1
  339. data/assets/theme/j1/modules/rouge/css/gruvbox.light/theme.min.css +1 -1
  340. data/assets/theme/j1/modules/rouge/css/igorpro/theme.css +1 -1
  341. data/assets/theme/j1/modules/rouge/css/igorpro/theme.min.css +1 -1
  342. data/assets/theme/j1/modules/rouge/css/molokai/theme.css +1 -1
  343. data/assets/theme/j1/modules/rouge/css/molokai/theme.min.css +1 -1
  344. data/assets/theme/j1/modules/rouge/css/monokai/theme.css +1 -1
  345. data/assets/theme/j1/modules/rouge/css/monokai/theme.min.css +1 -1
  346. data/assets/theme/j1/modules/rouge/css/monokai.sublime/theme.css +1 -1
  347. data/assets/theme/j1/modules/rouge/css/monokai.sublime/theme.min.css +1 -1
  348. data/assets/theme/j1/modules/rouge/css/pastie/theme.css +1 -1
  349. data/assets/theme/j1/modules/rouge/css/pastie/theme.min.css +1 -1
  350. data/assets/theme/j1/modules/rouge/css/thankful_eyes/theme.css +1 -1
  351. data/assets/theme/j1/modules/rouge/css/thankful_eyes/theme.min.css +1 -1
  352. data/assets/theme/j1/modules/rouge/css/themes.txt +1 -1
  353. data/assets/theme/j1/modules/rouge/css/tulip/theme.css +1 -1
  354. data/assets/theme/j1/modules/rouge/css/tulip/theme.min.css +1 -1
  355. data/assets/theme/j1/modules/rouge/css/uno.dark/theme.css +1 -1
  356. data/assets/theme/j1/modules/rouge/css/uno.dark/theme.min.css +1 -1
  357. data/assets/theme/j1/modules/rouge/css/uno.light/theme.css +1 -1
  358. data/assets/theme/j1/modules/rouge/css/uno.light/theme.min.css +1 -1
  359. data/assets/theme/j1/modules/rouge/js/select.js +1 -1
  360. data/assets/theme/j1/modules/rtable/css/theme/uno/rtable.css +1 -1
  361. data/assets/theme/j1/modules/rtable/css/theme/uno/rtable.min.css +1 -1
  362. data/assets/theme/j1/modules/rtable/js/rtable.js +1 -1
  363. data/assets/theme/j1/modules/rtable/js/rtable.min.js +1 -1
  364. data/assets/theme/j1/modules/scroller/css/theme/uno.css +1 -1
  365. data/assets/theme/j1/modules/scroller/css/theme/uno.min.css +1 -1
  366. data/assets/theme/j1/modules/scroller/js/scroller.min.js +1 -1
  367. data/assets/theme/j1/modules/slick/lightbox/css/theme/uno.css +1 -1
  368. data/assets/theme/j1/modules/slick/lightbox/css/theme/uno.min.css +1 -1
  369. data/assets/theme/j1/modules/slick/slider/css/theme/uno.css +1 -1
  370. data/assets/theme/j1/modules/slick/slider/css/theme/uno.min.css +1 -1
  371. data/assets/theme/j1/modules/spinner/css/spin.css +1 -1
  372. data/assets/theme/j1/modules/spinner/css/spin.min.css +1 -1
  373. data/assets/theme/j1/modules/spinner/js/spin.js +1 -1
  374. data/assets/theme/j1/modules/spinner/js/spin.min.js +1 -1
  375. data/assets/theme/j1/modules/swiper/css/modules/effectNeighbor.css +53 -0
  376. data/assets/theme/j1/modules/swiper/css/modules/effectNeighbor.min.css +17 -0
  377. data/assets/theme/j1/modules/swiper/css/modules/effectPanorama.css +26 -0
  378. data/assets/theme/j1/modules/swiper/css/modules/effectPanorama.min.css +17 -0
  379. data/assets/theme/j1/modules/swiper/css/modules/effectThumbs.css +44 -0
  380. data/assets/theme/j1/modules/swiper/css/modules/effectThumbs.min.css +44 -0
  381. data/assets/theme/j1/modules/swiper/css/swiper-bundle.css +12 -6
  382. data/assets/theme/j1/modules/swiper/css/swiper-bundle.min..css +12 -6
  383. data/assets/theme/j1/modules/swiper/css/theme/uno.css +15 -35
  384. data/assets/theme/j1/modules/swiper/css/theme/uno.min.css +9 -19
  385. data/assets/theme/j1/modules/swiper/js/modules/!readme +3 -0
  386. data/assets/theme/j1/modules/swiper/js/modules/effectNeighbor.js +33 -0
  387. data/assets/theme/j1/modules/swiper/js/modules/effectNeighbor.min.js +33 -0
  388. data/assets/theme/j1/modules/swiper/js/modules/effectPanorama.js +93 -0
  389. data/assets/theme/j1/modules/swiper/js/modules/effectPanorama.min.js +17 -0
  390. data/assets/theme/j1/modules/swiper/js/modules/effectThumbs.js +113 -0
  391. data/assets/theme/j1/modules/swiper/js/modules/effectThumbs.min.js +33 -0
  392. data/assets/theme/j1/modules/swiper/js/swiper-bundle.js +12 -6
  393. data/assets/theme/j1/modules/swiper/js/swiper-bundle.min.js +12 -6
  394. data/assets/theme/j1/modules/themeSwitcher/js/switcher.js +1 -1
  395. data/assets/theme/j1/modules/themeSwitcher/js/switcher.min.js +1 -1
  396. data/assets/theme/j1/modules/translator/css/translator.css +1 -1
  397. data/assets/theme/j1/modules/translator/css/translator.min.css +1 -1
  398. data/assets/theme/j1/modules/translator/js/translator.js +1 -1
  399. data/assets/theme/j1/modules/translator/js/translator.min.js +1 -1
  400. data/assets/theme/j1/modules/videoPlayer/vimeo/js/player.min.js +1 -1
  401. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.0.css +1 -1
  402. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.1.css +1 -1
  403. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.css +1 -1
  404. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.min.css +1 -1
  405. data/assets/theme/j1/modules/videojs/css/plugins/controls/zoom.css +1 -1
  406. data/assets/theme/j1/modules/videojs/css/plugins/controls/zoom.min.css +1 -1
  407. data/assets/theme/j1/modules/videojs/css/themes/uno.css +1 -1
  408. data/assets/theme/j1/modules/videojs/css/themes/uno.min.css +1 -1
  409. data/assets/theme/j1/modules/videojs/js/plugins/controls/autocaption/autocaption.js +1 -1
  410. data/assets/theme/j1/modules/videojs/js/plugins/controls/autocaption/autocaption.min.js +1 -1
  411. data/assets/theme/j1/modules/videojs/js/plugins/controls/hotkeys/hotkeys.js +1 -1
  412. data/assets/theme/j1/modules/videojs/js/plugins/controls/hotkeys/hotkeys.min.js +1 -1
  413. data/assets/theme/j1/modules/videojs/js/plugins/controls/skipbuttons/skipbuttons.js +1 -1
  414. data/assets/theme/j1/modules/videojs/js/plugins/controls/skipbuttons/skipbuttons.min.js +1 -1
  415. data/assets/theme/j1/modules/videojs/js/plugins/controls/zoom/zoom.js +1 -1
  416. data/assets/theme/j1/modules/videojs/js/plugins/controls/zoom/zoom.min.js +1 -1
  417. data/assets/theme/j1/modules/videojs/js/plugins/players/dm/api/dailymotion.sdk.js +1 -1
  418. data/assets/theme/j1/modules/videojs/js/plugins/players/dm/api/dailymotion.sdk.min.js +1 -1
  419. data/assets/theme/j1/modules/videojs/js/plugins/players/dm/dailymotion.js +1 -1
  420. data/assets/theme/j1/modules/videojs/js/plugins/players/dm/dailymotion.min.js +1 -1
  421. data/assets/theme/j1/modules/videojs/js/plugins/players/vm/api/vimeo.js +1 -1
  422. data/assets/theme/j1/modules/videojs/js/plugins/players/vm/api/vimeo.min.js +1 -1
  423. data/assets/theme/j1/modules/videojs/js/plugins/players/vm/vimeo.js +1 -1
  424. data/assets/theme/j1/modules/videojs/js/plugins/players/vm/vimeo.min.js +1 -1
  425. data/assets/theme/j1/modules/videojs/js/plugins/players/wt/wistia.js +1 -1
  426. data/assets/theme/j1/modules/videojs/js/plugins/players/wt/wistia.min.js +1 -1
  427. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/api/youtube.min.js +1 -1
  428. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/v3.0.0/youtube.js +1 -1
  429. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/v3.0.0/youtube.min.js +1 -1
  430. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/youtube.js +1 -1
  431. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/youtube.min.js +1 -1
  432. data/lib/j1/version.rb +1 -1
  433. data/lib/starter_web/Gemfile +1 -1
  434. data/lib/starter_web/README.md +5 -5
  435. data/lib/starter_web/_config.yml +2 -2
  436. data/lib/starter_web/_data/j1_config.yml +1 -1
  437. data/lib/starter_web/_data/modules/amplitude_players.yml +352 -0
  438. data/lib/starter_web/_data/modules/{amplitude.yml → amplitude_playlists.yml} +39 -356
  439. data/lib/starter_web/_data/modules/authentication.yml +1 -1
  440. data/lib/starter_web/_data/modules/defaults/swiper.yml +73 -413
  441. data/lib/starter_web/_data/modules/log4javascript.yml +1 -1
  442. data/lib/starter_web/_data/modules/navigator.yml +1 -1
  443. data/lib/starter_web/_data/modules/navigator_menu.yml +1 -1
  444. data/lib/starter_web/_data/modules/swiper.yml +567 -139
  445. data/lib/starter_web/_data/modules/swiper_playlists.yml +480 -0
  446. data/lib/starter_web/_data/private.yml +1 -1
  447. data/lib/starter_web/_data/resources.yml +234 -172
  448. data/lib/starter_web/_data/templates/feed.xml +1 -1
  449. data/lib/starter_web/_includes/custom/static/bs5_accordion.html +1 -1
  450. data/lib/starter_web/_includes/custom/templates/bs5_accordion.html +1 -1
  451. data/lib/starter_web/_includes/custom/templates/collection_panel.html +1 -1
  452. data/lib/starter_web/_includes/custom/templates/custom_header.html +1 -1
  453. data/lib/starter_web/_includes/custom/templates/people_panel.html +1 -1
  454. data/lib/starter_web/_includes/google/static/google_ad__your-slot-id.html +1 -1
  455. data/lib/starter_web/_includes/google/templates/google_ads.html +1 -1
  456. data/lib/starter_web/_plugins/asciidoctor/admonition-block-answer.rb +1 -1
  457. data/lib/starter_web/_plugins/asciidoctor/admonition-block-question.rb +1 -1
  458. data/lib/starter_web/_plugins/asciidoctor/amplitude-block.rb +1 -1
  459. data/lib/starter_web/_plugins/asciidoctor/banner.rb +1 -1
  460. data/lib/starter_web/_plugins/asciidoctor/callout.rb +1 -1
  461. data/lib/starter_web/_plugins/asciidoctor/carousel-block.rb +1 -1
  462. data/lib/starter_web/_plugins/asciidoctor/conum.rb +1 -1
  463. data/lib/starter_web/_plugins/asciidoctor/dailymotion-block.rb +1 -1
  464. data/lib/starter_web/_plugins/asciidoctor/fab-icon-inline.rb +1 -1
  465. data/lib/starter_web/_plugins/asciidoctor/fas-icon-inline.rb +1 -1
  466. data/lib/starter_web/_plugins/asciidoctor/flag-icon-inline.rb +1 -1
  467. data/lib/starter_web/_plugins/asciidoctor/gallery-block.rb +1 -1
  468. data/lib/starter_web/_plugins/asciidoctor/gemini-ui-block.rb +1 -1
  469. data/lib/starter_web/_plugins/asciidoctor/gist-block.rb +1 -1
  470. data/lib/starter_web/_plugins/asciidoctor/google-ad-block.rb +1 -1
  471. data/lib/starter_web/_plugins/asciidoctor/iconify-icon-inline.rb +1 -1
  472. data/lib/starter_web/_plugins/asciidoctor/iframe-block.rb +1 -1
  473. data/lib/starter_web/_plugins/asciidoctor/lightbox-block.rb +1 -1
  474. data/lib/starter_web/_plugins/asciidoctor/lorem_inline.rb +1 -1
  475. data/lib/starter_web/_plugins/asciidoctor/masonry-block.rb +1 -1
  476. data/lib/starter_web/_plugins/asciidoctor/masterslider-block.rb +1 -1
  477. data/lib/starter_web/_plugins/asciidoctor/mdi-icon-inline.rb +1 -1
  478. data/lib/starter_web/_plugins/asciidoctor/mdib-icon-inline.rb +1 -1
  479. data/lib/starter_web/_plugins/asciidoctor/mdil-icon-inline.rb +1 -1
  480. data/lib/starter_web/_plugins/asciidoctor/panel.rb +1 -1
  481. data/lib/starter_web/_plugins/asciidoctor/placeholder-inline.rb +1 -1
  482. data/lib/starter_web/_plugins/asciidoctor/range-slider-block.rb +1 -1
  483. data/lib/starter_web/_plugins/asciidoctor/shout-block.rb +1 -1
  484. data/lib/starter_web/_plugins/asciidoctor/slick-block.rb +1 -1
  485. data/lib/starter_web/_plugins/asciidoctor/slim-select-block.rb +1 -1
  486. data/lib/starter_web/_plugins/asciidoctor/swiper-block.rb +55 -0
  487. data/lib/starter_web/_plugins/asciidoctor/textbook-block.rb +1 -1
  488. data/lib/starter_web/_plugins/asciidoctor/twitter-emoji-inline.rb +1 -1
  489. data/lib/starter_web/_plugins/asciidoctor/videojs-block.rb +1 -1
  490. data/lib/starter_web/_plugins/asciidoctor/vimeo-block.rb +1 -1
  491. data/lib/starter_web/_plugins/asciidoctor/wistia-block.rb +1 -1
  492. data/lib/starter_web/_plugins/asciidoctor/youtube-block.rb +1 -1
  493. data/lib/starter_web/_plugins/filter/debug.rb +1 -1
  494. data/lib/starter_web/_plugins/filter/encodeBase64.rb +1 -1
  495. data/lib/starter_web/_plugins/filter/encryptAES.rb +1 -1
  496. data/lib/starter_web/_plugins/filter/filters.rb +32 -1
  497. data/lib/starter_web/_plugins/filter/liquify.rb +1 -1
  498. data/lib/starter_web/_plugins/filter/minifyJS.rb +1 -1
  499. data/lib/starter_web/_plugins/filter/minifyJSON.rb +1 -1
  500. data/lib/starter_web/_plugins/filter/prettify.rb +1 -1
  501. data/lib/starter_web/_plugins/filter/xml_prettify.rb +1 -1
  502. data/lib/starter_web/_plugins/helper/symlink_watcher.rb +1 -1
  503. data/lib/starter_web/_plugins/i18n/date.rb +1 -1
  504. data/lib/starter_web/_plugins/index/lunr.rb +2 -2
  505. data/lib/starter_web/_plugins/seo/j1-feed.rb +1 -1
  506. data/lib/starter_web/_plugins/seo/j1-seo-tags.rb +1 -1
  507. data/lib/starter_web/_plugins/seo/j1-sitemap.rb +1 -1
  508. data/lib/starter_web/assets/image/icons/tv/Index of -tv-logos-.url +2 -0
  509. data/lib/starter_web/assets/image/icons/tv/TV from Germany - LyngSat Logo.url +2 -0
  510. data/lib/starter_web/assets/image/icons/tv/Zeichnung.svg +47 -0
  511. data/lib/starter_web/assets/image/icons/tv/ard-icon-16x16.ico +0 -0
  512. data/lib/starter_web/assets/image/icons/tv/ard-icon-24x24.png +0 -0
  513. data/lib/starter_web/assets/image/icons/tv/ard-icon-512x512.png +0 -0
  514. data/lib/starter_web/assets/image/icons/tv/ard-icon.jpg +0 -0
  515. data/lib/starter_web/assets/image/icons/tv/ard-icon.jpg (353/303/227353).url" +2 -0
  516. data/lib/starter_web/assets/image/icons/tv/ard-icon.png +0 -0
  517. data/lib/starter_web/assets/image/icons/tv/ard-logo-png_seeklogo-428343.png +0 -0
  518. data/lib/starter_web/assets/image/icons/tv/cytec-tvlogos- collection of mostly german tv channel logos.url +2 -0
  519. data/lib/starter_web/assets/image/icons/tv/output_image.jpg +0 -0
  520. data/lib/starter_web/assets/image/icons/tv/pang.ping +0 -0
  521. 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
  522. data/lib/starter_web/assets/image/modules/attics/1920x1280/tiny_desk.jpg +0 -0
  523. data/lib/starter_web/assets/image/modules/attics/alice-donovan-rouse-2.jpg +0 -0
  524. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-1.jpg +0 -0
  525. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-2.jpg +0 -0
  526. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-3.jpg +0 -0
  527. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-4.jpg +0 -0
  528. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-5.jpg +0 -0
  529. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-6.jpg +0 -0
  530. data/lib/starter_web/assets/image/modules/gallery/mega_cities/295683517.jpg +0 -0
  531. data/lib/starter_web/assets/image/modules/gallery/mega_cities/chicago-us.jpg +0 -0
  532. data/lib/starter_web/assets/image/modules/gallery/mega_cities/denys-nevozhai-1_b.jpg +0 -0
  533. data/lib/starter_web/assets/image/modules/gallery/mega_cities/denys-nevozhai-1_c.jpg +0 -0
  534. data/lib/starter_web/assets/image/modules/gallery/mega_cities/denys-nevozhai-3_b.jpg +0 -0
  535. data/lib/starter_web/assets/image/modules/gallery/mega_cities/emmad-mazhari_c.jpg +0 -0
  536. data/lib/starter_web/assets/image/modules/gallery/mega_cities/federico-rizzarelli_b.jpg +0 -0
  537. data/lib/starter_web/assets/image/modules/gallery/mega_cities/federico-rizzarelli_c.jpg +0 -0
  538. data/lib/starter_web/assets/image/modules/gallery/mega_cities/jakarta_indonesia.jpg +0 -0
  539. data/lib/starter_web/assets/image/modules/gallery/mega_cities/jakarta_indonesia_2.jpg +0 -0
  540. data/lib/starter_web/assets/image/modules/gallery/mega_cities/melbourne_australia.jpg +0 -0
  541. data/lib/starter_web/assets/image/modules/gallery/mega_cities/melbourne_australia.webp +0 -0
  542. data/lib/starter_web/assets/image/modules/gallery/mega_cities/queen_bees_at_eureka_tower.jpg +0 -0
  543. data/lib/starter_web/assets/image/modules/gallery/mega_cities/shanghai_china.jpg +0 -0
  544. data/lib/starter_web/assets/image/modules/gallery/mega_cities/thomas-tucker_b.jpg +0 -0
  545. data/lib/starter_web/assets/image/modules/gallery/mega_cities/tokyo_japan.jpg +0 -0
  546. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/guardians-of-the-galaxy.jpg +0 -0
  547. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/justice-league.jpg +0 -0
  548. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/spider-man.jpg +0 -0
  549. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/suicide-squad.jpg +0 -0
  550. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/thor-ragnarok.jpg +0 -0
  551. data/lib/starter_web/assets/image/modules/gallery/panorama/1.jpg +0 -0
  552. data/lib/starter_web/assets/image/modules/gallery/panorama/10.jpg +0 -0
  553. data/lib/starter_web/assets/image/modules/gallery/panorama/11.jpg +0 -0
  554. data/lib/starter_web/assets/image/modules/gallery/panorama/12.jpg +0 -0
  555. data/lib/starter_web/assets/image/modules/gallery/panorama/2.jpg +0 -0
  556. data/lib/starter_web/assets/image/modules/gallery/panorama/3.jpg +0 -0
  557. data/lib/starter_web/assets/image/modules/gallery/panorama/4.jpg +0 -0
  558. data/lib/starter_web/assets/image/modules/gallery/panorama/5.jpg +0 -0
  559. data/lib/starter_web/assets/image/modules/gallery/panorama/6.jpg +0 -0
  560. data/lib/starter_web/assets/image/modules/gallery/panorama/7.jpg +0 -0
  561. data/lib/starter_web/assets/image/modules/gallery/panorama/8.jpg +0 -0
  562. data/lib/starter_web/assets/image/modules/gallery/panorama/9.jpg +0 -0
  563. data/lib/starter_web/config.ru +1 -1
  564. data/lib/starter_web/dot.gitattributes +1 -1
  565. data/lib/starter_web/dot.nojekyll +1 -1
  566. data/lib/starter_web/package.json +1 -1
  567. data/lib/starter_web/pages/public/_includes/documents/photoswipe/200_photoswipe_parameters.asciidoc +21 -2
  568. data/lib/starter_web/pages/public/_includes/documents/photoswipe/210_photoswipe_lightbox_parameters.asciidoc +42 -35
  569. data/lib/starter_web/pages/public/_includes/documents/photoswipe/300_caption_plugin_for_photoSwipe.asciidoc +72 -75
  570. data/lib/starter_web/pages/public/_includes/documents/swiper/110_swiper_common_options.asciidoc +96 -21
  571. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_a_k.asciidoc +187 -87
  572. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_l_o.asciidoc +98 -34
  573. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_p_s.asciidoc +99 -42
  574. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_t_z.asciidoc +64 -26
  575. data/lib/starter_web/pages/public/_includes/documents/swiper/300_swiper_instance_properties.asciidoc +52 -52
  576. data/lib/starter_web/pages/public/_includes/documents/swiper/400_swiper_modules.asciidoc +2666 -1735
  577. data/lib/starter_web/pages/public/_includes/documents/swiper/500_swiper_methods.asciidoc +40 -40
  578. data/lib/starter_web/pages/public/_includes/documents/swiper/600_swiper_events.asciidoc +113 -113
  579. data/lib/starter_web/pages/public/{amplitude_yt_tester.adoc → tools/tester/amplitude_yt_tester.adoc} +15 -15
  580. data/lib/starter_web/pages/public/tools/tester/swiper_tester.adoc +796 -0
  581. data/lib/starter_web/pages/public/tour/present_images.adoc +19 -17
  582. metadata +87 -32
  583. data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.15.js +0 -1594
  584. data/assets/theme/j1/modules/photoswipe/css/org/photoswipe-dynamic-caption-plugin.umd.min.js +0 -5
  585. data/assets/theme/j1/modules/photoswipe/css/org/photoswipe.css +0 -420
  586. data/assets/theme/j1/modules/photoswipe/css/scss/photoswipe.scss +0 -427
  587. data/lib/starter_web/assets/image/modules/gallery/mega_cities/thomas-tucker-bw.jpg +0 -0
  588. data/lib/starter_web/pages/public/lazy_loader_tester.adoc +0 -402
  589. data/lib/starter_web/pages/public/manuals/integrations/amplitudejs/_includes/attributes.asciidoc +0 -69
  590. data/lib/starter_web/pages/public/manuals/integrations/amplitudejs/_includes/documents/readme +0 -0
  591. data/lib/starter_web/pages/public/manuals/integrations/amplitudejs/amplitudejs-api.adoc +0 -2260
  592. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/attributes.asciidoc +0 -47
  593. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/documents/preview_google_adsense.asciidoc +0 -448
  594. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/documents/readme +0 -0
  595. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/tables/readme +0 -0
  596. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/gemini.adoc +0 -525
  597. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/security.asccidoc +0 -274
  598. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/security.hrml +0 -560
  599. data/lib/starter_web/pages/public/manuals/integrations/videojs/youtube-api.adoc +0 -1638
  600. data/lib/starter_web/pages/public/manuals/ytdl/man.adoc +0 -3020
  601. data/lib/starter_web/pages/public/manuals/ytdl/man.md +0 -2378
  602. data/lib/starter_web/pages/public/photoswipe_api.adoc +0 -150
  603. data/lib/starter_web/pages/public/swiper_api.adoc +0 -128
  604. data/lib/starter_web/pages/public/swiper_tester.adoc +0 -973
  605. /data/assets/theme/j1/modules/photoswipe/{.version_5.4.4 → _info/.version_5.4.4} +0 -0
  606. /data/assets/theme/j1/modules/photoswipe/{example → _info/example}/photoswipe-caption-plugin.html +0 -0
  607. /data/assets/theme/j1/modules/photoswipe/{example → _info/example}/test-gallery.html +0 -0
  608. /data/assets/theme/j1/modules/photoswipe/js/{README.md → _info/README.md} +0 -0
  609. /data/assets/theme/j1/modules/swiper/{.version_1.2.0 → _info/.version_1.2.0} +0 -0
  610. /data/assets/theme/j1/modules/swiper/{swiperjs.com-demos.url → _info/swiperjs.com-demos.url} +0 -0
@@ -1,1594 +0,0 @@
1
- ---
2
- regenerate: true
3
- ---
4
-
5
- {%- capture cache -%}
6
-
7
- {% comment %}
8
- # -----------------------------------------------------------------------------
9
- # ~/assets/theme/j1/modules/amplitudejs/js/plugins/tech/ytp.js
10
- # AmplitudeJS V5 Plugin|Tech for J1 Template
11
- #
12
- # Product/Info:
13
- # https://jekyll.one
14
- #
15
- # Copyright (C) 2023, 2024 Juergen Adams
16
- #
17
- # J1 Template is licensed under the MIT License.
18
- # See: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE
19
- # -----------------------------------------------------------------------------
20
- # Test data:
21
- # {{ liquid_var | debug }}
22
- # amplitude_options: {{ amplitude_options | debug }}
23
- # -----------------------------------------------------------------------------
24
- {% endcomment %}
25
-
26
- {% comment %} Liquid procedures
27
- -------------------------------------------------------------------------------- {% endcomment %}
28
-
29
- {% comment %} Set global settings
30
- -------------------------------------------------------------------------------- {% endcomment %}
31
- {% assign environment = site.environment %}
32
- {% assign asset_path = "/assets/theme/j1" %}
33
-
34
- {% comment %} Process YML config data
35
- ================================================================================ {% endcomment %}
36
-
37
- {% comment %} Set config files
38
- -------------------------------------------------------------------------------- {% endcomment %}
39
- {% assign template_config = site.data.j1_config %}
40
- {% assign blocks = site.data.blocks %}
41
- {% assign modules = site.data.modules %}
42
-
43
- {% comment %} Set config data (settings only)
44
- -------------------------------------------------------------------------------- {% endcomment %}
45
- {% assign amplitude_defaults = modules.defaults.amplitude.defaults %}
46
- {% assign amplitude_settings = modules.amplitude.settings %}
47
-
48
- {% comment %} Set config options (settings only)
49
- -------------------------------------------------------------------------------- {% endcomment %}
50
- {% assign amplitude_options = amplitude_defaults | merge: amplitude_settings %}
51
-
52
- {% comment %} Detect prod mode
53
- -------------------------------------------------------------------------------- {% endcomment %}
54
- {% assign production = false %}
55
- {% if environment == 'prod' or environment == 'production' %}
56
- {% assign production = true %}
57
- {% endif %}
58
-
59
- /*
60
- # -----------------------------------------------------------------------------
61
- # ~/assets/theme/j1/modules/amplitudejs/js/plugins/tech/ytp.js
62
- # AmplitudeJS V5 Plugin|Tech for J1 Template
63
- #
64
- # Product/Info:
65
- # https://jekyll.one
66
- #
67
- # Copyright (C) 2023, 2024 Juergen Adams
68
- #
69
- # J1 Template is licensed under the MIT License.
70
- # See: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE
71
- # -----------------------------------------------------------------------------
72
- */
73
- "use strict";
74
-
75
- // date|time monitoring
76
- //------------------------------------------------------------------------------
77
- var startTime;
78
- var endTime;
79
- var startTimeModule;
80
- var endTimeModule;
81
- var timeSeconds;
82
-
83
- // YT API settings
84
- // -----------------------------------------------------------------------------
85
- // const YT_PLAYER_STATE = {
86
- var YT_PLAYER_STATE = {
87
- UNSTARTED: -1,
88
- ENDED: 0,
89
- PLAYING: 1,
90
- PAUSED: 2,
91
- BUFFERING: 3,
92
- CUED: 5
93
- };
94
-
95
- var firstScriptTag;
96
- var ytPlayer;
97
- var ytPlayerReady = false;
98
- var ytApiReady = false;
99
- var logger = log4javascript.getLogger('j1.adapter.amplitude.tech');
100
-
101
- // YT Player settings data (created dynamically)
102
- // -----------------------------------------------------------------------------
103
- // var ytPlayers = {};
104
- // var ytPlayersMap = new Map();
105
-
106
- // AmplitudeJS API settings
107
- // -----------------------------------------------------------------------------
108
-
109
- var dependency;
110
- var playerCounter = 0;
111
- var load_dependencies = {};
112
-
113
- var ytpSongIndex = "0";
114
- var ytpAutoPlay = false;
115
- var ytpLoop = true;
116
- var playLists = {};
117
- var playersUILoaded = { state: false };
118
- var apiInitialized = { state: false };
119
- var amplitudeDefaults = $.extend({}, {{amplitude_defaults | replace: 'nil', 'null' | replace: '=>', ':' }});
120
- var amplitudeSettings = $.extend({}, {{amplitude_settings | replace: 'nil', 'null' | replace: '=>', ':' }});
121
- var amplitudeOptions = $.extend(true, {}, amplitudeDefaults, amplitudeSettings);
122
-
123
- var playerExistsInPage = false;
124
- var ytpContainer = null;
125
- var playerProperties = {};
126
- var playList;
127
- var playerProperties;
128
- var playerID;
129
- var playerType;
130
- var playListTitle;
131
- var playListName;
132
- var amplitudePlayerState;
133
- var ytPlayer;
134
- var ytpPlaybackRate
135
-
136
- var songs;
137
- var songMetaData;
138
- var songURL;
139
- var songIndex = 0; // set default song index to FIRST item
140
- var progress;
141
-
142
- // ---------------------------------------------------------------------------
143
- // Base YT functions and events
144
- // ---------------------------------------------------------------------------
145
-
146
- // Recursive function to MERGE objects
147
- var mergeObject = function() {
148
- mergeObject = Object.assign || function mergeObject(t) {
149
- for (var s, i=1, n=arguments.length; i<n; i++) {
150
- s = arguments[i];
151
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
152
- }
153
- return t;
154
- };
155
- return mergeObject.apply(this, arguments);
156
- };
157
-
158
- // Add property path dynamically to an existing object
159
- // Example: addNestedProperty(j1.adapter.amplitude.data, 'playlist.profile.name', 'Max Mustermann')
160
- function addNestedProperty(obj, path, value) {
161
- let current = obj;
162
- const properties = path.split('.');
163
-
164
- properties.forEach((property, index) => {
165
- if (index === properties.length - 1) {
166
- current[property] = value;
167
- } else {
168
- if (!current[property]) {
169
- current[property] = {};
170
- }
171
- current = current[property];
172
- }
173
- });
174
- }
175
-
176
- function setNestedProperty(obj, path, value) {
177
- const keys = path.split('.');
178
-
179
- // Basisfall: Wenn nur noch ein Schlüssel übrig ist, setzen wir den Wert direkt
180
- if (keys.length === 1) {
181
- obj[keys[0]] = value;
182
- return;
183
- }
184
-
185
- // Rekursiver Fall: Wir erstellen das Objekt für den nächsten Schlüssel, falls es noch nicht existiert
186
- let current = obj[keys[0]];
187
- if (typeof current !== 'object') {
188
- current = obj[keys[0]] = {};
189
- }
190
-
191
- // Rekursiver Aufruf für den Rest des Pfades
192
- setNestedProperty(current, keys.slice(1).join('.'), value);
193
- }
194
-
195
- // Add (nested) object dynamically to an existing object
196
- // Example: createNestedObject(myObject, ['level1', 'arrayProperty', 0], 'element1');
197
- function addNestedObject(obj, path, value) {
198
- const lastKey = path[path.length - 1];
199
- let current = obj;
200
-
201
- path.slice(0, -1).forEach(key => {
202
- current[key] = current[key] || {};
203
- current = current[key];
204
- });
205
-
206
- current[lastKey] = value;
207
- }
208
-
209
- // load YT Iframe player API
210
- function initYtAPI() {
211
- startTimeModule = Date.now();
212
-
213
- logger.info('\n' + 'Initialize plugin|tech (ytp) : started');
214
-
215
- // Load YT IFrame Player API asynchronously
216
- // -------------------------------------------------------------------------
217
- var tag = document.createElement('script');
218
- tag.src = "//youtube.com/iframe_api";
219
- firstScriptTag = document.getElementsByTagName('script')[0];
220
-
221
- firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
222
- }
223
-
224
- // setup YTPlayerUiEvents for AJS players
225
- function initUiEventsForAJS() {
226
-
227
- var dependencies_ytp_ready = setInterval (() => {
228
- var ytApiReady = (j1.adapter.amplitude.data.ytpGlobals['ytApiReady'] !== undefined) ? j1.adapter.amplitude.data.ytpGlobals['ytApiReady'] : false;
229
- var ytPlayerReady = (j1.adapter.amplitude.data.ytpGlobals['ytPlayerReady'] !== undefined) ? j1.adapter.amplitude.data.ytpGlobals['ytPlayerReady'] : false;
230
-
231
- if (ytApiReady && ytPlayerReady) {
232
-
233
- {% for player in amplitude_settings.players %}{% if player.enabled %}
234
-
235
- {% if player.source == empty %}
236
- {% assign player_source = amplitude_defaults.player.source %}
237
- {% else %}
238
- {% assign player_source = player.source %}
239
- {% endif %}
240
-
241
- {% if player_source == 'video' %}
242
- var playerID = '{{player.id}}';
243
- mimikYTPlayerUiEventsForAJS(playerID);
244
- {% endif %}
245
-
246
- {% endif %}{% endfor %}
247
-
248
- clearInterval(dependencies_ytp_ready);
249
- logger.info('\n' + 'Initialize APIPlayers : ready');
250
- } // END if ready
251
-
252
- }, 10); // END dependencies_ytp_ready
253
- } // END initUiEventsForAJS()
254
-
255
- // Create a player after Iframe player API is ready to use
256
- // ---------------------------------------------------------------------------
257
- function onYouTubeIframeAPIReady() {
258
- // var currentOptions;
259
- var playerSource;
260
-
261
- ytApiReady = true;
262
- // currentOptions = $.extend({}, {{amplitude_options | replace: 'nil', 'null' | replace: '=>', ':' }});
263
-
264
- {% for player in amplitude_options.players %}{% if player.enabled %}
265
- {% capture xhr_container_id %}{{player.id}}_parent{% endcapture %}
266
-
267
- playerSource = '{{player.source}}';
268
-
269
- {% if player.source == empty %}
270
- {% assign player_source = amplitude_defaults.player.source %}
271
- {% else %}
272
- {% assign player_source = player.source %}
273
- {% endif %}
274
-
275
- {% if player_source != 'video' %}
276
- {% continue %}
277
- {% else %}
278
- // load players of type 'video' configured in current page
279
- //
280
- playerExistsInPage = ($('#' + '{{xhr_container_id}}')[0] !== undefined) ? true : false;
281
- if (playerExistsInPage) {
282
- var playerSettings = $.extend({}, {{player | replace: 'nil', 'null' | replace: '=>', ':' }});
283
- var songs = Amplitude.getSongsStatePlaylist(playerSettings.playlist.name);
284
- var activeSongMetadata = songs[0];
285
- var playerType = playerSettings.type
286
-
287
- // increase number of found players in page by one
288
- playerCounter++;
289
-
290
- // load individual player settings (to manage multiple players in page)
291
- //
292
- var ytpVideoID = activeSongMetadata.url.split('=')[1];
293
- var ytpAutoPlay = ('{{player.yt_player.autoplay}}'.length > 0) ? '{{player.yt_player.autoplay}}' : '{{amplitude_defaults.player.yt_player.autoplay}}';
294
- var ytpLoop = ('{{player.yt_player.loop}}'.length > 0) ? '{{player.yt_player.loop}}' : '{{amplitude_defaults.player.yt_player.loop}}';
295
- var ytpHeight = ('{{player.yt_player.height}}'.length > 0) ? '{{player.yt_player.height}}' : '{{amplitude_defaults.player.yt_player.height}}';
296
- var ytpWidth = ('{{player.yt_player.width}}'.length > 0) ? '{{player.yt_player.width}}' : '{{amplitude_defaults.player.yt_player.width}}';
297
-
298
- logger.info('\n' + 'AJS YouTube iFrame API: ready');
299
- logger.info('\n' + 'configure player on ID: #{{player.id}}');
300
-
301
- // create a hidden YT Player iFrame container
302
- //
303
- ytpContainer = document.getElementById('{{player.id}}_video');
304
- ytpContainer.innerHTML = '<div id="iframe_{{player.id}}"></div>';
305
- ytpContainer.style.cssText = 'display:none';
306
-
307
- ytPlayer = new YT.Player('iframe_{{player.id}}', {
308
- height: ytpHeight,
309
- width: ytpWidth,
310
- videoId: ytpVideoID,
311
- playerVars: {
312
- autoplay: ytpAutoPlay,
313
- loop: ytpLoop
314
- },
315
- events: {
316
- 'onReady': {{player.id}}OnPlayerReady,
317
- 'onStateChange': {{player.id}}OnPlayerStateChange
318
- }
319
- });
320
-
321
- // remove EMPTY properties
322
- delete playerSettings.player;
323
-
324
- // save YT player properties for later use
325
- playerProperties = {
326
- "playerDefaults": amplitudeDefaults.player,
327
- "playerSettings": playerSettings,
328
- "player": ytPlayer,
329
- "playerReady": false,
330
- "playerType": playerType,
331
- "playerID": "{{player.id}}",
332
- "videoID": ytpVideoID,
333
- "songs": songs,
334
- "activeIndex": 0,
335
- };
336
-
337
- // store player properties for later use
338
- addNestedProperty(j1.adapter.amplitude.data.ytPlayers, '{{player.id}}', playerProperties);
339
-
340
- // save YT player data for later use (e.g. events)
341
- // j1.adapter.amplitude.data.ytpGlobals['ytVideoID'] = ytpVideoID;
342
- // j1.adapter.amplitude.data.ytpGlobals['ytPlayerDefaults'] = amplitudeDefaults.player;
343
- // j1.adapter.amplitude.data.ytpGlobals['ytPlayerSettings'] = playerSettings;
344
- j1.adapter.amplitude.data.ytpGlobals['ytApiReady'] = ytApiReady;
345
-
346
-
347
- // reset current player
348
- playerExistsInPage = false;
349
-
350
- } // END if playerExistsInPage()
351
-
352
- // run AJS YouTube Player initialization
353
- // -----------------------------------------------------------------------
354
- function {{player.id}}OnPlayerReady(event) {
355
- var hours, minutes, seconds;
356
- var ytPlayer = event.target;
357
- var ytPlayerReady = true;
358
-
359
- logger.info('\n' + 'AJS YouTube Player on ID {{player.id}}: ready');
360
-
361
- // save YT player data for later use (e.g. events)
362
- j1.adapter.amplitude.data.ytpGlobals['ytPlayerReady'] = ytPlayerReady;
363
- j1.adapter.amplitude.data.ytPlayers.{{player.id}}.playerReady = ytPlayerReady;
364
-
365
- setInterval(updateCurrentTimeContainerYTP, 1000);
366
- setInterval(updateProgressBarsYTP, 1000)
367
-
368
- // get duration hours (if configured)
369
- if ({{player.display_hours}} ) {
370
- hours = ytpGetDurationHours (ytPlayer);
371
- }
372
-
373
- // get duration minutes|seconds
374
- minutes = ytpGetDurationMinutes (ytPlayer);
375
- seconds = ytpGetDurationSeconds (ytPlayer);
376
-
377
- // set duration time values for current video
378
- // ---------------------------------------------------------------------
379
-
380
- // set duration|hours
381
- if ({{player.display_hours}} ) {
382
- var durationHours = document.getElementsByClassName("amplitude-duration-hours");
383
- // do update
384
- }
385
-
386
- // set duration|minutes
387
- var durationMinutes = document.getElementsByClassName("amplitude-duration-minutes");
388
- durationMinutes[0].innerHTML = minutes;
389
-
390
- // set duration|seconds
391
- var durationSeconds = document.getElementsByClassName("amplitude-duration-seconds");
392
- durationSeconds[0].innerHTML = seconds;
393
-
394
- // final message
395
- // ---------------------------------------------------------------------
396
- endTimeModule = Date.now();
397
-
398
- logger.info('\n' + 'Initialize plugin|tech (ytp) : finished');
399
-
400
- if (playerCounter > 0) {
401
- logger.info('\n' + 'Found players of type video (YTP) in page: ' + playerCounter);
402
- } else {
403
- logger.warn('\n' + 'Found NO players of type video (YTP) in page');
404
- }
405
-
406
- logger.info('\n' + 'plugin|tech initializing time: ' + (endTimeModule-startTimeModule) + 'ms');
407
-
408
- } // END onPlayerReady()
409
-
410
- // update YT player elements on state change (playing)
411
- // -----------------------------------------------------------------------
412
- function {{player.id}}OnPlayerStateChange(event) {
413
- var ytPlayer = j1.adapter.amplitude.data.ytPlayers.{{player.id}}.player;
414
- var songs = j1.adapter.amplitude.data.ytPlayers.{{player.id}}.songs;
415
- var activeIndex = j1.adapter.amplitude.data.ytPlayers.{{player.id}}.activeIndex;
416
-
417
- // set active ytPlayer
418
- j1.adapter.amplitude.data.ytpGlobals['activePlayer'] = ytPlayer;
419
-
420
- // save YT player data for later use (e.g. events)
421
- // j1.adapter.amplitude.data.ytPlayers.{{player.id}}.player = ytPlayer;
422
-
423
- resetCurrentTimeContainerYTP();
424
- updateDurationTimeContainerYTP(ytPlayer);
425
-
426
- // setInterval(updateCurrentTimeContainerYTP, 1000);
427
- // setInterval(updateProgressBarsYTP('{{player.id}}'), 1000)
428
-
429
- // Set the index of the active song (index starts by 0)
430
- // ytpSetActiveIndex({{player.id}}, activeIndex);
431
-
432
- if (event.data === YT_PLAYER_STATE.PLAYING || event.data === YT_PLAYER_STATE.BUFFERING) {
433
- var bla = 1;
434
- // j1.adapter.amplitude.data.ytpGlobals['activePlayer'] = ytPlayer;
435
- // setInterval(updateCurrentTimeContainerYTP, 1000);
436
- // setInterval(updateProgressBarsYTP, 1000)
437
- }
438
-
439
- // play next video
440
- if (event.data === YT_PLAYER_STATE.ENDED) {
441
-
442
- // var ytPlayer = j1.adapter.amplitude.data.ytpGlobals['ytPlayer'];
443
- // var ytPlayer = j1.adapter.amplitude.data.ytPlayers.{{player.id}}.player;
444
- // var songs = j1.adapter.amplitude.data.ytpGlobals['ytPlayerSongs'];
445
- // var songIndex = parseInt(j1.adapter.amplitude.data.ytpGlobals['ytpSongIndex']) +1;
446
-
447
- var songIndex = ytpSongIndex++;
448
-
449
- if (songIndex < songs.length) {
450
- var songMetaData = songs[songIndex];
451
- var songURL = songMetaData.url;
452
- var ytpVideoID = songURL.split('=')[1];
453
-
454
- // continue on next video
455
- ytPlayer.loadVideoById(ytpVideoID);
456
-
457
- // reset|update time settings
458
- resetCurrentTimeContainerYTP();
459
- updateDurationTimeContainerYTP(ytPlayer);
460
-
461
- // update global song index for next video
462
- ytpSongIndex = songIndex;
463
- ytpSetActiveIndex({{player.id}}, songIndex);
464
-
465
- // save YT player data for later use (e.g. events)
466
- // j1.adapter.amplitude.data.ytpGlobals['ytpSongIndex'] = ytpSongIndex;
467
-
468
- // replace cover image for next video
469
- var coverImage = document.querySelector(".cover-image");
470
- coverImage.src = songMetaData.cover_art_url;
471
-
472
- // replace song name in meta-containers for next video
473
- var songName = document.getElementsByClassName("song-name");
474
- songName[0].innerHTML = songMetaData.name; // player-bottom
475
- songName[1].innerHTML = songMetaData.name; // playlist-screen-controls
476
-
477
- // replace song rating (playlist-screen|meta-container)
478
- var largetPlayerSongAudioRating = document.getElementsByClassName("audio-rating");
479
- if (largetPlayerSongAudioRating.length) {
480
- if (songMetaData.rating) {
481
- largetPlayerSongAudioRating[0].innerHTML = songMetaData.rating + ' <i class="mdib mdib-star md-gray-400 mdib-18px"></i>';
482
- } else {
483
- largetPlayerSongAudioRating[0].innerHTML = '';
484
- }
485
- } // END if largetPlayerSongAudioRating
486
-
487
- // replace artist name in meta-containers for next video
488
- var artistName = document.getElementsByClassName("artist");
489
- artistName[0].innerHTML = songMetaData.artist;
490
-
491
- // replace album name in meta-containers for next video
492
- var albumName = document.getElementsByClassName("album");
493
- albumName[0].innerHTML = songMetaData.album;
494
-
495
- // set song active in playlist
496
- setSongPlayed(songIndex);
497
- } else {
498
- // select FIRST video
499
- songIndex = 0;
500
- var songMetaData = songs[songIndex];
501
- var songURL = songMetaData.url;
502
- var ytpVideoID = songURL.split('=')[1];
503
-
504
- ytpSetActiveIndex({{player.id}}, songIndex);
505
-
506
- // continue (paused) on FIRST video
507
- ytPlayer.loadVideoById(ytpVideoID);
508
- // wait some time to make sure video is loaded|active
509
- setTimeout(() => {
510
- ytPlayer.pauseVideo();
511
- // reset|update time settings
512
- resetCurrentTimeContainerYTP();
513
- updateDurationTimeContainerYTP(ytPlayer);
514
-
515
- // update AJS play_pause button
516
- var largePlayerPlayPauseButton = document.getElementById('large_player_play_pause');
517
- largePlayerPlayPauseButton.classList.remove('amplitude-playing');
518
- largePlayerPlayPauseButton.classList.add('amplitude-paused');
519
- }, 300);
520
-
521
- // update global song index for first video
522
- ytpSongIndex = songIndex;
523
-
524
- // save YT player data for later use (e.g. events)
525
- // j1.adapter.amplitude.data.ytpGlobals['ytpSongIndex'] = ytpSongIndex;
526
-
527
- // load cover image for first video
528
- var coverImage = document.querySelector(".cover-image");
529
- coverImage.src = songMetaData.cover_art_url;
530
-
531
- // replace name in meta-containers for first video
532
- var songName = document.getElementsByClassName("song-name");
533
- songName[0].innerHTML = songMetaData.name; // player-bottom
534
- songName[1].innerHTML = songMetaData.name; // playlist-screen-controls
535
-
536
- // replace song rating (playlist-screen|meta-container)
537
- var largetPlayerSongAudioRating = document.getElementsByClassName("audio-rating");
538
- if (largetPlayerSongAudioRating.length) {
539
- if (songMetaData.rating) {
540
- largetPlayerSongAudioRating[0].innerHTML = songMetaData.rating + ' <i class="mdib mdib-star md-gray-400 mdib-18px"></i>';
541
- } else {
542
- largetPlayerSongAudioRating[0].innerHTML = '';
543
- }
544
- } // END if largetPlayerSongAudioRating
545
-
546
- // replace artist name in meta-containers for next video
547
- var artistName = document.getElementsByClassName("artist");
548
- artistName.innerHTML = songMetaData.artist;
549
-
550
- // replace album name in meta-containers for next video
551
- var albumName = document.getElementsByClassName("album");
552
- albumName.innerHTML = songMetaData.album;
553
-
554
- // update AJS play_pause button
555
- var largePlayerPlayPauseButton = document.getElementById('large_player_play_pause');
556
- largePlayerPlayPauseButton.classList.remove('amplitude-playing');
557
- largePlayerPlayPauseButton.classList.add('amplitude-paused');
558
-
559
- // set song (video) active in playlist
560
- setSongPlayed(songIndex);
561
- }
562
- } // END if YT_PLAYER_STATE.ENDED
563
-
564
- } // END {{player.id}}OnPlayerStateChange
565
-
566
- {% endif %}
567
- {% endif %}{% endfor %}
568
-
569
- } // END onYouTubeIframeAPIReady ()
570
-
571
-
572
- // ---------------------------------------------------------------------------
573
- // main (plugin)
574
- // ---------------------------------------------------------------------------
575
- // load|initialize YT Iframe player API
576
- //
577
- initYtAPI();
578
-
579
- // setup YTPlayerUiEvents for AJS players
580
- //
581
- initUiEventsForAJS();
582
-
583
-
584
- // ---------------------------------------------------------------------------
585
- // Base AJS Player functions
586
- // ---------------------------------------------------------------------------
587
-
588
- // ---------------------------------------------------------------------------
589
- // Returns the index of the current video (song) in the songs array
590
- // that is currently playing (starts by 0)
591
- // ---------------------------------------------------------------------------
592
- //
593
- function getSongPlayed() {
594
- var index = -1;
595
- var songContainers = document.getElementsByClassName("amplitude-active-song-container");
596
-
597
- if (songContainers.length) {
598
- for (var i=0; i<songContainers.length; i++) {
599
- index = parseInt(songContainers[i].getAttribute('data-amplitude-song-index'));
600
- if (index >= 0) {
601
- break;
602
- }
603
- }
604
- }
605
-
606
- return index;
607
- } // END getSongPlayed
608
-
609
- // ---------------------------------------------------------------------------
610
- // Add class 'amplitude-active-song-container' to the element containing
611
- // visual information for the active song.
612
- //
613
- // NOTE: We then don't care if shuffle is on or not.
614
- // ---------------------------------------------------------------------------
615
- //
616
- function setSongPlayed(index) {
617
- var direct;
618
-
619
- // Specify if it was a (direct) click on the song container
620
- direct = true;
621
-
622
- // Gets all of the song container elements.
623
- var songContainers = document.getElementsByClassName("amplitude-song-container");
624
-
625
- // Clear all active song containrs.
626
- for (var i = 0; i < songContainers.length; i++) {
627
- songContainers[i].classList.remove("amplitude-active-song-container");
628
- }
629
-
630
- // Find the active index and add the active song container to the element
631
- // that represents the song at the index.
632
- //
633
- if (Amplitude.getActivePlaylist() == "" || Amplitude.getActivePlaylist() == null) {
634
- var activeIndex = "";
635
-
636
- // If we click directly on the song element, we ignore
637
- // whether it's in shuffle or not.
638
- //
639
- if (direct) {
640
- // activeIndex = Amplitude.getActiveIndex();
641
- activeIndex = index;
642
- } else {
643
- if (Amplitude.getConfig().shuffle_on) {
644
- // activeIndex = Amplitude.getConfig().shuffle_list[Amplitude.getActiveIndex()];
645
- } else {
646
- // activeIndex = Amplitude.getActiveIndex();
647
- activeIndex = index;
648
- }
649
- }
650
-
651
- if (document.querySelectorAll('.amplitude-song-container[data-amplitude-song-index="' + activeIndex + '"]')) {
652
- var _songContainers = document.querySelectorAll('.amplitude-song-container[data-amplitude-song-index="' + activeIndex + '"]');
653
-
654
- for (var _i = 0; _i < _songContainers.length; _i++) {
655
- // if (!_songContainers[_i].hasAttribute("data-amplitude-playlist")) {
656
- if (_songContainers[_i].hasAttribute("data-amplitude-playlist")) {
657
- _songContainers[_i].classList.add("amplitude-active-song-container");
658
- }
659
- }
660
- }
661
- } else {
662
- // If we have an active playlist or the action took place directly on the
663
- // song element, we ignore the shuffle.
664
- //
665
- if (Amplitude.getActivePlaylist() != null && Amplitude.getActivePlaylist() != "" || direct) {
666
- var activePlaylistIndex = Amplitude.getActiveIndex();
667
- } else {
668
- var activePlaylistIndex = "";
669
-
670
- if (Amplitude.getActivePlaylist().shuffle) {
671
- activePlaylistIndex = Amplitude.getActiveIndex();
672
- } else {
673
- activePlaylistIndex = Amplitude.getActiveIndex();
674
- }
675
- } // END if
676
- } // END if
677
- } // END setSongPlayed
678
-
679
- // Returns the position as a percentage the user clicked in player progressbar
680
- // NOTE: The percentage is out of [0.00 .. 1.00]
681
- // ---------------------------------------------------------------------------
682
- function getProgressBarSelectedPositionPercentage (event, progessBar) {
683
- var offset = progessBar.getBoundingClientRect();
684
- var xpos = event.pageX - offset.left;
685
- var percentage = (parseFloat(xpos) / parseFloat(progessBar.offsetWidth)).toFixed(2);
686
-
687
- return percentage;
688
- }
689
-
690
- // Returns the time in seconds calculated from a percentage value
691
- // NOTE: The percentage is out of [0.00 .. 1.00]
692
- // ---------------------------------------------------------------------------
693
- function getTimeFromPercentage (player, percentage) {
694
- var videoDuration = ytpGetDuration(player);
695
- var time = parseFloat((videoDuration * percentage).toFixed(2));
696
-
697
- return time;
698
- }
699
-
700
- // Update YTP specific progress data
701
- // ---------------------------------------------------------------------------
702
- function updateProgressBarsYTP() {
703
- var progress;
704
- var activePlayer = j1.adapter.amplitude.data.ytpGlobals['activePlayer'];
705
- var progressBars = document.getElementsByClassName("large-player-progress");
706
-
707
- for (var i=0; i<progressBars.length; i++) {
708
- if (activePlayer !== undefined) {
709
- // calc procent value (float, 2 decimals [0.00 .. 1.00])
710
- progress = parseFloat((activePlayer.getCurrentTime() / activePlayer.getDuration()).toFixed(2));
711
-
712
- // set current progess value if valid
713
- if (isFinite(progress)) {
714
- progressBars[i].value = progress;
715
- }
716
- }
717
- } // END for
718
-
719
- // calc procent value (float, 2 decimals [0.00 .. 1.00])
720
- // progress = parseFloat((ytPlayer.getCurrentTime() / ytPlayer.getDuration()).toFixed(2));
721
-
722
- // // jadams, 2024-12-07: added check on finite value
723
- // if (!isFinite(progress)) {
724
- // // TODO: check why progress value may NOT finite
725
- // progressBar.value = 0;
726
- // } else if (progress === 1) {
727
- // // reset progress value for next video
728
- // progressBar.value = 0;
729
- // } else {
730
- // // calculate current progress
731
- // progress = parseFloat((ytPlayer.getCurrentTime() / ytPlayer.getDuration()).toFixed(2));
732
- // progressBar.value = progress;
733
-
734
- // save YT player progress data for later use (e.g. events)
735
- // j1.adapter.amplitude.data.ytpGlobals['ytPlayerProgress'] = progress;
736
- //}
737
- }
738
-
739
- // Update YTP specific DURATION time data
740
- // ---------------------------------------------------------------------------
741
- function updateDurationTimeContainerYTP(player) {
742
- var hours, minutes, seconds;
743
- var durationHours, durationMinutes, durationSeconds;
744
-
745
- // get current hours|minutes|seconds
746
- hours = ytpGetDurationHours(player);
747
- minutes = ytpGetDurationMinutes(player);
748
- seconds = ytpGetDurationSeconds(player);
749
-
750
- // update time container values for current video
751
- // -------------------------------------------------------------------------
752
-
753
- // update current duration|hours
754
- if (!isNaN(hours) && hours !== '00') {
755
- durationHours = document.getElementsByClassName("amplitude-duration-hours");
756
- // do update
757
- }
758
-
759
- // update current duration|minutes
760
- durationMinutes = document.getElementsByClassName("amplitude-duration-minutes");
761
- if (!isNaN(minutes)) {
762
- durationMinutes[0].innerHTML = minutes;
763
- }
764
-
765
- // update duration|seconds
766
- durationSeconds = document.getElementsByClassName("amplitude-duration-seconds");
767
- if (!isNaN(seconds)) {
768
- durationSeconds[0].innerHTML = seconds;
769
- }
770
- }
771
-
772
- // Update YTP specific CURRENT time data
773
- // ---------------------------------------------------------------------------
774
- function updateCurrentTimeContainerYTP() {
775
- var hours, minutes, seconds;
776
- var currentHours, currentMinutes, currentSeconds;
777
-
778
- // get current hours|minutes|seconds
779
- hours = ytpGetCurrentHours(ytPlayer);
780
- minutes = ytpGetCurrentMinutes(ytPlayer);
781
- seconds = ytpGetCurrentSeconds(ytPlayer);
782
-
783
- // update time container values for current video
784
- // -------------------------------------------------------------------------
785
-
786
- // update current duration|hours
787
- if (hours !== '00') {
788
- currentHours = document.getElementsByClassName("amplitude-current-hours");
789
- currentHours[0].innerHTML = hours;
790
- }
791
-
792
- // update current duration|minutes
793
- currentMinutes = document.getElementsByClassName("amplitude-current-minutes");
794
- currentMinutes[0].innerHTML = minutes;
795
-
796
- // update duration|seconds
797
- currentSeconds = document.getElementsByClassName("amplitude-current-seconds");
798
- currentSeconds[0].innerHTML = seconds;
799
- }
800
-
801
- // Reset YTP specific progress data
802
- // ---------------------------------------------------------------------------
803
- function resetProgressBarYTP(playerID) {
804
- if (playerID !== undefined) {
805
- var progressBar = j1.adapter.amplitude.data.ytPlayers[playerID].progressBar;
806
- progressBar.value = 0;
807
- }
808
- }
809
-
810
- // Reset YTP specific CURRENT time data
811
- // ---------------------------------------------------------------------------
812
- function resetCurrentTimeContainerYTP() {
813
-
814
- // reset duration|hours
815
- var currentHours = document.getElementsByClassName("amplitude-current-hours");
816
- if (currentHours.length) {
817
- currentHours[0].innerHTML = '00';
818
- }
819
-
820
- // reset duration|minutes
821
- var currentMinutes = document.getElementsByClassName("amplitude-current-minutes");
822
- currentMinutes[0].innerHTML = '00';
823
-
824
- // reset duration|seconds
825
- var currentSeconds = document.getElementsByClassName("amplitude-current-seconds");
826
- currentSeconds[0].innerHTML = '00';
827
- }
828
-
829
-
830
- // ---------------------------------------------------------------------------
831
- // Mimik Base AJS API functions
832
- // ---------------------------------------------------------------------------
833
-
834
- // Skip video to a time specified by time
835
- // ---------------------------------------------------------------------------
836
- function ytpSeekTo(player, time) {
837
- player.seekTo(time, true);
838
- }
839
-
840
- // Returns the buffered percentage of the playing video
841
- // ---------------------------------------------------------------------------
842
- function ytpGetBuffered(player) {
843
- // to be defined
844
- }
845
-
846
- // Returns the active song index (in the songs array, starts by 0)
847
- function ytpGetActiveIndex(playerID) {
848
- var activeIndex = -1;
849
-
850
- if (j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex !== undefined) {
851
- activeIndex = parseInt(j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex);
852
- }
853
-
854
- return activeIndex;
855
- }
856
-
857
- // Set the index of the active song (index starts by 0)
858
- function ytpSetActiveIndex(playerID, idx) {
859
- var success = false;
860
- var index = parseInt(idx);
861
-
862
- if (j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex !== undefined) {
863
- j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex = index;
864
- success = true;
865
- }
866
-
867
- return success;
868
- }
869
-
870
- // Returns the percentage of the video played
871
- // ---------------------------------------------------------------------------
872
- function ytpGetPlayedPercentage(player) {
873
- // to be defined
874
- }
875
-
876
- // Returns the actual video element
877
- // ---------------------------------------------------------------------------
878
- function ytpGetAudio(player) {
879
- // to be defined
880
- }
881
-
882
- // Returns available playback speeds for the player
883
- // ---------------------------------------------------------------------------
884
- function ytpGetPlaybackSpeeds(player) {
885
- // to be defined
886
- }
887
-
888
- // Returns the current playback speed for the player
889
- // ---------------------------------------------------------------------------
890
- function ytpGetPlaybackSpeed(player) {
891
- }
892
-
893
- // Returns the current state of the player
894
- // ---------------------------------------------------------------------------
895
- function ytpGetPlayerState(player) {
896
- // to be defined
897
- }
898
-
899
- // Returns the duration of the video
900
- // ---------------------------------------------------------------------------
901
- function ytpGetDuration(player) {
902
- var playerState, duration;
903
-
904
- playerState = player.getPlayerState();
905
- if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.BUFFERING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.CUED) {
906
- duration = player.getDuration();
907
-
908
- return duration;
909
- } else {
910
- return 0;
911
- }
912
- }
913
-
914
- // Returns the current time of the video played
915
- // --------------------------------------------------------------------------
916
- function ytpGetCurrentTime(player) {
917
- var playerState;
918
-
919
- if (player !== undefined && player.getPlayerState !== undefined) {
920
- playerState = player.getPlayerState();
921
- if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.CUED) {
922
- var currentTime = player.getCurrentTime();
923
-
924
- return currentTime;
925
- } else {
926
- return 0;
927
- }
928
- }
929
- }
930
-
931
- // Returns the duration hours of the video
932
- // ---------------------------------------------------------------------------
933
- function ytpGetDurationHours(player) {
934
- var playerState, duration, hours, d, h;
935
-
936
- if (player !== undefined && player.getPlayerState !== undefined) {
937
- playerState = player.getPlayerState();
938
- if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.CUED ) {
939
- duration = ytpGetDuration(player);
940
- d = Number(duration);
941
- h = Math.floor(d / 3600);
942
- hours = h.toString().padStart(2, '0');
943
-
944
- return hours;
945
- } else {
946
- return '00';
947
- }
948
- }
949
- }
950
-
951
- // Returns the duration minutes of the video
952
- // ---------------------------------------------------------------------------
953
- function ytpGetDurationMinutes(player) {
954
- var playerState, duration, minutes, d, m;
955
-
956
- if (player !== undefined && player.getPlayerState !== undefined) {
957
- playerState = player.getPlayerState();
958
- if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.CUED) {
959
- duration = ytpGetDuration(player);
960
- d = Number(duration);
961
- m = Math.floor(d % 3600 / 60);
962
- minutes = m.toString().padStart(2, '0');
963
-
964
- return minutes;
965
- } else {
966
- return '00';
967
- }
968
- }
969
- }
970
-
971
- // Returns the duration seconds of the video
972
- //
973
- function ytpGetDurationSeconds(player) {
974
- var playerState, duration, seconds, d, s;
975
-
976
- if (player !== undefined && player.getPlayerState !== undefined) {
977
- playerState = player.getPlayerState();
978
- if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.CUED ) {
979
- duration = ytpGetDuration(player);
980
- d = Number(duration);
981
- s = Math.floor(d % 60);
982
- seconds = s.toString().padStart(2, '0');
983
-
984
- return seconds;
985
- } else {
986
- return '00';
987
- }
988
- }
989
- }
990
-
991
- // Returns the current hours the user is into the video
992
- // ---------------------------------------------------------------------------
993
- function ytpGetCurrentHours(player) {
994
- var playerState, currentTime, hours, d, h;
995
-
996
- if (player !== undefined && player.getPlayerState !== undefined) {
997
- playerState = player.getPlayerState();
998
- if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.CUED) {
999
- currentTime = ytpGetCurrentTime(player);
1000
- d = Number(currentTime);
1001
- h = Math.floor(d / 3600);
1002
- hours = h.toString().padStart(2, '0');
1003
-
1004
- return hours;
1005
- } else {
1006
- return '00';
1007
- }
1008
- }
1009
- }
1010
-
1011
- // Returns the current minutes the user is into the video
1012
- // ---------------------------------------------------------------------------
1013
- function ytpGetCurrentMinutes (player) {
1014
- var playerState, currentTime, minutes, d, m;
1015
-
1016
- if (player !== undefined && player.getPlayerState !== undefined) {
1017
- playerState = player.getPlayerState();
1018
- if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.CUED) {
1019
- currentTime = ytpGetCurrentTime(player);
1020
- d = Number(currentTime);
1021
- m = Math.floor(d % 3600 / 60);
1022
- minutes = m.toString().padStart(2, '0');
1023
-
1024
- return minutes;
1025
- } else {
1026
- return '00';
1027
- }
1028
- }
1029
- }
1030
-
1031
- // Returns the current seconds the user is into the video
1032
- //
1033
- function ytpGetCurrentSeconds(player) {
1034
- var playerState, currentTime, seconds, d, s;
1035
-
1036
- if (player !== undefined && player.getPlayerState !== undefined) {
1037
- playerState = player.getPlayerState();
1038
- if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED || playerState === YT_PLAYER_STATE.CUED ) {
1039
- currentTime = ytpGetCurrentTime(player);
1040
- d = Number(currentTime);
1041
- s = Math.floor(d % 60);
1042
- seconds = s.toString().padStart(2, '0');
1043
-
1044
- return seconds;
1045
- } else {
1046
- return '00';
1047
- }
1048
- }
1049
- }
1050
-
1051
- // ---------------------------------------------------------------------------
1052
- // mimikYTPlayerUiEventsForAJS()
1053
- // Mimik AJS button events for YT video
1054
- // ---------------------------------------------------------------------------
1055
- function mimikYTPlayerUiEventsForAJS(ytPlayerID) {
1056
- if (j1.adapter.amplitude['data']['ytPlayers'][ytPlayerID] !== undefined) {
1057
- var playerDefaults = j1.adapter.amplitude['data']['ytPlayers'][ytPlayerID].playerDefaults;
1058
- var playerSettings = j1.adapter.amplitude['data']['ytPlayers'][ytPlayerID].playerSettings;
1059
- var playerButton = `large-player-play-pause-${ytPlayerID}`;
1060
-
1061
- // -----------------------------------------------------------------------
1062
- // Large AJS players
1063
- //
1064
- if (j1.adapter.amplitude['data']['ytPlayers'][ytPlayerID].playerSettings.type === 'large') {
1065
-
1066
- // Overload AJS play_pause button for YT
1067
- //
1068
- var largePlayerPlayPauseButton = document.getElementsByClassName(playerButton);
1069
- for (var i=0; i<largePlayerPlayPauseButton.length; i++) {
1070
- var classArray = [].slice.call(largePlayerPlayPauseButton[i].classList, 0);
1071
- var classString = classArray.toString();
1072
-
1073
- if (classString.includes(ytPlayerID)) {
1074
- largePlayerPlayPauseButton[i].addEventListener('click', function(event) {
1075
- var playlist = this.getAttribute("data-amplitude-playlist");
1076
- var playerID = playlist + '_large';
1077
- var ytPlayer = j1.adapter.amplitude['data']['ytPlayers'][playerID]['player'];
1078
- var songs = j1.adapter.amplitude['data']['ytPlayers'][playerID]['songs'];
1079
- var activeIndex = parseInt(j1.adapter.amplitude['data']['ytPlayers'][playerID]['activeIndex']);
1080
- var songMetaData = songs[songIndex];
1081
- var playPauseButton = `large-player-play-pause-${ytPlayerID}`;
1082
-
1083
- // toggle YT play|pause video
1084
- if (ytPlayer.getPlayerState() === YT_PLAYER_STATE.PLAYING || ytPlayer.getPlayerState() === YT_PLAYER_STATE.BUFFERING) {
1085
- ytPlayer.pauseVideo();
1086
- } else {
1087
- ytPlayer.playVideo();
1088
- }
1089
-
1090
- // toggle AJS PlayPauseButton
1091
- var largePlayerPlayPauseButton = document.getElementsByClassName(playPauseButton);
1092
- if (largePlayerPlayPauseButton[0].classList.contains('amplitude-paused')) {
1093
- largePlayerPlayPauseButton[0].classList.remove('amplitude-paused');
1094
- largePlayerPlayPauseButton[0].classList.add('amplitude-playing');
1095
- } else {
1096
- largePlayerPlayPauseButton[0].classList.remove('amplitude-playing');
1097
- largePlayerPlayPauseButton[0].classList.add('amplitude-paused');
1098
- }
1099
-
1100
- // don't activate playlist item on FIRST || LAST song
1101
- // if (songIndex !== 0 && songIndex !== songs.length - 1) {
1102
- if (songIndex !== songs.length - 1) {
1103
- // set song active in playlist
1104
- setSongPlayed(songIndex);
1105
- }
1106
-
1107
- // event.preventDefault();
1108
- event.stopImmediatePropagation(); // deactivate AJS events
1109
- }); // END EventListener largePlayerPlayPauseButton 'click'
1110
- } // END if largePlayerPlayPauseButton
1111
- } // END for largePlayerPlayPauseButton
1112
-
1113
- // Overload AJS largePlayerSkipBackward button for YT
1114
- //
1115
- var largePlayerSkipForwardButtons = document.getElementsByClassName("large-player-skip-forward");
1116
- for (var i=0; i<largePlayerSkipForwardButtons.length; i++) {
1117
- var classArray = [].slice.call(largePlayerSkipForwardButtons[i].classList, 0);
1118
- var classString = classArray.toString();
1119
-
1120
- // load player settings
1121
- var playerForwardBackwardSkipSeconds = (playerSettings.forward_backward_skip_seconds === undefined) ? playerDefaults.forward_backward_skip_seconds : playerSettings.forward_backward_skip_seconds;
1122
-
1123
- // if (largePlayerSkipForwardButtons[i].id === 'skip-forward_' + ytPlayerID) {
1124
- // if (classString.includes(ytPlayerID)) && largePlayerSkipForwardButtons[i].id === 'skip-forkward_' + ytPlayerID) {
1125
- if (classString.includes(ytPlayerID)) {
1126
- largePlayerSkipForwardButtons[i].addEventListener('click', function(event) {
1127
- var currentTime, playerState, skipOffset, ytPlayer;
1128
-
1129
- skipOffset = parseFloat(playerForwardBackwardSkipSeconds);
1130
- ytPlayer = j1.adapter.amplitude['data']['ytPlayers'][ytPlayerID].player;
1131
- playerState = ytPlayer.getPlayerState();
1132
- currentTime = ytPlayer.getCurrentTime();
1133
-
1134
- if (playerState === YT_PLAYER_STATE.PLAYING || playerState === YT_PLAYER_STATE.PAUSED) {
1135
- ytPlayer.seekTo(currentTime + skipOffset, true);
1136
- }
1137
-
1138
- // deactivate AJS events (if any)
1139
- event.stopImmediatePropagation();
1140
- }); // END Listener 'click'
1141
- } // END if skip-forward button
1142
- } // END for
1143
-
1144
- // Overload AJS largePlayerSkipBackward button for YT
1145
- //
1146
- var largePlayerSkipBackwardButtons = document.getElementsByClassName("large-player-skip-backward");
1147
- for (var i=0; i<largePlayerSkipBackwardButtons.length; i++) {
1148
- var classArray = [].slice.call(largePlayerSkipBackwardButtons[i].classList, 0);
1149
- var classString = classArray.toString();
1150
-
1151
- // load player settings
1152
- var playerForwardBackwardSkipSeconds = (playerSettings.forward_backward_skip_seconds === undefined) ? playerDefaults.forward_backward_skip_seconds : playerSettings.forward_backward_skip_seconds;
1153
-
1154
- if (classString.includes(ytPlayerID)) {
1155
- largePlayerSkipBackwardButtons[i].addEventListener('click', function(event) {
1156
- var ytPlayer = j1.adapter.amplitude['data']['ytPlayers'][ytPlayerID].player;
1157
-
1158
- if (ytPlayer.getPlayerState() === YT_PLAYER_STATE.PLAYING) {
1159
- var currentTime = ytPlayer.getCurrentTime();
1160
- const skipOffset = parseFloat(playerForwardBackwardSkipSeconds);
1161
-
1162
- ytPlayer.seekTo(currentTime - skipOffset, true);
1163
- }
1164
-
1165
- // deactivate AJS events (if any)
1166
- event.stopImmediatePropagation();
1167
- }); // END Listener 'click'
1168
- } // END if skip-backward button
1169
- } // END for
1170
-
1171
- // click on (player) next button
1172
- // TODO: Fix for multiple players in page
1173
- // --------------------------------------------------------------------
1174
-
1175
- // Overload AJS largePlayerNext button for YT
1176
- //
1177
- var largePlayerNextButton = document.getElementsByClassName("large-player-next");
1178
- for (var i=0; i<largePlayerNextButton.length; i++) {
1179
- var classArray = [].slice.call(largePlayerNextButton[i].classList, 0);
1180
- var classString = classArray.toString();
1181
-
1182
- if (classString.includes(ytPlayerID)) {
1183
- largePlayerNextButton[i].addEventListener('click', function(event) {
1184
- var ytpVideoID;
1185
- var playlist = this.getAttribute("data-amplitude-playlist");
1186
- var playerID = playlist + '_large';
1187
- var songIndex = parseInt(j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex);
1188
- var songs = j1.adapter.amplitude.data.ytPlayers[playerID].songs;
1189
- var ytPlayer = j1.adapter.amplitude.data.ytPlayers[playerID].player;
1190
-
1191
- // var songs = j1.adapter.amplitude['data']['ytPlayers'][playerID].songs
1192
- // var ytPlayer = j1.adapter.amplitude['data']['ytPlayers'][playerID].player;
1193
-
1194
- if (songIndex < songs.length) {
1195
- // set song on next item
1196
- songIndex++;
1197
- j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex = songIndex;
1198
- }
1199
- // else {
1200
- // songIndex--;
1201
- // }
1202
-
1203
- // set song on next item
1204
- // songIndex++;
1205
-
1206
- // save YT player data for later use (e.g. events)
1207
- // j1.adapter.amplitude.data.ytpGlobals['ytPlayerSongs'] = songs;
1208
-
1209
- // collect (next) song data
1210
- if (songIndex < songs.length) {
1211
- songMetaData = songs[songIndex];
1212
- //songIndex = songMetaData.index;
1213
- songURL = songMetaData.url;
1214
- //ytpSongIndex = songMetaData.index;
1215
- ytpVideoID = songURL.split('=')[1];
1216
- } else {
1217
- songIndex = 0;
1218
- j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex = songIndex;
1219
- songMetaData = songs[songIndex];
1220
- songURL = songMetaData.url;
1221
- // ytpSongIndex = songIndex;
1222
- ytpVideoID = songURL.split('=')[1];
1223
- }
1224
-
1225
- // save YT player data for later use (e.g. events)
1226
- // j1.adapter.amplitude.data.ytpGlobals['ytpSongIndex'] = ytpSongIndex;
1227
-
1228
- // pause song (video) if FIRST item reached
1229
- // TODO: handle on player|shuffle different (do play)
1230
- if (songMetaData.index === 0) {
1231
- ytpSongIndex = 0;
1232
-
1233
- // continue (paused) on FIRST video
1234
- if (ytPlayer !== undefined) {
1235
- ytPlayer.loadVideoById(ytpVideoID);
1236
-
1237
- // wait some time to make sure video is loaded|active
1238
- setTimeout(() => {
1239
- ytPlayer.pauseVideo();
1240
- // reset|update time settings
1241
- resetCurrentTimeContainerYTP();
1242
- updateDurationTimeContainerYTP(ytPlayer);
1243
- resetProgressBarYTP(playerID);
1244
-
1245
- // update AJS play_pause button
1246
- var largePlayerPlayPauseButton = document.getElementById('large_player_play_pause');
1247
- largePlayerPlayPauseButton.classList.remove('amplitude-playing');
1248
- largePlayerPlayPauseButton.classList.add('amplitude-paused');
1249
- }, 300);
1250
- }
1251
- } else {
1252
- // load NEXT video if available
1253
- if (ytPlayer !== undefined) {
1254
- ytPlayer.loadVideoById(ytpVideoID);
1255
-
1256
- // update AJS play_pause button (set playing)
1257
- var largePlayerPlayPauseButton = document.getElementById('large_player_play_pause');
1258
- largePlayerPlayPauseButton.classList.remove('amplitude-paused');
1259
- largePlayerPlayPauseButton.classList.add('amplitude-playing');
1260
- } else {
1261
- // update AJS play_pause button (set paused)
1262
- var largePlayerPlayPauseButton = document.getElementById('large_player_play_pause');
1263
- largePlayerPlayPauseButton.classList.remove('amplitude-playing');
1264
- largePlayerPlayPauseButton.classList.add('amplitude-paused');
1265
- }
1266
- }
1267
-
1268
- // reset|update current time settings
1269
- resetCurrentTimeContainerYTP();
1270
- updateDurationTimeContainerYTP(ytPlayer);
1271
-
1272
- // load new cover image
1273
- var coverImage = document.querySelector(".cover-image");
1274
- coverImage.src = songMetaData.cover_art_url;
1275
-
1276
- // replace new song name (meta-container)
1277
- var songName = document.getElementsByClassName("song-name");
1278
- songName[0].innerHTML = songMetaData.name; // player-bottom
1279
- songName[1].innerHTML = songMetaData.name; // playlist-screen
1280
-
1281
- // replace song rating (playlist-screen|meta-container)
1282
- var largetPlayerSongAudioRating = document.getElementsByClassName("audio-rating");
1283
- if (largetPlayerSongAudioRating.length) {
1284
- if (songMetaData.rating) {
1285
- largetPlayerSongAudioRating[0].innerHTML = songMetaData.rating + ' <i class="mdib mdib-star md-gray-400 mdib-18px"></i>';
1286
- } else {
1287
- largetPlayerSongAudioRating[0].innerHTML = '';
1288
- }
1289
- } // END if largetPlayerSongAudioRating
1290
-
1291
- // replace artist name in meta-containers for next video
1292
- var artistName = document.getElementsByClassName("artist");
1293
- artistName[0].innerHTML = songMetaData.artist;
1294
-
1295
- // replace album name in meta-containers for next video
1296
- var albumName = document.getElementsByClassName("album");
1297
- albumName[0].innerHTML = songMetaData.album;
1298
-
1299
- // update AJS play_pause button
1300
- var largePlayerPlayPauseButton = document.getElementById('large_player_play_pause');
1301
- largePlayerPlayPauseButton.classList.remove('amplitude-paused');
1302
- largePlayerPlayPauseButton.classList.add('amplitude-playing');
1303
-
1304
- if (songIndex < songs.length) {
1305
- // set song active in playlist
1306
- setSongPlayed(songIndex);
1307
- // j1.adapter.amplitude.data.ytPlayers[playerID].activeIndex = songIndex;
1308
- }
1309
-
1310
- // deactivate AJS events (if any)
1311
- event.stopImmediatePropagation();
1312
- }); // END EventListener 'click' next button
1313
- } // END if
1314
- } // END for largePlayerNextButton
1315
-
1316
- // click on (player) previous button
1317
- // TODO: Fix for multiple players in page
1318
- // -----------------------------------------------------------------------
1319
-
1320
- // Overload AJS largePlayerPrevious button for YT
1321
- //
1322
- var largePlayePreviousButton = document.getElementsByClassName("large-player-previous");
1323
- for (var i=0; i<largePlayePreviousButton.length; i++) {
1324
- var classArray = [].slice.call(largePlayerNextButton[i].classList, 0);
1325
- var classString = classArray.toString();
1326
-
1327
- if (classString.includes(ytPlayerID)) {
1328
- largePlayePreviousButton[i].addEventListener('click', function(event) {
1329
- var ytpVideoID;
1330
- var playlist = this.getAttribute("data-amplitude-playlist");
1331
- var songIndex = parseInt(ytpSongIndex);
1332
- var songs = j1.adapter.amplitude.data.ytPlayers.ytPlayerID.songs;
1333
- var ytPlayer = j1.adapter.amplitude.data.ytPlayers.ytPlayerID.player;
1334
-
1335
- // var songs = Amplitude.getSongsInPlaylist(playlist);
1336
- // var ytPlayer = j1.adapter.amplitude.data.ytpGlobals['ytPlayer'];
1337
-
1338
- // set song on previous item
1339
- songIndex--;
1340
-
1341
- // save YT player data for later use (e.g. events)
1342
- // j1.adapter.amplitude.data.ytpGlobals['ytPlayerSongs'] = songs;
1343
-
1344
- // collect (next) song data
1345
- if (songIndex > 0 && songIndex < songs.length) {
1346
- songMetaData = songs[songIndex];
1347
- songIndex = songMetaData.index;
1348
- songURL = songMetaData.url;
1349
- ytpSongIndex = songMetaData.index;
1350
- ytpVideoID = songURL.split('=')[1];
1351
- } else {
1352
- songIndex = 0;
1353
- songMetaData = songs[songIndex];
1354
- songURL = songMetaData.url;
1355
- ytpSongIndex = songIndex;
1356
- ytpVideoID = songURL.split('=')[1];
1357
- }
1358
-
1359
- // save YT player data for later use (e.g. events)
1360
- // j1.adapter.amplitude.data.ytpGlobals['ytpSongIndex'] = ytpSongIndex;
1361
-
1362
- // pause song (video) if FIRST item reached
1363
- // TODO: handle on player|shuffle different (do play)
1364
- if (songMetaData.index === 0) {
1365
- ytpSongIndex = 0;
1366
-
1367
- // continue (paused) on FIRST video
1368
- if (ytPlayer !== undefined) {
1369
- ytPlayer.loadVideoById(ytpVideoID);
1370
-
1371
- // wait some time to make sure video is loaded|active
1372
- setTimeout(() => {
1373
- ytPlayer.pauseVideo();
1374
- // reset|update time settings
1375
- resetCurrentTimeContainerYTP();
1376
- updateDurationTimeContainerYTP(ytPlayer);
1377
- resetProgressBarYTP(playerID);
1378
-
1379
- // update AJS play_pause button
1380
- var largePlayerPlayPauseButton = document.getElementById('large_player_play_pause');
1381
- largePlayerPlayPauseButton.classList.remove('amplitude-playing');
1382
- largePlayerPlayPauseButton.classList.add('amplitude-paused');
1383
- }, 300);
1384
- }
1385
- } else {
1386
- // load NEXT video if available
1387
- if (ytPlayer !== undefined) {
1388
- ytPlayer.loadVideoById(ytpVideoID);
1389
-
1390
- // update AJS play_pause button (set playing)
1391
- var largePlayerPlayPauseButton = document.getElementById('large_player_play_pause');
1392
- largePlayerPlayPauseButton.classList.remove('amplitude-paused');
1393
- largePlayerPlayPauseButton.classList.add('amplitude-playing');
1394
- } else {
1395
- // update AJS play_pause button (set paused)
1396
- var largePlayerPlayPauseButton = document.getElementById('large_player_play_pause');
1397
- largePlayerPlayPauseButton.classList.remove('amplitude-playing');
1398
- largePlayerPlayPauseButton.classList.add('amplitude-paused');
1399
- }
1400
- }
1401
-
1402
- // reset|update current time settings
1403
- resetCurrentTimeContainerYTP();
1404
- updateDurationTimeContainerYTP(ytPlayer);
1405
-
1406
- // replace new song name (meta-container)
1407
- var songName = document.getElementsByClassName("song-name");
1408
- songName[0].innerHTML = songMetaData.name; // player-bottom
1409
- songName[1].innerHTML = songMetaData.name; // playlist-screen
1410
-
1411
- // load new cover image
1412
- var coverImage = document.querySelector(".cover-image");
1413
- coverImage.src = songMetaData.cover_art_url;
1414
-
1415
- // replace song rating (playlist-screen|meta-container)
1416
- var largetPlayerSongAudioRating = document.getElementsByClassName("audio-rating");
1417
- if (largetPlayerSongAudioRating.length) {
1418
- if (songMetaData.rating) {
1419
- largetPlayerSongAudioRating[0].innerHTML = songMetaData.rating + ' <i class="mdib mdib-star md-gray-400 mdib-18px"></i>';
1420
- } else {
1421
- largetPlayerSongAudioRating[0].innerHTML = '';
1422
- }
1423
- } // END if largetPlayerSongAudioRating
1424
-
1425
- // replace artist name in meta-containers for next video
1426
- var artistName = document.getElementsByClassName("artist");
1427
- artistName[0].innerHTML = songMetaData.artist;
1428
-
1429
- // replace album name in meta-containers for next video
1430
- var albumName = document.getElementsByClassName("album");
1431
- albumName[0].innerHTML = songMetaData.album;
1432
-
1433
- // update AJS play_pause button
1434
- var largePlayerPlayPauseButton = document.getElementById('large_player_play_pause');
1435
- largePlayerPlayPauseButton.classList.remove('amplitude-paused');
1436
- largePlayerPlayPauseButton.classList.add('amplitude-playing');
1437
-
1438
- // on LAST item, don't activate item in playlist
1439
- if (songIndex !== songs.length - 1) {
1440
- // set song active in playlist
1441
- setSongPlayed(songIndex);
1442
- }
1443
-
1444
- // set song active in playlist
1445
- // setSongPlayed(songIndex);
1446
-
1447
- // deactivate AJS events (if any)
1448
- event.stopImmediatePropagation();
1449
- }); // END EventListener 'click' previous button
1450
- } // END if
1451
- } // END for
1452
-
1453
- // click on song container
1454
- // TODO: Fix for multiple players in page
1455
- // ---------------------------------------------------------------------
1456
- var largetPlayerSongContainer = document.getElementsByClassName("amplitude-song-container");
1457
- for (var i=0; i<largetPlayerSongContainer.length; i++) {
1458
- largetPlayerSongContainer[i].addEventListener('click', function(event) {
1459
- var ytpVideoID;
1460
- var activeSongIndex;
1461
- var success;
1462
-
1463
- var playlist = this.getAttribute("data-amplitude-playlist");
1464
- var playerID = playlist + '_large';
1465
- var ytpSongIndex = parseInt(this.getAttribute("data-amplitude-song-index"));
1466
- var songs = j1.adapter.amplitude.data.ytPlayers[ytPlayerID].songs;
1467
-
1468
- // get active song index if video (song) is playing
1469
- activeSongIndex = getSongPlayed();
1470
-
1471
- if (activeSongIndex >= 0) {
1472
- success = ytpSetActiveIndex(playerID, activeSongIndex);
1473
- } else {
1474
- success = ytpSetActiveIndex(playerID, ytpSongIndex);
1475
- }
1476
-
1477
- // save YT player data for later use (e.g. events)
1478
- // j1.adapter.amplitude.data.ytpGlobals['ytPlayerSongs'] = songs;
1479
- // j1.adapter.amplitude.data.ytpGlobals['ytpSongIndex'] = ytpSongIndex;
1480
-
1481
- var playerState = ytPlayer.getPlayerState();
1482
- if (playerState === YT_PLAYER_STATE.PLAYING && ytpSongIndex === activeSongIndex) {
1483
- // do NOT interupt current video (song) is playing
1484
- return;
1485
- } else {
1486
- // set (current) song data
1487
- songMetaData = songs[ytpSongIndex];
1488
- songIndex = songMetaData.index;
1489
- songURL = songMetaData.url;
1490
- ytpSongIndex = songIndex;
1491
- ytpVideoID = songURL.split('=')[1];
1492
- // load new video
1493
- ytPlayer.loadVideoById(ytpVideoID);
1494
- }
1495
-
1496
- // reset|update current time settings
1497
- resetCurrentTimeContainerYTP();
1498
- updateDurationTimeContainerYTP(ytPlayer);
1499
-
1500
- // load new cover image
1501
- var coverImage = document.querySelector(".cover-image");
1502
- coverImage.src = songMetaData.cover_art_url;
1503
-
1504
- // replace new song name (meta-container)
1505
- var songName = document.getElementsByClassName("song-name");
1506
- songName[0].innerHTML = songMetaData.name; // player-bottom
1507
- songName[1].innerHTML = songMetaData.name; // playlist-screen
1508
-
1509
- // replace song info URL (playlist-screen|meta-container)
1510
- var largetPlayerSongInfoLink = document.getElementsByClassName("audio-info-link");
1511
- if (largetPlayerSongInfoLink.length) {
1512
- if (songMetaData.audio_info) {
1513
- largetPlayerSongInfoLink[0].href = songMetaData.audio_info;
1514
- } else {
1515
- largetPlayerSongInfoLink[0].href = songURL;
1516
- }
1517
- } // END if largetPlayerSongInfoLink
1518
-
1519
- // replace song rating (playlist-screen|meta-container)
1520
- var largetPlayerSongAudioRating = document.getElementsByClassName("audio-rating");
1521
- if (largetPlayerSongAudioRating.length) {
1522
- if (songMetaData.rating) {
1523
- largetPlayerSongAudioRating[0].innerHTML = songMetaData.rating + ' <i class="mdib mdib-star md-gray-400 mdib-18px"></i>';
1524
- } else {
1525
- largetPlayerSongAudioRating[0].innerHTML = '';
1526
- }
1527
- } // END if largetPlayerSongAudioRating
1528
-
1529
- // update AJS play_pause button
1530
- var largePlayerPlayPauseButton = document.getElementById('large_player_play_pause');
1531
- largePlayerPlayPauseButton.classList.remove('amplitude-paused');
1532
- largePlayerPlayPauseButton.classList.add('amplitude-playing');
1533
-
1534
- // set song active in playlist
1535
- setSongPlayed(songIndex);
1536
-
1537
- // deactivate AJS events (if any)
1538
- event.stopImmediatePropagation();
1539
- }); // END EventListener 'click' SongContainer
1540
- } // END for
1541
-
1542
- // add listeners to all progress bars found
1543
- // TODO: Fix for multiple players in page
1544
- // ---------------------------------------------------------------------
1545
- var progressBars = document.getElementsByClassName("large-player-progress");
1546
- if (progressBars.length) {
1547
- for (var i=0; i<progressBars.length; i++) {
1548
- var progressBar = progressBars[i];
1549
- // var id = bar.id.split('large-player-progress_')[0];
1550
- // var progressId = progressBars[i].id.split('large-player-progress_')[0];
1551
- var progressId = progressBars[i].id;
1552
- var playerId = progressId.split('large_player_progress_')[1];
1553
-
1554
- // save YT player data for later use (e.g. events)
1555
- // j1.adapter.amplitude.data.ytpGlobals['ytPlayerProgressBar'] = progressBars[i];
1556
- // j1.adapter.amplitude.data.ytPlayers[playerId].progressBar = progressId;
1557
- j1.adapter.amplitude.data.ytPlayers[playerId].progressBar = progressBar;
1558
-
1559
- progressBars[i].addEventListener('click', function(event) {
1560
- // if (ytPlayer.getPlayerState() === YT_PLAYER_STATE.PLAYING) {
1561
- if (ytPlayer !== undefined) {
1562
- var progressBar, percentage, time;
1563
- progressBar = this;
1564
- percentage = getProgressBarSelectedPositionPercentage(event, progressBar);
1565
- time = getTimeFromPercentage(ytPlayer, percentage);
1566
-
1567
- // seek video to current time
1568
- ytpSeekTo(ytPlayer, time);
1569
-
1570
- // set current progess value if valid
1571
- if (isFinite(percentage)) {
1572
- progressBar.value = percentage;
1573
- }
1574
- } // END if ytPlayer
1575
-
1576
- // deactivate AJS events (if any)
1577
- event.stopImmediatePropagation();
1578
- }); // END EventListener 'click'
1579
- } // END for
1580
- } // END if progressBars
1581
-
1582
- } // END if playerType large'
1583
- }
1584
- } // END mimikYTPlayerUiEventsForAJS
1585
-
1586
- {%- endcapture -%}
1587
-
1588
- {%- if production -%}
1589
- {{ cache|minifyJS }}
1590
- {%- else -%}
1591
- {{ cache|strip_empty_lines }}
1592
- {%- endif -%}
1593
-
1594
- {%- assign cache = false -%}