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.
- checksums.yaml +4 -4
- data/_includes/themes/j1/layouts/content_generator_collection.html +1 -1
- data/_includes/themes/j1/layouts/content_generator_news_panel_posts.html +1 -1
- data/_includes/themes/j1/layouts/content_generator_page.html +1 -1
- data/_includes/themes/j1/layouts/content_generator_post.html +1 -1
- data/_includes/themes/j1/layouts/content_generator_raw.html +1 -1
- data/_includes/themes/j1/layouts/layout_metadata_generator.html +1 -1
- data/_includes/themes/j1/layouts/layout_module_generator.html +1 -1
- data/_includes/themes/j1/layouts/layout_resource_generator.html +1 -1
- data/_includes/themes/j1/modules/attics/generator.html +1 -1
- data/_includes/themes/j1/modules/navigator/generator.html +1 -1
- data/_includes/themes/j1/modules/searcher/generator.html +1 -1
- data/_includes/themes/j1/modules/searcher/procedures/topsearch.proc +1 -1
- data/_includes/themes/j1/procedures/blocks/footer/boxes/about_box.proc +1 -1
- data/_includes/themes/j1/procedures/blocks/footer/boxes/contacts_box.proc +1 -1
- data/_includes/themes/j1/procedures/blocks/footer/boxes/issue.proc +1 -1
- data/_includes/themes/j1/procedures/blocks/footer/boxes/legal_statements.proc +1 -1
- data/_includes/themes/j1/procedures/blocks/footer/boxes/links_box.proc +1 -1
- data/_includes/themes/j1/procedures/blocks/footer/boxes/news_box.proc +1 -1
- data/_includes/themes/j1/procedures/blocks/footer/boxes/social_media_icons.proc +1 -1
- data/_includes/themes/j1/procedures/blocks/get_wave.proc +1 -1
- data/_includes/themes/j1/procedures/collections/create_collection_article_preview.proc +1 -1
- data/_includes/themes/j1/procedures/collections/pager.proc +1 -1
- data/_includes/themes/j1/procedures/global/attributes_loader.proc +1 -1
- data/_includes/themes/j1/procedures/global/collect_frontmatter_options.proc +1 -1
- data/_includes/themes/j1/procedures/global/collect_page_options.proc +1 -1
- data/_includes/themes/j1/procedures/global/create_bs_button.proc +1 -1
- data/_includes/themes/j1/procedures/global/create_word_cloud.proc +1 -1
- data/_includes/themes/j1/procedures/global/date-german.proc +1 -1
- data/_includes/themes/j1/procedures/global/get_category.proc +1 -1
- data/_includes/themes/j1/procedures/global/get_category_item.proc +1 -1
- data/_includes/themes/j1/procedures/global/get_documents_dir.proc +1 -1
- data/_includes/themes/j1/procedures/global/get_page_path.proc +1 -1
- data/_includes/themes/j1/procedures/global/get_page_url.proc +1 -1
- data/_includes/themes/j1/procedures/global/select_color.proc +1 -1
- data/_includes/themes/j1/procedures/global/select_font_size.proc +1 -1
- data/_includes/themes/j1/procedures/global/select_icon_size.proc +1 -1
- data/_includes/themes/j1/procedures/global/select_location.proc +1 -1
- data/_includes/themes/j1/procedures/global/set_base_vars_folders.proc +1 -1
- data/_includes/themes/j1/procedures/global/set_env_entry_document.proc +1 -1
- data/_includes/themes/j1/procedures/global/set_image_block.proc +1 -1
- data/_includes/themes/j1/procedures/global/setup.proc +1 -1
- data/_includes/themes/j1/procedures/layouts/content_writer.proc +1 -1
- data/_includes/themes/j1/procedures/layouts/default_writer.proc +1 -1
- data/_includes/themes/j1/procedures/layouts/module_writer.proc +1 -1
- data/_includes/themes/j1/procedures/layouts/resource_writer.proc +1 -1
- data/_includes/themes/j1/procedures/posts/collate_calendar.proc +1 -1
- data/_includes/themes/j1/procedures/posts/collate_list.proc +1 -1
- data/_includes/themes/j1/procedures/posts/collate_timeline.proc +1 -1
- data/_includes/themes/j1/procedures/posts/create_ad_block.proc +1 -1
- data/_includes/themes/j1/procedures/posts/create_series_header.proc +1 -1
- data/_includes/themes/j1/procedures/posts/pager.proc +1 -1
- data/_layouts/autopage_category.html +1 -1
- data/_layouts/autopage_collection.html +1 -1
- data/_layouts/autopage_collections_tags.html +1 -1
- data/_layouts/autopage_tags.html +1 -1
- data/_layouts/collection.html +1 -1
- data/_layouts/compress.html +1 -1
- data/_layouts/default.html +1 -1
- data/_layouts/home.html +1 -1
- data/_layouts/news_panel_posts.html +1 -1
- data/_layouts/page.html +1 -1
- data/_layouts/post.html +1 -1
- data/_layouts/raw.html +1 -1
- data/apps/public/cc/cc.yml +1 -1
- data/assets/data/amplitude.html +5 -5
- data/assets/data/authclient.html +1 -1
- data/assets/data/banner.html +1 -1
- data/assets/data/carousel.json +1 -1
- data/assets/data/cookieconsent.html +1 -1
- data/assets/data/docsearch.html +1 -1
- data/assets/data/fab.html +1 -1
- data/assets/data/footer.html +1 -1
- data/assets/data/galeries.html +1 -1
- data/assets/data/gallery_customizer.html +1 -1
- data/assets/data/gemini-ui.html +1 -1
- data/assets/data/iframes.html +1 -1
- data/assets/data/iso-3166-country-codes.json +1 -1
- data/assets/data/iso-639-language-codes.json +1 -1
- data/assets/data/j1_config.json +1 -1
- data/assets/data/masonry.html +1 -1
- data/assets/data/masterslider.html +1 -1
- data/assets/data/mdi_icons.json +1 -1
- data/assets/data/mdil_icons.json +1 -1
- data/assets/data/menu.html +1 -1
- data/assets/data/mmenu.html +1 -1
- data/assets/data/mmenu_sidebar.html +1 -1
- data/assets/data/mmenu_toc.html +1 -1
- data/assets/data/panel.html +1 -1
- data/assets/data/particles.yml +1 -1
- data/assets/data/private.json +1 -1
- data/assets/data/quicklinks.html +1 -1
- data/assets/data/rtext_resizer.html +1 -1
- data/assets/data/slick.html +1 -1
- data/assets/data/speak2me.html +1 -1
- data/assets/data/swiper.html +137 -206
- data/assets/data/swiper.json +84 -0
- data/assets/data/themes.bootswatch.json +1 -1
- data/assets/data/themes.json +1 -1
- data/assets/data/translator.html +1 -1
- data/assets/error_pages/HTTP204.html +1 -1
- data/assets/error_pages/HTTP400.html +1 -1
- data/assets/error_pages/HTTP401.html +1 -1
- data/assets/error_pages/HTTP403.html +1 -1
- data/assets/error_pages/HTTP404.html +1 -1
- data/assets/error_pages/HTTP444.html +1 -1
- data/assets/error_pages/HTTP445.html +1 -1
- data/assets/error_pages/HTTP446.html +1 -1
- data/assets/error_pages/HTTP447.html +1 -1
- data/assets/error_pages/HTTP448.html +1 -1
- data/assets/error_pages/HTTP500.html +1 -1
- data/assets/error_pages/HTTP501.html +1 -1
- data/assets/error_pages/HTTP502.html +1 -1
- data/assets/error_pages/HTTP503.html +1 -1
- data/assets/theme/j1/adapter/js/advertising.js +2 -2
- data/assets/theme/j1/adapter/js/algolia.js +2 -2
- data/assets/theme/j1/adapter/js/amplitude.30.js +2 -2
- data/assets/theme/j1/adapter/js/amplitude.js +35 -33
- data/assets/theme/j1/adapter/js/analytics.js +2 -2
- data/assets/theme/j1/adapter/js/asciidoctor.js +2 -2
- data/assets/theme/j1/adapter/js/attic.js +2 -2
- data/assets/theme/j1/adapter/js/bmd.js +2 -2
- data/assets/theme/j1/adapter/js/carousel.js +2 -2
- data/assets/theme/j1/adapter/js/chatbot.js +2 -2
- data/assets/theme/j1/adapter/js/clipboard.js +2 -2
- data/assets/theme/j1/adapter/js/comments.js +2 -2
- data/assets/theme/j1/adapter/js/cookieConsent.js +2 -2
- data/assets/theme/j1/adapter/js/customFunctions.js +2 -2
- data/assets/theme/j1/adapter/js/customModule.js +2 -2
- data/assets/theme/j1/adapter/js/docsearch.js +2 -2
- data/assets/theme/j1/adapter/js/dropdowns.js +2 -2
- data/assets/theme/j1/adapter/js/fab.js +2 -2
- data/assets/theme/j1/adapter/js/gallery.js +2 -2
- data/assets/theme/j1/adapter/js/gemini.js +2 -2
- data/assets/theme/j1/adapter/js/iconPicker.js +2 -2
- data/assets/theme/j1/adapter/js/iconPickerPage.js +2 -2
- data/assets/theme/j1/adapter/js/iframer.js +2 -2
- data/assets/theme/j1/adapter/js/j1.js +2 -2
- data/assets/theme/j1/adapter/js/lazyLoader.js +2 -2
- data/assets/theme/j1/adapter/js/lightbox.js +2 -2
- data/assets/theme/j1/adapter/js/logger.js +2 -2
- data/assets/theme/j1/adapter/js/lunr.js +2 -2
- data/assets/theme/j1/adapter/js/masonry.js +2 -2
- data/assets/theme/j1/adapter/js/masterslider.js +2 -2
- data/assets/theme/j1/adapter/js/mmenu.js +2 -2
- data/assets/theme/j1/adapter/js/navigator.js +2 -2
- data/assets/theme/j1/adapter/js/particles.js +2 -2
- data/assets/theme/j1/adapter/js/rangeSlider.js +2 -2
- data/assets/theme/j1/adapter/js/rouge.js +2 -2
- data/assets/theme/j1/adapter/js/rtable.js +2 -2
- data/assets/theme/j1/adapter/js/rtextResizer.js +2 -2
- data/assets/theme/j1/adapter/js/scroller.js +2 -2
- data/assets/theme/j1/adapter/js/slick.js +2 -2
- data/assets/theme/j1/adapter/js/slimSelect.js +2 -2
- data/assets/theme/j1/adapter/js/speak2me.js +2 -2
- data/assets/theme/j1/adapter/js/swiper.js +280 -8
- data/assets/theme/j1/adapter/js/themeToggler.js +2 -2
- data/assets/theme/j1/adapter/js/themes.js +2 -2
- data/assets/theme/j1/adapter/js/toccer.js +2 -2
- data/assets/theme/j1/adapter/js/translator.js +2 -2
- data/assets/theme/j1/adapter/js/videojs.js +2 -2
- data/assets/theme/j1/adapter/js/waves.js +2 -2
- data/assets/theme/j1/core/country-flags/css/theme/uno.css +1 -1
- data/assets/theme/j1/core/country-flags/css/theme/uno.min.css +1 -1
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/amplitude.css +1 -1
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/amplitude.min.css +1 -1
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/compact.css +1 -1
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/compact.min.css +1 -1
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/large.css +1 -1
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/large.min.css +1 -1
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/mini.css +1 -1
- data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/mini.min.css +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/amplitude.js +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/amplitude.map +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/amplitude.min.js +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.js +25 -22
- data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.min.js +14 -0
- data/assets/theme/j1/modules/amplitudejs/js/visualizations/bar.js +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/visualizations/bar.min.js +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/visualizations/circular-equalizer.js +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/visualizations/circular-equalizer.min.js +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/visualizations/frequency-analyzer.js +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/visualizations/frequency-analyzer.min.js +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/visualizations/michael-bromley.js +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/visualizations/michael-bromley.min.js +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/visualizations/template.js +1 -1
- data/assets/theme/j1/modules/amplitudejs/js/visualizations/template.min.js +1 -1
- data/assets/theme/j1/modules/amplitudejs/scss/theme/uno/dark/amplitude.scss +1 -1
- data/assets/theme/j1/modules/amplitudejs/scss/theme/uno/dark/player/compact.scss +1 -1
- data/assets/theme/j1/modules/amplitudejs/scss/theme/uno/dark/player/large.scss +1 -1
- data/assets/theme/j1/modules/amplitudejs/scss/theme/uno/dark/player/mini.scss +1 -1
- data/assets/theme/j1/modules/backstretch/js/backstretch.js +1 -1
- data/assets/theme/j1/modules/backstretch/js/backstretch.min.js +1 -1
- data/assets/theme/j1/modules/bmd/js/bmd.js +1 -1
- data/assets/theme/j1/modules/bmd/js/bmd.min.js +1 -1
- data/assets/theme/j1/modules/carousel/css/carousel.css +1 -1
- data/assets/theme/j1/modules/carousel/css/carousel.min.css +1 -1
- data/assets/theme/j1/modules/carousel/css/carousel_transitions.css +1 -1
- data/assets/theme/j1/modules/carousel/css/carousel_transitions.min.css +1 -1
- data/assets/theme/j1/modules/carousel/css/theme/uno.css +1 -1
- data/assets/theme/j1/modules/carousel/css/theme/uno.min.css +1 -1
- data/assets/theme/j1/modules/chatbot/css/theme/uno.css +1 -1
- data/assets/theme/j1/modules/chatbot/css/theme/uno.min.css +1 -1
- data/assets/theme/j1/modules/clipboard/css/theme/uno.css +1 -1
- data/assets/theme/j1/modules/clipboard/css/theme/uno.min.css +1 -1
- data/assets/theme/j1/modules/cookieConsent/js/cookieConsent.js +1 -1
- data/assets/theme/j1/modules/cookieConsent/js/cookieConsent.min.js +1 -1
- data/assets/theme/j1/modules/dropdowns/css/theme/uno/dropdowns.css +1 -1
- data/assets/theme/j1/modules/dropdowns/css/theme/uno/dropdowns.min.css +1 -1
- data/assets/theme/j1/modules/dropdowns/js/cash.js +1 -1
- data/assets/theme/j1/modules/dropdowns/js/cash.min.js +1 -1
- data/assets/theme/j1/modules/dropdowns/js/dropdowns.js +1 -1
- data/assets/theme/j1/modules/dropdowns/js/dropdowns.min.js +1 -1
- data/assets/theme/j1/modules/fab/js/cash.js +1 -1
- data/assets/theme/j1/modules/fab/js/cash.min.js +1 -1
- data/assets/theme/j1/modules/fab/js/fab.js +1 -1
- data/assets/theme/j1/modules/fab/js/fab.min.js +1 -1
- data/assets/theme/j1/modules/gemini/css/theme/uno.css +1 -1
- data/assets/theme/j1/modules/gemini/css/theme/uno.min.css +1 -1
- data/assets/theme/j1/modules/gemini/js/gemini.js +1 -1
- data/assets/theme/j1/modules/gemini/js/gemini.min.js +1 -1
- data/assets/theme/j1/modules/iconPicker/css/theme/uno.css +1 -1
- data/assets/theme/j1/modules/iconPicker/css/theme/uno.min.css +1 -1
- data/assets/theme/j1/modules/iconPicker/css/universal-icon-picker.css +1 -1
- data/assets/theme/j1/modules/iconPicker/css/universal-icon-picker.min.css +1 -1
- data/assets/theme/j1/modules/iconPicker/js/universal-icon-picker.js +1 -1
- data/assets/theme/j1/modules/iconPicker/js/universal-icon-picker.min.js +1 -1
- data/assets/theme/j1/modules/j1LazyLoader/LICENSE +1 -1
- data/assets/theme/j1/modules/jquery/js/extensions/hasClass.js +1 -1
- data/assets/theme/j1/modules/jquery/js/extensions/hasClass.min.js +1 -1
- data/assets/theme/j1/modules/jquery/js/extensions/removeClass.js +1 -1
- data/assets/theme/j1/modules/jquery/js/extensions/removeClass.min.js +1 -1
- data/assets/theme/j1/modules/justifiedGallery/css/justifiedGallery.css +1 -1
- data/assets/theme/j1/modules/justifiedGallery/css/justifiedGallery.min.css +1 -1
- data/assets/theme/j1/modules/justifiedGallery/css/theme/uno.css +1 -1
- data/assets/theme/j1/modules/justifiedGallery/css/theme/uno.min.css +1 -1
- data/assets/theme/j1/modules/lazyCssLoader/js/main.0.js +1 -1
- data/assets/theme/j1/modules/lazyCssLoader/js/main.1.js +1 -1
- data/assets/theme/j1/modules/lazyCssLoader/js/main.js +1 -1
- data/assets/theme/j1/modules/lightGallery/css/lg-transitions.css +1 -1
- data/assets/theme/j1/modules/lightGallery/css/lg-transitions.min.css +1 -1
- data/assets/theme/j1/modules/lightGallery/css/lightgallery-bundle.css +1 -1
- data/assets/theme/j1/modules/lightGallery/css/lightgallery-bundle.min.css +1 -1
- data/assets/theme/j1/modules/lightGallery/css/themes/uno/uno.css +1 -1
- data/assets/theme/j1/modules/lightGallery/css/themes/uno/uno.min.css +1 -1
- data/assets/theme/j1/modules/lightGallery/js/lightgallery.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/lightgallery.min.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/j1/j1-video.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/j1/j1-video.min.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/j1/lg-video.1.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-autoplay.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-autoplay.min.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-comment.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-comment.min.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-fullscreen.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-fullscreen.min.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-hash.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-hash.min.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-medium-zoom.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-medium-zoom.min.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-pager.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-pager.min.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-rotate.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-rotate.min.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-share.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-share.min.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-thumbnail.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-thumbnail.min.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-video.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-video.min.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-vimeo-thumbnail.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-vimeo-thumbnail.min.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-zoom.js +1 -1
- data/assets/theme/j1/modules/lightGallery/js/plugins/lg-zoom.min.js +1 -1
- data/assets/theme/j1/modules/lightbox/css/lightbox.css +1 -1
- data/assets/theme/j1/modules/lightbox/css/lightbox.min.css +1 -1
- data/assets/theme/j1/modules/lightbox/css/theme/uno.css +1 -1
- data/assets/theme/j1/modules/lightbox/css/theme/uno.min.css +1 -1
- data/assets/theme/j1/modules/lightbox/js/lightbox.js +1 -1
- data/assets/theme/j1/modules/lightbox/js/lightbox.min.js +1 -1
- data/assets/theme/j1/modules/lunr/css/theme/uno.css +1 -1
- data/assets/theme/j1/modules/lunr/css/theme/uno.min.css +1 -1
- data/assets/theme/j1/modules/lunr/js/j1.js +1 -1
- data/assets/theme/j1/modules/lunr/js/j1.min.js +1 -1
- data/assets/theme/j1/modules/masterslider/css/theme/uno.css +1 -1
- data/assets/theme/j1/modules/masterslider/css/theme/uno.min.css +1 -1
- data/assets/theme/j1/modules/mmenuLight/css/mmenu-light.css +1 -1
- data/assets/theme/j1/modules/mmenuLight/css/mmenu-light.min.css +1 -1
- data/assets/theme/j1/modules/mmenuLight/css/theme/uno/mmenu.css +1 -1
- data/assets/theme/j1/modules/mmenuLight/css/theme/uno/mmenu.min.css +1 -1
- data/assets/theme/j1/modules/mmenuLight/js/mmenu.js +1 -1
- data/assets/theme/j1/modules/mmenuLight/js/mmenu.min.js +1 -1
- data/assets/theme/j1/modules/msDropdown/css/flags.css +1 -1
- data/assets/theme/j1/modules/msDropdown/css/flags.min.css +1 -1
- data/assets/theme/j1/modules/msDropdown/css/msDropdown.css +1 -1
- data/assets/theme/j1/modules/msDropdown/css/msDropdown.min.css +1 -1
- data/assets/theme/j1/modules/msDropdown/css/themes/uno/msDropdown.css +1 -1
- data/assets/theme/j1/modules/msDropdown/css/themes/uno/msDropdown.min.css +1 -1
- data/assets/theme/j1/modules/msDropdown/js/msDropdown.js +1 -1
- data/assets/theme/j1/modules/msDropdown/js/msDropdown.min.js +1 -1
- data/assets/theme/j1/modules/photoswipe/css/photoswipe-caption-plugin.css +3 -1
- data/assets/theme/j1/modules/photoswipe/css/photoswipe-caption-plugin.min.css +1 -1
- data/assets/theme/j1/modules/photoswipe/js/photoswipe-caption-plugin.js +428 -0
- data/assets/theme/j1/modules/photoswipe/js/photoswipe-caption-plugin.min.js +17 -4
- data/assets/theme/j1/modules/photoswipe/js/photoswipe-core.js +7102 -0
- data/assets/theme/j1/modules/photoswipe/js/photoswipe-core.min.js +3 -3
- data/assets/theme/j1/modules/photoswipe/js/photoswipe-lightbox.1.js +1990 -0
- data/assets/theme/j1/modules/photoswipe/js/photoswipe-lightbox.js +1981 -0
- data/assets/theme/j1/modules/photoswipe/js/photoswipe-lightbox.min.js +1 -1
- data/assets/theme/j1/modules/rangeSlider/css/theme/uno/nouislider.css +1 -1
- data/assets/theme/j1/modules/rangeSlider/css/theme/uno/nouislider.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.dark/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.dark/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.light/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.light/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.monokai/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.monokai/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.monokai.dark/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.monokai.dark/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.monokai.light/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.monokai.light/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.solarized/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.solarized/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.solarized.dark/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.solarized.dark/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.solarized.light/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/base16.solarized.light/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/colorful/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/colorful/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/github/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/github/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/gruvbox/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/gruvbox/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/gruvbox.dark/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/gruvbox.dark/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/gruvbox.light/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/gruvbox.light/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/igorpro/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/igorpro/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/molokai/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/molokai/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/monokai/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/monokai/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/monokai.sublime/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/monokai.sublime/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/pastie/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/pastie/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/thankful_eyes/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/thankful_eyes/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/themes.txt +1 -1
- data/assets/theme/j1/modules/rouge/css/tulip/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/tulip/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/uno.dark/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/uno.dark/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/css/uno.light/theme.css +1 -1
- data/assets/theme/j1/modules/rouge/css/uno.light/theme.min.css +1 -1
- data/assets/theme/j1/modules/rouge/js/select.js +1 -1
- data/assets/theme/j1/modules/rtable/css/theme/uno/rtable.css +1 -1
- data/assets/theme/j1/modules/rtable/css/theme/uno/rtable.min.css +1 -1
- data/assets/theme/j1/modules/rtable/js/rtable.js +1 -1
- data/assets/theme/j1/modules/rtable/js/rtable.min.js +1 -1
- data/assets/theme/j1/modules/scroller/css/theme/uno.css +1 -1
- data/assets/theme/j1/modules/scroller/css/theme/uno.min.css +1 -1
- data/assets/theme/j1/modules/scroller/js/scroller.min.js +1 -1
- data/assets/theme/j1/modules/slick/lightbox/css/theme/uno.css +1 -1
- data/assets/theme/j1/modules/slick/lightbox/css/theme/uno.min.css +1 -1
- data/assets/theme/j1/modules/slick/slider/css/theme/uno.css +1 -1
- data/assets/theme/j1/modules/slick/slider/css/theme/uno.min.css +1 -1
- data/assets/theme/j1/modules/spinner/css/spin.css +1 -1
- data/assets/theme/j1/modules/spinner/css/spin.min.css +1 -1
- data/assets/theme/j1/modules/spinner/js/spin.js +1 -1
- data/assets/theme/j1/modules/spinner/js/spin.min.js +1 -1
- data/assets/theme/j1/modules/swiper/css/modules/effectNeighbor.css +53 -0
- data/assets/theme/j1/modules/swiper/css/modules/effectNeighbor.min.css +17 -0
- data/assets/theme/j1/modules/swiper/css/modules/effectPanorama.css +26 -0
- data/assets/theme/j1/modules/swiper/css/modules/effectPanorama.min.css +17 -0
- data/assets/theme/j1/modules/swiper/css/modules/effectThumbs.css +44 -0
- data/assets/theme/j1/modules/swiper/css/modules/effectThumbs.min.css +44 -0
- data/assets/theme/j1/modules/swiper/css/swiper-bundle.css +12 -6
- data/assets/theme/j1/modules/swiper/css/swiper-bundle.min..css +12 -6
- data/assets/theme/j1/modules/swiper/css/theme/uno.css +15 -35
- data/assets/theme/j1/modules/swiper/css/theme/uno.min.css +9 -19
- data/assets/theme/j1/modules/swiper/js/modules/!readme +3 -0
- data/assets/theme/j1/modules/swiper/js/modules/effectNeighbor.js +33 -0
- data/assets/theme/j1/modules/swiper/js/modules/effectNeighbor.min.js +33 -0
- data/assets/theme/j1/modules/swiper/js/modules/effectPanorama.js +93 -0
- data/assets/theme/j1/modules/swiper/js/modules/effectPanorama.min.js +17 -0
- data/assets/theme/j1/modules/swiper/js/modules/effectThumbs.js +113 -0
- data/assets/theme/j1/modules/swiper/js/modules/effectThumbs.min.js +33 -0
- data/assets/theme/j1/modules/swiper/js/swiper-bundle.js +12 -6
- data/assets/theme/j1/modules/swiper/js/swiper-bundle.min.js +12 -6
- data/assets/theme/j1/modules/themeSwitcher/js/switcher.js +1 -1
- data/assets/theme/j1/modules/themeSwitcher/js/switcher.min.js +1 -1
- data/assets/theme/j1/modules/translator/css/translator.css +1 -1
- data/assets/theme/j1/modules/translator/css/translator.min.css +1 -1
- data/assets/theme/j1/modules/translator/js/translator.js +1 -1
- data/assets/theme/j1/modules/translator/js/translator.min.js +1 -1
- data/assets/theme/j1/modules/videoPlayer/vimeo/js/player.min.js +1 -1
- data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.0.css +1 -1
- data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.1.css +1 -1
- data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.css +1 -1
- data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.min.css +1 -1
- data/assets/theme/j1/modules/videojs/css/plugins/controls/zoom.css +1 -1
- data/assets/theme/j1/modules/videojs/css/plugins/controls/zoom.min.css +1 -1
- data/assets/theme/j1/modules/videojs/css/themes/uno.css +1 -1
- data/assets/theme/j1/modules/videojs/css/themes/uno.min.css +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/controls/autocaption/autocaption.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/controls/autocaption/autocaption.min.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/controls/hotkeys/hotkeys.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/controls/hotkeys/hotkeys.min.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/controls/skipbuttons/skipbuttons.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/controls/skipbuttons/skipbuttons.min.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/controls/zoom/zoom.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/controls/zoom/zoom.min.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/dm/api/dailymotion.sdk.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/dm/api/dailymotion.sdk.min.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/dm/dailymotion.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/dm/dailymotion.min.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/vm/api/vimeo.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/vm/api/vimeo.min.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/vm/vimeo.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/vm/vimeo.min.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/wt/wistia.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/wt/wistia.min.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/yt/api/youtube.min.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/yt/v3.0.0/youtube.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/yt/v3.0.0/youtube.min.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/yt/youtube.js +1 -1
- data/assets/theme/j1/modules/videojs/js/plugins/players/yt/youtube.min.js +1 -1
- data/lib/j1/version.rb +1 -1
- data/lib/starter_web/Gemfile +1 -1
- data/lib/starter_web/README.md +5 -5
- data/lib/starter_web/_config.yml +2 -2
- data/lib/starter_web/_data/j1_config.yml +1 -1
- data/lib/starter_web/_data/modules/amplitude_players.yml +352 -0
- data/lib/starter_web/_data/modules/{amplitude.yml → amplitude_playlists.yml} +39 -356
- data/lib/starter_web/_data/modules/authentication.yml +1 -1
- data/lib/starter_web/_data/modules/defaults/swiper.yml +73 -413
- data/lib/starter_web/_data/modules/log4javascript.yml +1 -1
- data/lib/starter_web/_data/modules/navigator.yml +1 -1
- data/lib/starter_web/_data/modules/navigator_menu.yml +1 -1
- data/lib/starter_web/_data/modules/swiper.yml +567 -139
- data/lib/starter_web/_data/modules/swiper_playlists.yml +480 -0
- data/lib/starter_web/_data/private.yml +1 -1
- data/lib/starter_web/_data/resources.yml +234 -172
- data/lib/starter_web/_data/templates/feed.xml +1 -1
- data/lib/starter_web/_includes/custom/static/bs5_accordion.html +1 -1
- data/lib/starter_web/_includes/custom/templates/bs5_accordion.html +1 -1
- data/lib/starter_web/_includes/custom/templates/collection_panel.html +1 -1
- data/lib/starter_web/_includes/custom/templates/custom_header.html +1 -1
- data/lib/starter_web/_includes/custom/templates/people_panel.html +1 -1
- data/lib/starter_web/_includes/google/static/google_ad__your-slot-id.html +1 -1
- data/lib/starter_web/_includes/google/templates/google_ads.html +1 -1
- data/lib/starter_web/_plugins/asciidoctor/admonition-block-answer.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/admonition-block-question.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/amplitude-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/banner.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/callout.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/carousel-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/conum.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/dailymotion-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/fab-icon-inline.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/fas-icon-inline.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/flag-icon-inline.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/gallery-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/gemini-ui-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/gist-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/google-ad-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/iconify-icon-inline.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/iframe-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/lightbox-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/lorem_inline.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/masonry-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/masterslider-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/mdi-icon-inline.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/mdib-icon-inline.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/mdil-icon-inline.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/panel.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/placeholder-inline.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/range-slider-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/shout-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/slick-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/slim-select-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/swiper-block.rb +55 -0
- data/lib/starter_web/_plugins/asciidoctor/textbook-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/twitter-emoji-inline.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/videojs-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/vimeo-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/wistia-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/youtube-block.rb +1 -1
- data/lib/starter_web/_plugins/filter/debug.rb +1 -1
- data/lib/starter_web/_plugins/filter/encodeBase64.rb +1 -1
- data/lib/starter_web/_plugins/filter/encryptAES.rb +1 -1
- data/lib/starter_web/_plugins/filter/filters.rb +32 -1
- data/lib/starter_web/_plugins/filter/liquify.rb +1 -1
- data/lib/starter_web/_plugins/filter/minifyJS.rb +1 -1
- data/lib/starter_web/_plugins/filter/minifyJSON.rb +1 -1
- data/lib/starter_web/_plugins/filter/prettify.rb +1 -1
- data/lib/starter_web/_plugins/filter/xml_prettify.rb +1 -1
- data/lib/starter_web/_plugins/helper/symlink_watcher.rb +1 -1
- data/lib/starter_web/_plugins/i18n/date.rb +1 -1
- data/lib/starter_web/_plugins/index/lunr.rb +2 -2
- data/lib/starter_web/_plugins/seo/j1-feed.rb +1 -1
- data/lib/starter_web/_plugins/seo/j1-seo-tags.rb +1 -1
- data/lib/starter_web/_plugins/seo/j1-sitemap.rb +1 -1
- data/lib/starter_web/assets/image/icons/tv/Index of -tv-logos-.url +2 -0
- data/lib/starter_web/assets/image/icons/tv/TV from Germany - LyngSat Logo.url +2 -0
- data/lib/starter_web/assets/image/icons/tv/Zeichnung.svg +47 -0
- data/lib/starter_web/assets/image/icons/tv/ard-icon-16x16.ico +0 -0
- data/lib/starter_web/assets/image/icons/tv/ard-icon-24x24.png +0 -0
- data/lib/starter_web/assets/image/icons/tv/ard-icon-512x512.png +0 -0
- data/lib/starter_web/assets/image/icons/tv/ard-icon.jpg +0 -0
- data/lib/starter_web/assets/image/icons/tv/ard-icon.jpg (353/303/227353).url" +2 -0
- data/lib/starter_web/assets/image/icons/tv/ard-icon.png +0 -0
- data/lib/starter_web/assets/image/icons/tv/ard-logo-png_seeklogo-428343.png +0 -0
- data/lib/starter_web/assets/image/icons/tv/cytec-tvlogos- collection of mostly german tv channel logos.url +2 -0
- data/lib/starter_web/assets/image/icons/tv/output_image.jpg +0 -0
- data/lib/starter_web/assets/image/icons/tv/pang.ping +0 -0
- 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
- data/lib/starter_web/assets/image/modules/attics/1920x1280/tiny_desk.jpg +0 -0
- data/lib/starter_web/assets/image/modules/attics/alice-donovan-rouse-2.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-1.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-2.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-3.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-4.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-5.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-6.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/295683517.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/chicago-us.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/denys-nevozhai-1_b.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/denys-nevozhai-1_c.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/denys-nevozhai-3_b.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/emmad-mazhari_c.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/federico-rizzarelli_b.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/federico-rizzarelli_c.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/jakarta_indonesia.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/jakarta_indonesia_2.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/melbourne_australia.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/melbourne_australia.webp +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/queen_bees_at_eureka_tower.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/shanghai_china.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/thomas-tucker_b.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/tokyo_japan.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/guardians-of-the-galaxy.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/justice-league.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/spider-man.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/suicide-squad.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/thor-ragnarok.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/panorama/1.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/panorama/10.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/panorama/11.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/panorama/12.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/panorama/2.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/panorama/3.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/panorama/4.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/panorama/5.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/panorama/6.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/panorama/7.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/panorama/8.jpg +0 -0
- data/lib/starter_web/assets/image/modules/gallery/panorama/9.jpg +0 -0
- data/lib/starter_web/config.ru +1 -1
- data/lib/starter_web/dot.gitattributes +1 -1
- data/lib/starter_web/dot.nojekyll +1 -1
- data/lib/starter_web/package.json +1 -1
- data/lib/starter_web/pages/public/_includes/documents/photoswipe/200_photoswipe_parameters.asciidoc +21 -2
- data/lib/starter_web/pages/public/_includes/documents/photoswipe/210_photoswipe_lightbox_parameters.asciidoc +42 -35
- data/lib/starter_web/pages/public/_includes/documents/photoswipe/300_caption_plugin_for_photoSwipe.asciidoc +72 -75
- data/lib/starter_web/pages/public/_includes/documents/swiper/110_swiper_common_options.asciidoc +96 -21
- data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_a_k.asciidoc +187 -87
- data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_l_o.asciidoc +98 -34
- data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_p_s.asciidoc +99 -42
- data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_t_z.asciidoc +64 -26
- data/lib/starter_web/pages/public/_includes/documents/swiper/300_swiper_instance_properties.asciidoc +52 -52
- data/lib/starter_web/pages/public/_includes/documents/swiper/400_swiper_modules.asciidoc +2666 -1735
- data/lib/starter_web/pages/public/_includes/documents/swiper/500_swiper_methods.asciidoc +40 -40
- data/lib/starter_web/pages/public/_includes/documents/swiper/600_swiper_events.asciidoc +113 -113
- data/lib/starter_web/pages/public/{amplitude_yt_tester.adoc → tools/tester/amplitude_yt_tester.adoc} +15 -15
- data/lib/starter_web/pages/public/tools/tester/swiper_tester.adoc +796 -0
- data/lib/starter_web/pages/public/tour/present_images.adoc +19 -17
- metadata +87 -32
- data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.15.js +0 -1594
- data/assets/theme/j1/modules/photoswipe/css/org/photoswipe-dynamic-caption-plugin.umd.min.js +0 -5
- data/assets/theme/j1/modules/photoswipe/css/org/photoswipe.css +0 -420
- data/assets/theme/j1/modules/photoswipe/css/scss/photoswipe.scss +0 -427
- data/lib/starter_web/assets/image/modules/gallery/mega_cities/thomas-tucker-bw.jpg +0 -0
- data/lib/starter_web/pages/public/lazy_loader_tester.adoc +0 -402
- data/lib/starter_web/pages/public/manuals/integrations/amplitudejs/_includes/attributes.asciidoc +0 -69
- data/lib/starter_web/pages/public/manuals/integrations/amplitudejs/_includes/documents/readme +0 -0
- data/lib/starter_web/pages/public/manuals/integrations/amplitudejs/amplitudejs-api.adoc +0 -2260
- data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/attributes.asciidoc +0 -47
- data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/documents/preview_google_adsense.asciidoc +0 -448
- data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/documents/readme +0 -0
- data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/tables/readme +0 -0
- data/lib/starter_web/pages/public/manuals/integrations/google/gemini/gemini.adoc +0 -525
- data/lib/starter_web/pages/public/manuals/integrations/google/gemini/security.asccidoc +0 -274
- data/lib/starter_web/pages/public/manuals/integrations/google/gemini/security.hrml +0 -560
- data/lib/starter_web/pages/public/manuals/integrations/videojs/youtube-api.adoc +0 -1638
- data/lib/starter_web/pages/public/manuals/ytdl/man.adoc +0 -3020
- data/lib/starter_web/pages/public/manuals/ytdl/man.md +0 -2378
- data/lib/starter_web/pages/public/photoswipe_api.adoc +0 -150
- data/lib/starter_web/pages/public/swiper_api.adoc +0 -128
- data/lib/starter_web/pages/public/swiper_tester.adoc +0 -973
- /data/assets/theme/j1/modules/photoswipe/{.version_5.4.4 → _info/.version_5.4.4} +0 -0
- /data/assets/theme/j1/modules/photoswipe/{example → _info/example}/photoswipe-caption-plugin.html +0 -0
- /data/assets/theme/j1/modules/photoswipe/{example → _info/example}/test-gallery.html +0 -0
- /data/assets/theme/j1/modules/photoswipe/js/{README.md → _info/README.md} +0 -0
- /data/assets/theme/j1/modules/swiper/{.version_1.2.0 → _info/.version_1.2.0} +0 -0
- /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 -%}
|